aboutsummaryrefslogtreecommitdiff
path: root/mod/database-module.cxx
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2025-02-14 16:28:57 +0200
committerKaren Arutyunov <karen@codesynthesis.com>2025-02-17 21:31:24 +0200
commit4f9ab8e952cb16a311bd533842296a5bd2e9cc1c (patch)
tree8a8de9afc5850867d4847f81d7d9233b62452189 /mod/database-module.cxx
parent62a6bd8d6bb576edf76c42db8ffb73fcb0f87fb7 (diff)
Sleep for some short period of time before retrying after odb::recoverable exception
Also increase the default maximum number of retries for configuration to 20 from 10.
Diffstat (limited to 'mod/database-module.cxx')
-rw-r--r--mod/database-module.cxx26
1 files changed, 17 insertions, 9 deletions
diff --git a/mod/database-module.cxx b/mod/database-module.cxx
index d838d5c..7bf0a86 100644
--- a/mod/database-module.cxx
+++ b/mod/database-module.cxx
@@ -10,6 +10,7 @@
#include <libbrep/build-package.hxx>
#include <libbrep/build-package-odb.hxx>
+#include <mod/utility.hxx> // sleep_before_retry()
#include <mod/database.hxx>
#include <mod/module-options.hxx>
@@ -25,13 +26,14 @@ namespace brep
database_module (const database_module& r)
: handler (r),
retry_ (r.retry_),
+ retry_max_ (r.retry_max_),
package_db_ (r.initialized_ ? r.package_db_ : nullptr),
build_db_ (r.initialized_ ? r.build_db_ : nullptr)
{
}
void database_module::
- init (const options::package_db& o, size_t retry)
+ init (const options::package_db& o, size_t retry_max)
{
package_db_ = shared_database (o.package_db_user (),
o.package_db_role (),
@@ -41,11 +43,12 @@ namespace brep
o.package_db_port (),
o.package_db_max_connections ());
- retry_ = retry_ < retry ? retry : retry_;
+ retry_max_ = retry_max_ < retry_max ? retry_max : retry_max_;
+ retry_ = 0;
}
void database_module::
- init (const options::build_db& o, size_t retry)
+ init (const options::build_db& o, size_t retry_max)
{
build_db_ = shared_database (o.build_db_user (),
o.build_db_role (),
@@ -55,7 +58,8 @@ namespace brep
o.build_db_port (),
o.build_db_max_connections ());
- retry_ = retry_ < retry ? retry : retry_;
+ retry_max_ = retry_max_ < retry_max ? retry_max : retry_max_;
+ retry_ = 0;
}
bool database_module::
@@ -66,10 +70,12 @@ namespace brep
}
catch (const odb::recoverable& e)
{
- if (retry_-- > 0)
+ if (retry_ != retry_max_)
{
HANDLER_DIAG;
- l1 ([&]{trace << e << "; " << retry_ + 1 << " retries left";});
+ l1 ([&]{trace << e << "; " << retry_max_ - retry_ << " retries left";});
+
+ sleep_before_retry (retry_++);
throw retry ();
}
@@ -133,7 +139,7 @@ namespace brep
//
assert (build_db_ != nullptr);
- for (size_t retry (retry_);;)
+ for (size_t retry (0);;)
{
try
{
@@ -160,11 +166,13 @@ namespace brep
// If no more retries left, don't re-throw odb::recoverable not to
// retry at the upper level.
//
- if (retry-- == 0)
+ if (retry == retry_max_)
fail << e << "; no tenant service state update retries left";
- l1 ([&]{trace << e << "; " << retry + 1 << " tenant service "
+ l1 ([&]{trace << e << "; " << retry_max_ - retry << " tenant service "
<< "state update retries left";});
+
+ sleep_before_retry (retry++);
}
}
}