From c49f7734adb5f4292243907e3202dab9664bf98c Mon Sep 17 00:00:00 2001
From: David Fernandez <dfernandez@gitlab.com>
Date: Fri, 13 Oct 2023 14:49:27 +0000
Subject: [PATCH] Merge branch
 '427792-geo-bandaid-for-registry-rows-stuck-in-sync-state-queued' into
 'master'

Geo: Avoid getting resources stuck in Queued

See merge request https://gitlab.com/gitlab-org/gitlab/-/merge_requests/133782

Merged-by: David Fernandez <dfernandez@gitlab.com>
Approved-by: Ian Baum <ibaum@gitlab.com>
Approved-by: David Fernandez <dfernandez@gitlab.com>
Co-authored-by: Mike Kozono <mkozono@gitlab.com>

(cherry picked from commit 9f4734207f77167f5b4fadb5da07eda3e3022216)

31442fb7 Geo: Avoid getting resources stuck in Queued
---
 ee/app/models/concerns/geo/replicable_registry.rb          | 1 +
 .../repository_replicator_strategy_shared_examples.rb      | 7 +++++--
 .../models/geo_framework_registry_shared_examples.rb       | 7 +++++++
 3 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/ee/app/models/concerns/geo/replicable_registry.rb b/ee/app/models/concerns/geo/replicable_registry.rb
index ea2208e01d38185a..241051e6bdf2abf2 100644
--- a/ee/app/models/concerns/geo/replicable_registry.rb
+++ b/ee/app/models/concerns/geo/replicable_registry.rb
@@ -87,6 +87,7 @@ def replicator_class
       before_transition any => :pending do |registry, _|
         registry.retry_at = nil
         registry.retry_count = 0
+        registry.last_synced_at = nil
       end
 
       before_transition any => :failed do |registry, _|
diff --git a/ee/spec/support/shared_examples/models/concerns/repository_replicator_strategy_shared_examples.rb b/ee/spec/support/shared_examples/models/concerns/repository_replicator_strategy_shared_examples.rb
index 42e6607de91cac0b..5b9f7740ab083c72 100644
--- a/ee/spec/support/shared_examples/models/concerns/repository_replicator_strategy_shared_examples.rb
+++ b/ee/spec/support/shared_examples/models/concerns/repository_replicator_strategy_shared_examples.rb
@@ -112,15 +112,18 @@
     end
 
     context 'when a sync is currently running' do
+      let(:registry) { replicator.registry }
+
       it 'moves registry state to pending' do
-        replicator.registry.start!
+        registry.start!
 
         # sync no-op, as if the lease is already taken
         allow(replicator).to receive(:sync_repository)
 
         expect do
           replicator.consume(::Geo::RepositoryReplicatorStrategy::EVENT_UPDATED)
-        end.to change { replicator.registry.reload.pending? }.from(false).to(true)
+        end.to change { registry.reload.pending? }.from(false).to(true)
+          .and change { registry.reload.last_synced_at }.to(nil)
       end
     end
   end
diff --git a/ee/spec/support/shared_examples/models/geo_framework_registry_shared_examples.rb b/ee/spec/support/shared_examples/models/geo_framework_registry_shared_examples.rb
index 49da3f67c0653a34..5494a0d1bf2c7f5e 100644
--- a/ee/spec/support/shared_examples/models/geo_framework_registry_shared_examples.rb
+++ b/ee/spec/support/shared_examples/models/geo_framework_registry_shared_examples.rb
@@ -235,6 +235,13 @@
         end.to change { registry.retry_at }.from(a_kind_of(ActiveSupport::TimeWithZone)).to(nil)
            .and change { registry.retry_count }.to(0)
       end
+
+      it 'sets last_synced_at to nil' do
+        expect do
+          registry.pending!
+          registry.reload
+        end.to change { registry.last_synced_at }.from(a_kind_of(ActiveSupport::TimeWithZone)).to(nil)
+      end
     end
   end
 end
-- 
GitLab