2014-02-18 17:28:49 -05:00
|
|
|
[[indices-recovery]]
|
|
|
|
== Indices Recovery
|
|
|
|
|
2014-05-13 16:04:48 -04:00
|
|
|
The indices recovery API provides insight into on-going index shard recoveries.
|
2014-02-18 17:28:49 -05:00
|
|
|
Recovery status may be reported for specific indices, or cluster-wide.
|
|
|
|
|
|
|
|
For example, the following command would show recovery information for the indices "index1" and "index2".
|
|
|
|
|
|
|
|
[source,js]
|
|
|
|
--------------------------------------------------
|
2016-09-01 13:05:22 -04:00
|
|
|
GET index1,index2/_recovery?human
|
2014-02-18 17:28:49 -05:00
|
|
|
--------------------------------------------------
|
2016-09-01 13:05:22 -04:00
|
|
|
// CONSOLE
|
|
|
|
// TEST[s/^/PUT index1\nPUT index2\n/]
|
2014-02-18 17:28:49 -05:00
|
|
|
|
|
|
|
To see cluster-wide recovery status simply leave out the index names.
|
|
|
|
|
2017-08-28 05:23:09 -04:00
|
|
|
//////////////////////////
|
|
|
|
|
|
|
|
Here we create a repository and snapshot index1 in
|
|
|
|
order to restore it right after and prints out the
|
|
|
|
indices recovery result.
|
|
|
|
|
|
|
|
[source,js]
|
|
|
|
--------------------------------------------------
|
|
|
|
# create the index
|
|
|
|
PUT index1
|
|
|
|
{"settings": {"index.number_of_shards": 1}}
|
|
|
|
|
|
|
|
# create the repository
|
|
|
|
PUT /_snapshot/my_repository
|
|
|
|
{"type": "fs","settings": {"location": "recovery_asciidoc" }}
|
|
|
|
|
|
|
|
# snapshot the index
|
|
|
|
PUT /_snapshot/my_repository/snap_1?wait_for_completion=true
|
|
|
|
|
|
|
|
# delete the index
|
|
|
|
DELETE index1
|
|
|
|
|
|
|
|
# and restore the snapshot
|
|
|
|
POST /_snapshot/my_repository/snap_1/_restore?wait_for_completion=true
|
|
|
|
|
|
|
|
--------------------------------------------------
|
|
|
|
// CONSOLE
|
|
|
|
|
|
|
|
[source,js]
|
|
|
|
--------------------------------------------------
|
|
|
|
{
|
|
|
|
"snapshot": {
|
|
|
|
"snapshot": "snap_1",
|
|
|
|
"indices": [
|
|
|
|
"index1"
|
|
|
|
],
|
|
|
|
"shards": {
|
|
|
|
"total": 1,
|
|
|
|
"failed": 0,
|
|
|
|
"successful": 1
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
--------------------------------------------------
|
|
|
|
// TESTRESPONSE
|
|
|
|
|
|
|
|
//////////////////////////
|
|
|
|
|
2014-02-18 17:28:49 -05:00
|
|
|
[source,js]
|
|
|
|
--------------------------------------------------
|
2016-09-01 13:05:22 -04:00
|
|
|
GET /_recovery?human
|
2014-02-18 17:28:49 -05:00
|
|
|
--------------------------------------------------
|
2016-09-01 13:05:22 -04:00
|
|
|
// CONSOLE
|
2017-08-28 05:23:09 -04:00
|
|
|
// TEST[continued]
|
2014-02-18 17:28:49 -05:00
|
|
|
|
|
|
|
Response:
|
|
|
|
[source,js]
|
|
|
|
--------------------------------------------------
|
|
|
|
{
|
|
|
|
"index1" : {
|
|
|
|
"shards" : [ {
|
|
|
|
"id" : 0,
|
2015-02-10 02:54:03 -05:00
|
|
|
"type" : "SNAPSHOT",
|
|
|
|
"stage" : "INDEX",
|
2014-02-18 17:28:49 -05:00
|
|
|
"primary" : true,
|
|
|
|
"start_time" : "2014-02-24T12:15:59.716",
|
2015-02-10 02:54:03 -05:00
|
|
|
"start_time_in_millis": 1393244159716,
|
2017-08-28 05:23:09 -04:00
|
|
|
"stop_time" : "0s",
|
|
|
|
"stop_time_in_millis" : 0,
|
2016-09-01 13:05:22 -04:00
|
|
|
"total_time" : "2.9m",
|
2014-02-18 17:28:49 -05:00
|
|
|
"total_time_in_millis" : 175576,
|
|
|
|
"source" : {
|
|
|
|
"repository" : "my_repository",
|
|
|
|
"snapshot" : "my_snapshot",
|
2017-08-28 05:23:09 -04:00
|
|
|
"index" : "index1",
|
|
|
|
"version" : "{version}"
|
2014-02-18 17:28:49 -05:00
|
|
|
},
|
|
|
|
"target" : {
|
|
|
|
"id" : "ryqJ5lO5S4-lSFbGntkEkg",
|
2017-08-28 05:23:09 -04:00
|
|
|
"host" : "my.fqdn",
|
|
|
|
"transport_address" : "my.fqdn",
|
2014-02-18 17:28:49 -05:00
|
|
|
"ip" : "10.0.1.7",
|
|
|
|
"name" : "my_es_node"
|
|
|
|
},
|
|
|
|
"index" : {
|
2015-02-10 02:54:03 -05:00
|
|
|
"size" : {
|
2016-09-01 13:05:22 -04:00
|
|
|
"total" : "75.4mb",
|
2015-02-10 02:54:03 -05:00
|
|
|
"total_in_bytes" : 79063092,
|
|
|
|
"reused" : "0b",
|
|
|
|
"reused_in_bytes" : 0,
|
|
|
|
"recovered" : "65.7mb",
|
|
|
|
"recovered_in_bytes" : 68891939,
|
|
|
|
"percent" : "87.1%"
|
|
|
|
},
|
2014-02-18 17:28:49 -05:00
|
|
|
"files" : {
|
|
|
|
"total" : 73,
|
|
|
|
"reused" : 0,
|
|
|
|
"recovered" : 69,
|
|
|
|
"percent" : "94.5%"
|
|
|
|
},
|
2015-02-10 02:54:03 -05:00
|
|
|
"total_time" : "0s",
|
2017-08-28 05:23:09 -04:00
|
|
|
"total_time_in_millis" : 0,
|
|
|
|
"source_throttle_time" : "0s",
|
|
|
|
"source_throttle_time_in_millis" : 0,
|
|
|
|
"target_throttle_time" : "0s",
|
|
|
|
"target_throttle_time_in_millis" : 0
|
2014-02-18 17:28:49 -05:00
|
|
|
},
|
|
|
|
"translog" : {
|
|
|
|
"recovered" : 0,
|
2015-03-07 10:50:32 -05:00
|
|
|
"total" : 0,
|
|
|
|
"percent" : "100.0%",
|
|
|
|
"total_on_start" : 0,
|
2015-02-10 02:54:03 -05:00
|
|
|
"total_time" : "0s",
|
2016-09-01 13:05:22 -04:00
|
|
|
"total_time_in_millis" : 0,
|
2014-02-18 17:28:49 -05:00
|
|
|
},
|
2017-08-28 05:23:09 -04:00
|
|
|
"verify_index" : {
|
2015-02-10 02:54:03 -05:00
|
|
|
"check_index_time" : "0s",
|
|
|
|
"check_index_time_in_millis" : 0,
|
|
|
|
"total_time" : "0s",
|
2014-02-18 17:28:49 -05:00
|
|
|
"total_time_in_millis" : 0
|
|
|
|
}
|
|
|
|
} ]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
--------------------------------------------------
|
2017-08-28 05:23:09 -04:00
|
|
|
// TESTRESPONSE[s/: (\-)?[0-9]+/: $body.$_path/]
|
|
|
|
// TESTRESPONSE[s/: "[^"]*"/: $body.$_path/]
|
|
|
|
////
|
|
|
|
The TESTRESPONSE above replace all the fields values by the expected ones in the test,
|
|
|
|
because we don't really care about the field values but we want to check the fields names.
|
|
|
|
////
|
2014-02-18 17:28:49 -05:00
|
|
|
|
|
|
|
The above response shows a single index recovering a single shard. In this case, the source of the recovery is a snapshot repository
|
|
|
|
and the target of the recovery is the node with name "my_es_node".
|
|
|
|
|
|
|
|
Additionally, the output shows the number and percent of files recovered, as well as the number and percent of bytes recovered.
|
|
|
|
|
|
|
|
In some cases a higher level of detail may be preferable. Setting "detailed=true" will present a list of physical files in recovery.
|
|
|
|
|
|
|
|
[source,js]
|
|
|
|
--------------------------------------------------
|
2016-09-01 13:05:22 -04:00
|
|
|
GET _recovery?human&detailed=true
|
2014-02-18 17:28:49 -05:00
|
|
|
--------------------------------------------------
|
2017-08-28 05:23:09 -04:00
|
|
|
// CONSOLE
|
|
|
|
// TEST[s/^/PUT index1\n{"settings": {"index.number_of_shards": 1}}\n/]
|
2014-02-18 17:28:49 -05:00
|
|
|
|
|
|
|
Response:
|
|
|
|
|
|
|
|
[source,js]
|
|
|
|
--------------------------------------------------
|
|
|
|
{
|
|
|
|
"index1" : {
|
|
|
|
"shards" : [ {
|
|
|
|
"id" : 0,
|
2015-06-23 16:10:55 -04:00
|
|
|
"type" : "STORE",
|
2015-02-10 02:54:03 -05:00
|
|
|
"stage" : "DONE",
|
2014-02-18 17:28:49 -05:00
|
|
|
"primary" : true,
|
|
|
|
"start_time" : "2014-02-24T12:38:06.349",
|
2015-02-10 02:54:03 -05:00
|
|
|
"start_time_in_millis" : "1393245486349",
|
2014-02-18 17:28:49 -05:00
|
|
|
"stop_time" : "2014-02-24T12:38:08.464",
|
2015-02-10 02:54:03 -05:00
|
|
|
"stop_time_in_millis" : "1393245488464",
|
|
|
|
"total_time" : "2.1s",
|
2014-02-18 17:28:49 -05:00
|
|
|
"total_time_in_millis" : 2115,
|
|
|
|
"source" : {
|
|
|
|
"id" : "RGMdRc-yQWWKIBM4DGvwqQ",
|
2017-08-28 05:23:09 -04:00
|
|
|
"host" : "my.fqdn",
|
|
|
|
"transport_address" : "my.fqdn",
|
2014-02-18 17:28:49 -05:00
|
|
|
"ip" : "10.0.1.7",
|
|
|
|
"name" : "my_es_node"
|
|
|
|
},
|
|
|
|
"target" : {
|
|
|
|
"id" : "RGMdRc-yQWWKIBM4DGvwqQ",
|
2017-08-28 05:23:09 -04:00
|
|
|
"host" : "my.fqdn",
|
|
|
|
"transport_address" : "my.fqdn",
|
2014-02-18 17:28:49 -05:00
|
|
|
"ip" : "10.0.1.7",
|
|
|
|
"name" : "my_es_node"
|
|
|
|
},
|
|
|
|
"index" : {
|
2015-02-10 02:54:03 -05:00
|
|
|
"size" : {
|
|
|
|
"total" : "24.7mb",
|
|
|
|
"total_in_bytes" : 26001617,
|
|
|
|
"reused" : "24.7mb",
|
|
|
|
"reused_in_bytes" : 26001617,
|
|
|
|
"recovered" : "0b",
|
|
|
|
"recovered_in_bytes" : 0,
|
|
|
|
"percent" : "100.0%"
|
|
|
|
},
|
2014-02-18 17:28:49 -05:00
|
|
|
"files" : {
|
|
|
|
"total" : 26,
|
|
|
|
"reused" : 26,
|
2015-02-10 02:54:03 -05:00
|
|
|
"recovered" : 0,
|
2014-02-18 17:28:49 -05:00
|
|
|
"percent" : "100.0%",
|
|
|
|
"details" : [ {
|
|
|
|
"name" : "segments.gen",
|
|
|
|
"length" : 20,
|
|
|
|
"recovered" : 20
|
|
|
|
}, {
|
|
|
|
"name" : "_0.cfs",
|
|
|
|
"length" : 135306,
|
|
|
|
"recovered" : 135306
|
|
|
|
}, {
|
|
|
|
"name" : "segments_2",
|
|
|
|
"length" : 251,
|
|
|
|
"recovered" : 251
|
2017-08-28 05:23:09 -04:00
|
|
|
}
|
2014-02-18 17:28:49 -05:00
|
|
|
]
|
|
|
|
},
|
2015-02-10 02:54:03 -05:00
|
|
|
"total_time" : "2ms",
|
2017-08-28 05:23:09 -04:00
|
|
|
"total_time_in_millis" : 2,
|
|
|
|
"source_throttle_time" : "0s",
|
|
|
|
"source_throttle_time_in_millis" : 0,
|
|
|
|
"target_throttle_time" : "0s",
|
|
|
|
"target_throttle_time_in_millis" : 0
|
2014-02-18 17:28:49 -05:00
|
|
|
},
|
|
|
|
"translog" : {
|
|
|
|
"recovered" : 71,
|
2017-08-28 05:23:09 -04:00
|
|
|
"total" : 0,
|
|
|
|
"percent" : "100.0%",
|
|
|
|
"total_on_start" : 0,
|
2015-02-10 02:54:03 -05:00
|
|
|
"total_time" : "2.0s",
|
2014-02-18 17:28:49 -05:00
|
|
|
"total_time_in_millis" : 2025
|
|
|
|
},
|
2017-08-28 05:23:09 -04:00
|
|
|
"verify_index" : {
|
2014-02-18 17:28:49 -05:00
|
|
|
"check_index_time" : 0,
|
2017-08-28 05:23:09 -04:00
|
|
|
"check_index_time_in_millis" : 0,
|
2015-02-10 02:54:03 -05:00
|
|
|
"total_time" : "88ms",
|
2014-02-18 17:28:49 -05:00
|
|
|
"total_time_in_millis" : 88
|
|
|
|
}
|
|
|
|
} ]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
--------------------------------------------------
|
2017-08-28 05:23:09 -04:00
|
|
|
// TESTRESPONSE[s/"source" : \{[^}]*\}/"source" : $body.$_path/]
|
|
|
|
// TESTRESPONSE[s/"details" : \[[^\]]*\]//]
|
|
|
|
// TESTRESPONSE[s/: (\-)?[0-9]+/: $body.$_path/]
|
|
|
|
// TESTRESPONSE[s/: "[^"]*"/: $body.$_path/]
|
|
|
|
////
|
|
|
|
The TESTRESPONSE above replace all the fields values by the expected ones in the test,
|
|
|
|
because we don't really care about the field values but we want to check the fields names.
|
|
|
|
It also removes the "details" part which is important in this doc but really hard to test.
|
|
|
|
////
|
2014-02-18 17:28:49 -05:00
|
|
|
|
|
|
|
This response shows a detailed listing (truncated for brevity) of the actual files recovered and their sizes.
|
|
|
|
|
|
|
|
Also shown are the timings in milliseconds of the various stages of recovery: index retrieval, translog replay, and index start time.
|
|
|
|
|
|
|
|
Note that the above listing indicates that the recovery is in stage "done". All recoveries, whether on-going or complete, are kept in
|
|
|
|
cluster state and may be reported on at any time. Setting "active_only=true" will cause only on-going recoveries to be reported.
|
|
|
|
|
|
|
|
Here is a complete list of options:
|
|
|
|
|
|
|
|
[horizontal]
|
|
|
|
`detailed`:: Display a detailed view. This is primarily useful for viewing the recovery of physical index files. Default: false.
|
|
|
|
`active_only`:: Display only those recoveries that are currently on-going. Default: false.
|
|
|
|
|
|
|
|
Description of output fields:
|
|
|
|
|
|
|
|
[horizontal]
|
|
|
|
`id`:: Shard ID
|
|
|
|
`type`:: Recovery type:
|
2015-06-23 16:10:55 -04:00
|
|
|
* store
|
2014-02-18 17:28:49 -05:00
|
|
|
* snapshot
|
|
|
|
* replica
|
|
|
|
* relocating
|
|
|
|
`stage`:: Recovery stage:
|
|
|
|
* init: Recovery has not started
|
|
|
|
* index: Reading index meta-data and copying bytes from source to destination
|
|
|
|
* start: Starting the engine; opening the index for use
|
|
|
|
* translog: Replaying transaction log
|
|
|
|
* finalize: Cleanup
|
|
|
|
* done: Complete
|
|
|
|
`primary`:: True if shard is primary, false otherwise
|
|
|
|
`start_time`:: Timestamp of recovery start
|
|
|
|
`stop_time`:: Timestamp of recovery finish
|
|
|
|
`total_time_in_millis`:: Total time to recover shard in milliseconds
|
|
|
|
`source`:: Recovery source:
|
|
|
|
* repository description if recovery is from a snapshot
|
|
|
|
* description of source node otherwise
|
|
|
|
`target`:: Destination node
|
|
|
|
`index`:: Statistics about physical index recovery
|
|
|
|
`translog`:: Statistics about translog recovery
|
|
|
|
`start`:: Statistics about time to open and start the index
|