Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions lib/elastomer_client/client/ccr.rb
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,22 @@ def initialize(client)

attr_reader :client

# Gets the parameters and status for each follower index.
#
# index_pattern - String name of the index pattern to get follower info for
# params - Hash of query parameters
#
# Examples
#
# ccr.get_follower_info("follower_index")
# ccr.get_follower_info("*")
#
# See https://www.elastic.co/guide/en/elasticsearch/reference/current/ccr-put-follow.html
def get_follower_info(index_pattern, params = {})
response = client.get "/#{index_pattern}/_ccr/info", params.merge(action: "get_follower_info", rest_api: "ccr")
response.body
end

# Creates a new follower index for the provided leader index on the remote cluster.
#
# follower_index - String name of the follower index to create
Expand Down
38 changes: 23 additions & 15 deletions test/client/ccr_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,15 @@
require_relative "../test_helper"

describe ElastomerClient::Client::Ccr do
before :each do
before do
skip "Cannot test Ccr API without a replica cluster" unless $replica_client.available?

begin
ccr.delete_auto_follow("follower_pattern")
rescue StandardError
puts "No auto-follow pattern to delete"
end

@leader_index = $client.index("leader_index")
@follower_index = $replica_client.index("follower_index")
@auto_followed_index = $client.index("followed_index")
Expand All @@ -26,15 +32,9 @@

@leader_index.create(default_index_settings)
wait_for_index(@leader_index.name, "green")

begin
ccr.delete_auto_follow("follower_pattern")
rescue StandardError
puts "No auto-follow pattern to delete"
end
end

after :each do
after do
@leader_index.delete if @leader_index.exists?
@follower_index.delete if @follower_index.exists?
@auto_followed_index.delete if @auto_followed_index.exists?
Expand Down Expand Up @@ -76,18 +76,26 @@ def create_document(index, type, document)

it "successfully follows a leader index" do
create_document(@leader_index, "book", { _id: 1, title: "Book 1" })

follow_index(@follower_index, @leader_index)
follow_index(@follower_index.name, @leader_index.name)

doc = @follower_index.docs.get(id: 1, type: "book")

assert_equal "Book 1", doc["_source"]["title"]
end

it "successfully gets info for all follower indices" do
follow_index(@follower_index.name, @leader_index.name)

response = $replica_client.ccr.get_follower_info("*")

assert_equal response["follower_indices"][0]["follower_index"], @follower_index.name
assert_equal response["follower_indices"][0]["leader_index"], @leader_index.name
end

it "successfully pauses a follower index" do
follow_index(@follower_index, @leader_index)
follow_index(@follower_index.name, @leader_index.name)

response = pause_follow(@follower_index)
response = pause_follow(@follower_index.name)

assert response["acknowledged"]

Expand All @@ -99,13 +107,13 @@ def create_document(index, type, document)
end

it "successfully unfollow a leader index" do
follow_index(@follower_index, @leader_index)
follow_index(@follower_index.name, @leader_index.name)

pause_follow(@follower_index)
pause_follow(@follower_index.name)

@follower_index.close

response = unfollow_index(@follower_index)
response = unfollow_index(@follower_index.name)

assert response["acknowledged"]

Expand Down
Loading