Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab/database/partitioning/multi_database_partition_manager.rb')
-rw-r--r--lib/gitlab/database/partitioning/multi_database_partition_manager.rb37
1 files changed, 37 insertions, 0 deletions
diff --git a/lib/gitlab/database/partitioning/multi_database_partition_manager.rb b/lib/gitlab/database/partitioning/multi_database_partition_manager.rb
new file mode 100644
index 00000000000..5a93e3fb1fb
--- /dev/null
+++ b/lib/gitlab/database/partitioning/multi_database_partition_manager.rb
@@ -0,0 +1,37 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Database
+ module Partitioning
+ class MultiDatabasePartitionManager
+ def initialize(models)
+ @models = models
+ end
+
+ def sync_partitions
+ Gitlab::AppLogger.info(message: "Syncing dynamic postgres partitions")
+
+ models.each do |model|
+ Gitlab::Database::SharedModel.using_connection(model.connection) do
+ Gitlab::AppLogger.debug(message: "Switched database connection",
+ connection_name: connection_name,
+ table_name: model.table_name)
+
+ PartitionManager.new(model).sync_partitions
+ end
+ end
+
+ Gitlab::AppLogger.info(message: "Finished sync of dynamic postgres partitions")
+ end
+
+ private
+
+ attr_reader :models
+
+ def connection_name
+ Gitlab::Database::SharedModel.connection.pool.db_config.name
+ end
+ end
+ end
+ end
+end