From 5df6fb4fc49cb492fee3defcba4e71a9af1da15b Mon Sep 17 00:00:00 2001 From: Simon Quigley Date: Fri, 24 Jan 2025 20:52:07 -0600 Subject: [PATCH] Fix bad task locks --- cpp/ci_database_objs.cpp | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/cpp/ci_database_objs.cpp b/cpp/ci_database_objs.cpp index fe37f39..d77c6be 100644 --- a/cpp/ci_database_objs.cpp +++ b/cpp/ci_database_objs.cpp @@ -1227,18 +1227,19 @@ std::set> Task::get_completed_tasks(QSqlDatabase& p_db, st } void Task::save(QSqlDatabase& p_db, int _packageconf_id) { - QSqlQuery query(p_db); - query.prepare("UPDATE task SET jobstatus_id = ?, queue_time = ?, start_time = ?, finish_time = ?, successful = ?, log = ? WHERE id = ?"); - query.addBindValue(jobstatus->id); - query.addBindValue(QVariant::fromValue(static_cast(queue_time))); - query.addBindValue(QVariant::fromValue(static_cast(start_time))); - query.addBindValue(QVariant::fromValue(static_cast(finish_time))); - query.addBindValue(successful); - query.addBindValue(QString::fromStdString(std::regex_replace(log->get(), std::regex(R"(^\s+)"), ""))); - query.addBindValue(id); - if (!query.exec()) { - qDebug() << "Failed to save task to database:" << query.lastError().text(); - return; + task_succeeded = false; + while (!task_succeeded) { + QSqlQuery query(p_db); + query.prepare("UPDATE task SET jobstatus_id = ?, queue_time = ?, start_time = ?, finish_time = ?, successful = ?, log = ? WHERE id = ?"); + query.addBindValue(jobstatus->id); + query.addBindValue(QVariant::fromValue(static_cast(queue_time))); + query.addBindValue(QVariant::fromValue(static_cast(start_time))); + query.addBindValue(QVariant::fromValue(static_cast(finish_time))); + query.addBindValue(successful); + query.addBindValue(QString::fromStdString(std::regex_replace(log->get(), std::regex(R"(^\s+)"), ""))); + query.addBindValue(id); + task_succeeded = query.exec(); + if (!task_succeeded) qDebug() << "Failed to save task to database, retrying:" << query.lastError().text(); } QSqlQuery link_query(p_db);