From 8631ff003c07a8f7acf6bb275ccd33a6cae28be3 Mon Sep 17 00:00:00 2001
From: Krasimir Angelov <kangelov@gitlab.com>
Date: Tue, 23 Jul 2024 14:11:18 +1200
Subject: [PATCH] Update partition manager lock retries config

Less retries, shorter sleep intervals. Partitions are synced often
enough, if lock can not be obtained  move to the next one instead of
retrying as if it's a migration.
---
 .../database/partitioning/partition_manager.rb     | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/lib/gitlab/database/partitioning/partition_manager.rb b/lib/gitlab/database/partitioning/partition_manager.rb
index 8c892b49d87b4..45b280b665293 100644
--- a/lib/gitlab/database/partitioning/partition_manager.rb
+++ b/lib/gitlab/database/partitioning/partition_manager.rb
@@ -13,6 +13,19 @@ class PartitionManager
         MANAGEMENT_LEASE_KEY = 'database_partition_management_%s'
         RETAIN_DETACHED_PARTITIONS_FOR = 1.week
 
+        LOCK_RETRIES_TIMING_CONFIGURATION = [
+          [0.1.seconds, 0.05.seconds],
+          [0.1.seconds, 0.05.seconds],
+          [0.2.seconds, 0.05.seconds],
+          [0.3.seconds, 0.10.seconds],
+          [0.4.seconds, 0.15.seconds],
+          [0.5.seconds, 2.seconds],
+          [0.5.seconds, 2.seconds],
+          [0.5.seconds, 2.seconds],
+          [0.5.seconds, 2.seconds],
+          [1.second, 5.seconds]
+        ].freeze
+
         def initialize(model, connection: nil)
           @model = model
           @connection = connection || model.connection
@@ -135,6 +148,7 @@ def assert_partition_detachable!(partition)
 
         def with_lock_retries(&block)
           Gitlab::Database::WithLockRetries.new(
+            timing_configuration: LOCK_RETRIES_TIMING_CONFIGURATION * 2,
             klass: self.class,
             logger: Gitlab::AppLogger,
             connection: connection
-- 
GitLab