Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
2 changes: 2 additions & 0 deletions docs/reference/ccr/apis/ccr-apis.asciidoc
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ You can use the following APIs to perform {ccr} operations.
* <<ccr-post-resume-follow,Resume follower>>
* <<ccr-post-unfollow,Convert follower index to a regular index>>
* <<ccr-get-follow-stats,Get stats about follower indices>>
* <<ccr-get-follow-info,Get info about follower indices>>

[float]
[[ccr-api-auto-follow]]
Expand All @@ -40,6 +41,7 @@ include::follow/post-pause-follow.asciidoc[]
include::follow/post-resume-follow.asciidoc[]
include::follow/post-unfollow.asciidoc[]
include::follow/get-follow-stats.asciidoc[]
include::follow/get-follow-info.asciidoc[]

// auto-follow
include::auto-follow/put-auto-follow-pattern.asciidoc[]
Expand Down
171 changes: 171 additions & 0 deletions docs/reference/ccr/apis/follow/get-follow-info.asciidoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,171 @@
[role="xpack"]
[testenv="platinum"]
[[ccr-get-follow-info]]
=== Get follower info API
++++
<titleabbrev>Get follower info</titleabbrev>
++++

beta[]

Get follower info.

==== Description

This API returns information about all follower indices.

For each follower index that gets returned, the configured parameters
(e.g. follower index name, leader index name, replication options) and
the status (whether follower index is active or paused) is included.

==== Request

//////////////////////////

[source,js]
--------------------------------------------------
PUT /follower_index/_ccr/follow
{
"remote_cluster" : "remote_cluster",
"leader_index" : "leader_index"
}
--------------------------------------------------
// CONSOLE
// TESTSETUP
// TEST[setup:remote_cluster_and_leader_index]

[source,js]
--------------------------------------------------
POST /follower_index/_ccr/pause_follow
--------------------------------------------------
// CONSOLE
// TEARDOWN

//////////////////////////

[source,js]
--------------------------------------------------
GET /<index>/_ccr/info
--------------------------------------------------
// CONSOLE
// TEST[s/<index>/follower_index/]

==== Path Parameters
`index` ::
(string) a comma-delimited list of follower index patterns

==== Results

This API returns the following information:

`follower_indices`::
(array) an array of follower index statistics

The `indices` array consists of objects containing two fields:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: here we are returning more than two fields.


`indices[].follower_index`::
(string) the name of the follower index

`indices[].remote_cluster`::
(string) the <modules-remote-clusters,remote cluster>> containing the leader
index

`indices[].leader_cluster`::
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: leader_cluster -> leader_index

(string) the name of the index in the leader cluster being followed

`indices[].status`::
(string) whether index following is `active` or `paused`

`indices[].parameters`::
(object) an object encapsulating ccr replication related parameters

The `parameters` contains the following fields:

`indices[].parameters.max_read_request_operation_count`::
(integer) the configured maximum number of operations to pull per read from the remote
cluster

`indices[].parameters.max_outstanding_read_requests`::
(long) the configured maximum number of outstanding reads requests from the remote
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

reads requests -> read requests.

cluster

`indices[].parameters.max_read_request_size`::
(<<byte-units,byte value>>) the configured maximum size in bytes of per read of a batch
of operations pulled from the remote cluster

`indices[].parameters.max_write_request_operation_count`::
(integer) the configured maximum number of operations per bulk write request executed on
the follower

`indices[].parameters.max_write_request_size`::
(<<byte-units,byte value>>) the configured maximum total bytes of operations per bulk write request
executed on the follower

`indices[].parameters.max_outstanding_write_requests`::
(integer) the configured maximum number of outstanding write requests on the follower

`indices[].parameters.max_write_buffer_count`::
(integer) th configurede maximum number of operations that can be queued for writing;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

th configurede -> the configured

when this limit is reached, reads from the remote cluster will be deferred
until the number of queued operations goes below the limit

`indices[].parameters.max_write_buffer_size`::
(<<byte-units,byte value>>) the configured maximum total bytes of operations that can be queued for
writing; when this limit is reached, reads from the remote cluster will be
deferred until the total bytes of queued operations goes below the limit

`indices[].parameters.max_retry_delay`::
(<<time-units,time value>>) the configured maximum time to wait before retrying an
operation that failed exceptionally; an exponential backoff strategy is
employed when retrying

`indices[].parameters.read_poll_timeout`::
(<<time-units,time value>>) the configured maximum time to wait for new operations on the
remote cluster when the follower index is synchronized with the leader index;
when the timeout has elapsed, the poll for operations will return to the
follower so that it can update some statistics, and then the follower will
immediately attempt to read from the leader again

==== Authorization

If the {es} {security-features} are enabled, you must have `monitor` cluster
privileges. For more information, see {stack-ov}/security-privileges.html[Security privileges].

==== Example

This example retrieves follower info:

[source,js]
--------------------------------------------------
GET /follower_index/_ccr/info
--------------------------------------------------
// CONSOLE

The API returns the following results:

[source,js]
--------------------------------------------------
{
"follower_indices" : [
{
"follower_index" : "follower_index",
"remote_cluster" : "remote_cluster",
"leader_index" : "leader_index",
"status" : "active",
"parameters" : {
"max_read_request_operation_count" : 5120,
"max_read_request_size" : "32mb",
"max_outstanding_read_requests" : 12,
"max_write_request_operation_count" : 5120,
"max_write_request_size" : "9223372036854775807b",
"max_outstanding_write_requests" : 9,
"max_write_buffer_count" : 2147483647,
"max_write_buffer_size" : "512mb",
"max_retry_delay" : "500ms",
"read_poll_timeout" : "1m"
}
}
]
}
--------------------------------------------------
// TESTRESPONSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
---
"Test info":
- do:
cluster.state: {}

