From dea32fc3f98b448288cbcb5a974507f0168969a8 Mon Sep 17 00:00:00 2001 From: Varik Matevosyan <varikmatevosyan@gmail.com> Date: Thu, 21 Nov 2024 18:11:11 +0400 Subject: [PATCH] disable logical subscription before deleting --- model/lantern/lantern_resource.rb | 13 ++++++++++++- spec/model/lantern/lantern_resource_spec.rb | 4 ++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/model/lantern/lantern_resource.rb b/model/lantern/lantern_resource.rb index 5059a7784..e0e02a4ed 100644 --- a/model/lantern/lantern_resource.rb +++ b/model/lantern/lantern_resource.rb @@ -233,7 +233,18 @@ def create_and_enable_subscription end def delete_logical_subscription(name) - representative_server.run_query_all("DROP SUBSCRIPTION IF EXISTS #{name}") + commands = <<SQL +DO $$ +BEGIN + IF EXISTS (SELECT FROM pg_subscription WHERE subname='#{name}') THEN + ALTER SUBSCRIPTION #{name} DISABLE; + ALTER SUBSCRIPTION #{name} SET (slot_name=NONE); + DROP SUBSCRIPTION #{name}; + END IF; +END +$$; +SQL + representative_server.run_query_all(commands) end def mark_switchover_start diff --git a/spec/model/lantern/lantern_resource_spec.rb b/spec/model/lantern/lantern_resource_spec.rb index f4b615d71..b2e48c22a 100644 --- a/spec/model/lantern/lantern_resource_spec.rb +++ b/spec/model/lantern/lantern_resource_spec.rb @@ -238,7 +238,7 @@ it "drops subscription" do representative_server = instance_double(LanternServer) expect(lantern_resource).to receive(:representative_server).and_return(representative_server).at_least(:once) - expect(lantern_resource.representative_server).to receive(:run_query_all).with("DROP SUBSCRIPTION IF EXISTS test") + expect(lantern_resource.representative_server).to receive(:run_query_all).with(a_string_matching(/DROP SUBSCRIPTION test/m)) expect { lantern_resource.delete_logical_subscription("test") }.not_to raise_error end end @@ -286,7 +286,7 @@ logical_replication: true, lantern_version: representative_server.lantern_version, extras_version: representative_server.extras_version, - minor_version: representative_server.minor_version, + minor_version: representative_server.minor_version )) expect { lantern_resource.create_logical_replica }.not_to raise_error end