From 10d43282b6b645ff5d2a641d7119763d630e5388 Mon Sep 17 00:00:00 2001 From: Simon Quigley Date: Fri, 24 Jan 2025 22:45:16 -0600 Subject: [PATCH] Add the same to PackageConf syncs, and make logic more robust --- cpp/ci_database_objs.cpp | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/cpp/ci_database_objs.cpp b/cpp/ci_database_objs.cpp index 1a7f0bb..5da7325 100644 --- a/cpp/ci_database_objs.cpp +++ b/cpp/ci_database_objs.cpp @@ -823,9 +823,9 @@ bool PackageConf::set_package_confs(QSqlDatabase& p_db) { } void PackageConf::sync(QSqlDatabase& p_db) { - bool oneshot = true; - while (oneshot) { - oneshot = false; + bool task_succeeded = true; + int attempt = 0; + while (!task_succeeded) { try { QSqlQuery query(p_db); @@ -850,8 +850,13 @@ void PackageConf::sync(QSqlDatabase& p_db) { query.addBindValue(branch->id); query.addBindValue(release->id); - if (!query.exec()) { - qDebug() << "Failed to sync PackageConf:" << query.lastError().text(); + attempt++; + task_succeeded = query.exec(); + if (!task_succeeded) { + if (query.lastError().text().contains("database is locked")) { + int delay = 1000 * static_cast(std::pow(2, attempt - 1)); + std::this_thread::sleep_for(std::chrono::milliseconds(delay)); + } else task_succeeded = true; } } catch (...) {} } @@ -1240,10 +1245,12 @@ void Task::save(QSqlDatabase& p_db, int _packageconf_id) { query.addBindValue(QString::fromStdString(std::regex_replace(log->get(), std::regex(R"(^\s+)"), ""))); query.addBindValue(id); task_succeeded = query.exec(); + attempt++; if (!task_succeeded) { - qDebug() << "Failed to save task to database, retrying:" << query.lastError().text(); - int delay = 1000 * static_cast(std::pow(2, attempt - 1)); - std::this_thread::sleep_for(std::chrono::milliseconds(delay)); + if (query.lastError().text().contains("database is locked")) { + int delay = 1000 * static_cast(std::pow(2, attempt - 1)); + std::this_thread::sleep_for(std::chrono::milliseconds(delay)); + } else task_succeeded = true; } }