summaryrefslogtreecommitdiff
path: root/qa/qa/service/praefect_manager.rb
diff options
context:
space:
mode:
Diffstat (limited to 'qa/qa/service/praefect_manager.rb')
-rw-r--r--qa/qa/service/praefect_manager.rb42
1 files changed, 37 insertions, 5 deletions
diff --git a/qa/qa/service/praefect_manager.rb b/qa/qa/service/praefect_manager.rb
index ab4f28c292f..119013175c0 100644
--- a/qa/qa/service/praefect_manager.rb
+++ b/qa/qa/service/praefect_manager.rb
@@ -353,15 +353,47 @@ module QA
Support::Waiter.wait_until(sleep_interval: 1) { replication_queue_incomplete_count == 0 && replicated?(project_id) }
end
+ def replication_pending?
+ result = []
+ shell sql_to_docker_exec_cmd(
+ <<~SQL
+ select job from replication_queue
+ where state = 'ready'
+ and job ->> 'change' = 'update'
+ and job ->> 'source_node_storage' = '#{current_primary_node}'
+ and job ->> 'target_node_storage' = '#{@primary_node}';
+ SQL
+ ) do |line|
+ result << line
+ end
+
+ # The result looks like:
+ #
+ # job
+ # -----------
+ # {"change": "update", "params": null, "relative_path": "@hashed/4b/22/4b227777d4dd1fc61c6f884f48641d02b4d121d3fd328cb08b5531fcacdabf8a.git", "virtual_storage": "default", "source_node_storage": "gitaly3", "target_node_storage": "gitaly1"}
+ # (1 row)
+ # <blank row>
+ #
+ # Therefore when replication is pending there is at least 1 row of data plus 4 rows of metadata/layout
+
+ result.size >= 5
+ end
+
private
def current_primary_node
- shell dataloss_command do |line|
- QA::Runtime::Logger.debug(line.chomp)
-
- match = line.match(/Primary: (.*)/)
- break match[1] if match
+ result = []
+ shell sql_to_docker_exec_cmd("select node_name from shard_primaries where shard_name = '#{@virtual_storage}';") do |line|
+ result << line
end
+ # The result looks like:
+ # node_name
+ # -----------
+ # gitaly1
+ # (1 row)
+
+ result[2].strip
end
def dataloss_command