- set: {master_node: master}

- do:
nodes.info: {}

- set: {nodes.$master.transport_address: local_ip}

- do:
cluster.put_settings:
body:
transient:
cluster.remote.local.seeds: $local_ip
flat_settings: true

- match: {transient: {cluster.remote.local.seeds: $local_ip}}

- do:
indices.create:
index: foo
body:
settings:
index:
number_of_shards: 1
number_of_replicas: 0
soft_deletes:
enabled: true

- do:
ccr.follow:
index: bar
body:
remote_cluster: local
leader_index: foo
- is_true: follow_index_created
- is_true: follow_index_shards_acked
- is_true: index_following_started

- do:
ccr.follow_info:
index: bar
- length: {follower_indices: 1}
- match: {follower_indices.0.follower_index: "bar"}
- match: {follower_indices.0.remote_cluster: "local"}
- match: {follower_indices.0.leader_index: "foo"}
- match: {follower_indices.0.status: "active"}
- match: {follower_indices.0.parameters.max_read_request_operation_count: 5120}
- match: {follower_indices.0.parameters.max_read_request_size: "32mb"}
- match: {follower_indices.0.parameters.max_outstanding_read_requests: 12}
- match: {follower_indices.0.parameters.max_write_request_operation_count: 5120}
- match: {follower_indices.0.parameters.max_write_request_size: "9223372036854775807b"}
- match: {follower_indices.0.parameters.max_outstanding_write_requests: 9}
- match: {follower_indices.0.parameters.max_write_buffer_count: 2147483647,}
- match: {follower_indices.0.parameters.max_write_buffer_size: "512mb"}
- match: {follower_indices.0.parameters.max_retry_delay: "500ms"}
- match: {follower_indices.0.parameters.read_poll_timeout: "1m"}

- do:
ccr.pause_follow:
index: bar
- is_true: acknowledged

- do:
ccr.follow_info:
index: bar
- length: {follower_indices: 1}
- match: {follower_indices.0.follower_index: "bar"}
- match: {follower_indices.0.remote_cluster: "local"}
- match: {follower_indices.0.leader_index: "foo"}
- match: {follower_indices.0.status: "paused"}
- is_false: follower_indices.0.parameters
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@
import org.elasticsearch.xpack.ccr.action.ShardFollowTasksExecutor;
import org.elasticsearch.xpack.ccr.action.TransportCcrStatsAction;
import org.elasticsearch.xpack.ccr.action.TransportDeleteAutoFollowPatternAction;
import org.elasticsearch.xpack.ccr.action.TransportFollowInfoAction;
import org.elasticsearch.xpack.ccr.action.TransportFollowStatsAction;
import org.elasticsearch.xpack.ccr.action.TransportGetAutoFollowPatternAction;
import org.elasticsearch.xpack.ccr.action.TransportPauseFollowAction;
Expand All @@ -68,6 +69,7 @@
import org.elasticsearch.xpack.ccr.repository.CcrRestoreSourceService;
import org.elasticsearch.xpack.ccr.rest.RestCcrStatsAction;
import org.elasticsearch.xpack.ccr.rest.RestDeleteAutoFollowPatternAction;
import org.elasticsearch.xpack.ccr.rest.RestFollowInfoAction;
import org.elasticsearch.xpack.ccr.rest.RestFollowStatsAction;
import org.elasticsearch.xpack.ccr.rest.RestGetAutoFollowPatternAction;
import org.elasticsearch.xpack.ccr.rest.RestPauseFollowAction;
Expand All @@ -79,6 +81,7 @@
import org.elasticsearch.xpack.core.ccr.ShardFollowNodeTaskStatus;
import org.elasticsearch.xpack.core.ccr.action.CcrStatsAction;
import org.elasticsearch.xpack.core.ccr.action.DeleteAutoFollowPatternAction;
import org.elasticsearch.xpack.core.ccr.action.FollowInfoAction;
import org.elasticsearch.xpack.core.ccr.action.FollowStatsAction;
import org.elasticsearch.xpack.core.ccr.action.GetAutoFollowPatternAction;
import org.elasticsearch.xpack.core.ccr.action.PauseFollowAction;
Expand Down Expand Up @@ -196,6 +199,7 @@ public List<PersistentTasksExecutor<?>> getPersistentTasksExecutor(ClusterServic
// stats action
new ActionHandler<>(FollowStatsAction.INSTANCE, TransportFollowStatsAction.class),
new ActionHandler<>(CcrStatsAction.INSTANCE, TransportCcrStatsAction.class),
new ActionHandler<>(FollowInfoAction.INSTANCE, TransportFollowInfoAction.class),
// follow actions
new ActionHandler<>(PutFollowAction.INSTANCE, TransportPutFollowAction.class),
new ActionHandler<>(ResumeFollowAction.INSTANCE, TransportResumeFollowAction.class),
Expand All @@ -219,6 +223,7 @@ public List<RestHandler> getRestHandlers(Settings settings, RestController restC
// stats API
new RestFollowStatsAction(settings, restController),
new RestCcrStatsAction(settings, restController),
new RestFollowInfoAction(settings, restController),
// follow APIs
new RestPutFollowAction(settings, restController),
new RestResumeFollowAction(settings, restController),
Expand Down
Loading