[role="xpack"]
[testenv="platinum"]
[[ccr-post-forget-follower]]
=== Forget Follower API
++++
Forget Follower
++++
Removes the follower retention leases from the leader.
==== Description
A following index takes out retention leases on its leader index. These
retention leases are used to increase the likelihood that the shards of the
leader index retain the history of operations that the shards of the following
index need to execute replication. When a follower index is converted to a
regular index via the <> (either via explicit
execution of this API, or implicitly via {ilm}), these retention leases are
removed. However, removing these retention leases can fail (e.g., if the remote
cluster containing the leader index is unavailable). While these retention
leases will eventually expire on their own, their extended existence can cause
the leader index to hold more history than necessary, and prevent {ilm} from
performing some operations on the leader index. This API exists to enable
manually removing these retention leases when the unfollow API was unable to do
so.
NOTE: This API does not stop replication by a following index. If you use this
API targeting a follower index that is still actively following, the following
index will add back retention leases on the leader. The only purpose of this API
is to handle the case of failure to remove the following retention leases after
the <> is invoked.
==== Request
//////////////////////////
[source,js]
--------------------------------------------------
PUT /follower_index/_ccr/follow?wait_for_active_shards=1
{
"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]
--------------------------------------------------
POST //_ccr/forget_follower
{
"follower_cluster" : "",
"follower_index" : "",
"follower_index_uuid" : "",
"leader_remote_cluster" : ""
}
--------------------------------------------------
// CONSOLE
// TEST[s//leader_index/]
// TEST[s//follower_cluster/]
// TEST[s//follower_index/]
// TEST[s//follower_index_uuid/]
// TEST[s//leader_remote_cluster/]
// TEST[skip_shard_failures]
[source,js]
--------------------------------------------------
{
"_shards" : {
"total" : 1,
"successful" : 1,
"failed" : 0,
"failures" : [ ]
}
}
--------------------------------------------------
// TESTRESPONSE[s/"total" : 1/"total" : $body._shards.total/]
// TESTRESPONSE[s/"successful" : 1/"successful" : $body._shards.successful/]
// TESTRESPONSE[s/"failed" : 0/"failed" : $body._shards.failed/]
// TESTRESPONSE[s/"failures" : \[ \]/"failures" : $body._shards.failures/]
==== Path Parameters
`leader_index` (required)::
(string) the name of the leader index
==== Request Body
`follower_cluster` (required)::
(string) the name of the cluster containing the follower index
`follower_index` (required)::
(string) the name of the follower index
`follower_index_uuid` (required)::
(string) the UUID of the follower index
`leader_remote_cluster` (required)::
(string) the alias (from the perspective of the cluster containing the
follower index) of the <> containing
the leader index
==== Authorization
If the {es} {security-features} are enabled, you must have `manage_leader_index`
index privileges for the leader index. For more information, see
{stack-ov}/security-privileges.html[Security privileges].
==== Example
This example removes the follower retention leases for `follower_index` from
`leader_index`.
[source,js]
--------------------------------------------------
POST /leader_index/_ccr/forget_follower
{
"follower_cluster" : "follower_cluster",
"follower_index" : "follower_index",
"follower_index_uuid" : "vYpnaWPRQB6mNspmoCeYyA",
"leader_remote_cluster" : "leader_cluster"
}
--------------------------------------------------
// CONSOLE
// TEST[skip_shard_failures]
The API returns the following result:
[source,js]
--------------------------------------------------
{
"_shards" : {
"total" : 1,
"successful" : 1,
"failed" : 0,
"failures" : [ ]
}
}
--------------------------------------------------
// TESTRESPONSE[s/"total" : 1/"total" : $body._shards.total/]
// TESTRESPONSE[s/"successful" : 1/"successful" : $body._shards.successful/]
// TESTRESPONSE[s/"failed" : 0/"failed" : $body._shards.failed/]
// TESTRESPONSE[s/"failures" : \[ \]/"failures" : $body._shards.failures/]