-
Notifications
You must be signed in to change notification settings - Fork 1.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add wait_for_completion parameter to resize, open, and forcemerge APIs (#6228) #6434
Changes from 8 commits
79e67ef
0ab3886
56fa2a1
5bfd8e5
eceb40f
b8fcdd7
e727d64
db39bd4
c4c4add
fbefce6
286faf2
c7eab0f
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
--- | ||
"Clone index with wait_for_completion": | ||
# clone index with wait_for_completion parameter, when the parameter is set to false, the API | ||
# will return a task immediately and the clone operation will run in background. | ||
|
||
- skip: | ||
version: " - 2.9.99" | ||
reason: "only available in 3.0+" | ||
features: allowed_warnings | ||
|
||
- do: | ||
nodes.info: | ||
node_id: data:true | ||
- set: | ||
nodes._arbitrary_key_: node_id | ||
|
||
- do: | ||
indices.create: | ||
index: source | ||
wait_for_active_shards: 1 | ||
body: | ||
settings: | ||
# ensure everything is allocated on the same data node | ||
index.routing.allocation.include._id: $node_id | ||
index.number_of_shards: 1 | ||
index.number_of_replicas: 0 | ||
- do: | ||
index: | ||
index: source | ||
id: "1" | ||
body: { "foo": "hello world" } | ||
|
||
- do: | ||
get: | ||
index: source | ||
id: "1" | ||
|
||
- match: { _index: source } | ||
- match: { _id: "1" } | ||
- match: { _source: { foo: "hello world" } } | ||
|
||
# make it read-only | ||
- do: | ||
indices.put_settings: | ||
index: source | ||
body: | ||
index.blocks.write: true | ||
index.number_of_replicas: 0 | ||
|
||
- do: | ||
cluster.health: | ||
wait_for_status: green | ||
index: source | ||
|
||
# clone with wait_for_completion | ||
- do: | ||
indices.clone: | ||
index: "source" | ||
target: "new_cloned_index" | ||
wait_for_active_shards: 1 | ||
cluster_manager_timeout: 10s | ||
wait_for_completion: false | ||
task_execution_timeout: 30s | ||
body: | ||
settings: | ||
index.number_of_shards: 1 | ||
"index.number_of_replicas": 0 | ||
|
||
- match: { task: /^.+$/ } | ||
- set: { task: taskId } | ||
|
||
- do: | ||
tasks.get: | ||
wait_for_completion: true | ||
task_id: $taskId | ||
- match: { task.action: "indices:admin/resize" } | ||
- match: { task.description: "clone from [source] to [new_cloned_index]" } | ||
|
||
# .tasks index is created when the clone index operation completes, so we should delete .tasks index finally, | ||
# if not, the .tasks index may introduce unexpected warnings and then cause other test cases to fail. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Is this the first time we've encountered this problem in the rest-api-spec tests? Are there no tests here for the other APIs that currently use the .tasks index? I understand why you're doing this but I don't love having to manually clean up a side effect like this. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think it's the first time we encounter this problem, currently the |
||
# Delete the .tasks index directly will also introduce warning, but currently we don't have such APIs which can delete one | ||
# specified task or clear all completed tasks, so we have to do so. Expect we can introduce more tasks related APIs in future | ||
- do: | ||
allowed_warnings: | ||
- "this request accesses system indices: [.tasks], but in a future major version, direct access to system indices will be prevented by default" | ||
indices.delete: | ||
index: .tasks | ||
ignore_unavailable: true |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
--- | ||
"Force merge index with wait_for_completion": | ||
# force merge index with wait_for_completion parameter, when the parameter is set to false, the API | ||
# will return a task immediately and the merge process will run in background. | ||
|
||
- skip: | ||
version: " - 2.9.99" | ||
reason: "only available in 3.0+" | ||
features: allowed_warnings | ||
|
||
- do: | ||
indices.create: | ||
index: test_index | ||
|
||
- do: | ||
indices.forcemerge: | ||
index: test_index | ||
wait_for_completion: false | ||
max_num_segments: 1 | ||
- match: { task: /^.+$/ } | ||
- set: { task: taskId } | ||
|
||
- do: | ||
tasks.get: | ||
wait_for_completion: true | ||
task_id: $taskId | ||
- match: { task.action: "indices:admin/forcemerge" } | ||
- match: { task.description: "Force-merge indices [test_index], maxSegments[1], onlyExpungeDeletes[false], flush[true]" } | ||
|
||
# .tasks index is created when the force-merge operation completes, so we should delete .tasks index finally, | ||
# if not, the .tasks index may introduce unexpected warnings and then cause other test cases to fail. | ||
# Delete the .tasks index directly will also introduce warning, but currently we don't have such APIs which can delete one | ||
# specified task or clear all completed tasks, so we have to do so. Expect we can introduce more tasks related APIs in future | ||
- do: | ||
allowed_warnings: | ||
- "this request accesses system indices: [.tasks], but in a future major version, direct access to system indices will be prevented by default" | ||
indices.delete: | ||
index: .tasks | ||
ignore_unavailable: true |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
--- | ||
"Open index with wait_for_completion": | ||
# open index with wait_for_completion parameter, when the parameter is set to false, the API | ||
# will return a task immediately and the open operation will run in background. | ||
|
||
- skip: | ||
version: " - 2.9.99" | ||
reason: "only available in 3.0+" | ||
features: allowed_warnings | ||
|
||
- do: | ||
indices.create: | ||
index: test_index | ||
body: | ||
settings: | ||
number_of_replicas: 0 | ||
number_of_shards: 1 | ||
|
||
- do: | ||
indices.close: | ||
index: test_index | ||
- is_true: acknowledged | ||
|
||
- do: | ||
indices.open: | ||
index: test_index | ||
wait_for_active_shards: all | ||
cluster_manager_timeout: 10s | ||
wait_for_completion: false | ||
task_execution_timeout: 30s | ||
- match: { task: /^.+$/ } | ||
- set: { task: taskId } | ||
|
||
- do: | ||
tasks.get: | ||
wait_for_completion: true | ||
task_id: $taskId | ||
- match: { task.action: "indices:admin/open" } | ||
- match: { task.description: "open indices [test_index]" } | ||
|
||
# .tasks index is created when the open index operation completes, so we should delete .tasks index finally, | ||
# if not, the .tasks index may introduce unexpected warnings and then cause other test cases to fail. | ||
# Delete the .tasks index directly will also introduce warning, but currently we don't have such APIs which can delete one | ||
# specified task or clear all completed tasks, so we have to do so. Expect we can introduce more tasks related APIs in future | ||
- do: | ||
allowed_warnings: | ||
- "this request accesses system indices: [.tasks], but in a future major version, direct access to system indices will be prevented by default" | ||
indices.delete: | ||
index: .tasks | ||
ignore_unavailable: true |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
--- | ||
"Shrink index with wait_for_completion": | ||
# shrink index with wait_for_completion parameter, when the parameter is set to false, the API | ||
# will return a task immediately and the shrink operation will run in background. | ||
|
||
- skip: | ||
version: " - 2.9.99" | ||
reason: "only available in 3.0+" | ||
features: allowed_warnings | ||
|
||
- do: | ||
nodes.info: | ||
node_id: data:true | ||
- set: | ||
nodes._arbitrary_key_: node_id | ||
|
||
- do: | ||
indices.create: | ||
index: source | ||
wait_for_active_shards: 1 | ||
body: | ||
settings: | ||
# ensure everything is allocated on the same data node | ||
index.routing.allocation.include._id: $node_id | ||
index.number_of_shards: 3 | ||
index.number_of_replicas: 0 | ||
- do: | ||
index: | ||
index: source | ||
id: "1" | ||
body: { "foo": "hello world" } | ||
|
||
- do: | ||
get: | ||
index: source | ||
id: "1" | ||
|
||
- match: { _index: source } | ||
- match: { _id: "1" } | ||
- match: { _source: { foo: "hello world" } } | ||
|
||
# make it read-only | ||
- do: | ||
indices.put_settings: | ||
index: source | ||
body: | ||
index.blocks.write: true | ||
index.number_of_replicas: 0 | ||
|
||
- do: | ||
cluster.health: | ||
wait_for_status: green | ||
index: source | ||
|
||
# shrink with wait_for_completion | ||
- do: | ||
indices.shrink: | ||
index: "source" | ||
target: "new_shrunken_index" | ||
wait_for_active_shards: 1 | ||
cluster_manager_timeout: 10s | ||
wait_for_completion: false | ||
task_execution_timeout: 30s | ||
body: | ||
settings: | ||
index.number_of_shards: 1 | ||
"index.number_of_replicas": 0 | ||
|
||
- match: { task: /^.+$/ } | ||
- set: { task: taskId } | ||
|
||
- do: | ||
tasks.get: | ||
wait_for_completion: true | ||
task_id: $taskId | ||
- match: { task.action: "indices:admin/resize" } | ||
- match: { task.description: "shrink from [source] to [new_shrunken_index]" } | ||
|
||
# .tasks index is created when the shrink index operation completes, so we should delete .tasks index finally, | ||
# if not, the .tasks index may introduce unexpected warnings and then cause other test cases to fail. | ||
# Delete the .tasks index directly will also introduce warning, but currently we don't have such APIs which can delete one | ||
# specified task or clear all completed tasks, so we have to do so. Expect we can introduce more tasks related APIs in future | ||
- do: | ||
allowed_warnings: | ||
- "this request accesses system indices: [.tasks], but in a future major version, direct access to system indices will be prevented by default" | ||
indices.delete: | ||
index: .tasks | ||
ignore_unavailable: true |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do you plan to backport this to 2.x? It seems backwards compatible to me since it is just adding features to the APIs, unless I'm missing something. If the intention is to backport, then the changelog entry should go in the
[Unreleased 2.x]
section.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Also, nitpick to add spaces and probably use commas instead of multiple ampersands: "resize, open, and forcemerge"
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah, we want to backport this PR to 2.x, I've changed the location and modified the description according to your suggestion, really appreciate it, and could you help to add a
backport 2.x
label?