Add a task save lock
This commit is contained in:
parent
ee8d6ffcc7
commit
12cf91e4b2
@ -882,12 +882,12 @@ void PackageConf::sync() {
|
|||||||
{
|
{
|
||||||
std::lock_guard<std::mutex> lock(*task_mutex_);
|
std::lock_guard<std::mutex> lock(*task_mutex_);
|
||||||
for (auto [job_status, task] : jobstatus_task_map_) {
|
for (auto [job_status, task] : jobstatus_task_map_) {
|
||||||
if (task) {
|
if (!task) continue;
|
||||||
auto sync_func = [this, task]() mutable {
|
|
||||||
if (task->jobstatus != nullptr) task->save(id);
|
auto sync_func = [this, task]() mutable {
|
||||||
};
|
if (task->jobstatus != nullptr) task->save(id);
|
||||||
sync_func();
|
};
|
||||||
}
|
sync_func();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1148,6 +1148,7 @@ JobStatus::JobStatus(int id) : id(id) {
|
|||||||
Task::Task(std::shared_ptr<JobStatus> jobstatus, std::int64_t time, std::shared_ptr<PackageConf> packageconf)
|
Task::Task(std::shared_ptr<JobStatus> jobstatus, std::int64_t time, std::shared_ptr<PackageConf> packageconf)
|
||||||
: jobstatus(jobstatus), queue_time(time), is_running(false), log(std::make_shared<Log>()), parent_packageconf(packageconf)
|
: jobstatus(jobstatus), queue_time(time), is_running(false), log(std::make_shared<Log>()), parent_packageconf(packageconf)
|
||||||
{
|
{
|
||||||
|
std::lock_guard<std::mutex> sync_lock(*sync_mutex_);
|
||||||
assert(log != nullptr && "Log pointer should never be null");
|
assert(log != nullptr && "Log pointer should never be null");
|
||||||
QSqlQuery insert_query(get_thread_connection());
|
QSqlQuery insert_query(get_thread_connection());
|
||||||
insert_query.prepare("INSERT INTO task (packageconf_id, jobstatus_id, queue_time) VALUES (?, ?, ?)");
|
insert_query.prepare("INSERT INTO task (packageconf_id, jobstatus_id, queue_time) VALUES (?, ?, ?)");
|
||||||
@ -1207,6 +1208,7 @@ bool Task::compare(const std::shared_ptr<Task>& lhs, const std::shared_ptr<Task>
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::set<std::shared_ptr<Task>> Task::get_completed_tasks(std::vector<std::shared_ptr<PackageConf>> packageconfs, std::shared_ptr<std::map<std::string, std::shared_ptr<JobStatus>>> job_statuses, int page, int per_page) {
|
std::set<std::shared_ptr<Task>> Task::get_completed_tasks(std::vector<std::shared_ptr<PackageConf>> packageconfs, std::shared_ptr<std::map<std::string, std::shared_ptr<JobStatus>>> job_statuses, int page, int per_page) {
|
||||||
|
std::lock_guard<std::mutex> sync_lock(*sync_mutex_);
|
||||||
std::set<std::shared_ptr<Task>> result;
|
std::set<std::shared_ptr<Task>> result;
|
||||||
|
|
||||||
if (per_page < 1) { per_page = 1; }
|
if (per_page < 1) { per_page = 1; }
|
||||||
@ -1251,6 +1253,7 @@ std::set<std::shared_ptr<Task>> Task::get_completed_tasks(std::vector<std::share
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Task::save(int _packageconf_id) {
|
void Task::save(int _packageconf_id) {
|
||||||
|
std::lock_guard<std::mutex> sync_lock(*sync_mutex_);
|
||||||
QSqlQuery query(get_thread_connection());
|
QSqlQuery query(get_thread_connection());
|
||||||
query.prepare("UPDATE task SET jobstatus_id = ?, queue_time = ?, start_time = ?, finish_time = ?, successful = ?, log = ? WHERE id = ?");
|
query.prepare("UPDATE task SET jobstatus_id = ?, queue_time = ?, start_time = ?, finish_time = ?, successful = ?, log = ? WHERE id = ?");
|
||||||
query.addBindValue(jobstatus->id);
|
query.addBindValue(jobstatus->id);
|
||||||
|
@ -255,6 +255,9 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
static bool compare(const std::shared_ptr<Task>& lhs, const std::shared_ptr<Task>& rhs);
|
static bool compare(const std::shared_ptr<Task>& lhs, const std::shared_ptr<Task>& rhs);
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::shared_ptr<std::mutex> sync_mutex_ = std::make_shared<std::mutex>();
|
||||||
};
|
};
|
||||||
|
|
||||||
inline size_t qHash(const PackageConf::PackageConfPlain& key, size_t seed = 0) {
|
inline size_t qHash(const PackageConf::PackageConfPlain& key, size_t seed = 0) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user