Skip to content

Commit 2832668

Browse files
gaobinlongshiv0408
authored andcommitted
Update supported version for the primary_only parameter in force-merge API (opensearch-project#12657)
* Update supported version for adding primary_only parameter to force-merge API Signed-off-by: Gao Binlong <gbinlong@amazon.com> * Modify change log Signed-off-by: Gao Binlong <gbinlong@amazon.com> * Remove some unused code Signed-off-by: Gao Binlong <gbinlong@amazon.com> * Remove change log Signed-off-by: Gao Binlong <gbinlong@amazon.com> * Fix test issue Signed-off-by: Gao Binlong <gbinlong@amazon.com> --------- Signed-off-by: Gao Binlong <gbinlong@amazon.com> Signed-off-by: Shivansh Arora <hishiv@amazon.com>
1 parent ea608a5 commit 2832668

File tree

3 files changed

+60
-30
lines changed

3 files changed

+60
-30
lines changed

rest-api-spec/src/main/resources/rest-api-spec/test/indices.forcemerge/20_wait_for_completion.yml

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,17 @@
44
# will return a task immediately and the merge process will run in background.
55

66
- skip:
7-
version: " - 2.99.99"
8-
reason: "only available in 3.0+"
9-
features: allowed_warnings
7+
version: " - 2.6.99, 2.13.0 - "
8+
reason: "wait_for_completion was introduced in 2.7.0 and task description was changed in 2.13.0"
9+
features: allowed_warnings, node_selector
1010

1111
- do:
1212
indices.create:
1313
index: test_index
1414

1515
- do:
16+
node_selector:
17+
version: " 2.7.0 - 2.12.99"
1618
indices.forcemerge:
1719
index: test_index
1820
wait_for_completion: false
@@ -25,8 +27,31 @@
2527
wait_for_completion: true
2628
task_id: $taskId
2729
- match: { task.action: "indices:admin/forcemerge" }
28-
- match: { task.description: "Force-merge indices [test_index], maxSegments[1], onlyExpungeDeletes[false], flush[true], primaryOnly[false]" }
30+
- match: { task.description: "Force-merge indices [test_index], maxSegments[1], onlyExpungeDeletes[false], flush[true]" }
31+
32+
---
33+
"Force merge index with wait_for_completion after task description changed":
34+
- skip:
35+
version: " - 2.12.99 "
36+
reason: "task description was changed in 2.13.0"
37+
features: allowed_warnings, node_selector
38+
39+
- do:
40+
node_selector:
41+
version: " 2.13.0 - "
42+
indices.forcemerge:
43+
index: test_index
44+
wait_for_completion: false
45+
max_num_segments: 1
46+
- match: { task: /^.+$/ }
47+
- set: { task: taskId }
2948

49+
- do:
50+
tasks.get:
51+
wait_for_completion: true
52+
task_id: $taskId
53+
- match: { task.action: "indices:admin/forcemerge" }
54+
- match: { task.description: "Force-merge indices [test_index], maxSegments[1], onlyExpungeDeletes[false], flush[true], primaryOnly[false]" }
3055
# .tasks index is created when the force-merge operation completes, so we should delete .tasks index finally,
3156
# if not, the .tasks index may introduce unexpected warnings and then cause other test cases to fail.
3257
# Delete the .tasks index directly will also introduce warning, but currently we don't have such APIs which can delete one

server/src/main/java/org/opensearch/action/admin/indices/forcemerge/ForceMergeRequest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ public ForceMergeRequest(StreamInput in) throws IOException {
102102
maxNumSegments = in.readInt();
103103
onlyExpungeDeletes = in.readBoolean();
104104
flush = in.readBoolean();
105-
if (in.getVersion().onOrAfter(Version.V_3_0_0)) {
105+
if (in.getVersion().onOrAfter(Version.V_2_13_0)) {
106106
primaryOnly = in.readBoolean();
107107
}
108108
if (in.getVersion().onOrAfter(FORCE_MERGE_UUID_VERSION)) {
@@ -219,7 +219,7 @@ public void writeTo(StreamOutput out) throws IOException {
219219
out.writeInt(maxNumSegments);
220220
out.writeBoolean(onlyExpungeDeletes);
221221
out.writeBoolean(flush);
222-
if (out.getVersion().onOrAfter(Version.V_3_0_0)) {
222+
if (out.getVersion().onOrAfter(Version.V_2_13_0)) {
223223
out.writeBoolean(primaryOnly);
224224
}
225225
if (out.getVersion().onOrAfter(FORCE_MERGE_UUID_VERSION)) {

server/src/test/java/org/opensearch/action/admin/indices/forcemerge/ForceMergeRequestTests.java

Lines changed: 29 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,10 @@
3232
package org.opensearch.action.admin.indices.forcemerge;
3333

3434
import org.opensearch.Version;
35+
import org.opensearch.action.support.IndicesOptions;
3536
import org.opensearch.common.io.stream.BytesStreamOutput;
3637
import org.opensearch.core.common.io.stream.StreamInput;
38+
import org.opensearch.core.tasks.TaskId;
3739
import org.opensearch.test.OpenSearchTestCase;
3840
import org.opensearch.test.VersionUtils;
3941

@@ -95,61 +97,64 @@ public void testSerialization() throws Exception {
9597
public void testBwcSerialization() throws Exception {
9698
{
9799
final ForceMergeRequest sample = randomRequest();
98-
final Version compatibleVersion = VersionUtils.randomCompatibleVersion(random(), Version.CURRENT);
100+
final Version version = VersionUtils.randomCompatibleVersion(random(), Version.CURRENT);
99101
try (BytesStreamOutput out = new BytesStreamOutput()) {
100-
out.setVersion(compatibleVersion);
102+
out.setVersion(version);
101103
sample.writeTo(out);
102104

103-
final ForceMergeRequest deserializedRequest;
104105
try (StreamInput in = out.bytes().streamInput()) {
105-
in.setVersion(Version.CURRENT);
106-
deserializedRequest = new ForceMergeRequest(in);
107-
}
108-
109-
assertEquals(sample.maxNumSegments(), deserializedRequest.maxNumSegments());
110-
assertEquals(sample.onlyExpungeDeletes(), deserializedRequest.onlyExpungeDeletes());
111-
assertEquals(sample.flush(), deserializedRequest.flush());
112-
if (compatibleVersion.onOrAfter(Version.V_3_0_0)) {
113-
assertEquals(sample.primaryOnly(), deserializedRequest.primaryOnly());
114-
assertEquals(sample.forceMergeUUID(), deserializedRequest.forceMergeUUID());
106+
in.setVersion(version);
107+
TaskId.readFromStream(in);
108+
in.readStringArray();
109+
IndicesOptions.readIndicesOptions(in);
110+
int maxNumSegments = in.readInt();
111+
boolean onlyExpungeDeletes = in.readBoolean();
112+
boolean flush = in.readBoolean();
113+
boolean primaryOnly = in.readBoolean();
114+
String forceMergeUUID;
115+
if (version.onOrAfter(Version.V_3_0_0)) {
116+
forceMergeUUID = in.readString();
117+
} else {
118+
forceMergeUUID = in.readOptionalString();
119+
}
120+
assertEquals(sample.maxNumSegments(), maxNumSegments);
121+
assertEquals(sample.onlyExpungeDeletes(), onlyExpungeDeletes);
122+
assertEquals(sample.flush(), flush);
123+
assertEquals(sample.primaryOnly(), primaryOnly);
124+
assertEquals(sample.forceMergeUUID(), forceMergeUUID);
115125
}
116126
}
117127
}
118128

119129
{
120130
final ForceMergeRequest sample = randomRequest();
121-
final Version compatibleVersion = VersionUtils.randomCompatibleVersion(random(), Version.CURRENT);
131+
final Version version = VersionUtils.randomCompatibleVersion(random(), Version.CURRENT);
122132
try (BytesStreamOutput out = new BytesStreamOutput()) {
123-
out.setVersion(Version.CURRENT);
133+
out.setVersion(version);
124134
sample.getParentTask().writeTo(out);
125135
out.writeStringArray(sample.indices());
126136
sample.indicesOptions().writeIndicesOptions(out);
127137
out.writeInt(sample.maxNumSegments());
128138
out.writeBoolean(sample.onlyExpungeDeletes());
129139
out.writeBoolean(sample.flush());
130-
if (compatibleVersion.onOrAfter(Version.V_3_0_0)) {
131-
out.writeBoolean(sample.primaryOnly());
132-
}
133-
if (compatibleVersion.onOrAfter(Version.V_3_0_0)) {
140+
out.writeBoolean(sample.primaryOnly());
141+
if (version.onOrAfter(Version.V_3_0_0)) {
134142
out.writeString(sample.forceMergeUUID());
135143
} else {
136144
out.writeOptionalString(sample.forceMergeUUID());
137145
}
138146

139147
final ForceMergeRequest deserializedRequest;
140148
try (StreamInput in = out.bytes().streamInput()) {
141-
in.setVersion(compatibleVersion);
149+
in.setVersion(version);
142150
deserializedRequest = new ForceMergeRequest(in);
143151
}
144152

145153
assertEquals(sample.maxNumSegments(), deserializedRequest.maxNumSegments());
146154
assertEquals(sample.onlyExpungeDeletes(), deserializedRequest.onlyExpungeDeletes());
147155
assertEquals(sample.flush(), deserializedRequest.flush());
148-
if (compatibleVersion.onOrAfter(Version.V_3_0_0)) {
149-
assertEquals(sample.primaryOnly(), deserializedRequest.primaryOnly());
150-
}
156+
assertEquals(sample.primaryOnly(), deserializedRequest.primaryOnly());
151157
assertEquals(sample.forceMergeUUID(), deserializedRequest.forceMergeUUID());
152-
153158
}
154159
}
155160
}

0 commit comments

Comments
 (0)