mirror of
https://github.com/elastic/elasticsearch.git
synced 2025-04-24 23:27:25 -04:00
Calc follower vs leader indexing lag based on shard global checkpoints (#104015)
* Calc follower vs leader indexing lag baed on shard global checkpoints * code simplify * follow PR comments * spotless * Update docs/reference/ccr/apis/follow/get-follow-stats.asciidoc Co-authored-by: Iraklis Psaroudakis <kingherc@gmail.com> --------- Co-authored-by: Iraklis Psaroudakis <kingherc@gmail.com>
This commit is contained in:
parent
f33122a191
commit
f6f86d11d3
4 changed files with 20 additions and 1 deletions
|
@ -75,6 +75,9 @@ task. In this situation, the following task must be resumed manually with the
|
||||||
`index`::
|
`index`::
|
||||||
(string) The name of the follower index.
|
(string) The name of the follower index.
|
||||||
|
|
||||||
|
`total_global_checkpoint_lag`::
|
||||||
|
(long) Indication of how much the follower is lagging the leader. This is the sum of the difference between the `leader_global_checkpoint` and the `follower_global_checkpoint` for all shards.
|
||||||
|
|
||||||
//Begin shards
|
//Begin shards
|
||||||
`shards`::
|
`shards`::
|
||||||
(array) An array of shard-level following task statistics.
|
(array) An array of shard-level following task statistics.
|
||||||
|
@ -219,6 +222,7 @@ The API returns the following results:
|
||||||
"indices" : [
|
"indices" : [
|
||||||
{
|
{
|
||||||
"index" : "follower_index",
|
"index" : "follower_index",
|
||||||
|
"total_global_checkpoint_lag" : 256,
|
||||||
"shards" : [
|
"shards" : [
|
||||||
{
|
{
|
||||||
"remote_cluster" : "remote_cluster",
|
"remote_cluster" : "remote_cluster",
|
||||||
|
@ -255,6 +259,7 @@ The API returns the following results:
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
--------------------------------------------------
|
--------------------------------------------------
|
||||||
|
// TESTRESPONSE[s/"total_global_checkpoint_lag" : 256/"total_global_checkpoint_lag" : 0/]
|
||||||
// TESTRESPONSE[s/"leader_global_checkpoint" : 1024/"leader_global_checkpoint" : $body.indices.0.shards.0.leader_global_checkpoint/]
|
// TESTRESPONSE[s/"leader_global_checkpoint" : 1024/"leader_global_checkpoint" : $body.indices.0.shards.0.leader_global_checkpoint/]
|
||||||
// TESTRESPONSE[s/"leader_max_seq_no" : 1536/"leader_max_seq_no" : $body.indices.0.shards.0.leader_max_seq_no/]
|
// TESTRESPONSE[s/"leader_max_seq_no" : 1536/"leader_max_seq_no" : $body.indices.0.shards.0.leader_max_seq_no/]
|
||||||
// TESTRESPONSE[s/"follower_global_checkpoint" : 768/"follower_global_checkpoint" : $body.indices.0.shards.0.follower_global_checkpoint/]
|
// TESTRESPONSE[s/"follower_global_checkpoint" : 768/"follower_global_checkpoint" : $body.indices.0.shards.0.follower_global_checkpoint/]
|
||||||
|
|
|
@ -112,6 +112,7 @@ The API returns the following results:
|
||||||
"indices" : [
|
"indices" : [
|
||||||
{
|
{
|
||||||
"index" : "follower_index",
|
"index" : "follower_index",
|
||||||
|
"total_global_checkpoint_lag" : 256,
|
||||||
"shards" : [
|
"shards" : [
|
||||||
{
|
{
|
||||||
"remote_cluster" : "remote_cluster",
|
"remote_cluster" : "remote_cluster",
|
||||||
|
@ -149,6 +150,7 @@ The API returns the following results:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
--------------------------------------------------
|
--------------------------------------------------
|
||||||
|
// TESTRESPONSE[s/"total_global_checkpoint_lag" : 256/"total_global_checkpoint_lag" : 0/]
|
||||||
// TESTRESPONSE[s/"number_of_failed_follow_indices" : 0/"number_of_failed_follow_indices" : $body.auto_follow_stats.number_of_failed_follow_indices/]
|
// TESTRESPONSE[s/"number_of_failed_follow_indices" : 0/"number_of_failed_follow_indices" : $body.auto_follow_stats.number_of_failed_follow_indices/]
|
||||||
// TESTRESPONSE[s/"number_of_failed_remote_cluster_state_requests" : 0/"number_of_failed_remote_cluster_state_requests" : $body.auto_follow_stats.number_of_failed_remote_cluster_state_requests/]
|
// TESTRESPONSE[s/"number_of_failed_remote_cluster_state_requests" : 0/"number_of_failed_remote_cluster_state_requests" : $body.auto_follow_stats.number_of_failed_remote_cluster_state_requests/]
|
||||||
// TESTRESPONSE[s/"number_of_successful_follow_indices" : 1/"number_of_successful_follow_indices" : $body.auto_follow_stats.number_of_successful_follow_indices/]
|
// TESTRESPONSE[s/"number_of_successful_follow_indices" : 1/"number_of_successful_follow_indices" : $body.auto_follow_stats.number_of_successful_follow_indices/]
|
||||||
|
|
|
@ -54,6 +54,7 @@
|
||||||
ccr.follow_stats:
|
ccr.follow_stats:
|
||||||
index: bar
|
index: bar
|
||||||
- match: { indices.0.index: "bar" }
|
- match: { indices.0.index: "bar" }
|
||||||
|
- match: { indices.0.total_global_checkpoint_lag: 0 }
|
||||||
- match: { indices.0.shards.0.leader_index: "foo" }
|
- match: { indices.0.shards.0.leader_index: "foo" }
|
||||||
- match: { indices.0.shards.0.follower_index: "bar" }
|
- match: { indices.0.shards.0.follower_index: "bar" }
|
||||||
- match: { indices.0.shards.0.shard_id: 0 }
|
- match: { indices.0.shards.0.shard_id: 0 }
|
||||||
|
|
|
@ -92,7 +92,10 @@ public class FollowStatsAction extends ActionType<FollowStatsAction.StatsRespons
|
||||||
taskResponsesByIndex.entrySet().iterator(),
|
taskResponsesByIndex.entrySet().iterator(),
|
||||||
indexEntry -> Iterators.concat(
|
indexEntry -> Iterators.concat(
|
||||||
Iterators.<ToXContent>single(
|
Iterators.<ToXContent>single(
|
||||||
(builder, params) -> builder.startObject().field("index", indexEntry.getKey()).startArray("shards")
|
(builder, params) -> builder.startObject()
|
||||||
|
.field("index", indexEntry.getKey())
|
||||||
|
.field("total_global_checkpoint_lag", calcFollowerToLeaderLaggingOps(indexEntry.getValue()))
|
||||||
|
.startArray("shards")
|
||||||
),
|
),
|
||||||
indexEntry.getValue().values().iterator(),
|
indexEntry.getValue().values().iterator(),
|
||||||
Iterators.single((builder, params) -> builder.endArray().endObject())
|
Iterators.single((builder, params) -> builder.endArray().endObject())
|
||||||
|
@ -102,6 +105,14 @@ public class FollowStatsAction extends ActionType<FollowStatsAction.StatsRespons
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static long calcFollowerToLeaderLaggingOps(Map<Integer, StatsResponse> followShardTaskStats) {
|
||||||
|
return followShardTaskStats.values()
|
||||||
|
.stream()
|
||||||
|
.map(StatsResponse::status)
|
||||||
|
.mapToLong(s -> s.leaderGlobalCheckpoint() - s.followerGlobalCheckpoint())
|
||||||
|
.sum();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean equals(Object o) {
|
public boolean equals(Object o) {
|
||||||
if (this == o) return true;
|
if (this == o) return true;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue