From 3514d0f28e7936b5730740b8be957a677d75f6dc Mon Sep 17 00:00:00 2001 From: Sarwaan Ansari <31755174+sarwaan001@users.noreply.github.com> Date: Wed, 12 Feb 2025 21:59:21 +0000 Subject: [PATCH 01/13] feature: created the pause follow endpoint --- lib/elastomer_client/client/ccr.rb | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/elastomer_client/client/ccr.rb b/lib/elastomer_client/client/ccr.rb index f42a005c..b15a5a32 100644 --- a/lib/elastomer_client/client/ccr.rb +++ b/lib/elastomer_client/client/ccr.rb @@ -36,6 +36,11 @@ def follow(follower_index, body, params = {}) response = client.put "/#{follower_index}/_ccr/follow", params.merge(body:, action: "follow", rest_api: "ccr") response.body end + + def pause_follow(follower_index, params = {}) + response = client.post "/#{follower_index}/_ccr/pause_follow", params.merge(body:, action: "pause_follow", rest_api: "ccr") + response.body + end end end end From 6591537a232e7815e1f01946bcd3d5766cc69d32 Mon Sep 17 00:00:00 2001 From: Sarwaan Ansari <31755174+sarwaan001@users.noreply.github.com> Date: Wed, 12 Feb 2025 22:18:51 +0000 Subject: [PATCH 02/13] chore: add comment doc --- lib/elastomer_client/client/ccr.rb | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/lib/elastomer_client/client/ccr.rb b/lib/elastomer_client/client/ccr.rb index b15a5a32..0c6beacb 100644 --- a/lib/elastomer_client/client/ccr.rb +++ b/lib/elastomer_client/client/ccr.rb @@ -37,7 +37,18 @@ def follow(follower_index, body, params = {}) response.body end - def pause_follow(follower_index, params = {}) + # Pauses a follower index. + # + # follower_index - String name of the follower index to create + # body - Hash of the request body + # :master_timeout - String in the time units. Optional. + # see https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#time-units + # + # Examples + # ccr.pause_follow("follower_index") + # + # See https://www.elastic.co/guide/en/elasticsearch/reference/current/ccr-post-pause-follow.html + def pause_follow(follower_index, body = {}, params = {}) response = client.post "/#{follower_index}/_ccr/pause_follow", params.merge(body:, action: "pause_follow", rest_api: "ccr") response.body end From ca864f09c8a5f1c1b9a64f2ae08a4d7f6a7639df Mon Sep 17 00:00:00 2001 From: Sarwaan Ansari <31755174+sarwaan001@users.noreply.github.com> Date: Thu, 13 Feb 2025 07:07:48 +0000 Subject: [PATCH 03/13] fix: added test --- lib/elastomer_client/client/ccr.rb | 6 +++--- test/client/ccr_test.rb | 26 ++++++++++++++++++++++++-- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/lib/elastomer_client/client/ccr.rb b/lib/elastomer_client/client/ccr.rb index 0c6beacb..1d0cefbb 100644 --- a/lib/elastomer_client/client/ccr.rb +++ b/lib/elastomer_client/client/ccr.rb @@ -40,7 +40,7 @@ def follow(follower_index, body, params = {}) # Pauses a follower index. # # follower_index - String name of the follower index to create - # body - Hash of the request body + # params - Hash of the request body # :master_timeout - String in the time units. Optional. # see https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#time-units # @@ -48,8 +48,8 @@ def follow(follower_index, body, params = {}) # ccr.pause_follow("follower_index") # # See https://www.elastic.co/guide/en/elasticsearch/reference/current/ccr-post-pause-follow.html - def pause_follow(follower_index, body = {}, params = {}) - response = client.post "/#{follower_index}/_ccr/pause_follow", params.merge(body:, action: "pause_follow", rest_api: "ccr") + def pause_follow(follower_index, params = {}) + response = client.post "/#{follower_index}/_ccr/pause_follow", params.merge(action: "pause_follow", rest_api: "ccr") response.body end end diff --git a/test/client/ccr_test.rb b/test/client/ccr_test.rb index dbee88f1..3d63a71f 100644 --- a/test/client/ccr_test.rb +++ b/test/client/ccr_test.rb @@ -3,7 +3,7 @@ require_relative "../test_helper" describe ElastomerClient::Client::Ccr do - before do + before :each do skip "Cannot test Ccr API without a replica cluster" unless $replica_client.available? @leader_index = $client.index("leader_index") @@ -21,7 +21,7 @@ @leader_index.refresh end - after do + after :each do @leader_index.delete if @leader_index.exists? @follower_index.delete if @follower_index.exists? end @@ -36,4 +36,26 @@ assert_equal "Book 1", doc["_source"]["title"] end + it "successfully pauses a follower index" do + ccr = $replica_client.ccr + + ccr.follow(@follower_index.name, { leader_index: @leader_index.name, remote_cluster: "leader" }) + wait_for_index(@follower_index.name, "green") + doc = @follower_index.docs.get(id: 1, type: "book") + + assert_equal "Book 1", doc["_source"]["title"] + + response = ccr.pause_follow(@follower_index.name) + + assert response["acknowledged"] + + wait_for_index(@follower_index.name, "green") + @leader_index.docs.index(document_wrapper("book", { _id: 2, title: "Book 2" })) + @leader_index.refresh + doc = @follower_index.docs.get(id: 2, type: "book") + + refute doc["found"] + + end + end From 5f05d6c249e8139dc662b28b282c8a1ecbadf10a Mon Sep 17 00:00:00 2001 From: Sarwaan Ansari <31755174+sarwaan001@users.noreply.github.com> Date: Thu, 13 Feb 2025 09:57:24 +0000 Subject: [PATCH 04/13] fix: refactored test --- test/client/ccr_test.rb | 42 +++++++++++++++++++++++++---------------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/test/client/ccr_test.rb b/test/client/ccr_test.rb index 3d63a71f..7691bbc7 100644 --- a/test/client/ccr_test.rb +++ b/test/client/ccr_test.rb @@ -16,9 +16,6 @@ end @leader_index.create(default_index_settings) wait_for_index(@leader_index.name, "green") - - @leader_index.docs.index(document_wrapper("book", { _id: 1, title: "Book 1" })) - @leader_index.refresh end after :each do @@ -26,32 +23,45 @@ @follower_index.delete if @follower_index.exists? end - it "successfully follows a leader index" do + def follow_index(follower_index, leader_index) ccr = $replica_client.ccr + response = ccr.follow(follower_index.name, { leader_index: leader_index.name, remote_cluster: "leader" }) + wait_for_index(follower_index.name, "green") + response + end - ccr.follow(@follower_index.name, { leader_index: @leader_index.name, remote_cluster: "leader" }) - wait_for_index(@follower_index.name, "green") - doc = @follower_index.docs.get(id: 1, type: "book") + def pause_follow(follower_index) + ccr = $replica_client.ccr + response = ccr.pause_follow(follower_index.name) + wait_for_index(follower_index.name, "green") + response + end - assert_equal "Book 1", doc["_source"]["title"] + def create_document(index, type, document) + response = index.docs.index(document_wrapper(type, document)) + index.refresh + response end - it "successfully pauses a follower index" do - ccr = $replica_client.ccr + it "successfully follows a leader index" do + create_document(@leader_index, "book", { _id: 1, title: "Book 1" }) + + follow_index(@follower_index, @leader_index) - ccr.follow(@follower_index.name, { leader_index: @leader_index.name, remote_cluster: "leader" }) - wait_for_index(@follower_index.name, "green") doc = @follower_index.docs.get(id: 1, type: "book") assert_equal "Book 1", doc["_source"]["title"] + end - response = ccr.pause_follow(@follower_index.name) + it "successfully pauses a follower index" do + follow_index(@follower_index, @leader_index) + + response = pause_follow(@follower_index) assert response["acknowledged"] - wait_for_index(@follower_index.name, "green") - @leader_index.docs.index(document_wrapper("book", { _id: 2, title: "Book 2" })) - @leader_index.refresh + create_document(@leader_index, "book", { _id: 2, title: "Book 2" }) + doc = @follower_index.docs.get(id: 2, type: "book") refute doc["found"] From fa3c26d9ca1414d18364a9e683f990c6d97d415e Mon Sep 17 00:00:00 2001 From: Sarwaan Ansari <31755174+sarwaan001@users.noreply.github.com> Date: Thu, 13 Feb 2025 10:02:43 +0000 Subject: [PATCH 05/13] feature: added unfollow index --- lib/elastomer_client/client/ccr.rb | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/lib/elastomer_client/client/ccr.rb b/lib/elastomer_client/client/ccr.rb index 1d0cefbb..66732455 100644 --- a/lib/elastomer_client/client/ccr.rb +++ b/lib/elastomer_client/client/ccr.rb @@ -39,10 +39,8 @@ def follow(follower_index, body, params = {}) # Pauses a follower index. # - # follower_index - String name of the follower index to create - # params - Hash of the request body - # :master_timeout - String in the time units. Optional. - # see https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#time-units + # follower_index - String name of the follower index pause + # params - Hash of the request body # # Examples # ccr.pause_follow("follower_index") @@ -52,6 +50,19 @@ def pause_follow(follower_index, params = {}) response = client.post "/#{follower_index}/_ccr/pause_follow", params.merge(action: "pause_follow", rest_api: "ccr") response.body end + + # Unfollows a leader index given a follower index. + # + # follower_index - String name of the follower index to create + # params - Hash of the request body + # + # Examples + # ccr.unfollow("follower_index") + # See https://www.elastic.co/guide/en/elasticsearch/reference/current/ccr-post-unfollow.html + def unfollow(follower_index, params = {}) + response = client.post "/#{follower_index}/_ccr/unfollow", params.merge(action: "unfollow", rest_api: "ccr") + response.body + end end end end From 91007fce14243cfd03d86a4ea5ab03decaf6a8e2 Mon Sep 17 00:00:00 2001 From: Sarwaan Ansari <31755174+sarwaan001@users.noreply.github.com> Date: Thu, 13 Feb 2025 10:22:12 +0000 Subject: [PATCH 06/13] chore: updated comments to include closed and paused --- lib/elastomer_client/client/ccr.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/elastomer_client/client/ccr.rb b/lib/elastomer_client/client/ccr.rb index 66732455..b9d174f5 100644 --- a/lib/elastomer_client/client/ccr.rb +++ b/lib/elastomer_client/client/ccr.rb @@ -52,6 +52,7 @@ def pause_follow(follower_index, params = {}) end # Unfollows a leader index given a follower index. + # The follower index must be paused and closed before unfollowing. # # follower_index - String name of the follower index to create # params - Hash of the request body From 9a66f8a13ccc123db919a96e0a05453058fdf5b7 Mon Sep 17 00:00:00 2001 From: Sarwaan Ansari <31755174+sarwaan001@users.noreply.github.com> Date: Thu, 13 Feb 2025 10:22:37 +0000 Subject: [PATCH 07/13] fix: created test for unfollow --- test/client/ccr_test.rb | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/test/client/ccr_test.rb b/test/client/ccr_test.rb index 7691bbc7..efdd8e35 100644 --- a/test/client/ccr_test.rb +++ b/test/client/ccr_test.rb @@ -37,6 +37,13 @@ def pause_follow(follower_index) response end + def unfollow_index(follower_index) + ccr = $replica_client.ccr + response = ccr.unfollow(follower_index.name) + wait_for_index(follower_index.name, "green") + response + end + def create_document(index, type, document) response = index.docs.index(document_wrapper(type, document)) index.refresh @@ -53,7 +60,7 @@ def create_document(index, type, document) assert_equal "Book 1", doc["_source"]["title"] end - it "successfully pauses a follower index" do + it "should successfully pauses a follower index" do follow_index(@follower_index, @leader_index) response = pause_follow(@follower_index) @@ -65,7 +72,28 @@ def create_document(index, type, document) doc = @follower_index.docs.get(id: 2, type: "book") refute doc["found"] + end + + it "should successfully unfollows a leader index" do + follow_index(@follower_index, @leader_index) + + pause_follow(@follower_index) + + @follower_index.close + response = unfollow_index(@follower_index) + + assert response["acknowledged"] + + @follower_index.open + + wait_for_index(@follower_index.name, "green") + + create_document(@leader_index, "book", { _id: 2, title: "Book 2" }) + + doc = @follower_index.docs.get(id: 2, type: "book") + + refute doc["found"] end end From c7e7dd2aef9e02837ffe92a18eb3e16c009dea83 Mon Sep 17 00:00:00 2001 From: Sarwaan Ansari <31755174+sarwaan001@users.noreply.github.com> Date: Thu, 13 Feb 2025 10:24:39 +0000 Subject: [PATCH 08/13] chore: formatting to make ci happy --- lib/elastomer_client/client/ccr.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/elastomer_client/client/ccr.rb b/lib/elastomer_client/client/ccr.rb index b9d174f5..1295b109 100644 --- a/lib/elastomer_client/client/ccr.rb +++ b/lib/elastomer_client/client/ccr.rb @@ -53,7 +53,7 @@ def pause_follow(follower_index, params = {}) # Unfollows a leader index given a follower index. # The follower index must be paused and closed before unfollowing. - # + # # follower_index - String name of the follower index to create # params - Hash of the request body # From 4406441997663ab4b1fd9a55c6f99a6425d13328 Mon Sep 17 00:00:00 2001 From: Sarwaan Ansari <31755174+sarwaan001@users.noreply.github.com> Date: Thu, 13 Feb 2025 13:06:03 -0500 Subject: [PATCH 09/13] fix: copilot comment suggestion Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- lib/elastomer_client/client/ccr.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/elastomer_client/client/ccr.rb b/lib/elastomer_client/client/ccr.rb index 1295b109..9614d5ec 100644 --- a/lib/elastomer_client/client/ccr.rb +++ b/lib/elastomer_client/client/ccr.rb @@ -54,7 +54,7 @@ def pause_follow(follower_index, params = {}) # Unfollows a leader index given a follower index. # The follower index must be paused and closed before unfollowing. # - # follower_index - String name of the follower index to create + # follower_index - String name of the follower index to unfollow # params - Hash of the request body # # Examples From 44a3c13270c44ca26db706df8ae4e12216961e0a Mon Sep 17 00:00:00 2001 From: Sarwaan Ansari <31755174+sarwaan001@users.noreply.github.com> Date: Thu, 13 Feb 2025 13:06:23 -0500 Subject: [PATCH 10/13] chore: oof grammar Co-authored-by: John Hernley --- lib/elastomer_client/client/ccr.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/elastomer_client/client/ccr.rb b/lib/elastomer_client/client/ccr.rb index 9614d5ec..0dca9291 100644 --- a/lib/elastomer_client/client/ccr.rb +++ b/lib/elastomer_client/client/ccr.rb @@ -39,7 +39,7 @@ def follow(follower_index, body, params = {}) # Pauses a follower index. # - # follower_index - String name of the follower index pause + # follower_index - String name of the follower index to pause # params - Hash of the request body # # Examples From b4f91647c82bac4c717cf60a16d4f1a00cb27ed6 Mon Sep 17 00:00:00 2001 From: Sarwaan Ansari <31755174+sarwaan001@users.noreply.github.com> Date: Thu, 13 Feb 2025 13:07:18 -0500 Subject: [PATCH 11/13] fix: change follower index to follower index name Co-authored-by: John Hernley --- test/client/ccr_test.rb | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/test/client/ccr_test.rb b/test/client/ccr_test.rb index efdd8e35..124537ec 100644 --- a/test/client/ccr_test.rb +++ b/test/client/ccr_test.rb @@ -23,24 +23,24 @@ @follower_index.delete if @follower_index.exists? end - def follow_index(follower_index, leader_index) + def follow_index(follower_index_name, leader_index_name) ccr = $replica_client.ccr - response = ccr.follow(follower_index.name, { leader_index: leader_index.name, remote_cluster: "leader" }) - wait_for_index(follower_index.name, "green") + response = ccr.follow(follower_index_name, { leader_index: leader_index_name, remote_cluster: "leader" }) + wait_for_index(follower_index_name, "green") response end - def pause_follow(follower_index) + def pause_follow(follower_index_name) ccr = $replica_client.ccr - response = ccr.pause_follow(follower_index.name) - wait_for_index(follower_index.name, "green") + response = ccr.pause_follow(follower_index_name) + wait_for_index(follower_index_name, "green") response end - def unfollow_index(follower_index) + def unfollow_index(follower_index_name) ccr = $replica_client.ccr - response = ccr.unfollow(follower_index.name) - wait_for_index(follower_index.name, "green") + response = ccr.unfollow(follower_index_name) + wait_for_index(follower_index_name, "green") response end From b320a8263cf3ec51f80c4e8b148e7da1a2063ec4 Mon Sep 17 00:00:00 2001 From: Sarwaan Ansari <31755174+sarwaan001@users.noreply.github.com> Date: Thu, 13 Feb 2025 13:07:40 -0500 Subject: [PATCH 12/13] chore: grammar Co-authored-by: John Hernley --- test/client/ccr_test.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/client/ccr_test.rb b/test/client/ccr_test.rb index 124537ec..eb72ef69 100644 --- a/test/client/ccr_test.rb +++ b/test/client/ccr_test.rb @@ -74,7 +74,7 @@ def create_document(index, type, document) refute doc["found"] end - it "should successfully unfollows a leader index" do + it "successfully unfollow a leader index" do follow_index(@follower_index, @leader_index) pause_follow(@follower_index) From 71c5e3f26991881c0294a1d31de998588d2b24fc Mon Sep 17 00:00:00 2001 From: Sarwaan Ansari <31755174+sarwaan001@users.noreply.github.com> Date: Thu, 13 Feb 2025 13:07:54 -0500 Subject: [PATCH 13/13] chore: grammar Co-authored-by: John Hernley --- test/client/ccr_test.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/client/ccr_test.rb b/test/client/ccr_test.rb index eb72ef69..fe603551 100644 --- a/test/client/ccr_test.rb +++ b/test/client/ccr_test.rb @@ -60,7 +60,7 @@ def create_document(index, type, document) assert_equal "Book 1", doc["_source"]["title"] end - it "should successfully pauses a follower index" do + it "successfully pauses a follower index" do follow_index(@follower_index, @leader_index) response = pause_follow(@follower_index)