OpenSearch/x-pack/plugin
Armin Braun 2dd086445c
Enable Fully Concurrent Snapshot Operations (#56911) (#59578)
Enables fully concurrent snapshot operations:
* Snapshot create- and delete operations can be started in any order
* Delete operations wait for snapshot finalization to finish, are batched as much as possible to improve efficiency and once enqueued in the cluster state prevent new snapshots from starting on data nodes until executed
   * We could be even more concurrent here in a follow-up by interleaving deletes and snapshots on a per-shard level. I decided not to do this for now since it seemed not worth the added complexity yet. Due to batching+deduplicating of deletes the pain of having a delete stuck behind a long -running snapshot seemed manageable (dropped client connections + resulting retries don't cause issues due to deduplication of delete jobs, batching of deletes allows enqueuing more and more deletes even if a snapshot blocks for a long time that will all be executed in essentially constant time (due to bulk snapshot deletion, deleting multiple snapshots is mostly about as fast as deleting a single one))
* Snapshot creation is completely concurrent across shards, but per shard snapshots are linearized for each repository as are snapshot finalizations

See updated JavaDoc and added test cases for more details and illustration on the functionality.

Some notes:

The queuing of snapshot finalizations and deletes and the related locking/synchronization is a little awkward in this version but can be much simplified with some refactoring.  The problem is that snapshot finalizations resolve their listeners on the `SNAPSHOT` pool while deletes resolve the listener on the master update thread. With some refactoring both of these could be moved to the master update thread, effectively removing the need for any synchronization around the `SnapshotService` state. I didn't do this refactoring here because it's a fairly large change and not necessary for the functionality but plan to do so in a follow-up.

This change allows for completely removing any trickery around synchronizing deletes and snapshots from SLM and 100% does away with SLM errors from collisions between deletes and snapshots.

Snapshotting a single index in parallel to a long running full backup will execute without having to wait for the long running backup as required by the ILM/SLM use case of moving indices to "snapshot tier". Finalizations are linearized but ordered according to which snapshot saw all of its shards complete first
2020-07-15 03:42:31 +02:00
..
analytics [7.x] Histogram integration on Histogram field type (#59431) 2020-07-13 19:36:33 +03:00
async [7.x] EQL: Adds an ability to execute an asynchronous EQL search (#58192) 2020-06-25 14:11:57 -04:00
async-search Improve cardinality measure used to build aggs (#56533) (#59107) 2020-07-08 08:42:23 -04:00
autoscaling 7.x - Create plugin for yamlTest task (#56841) (#59090) 2020-07-06 14:16:26 -05:00
ccr Enable Fully Concurrent Snapshot Operations (#56911) (#59578) 2020-07-15 03:42:31 +02:00
core Simplify Repository.finalizeSnapshot Signature (#58834) (#59574) 2020-07-15 00:14:28 +02:00
data-streams Remove data stream feature flag (#59572) 2020-07-14 23:50:41 +02:00
deprecation [7.x] Add include_data_streams flag for authorization (#59008) 2020-07-03 12:58:39 -05:00
enrich Add Support in geo_match enrichment policy for any type of geometry (#59276) 2020-07-09 11:41:41 +02:00
eql EQL: Improve retrieval of results (#59552) 2020-07-14 23:53:57 +03:00
frozen-indices MappedFieldType should not extend FieldType (#58160) 2020-06-16 16:56:43 +01:00
graph 7.x - Create plugin for yamlTest task (#56841) (#59090) 2020-07-06 14:16:26 -05:00
identity-provider Treat roles as a SortedSet (#58988) 2020-07-03 13:40:58 +10:00
ilm Enable Fully Concurrent Snapshot Operations (#56911) (#59578) 2020-07-15 03:42:31 +02:00
logstash Remove deprecated usage of testCompile configuration (#57921) (#58083) 2020-06-14 22:30:44 +02:00
mapper-constant-keyword MappedFieldType no longer requires equals/hashCode/clone (#59212) 2020-07-09 21:05:10 +01:00
mapper-flattened MappedFieldType no longer requires equals/hashCode/clone (#59212) 2020-07-09 21:05:10 +01:00
ml Remove data stream feature flag (#59572) 2020-07-14 23:50:41 +02:00
monitoring Adding indexing pressure stats to node stats API (#59467) 2020-07-13 17:23:42 -06:00
ql EQL: Obey size request parameter (#59014) 2020-07-06 19:14:25 +03:00
rollup Data stream support for rollup search 2020-07-10 11:13:34 -05:00
search-business-rules Unify dependency licenses task configuration (#58116) (#58274) 2020-06-18 08:15:50 +02:00
searchable-snapshots Mute testMaxRestoreBytesPerSecIsUsed (#59289) 2020-07-09 12:52:17 +02:00
security Add license feature usage api (#59342) (#59571) 2020-07-14 14:34:59 -07:00
spatial MappedFieldType no longer requires equals/hashCode/clone (#59212) 2020-07-09 21:05:10 +01:00
sql Add sample versions of standard deviation and variance funcs (#59093) (#59274) 2020-07-09 10:17:13 +02:00
src/test [7.x] Data Stream Stats API (#58707) (#59566) 2020-07-14 16:57:46 -04:00
stack [7.9] GET data stream API returns additional information (#59128) (#59177) 2020-07-07 20:30:09 +01:00
transform Remove data stream feature flag (#59572) 2020-07-14 23:50:41 +02:00
vectors Remove test backported in error 2020-07-09 21:45:41 +01:00
voting-only-node Introduce node.roles setting (#58512) 2020-06-25 14:14:51 -04:00
watcher 7.x - Create plugin for yamlTest task (#56841) (#59090) 2020-07-06 14:16:26 -05:00
wildcard MappedFieldType no longer requires equals/hashCode/clone (#59212) 2020-07-09 21:05:10 +01:00
build.gradle 7.x - Create plugin for yamlTest task (#56841) (#59090) 2020-07-06 14:16:26 -05:00