Skip to content

Commit 8f70713

Browse files
authored
Add ?master_timeout to POST /_ilm/migrate_to_data_tiers (elastic#120883)
Relates elastic#107984
1 parent 5e953dc commit 8f70713

File tree

5 files changed

+37
-15
lines changed

5 files changed

+37
-15
lines changed

docs/changelog/120883.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
pr: 120883
2+
summary: Add `?master_timeout` to `POST /_ilm/migrate_to_data_tiers`
3+
area: Indices APIs
4+
type: bug
5+
issues: []

rest-api-spec/src/main/resources/rest-api-spec/api/ilm.migrate_to_data_tiers.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@
2121
]
2222
},
2323
"params": {
24+
"master_timeout":{
25+
"type":"time",
26+
"description":"Explicit operation timeout for connection to master node"
27+
},
2428
"dry_run": {
2529
"type": "boolean",
2630
"description": "If set to true it will simulate the migration, providing a way to retrieve the ILM policies and indices that need to be migrated. The default is false"

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/cluster/action/MigrateToDataTiersRequest.java

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import org.elasticsearch.common.io.stream.StreamInput;
1212
import org.elasticsearch.common.io.stream.StreamOutput;
1313
import org.elasticsearch.core.Nullable;
14+
import org.elasticsearch.core.TimeValue;
1415
import org.elasticsearch.xcontent.ConstructingObjectParser;
1516
import org.elasticsearch.xcontent.ParseField;
1617
import org.elasticsearch.xcontent.XContentParser;
@@ -23,11 +24,14 @@ public class MigrateToDataTiersRequest extends AcknowledgedRequest<MigrateToData
2324
private static final ParseField LEGACY_TEMPLATE_TO_DELETE = new ParseField("legacy_template_to_delete");
2425
private static final ParseField NODE_ATTRIBUTE_NAME = new ParseField("node_attribute");
2526

26-
@SuppressWarnings("unchecked")
27-
public static final ConstructingObjectParser<MigrateToDataTiersRequest, Void> PARSER = new ConstructingObjectParser<>(
27+
public interface Factory {
28+
MigrateToDataTiersRequest create(@Nullable String legacyTemplateToDelete, @Nullable String nodeAttributeName);
29+
}
30+
31+
public static final ConstructingObjectParser<MigrateToDataTiersRequest, Factory> PARSER = new ConstructingObjectParser<>(
2832
"index_template",
2933
false,
30-
a -> new MigrateToDataTiersRequest((String) a[0], (String) a[1])
34+
(a, factory) -> factory.create((String) a[0], (String) a[1])
3135
);
3236

3337
static {
@@ -48,20 +52,20 @@ public class MigrateToDataTiersRequest extends AcknowledgedRequest<MigrateToData
4852
private final String legacyTemplateToDelete;
4953
private boolean dryRun = false;
5054

51-
public static MigrateToDataTiersRequest parse(XContentParser parser) throws IOException {
52-
return PARSER.parse(parser, null);
55+
public static MigrateToDataTiersRequest parse(Factory factory, XContentParser parser) throws IOException {
56+
return PARSER.parse(parser, factory);
5357
}
5458

55-
public MigrateToDataTiersRequest(@Nullable String legacyTemplateToDelete, @Nullable String nodeAttributeName) {
56-
super(TRAPPY_IMPLICIT_DEFAULT_MASTER_NODE_TIMEOUT, DEFAULT_ACK_TIMEOUT);
59+
public MigrateToDataTiersRequest(
60+
TimeValue masterNodeTimeout,
61+
@Nullable String legacyTemplateToDelete,
62+
@Nullable String nodeAttributeName
63+
) {
64+
super(masterNodeTimeout, DEFAULT_ACK_TIMEOUT);
5765
this.legacyTemplateToDelete = legacyTemplateToDelete;
5866
this.nodeAttributeName = nodeAttributeName;
5967
}
6068

61-
public MigrateToDataTiersRequest() {
62-
this(null, null);
63-
}
64-
6569
public MigrateToDataTiersRequest(StreamInput in) throws IOException {
6670
super(in);
6771
dryRun = in.readBoolean();

x-pack/plugin/core/src/test/java/org/elasticsearch/xpack/cluster/action/MigrateToDataTiersRequestTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ protected Writeable.Reader<MigrateToDataTiersRequest> instanceReader() {
1919

2020
@Override
2121
protected MigrateToDataTiersRequest createTestInstance() {
22-
return new MigrateToDataTiersRequest(randomAlphaOfLength(10), randomAlphaOfLength(10));
22+
return new MigrateToDataTiersRequest(TEST_REQUEST_TIMEOUT, randomAlphaOfLength(10), randomAlphaOfLength(10));
2323
}
2424

2525
@Override

x-pack/plugin/ilm/src/main/java/org/elasticsearch/xpack/ilm/action/RestMigrateToDataTiersAction.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import org.elasticsearch.client.internal.node.NodeClient;
1111
import org.elasticsearch.rest.BaseRestHandler;
1212
import org.elasticsearch.rest.RestRequest;
13+
import org.elasticsearch.rest.RestUtils;
1314
import org.elasticsearch.rest.action.RestToXContentListener;
1415
import org.elasticsearch.xpack.cluster.action.MigrateToDataTiersAction;
1516
import org.elasticsearch.xpack.cluster.action.MigrateToDataTiersRequest;
@@ -33,13 +34,21 @@ public List<Route> routes() {
3334

3435
@Override
3536
protected RestChannelConsumer prepareRequest(RestRequest request, NodeClient client) throws IOException {
36-
MigrateToDataTiersRequest migrateRequest;
37+
final var masterNodeTimeout = RestUtils.getMasterNodeTimeout(request);
38+
final MigrateToDataTiersRequest migrateRequest;
3739
if (request.hasContent()) {
3840
try (var parser = request.contentParser()) {
39-
migrateRequest = MigrateToDataTiersRequest.parse(parser);
41+
migrateRequest = MigrateToDataTiersRequest.parse(
42+
(legacyTemplateToDelete, nodeAttributeName) -> new MigrateToDataTiersRequest(
43+
masterNodeTimeout,
44+
legacyTemplateToDelete,
45+
nodeAttributeName
46+
),
47+
parser
48+
);
4049
}
4150
} else {
42-
migrateRequest = new MigrateToDataTiersRequest();
51+
migrateRequest = new MigrateToDataTiersRequest(masterNodeTimeout, null, null);
4352
}
4453
migrateRequest.setDryRun(request.paramAsBoolean("dry_run", false));
4554
return channel -> client.execute(MigrateToDataTiersAction.INSTANCE, migrateRequest, new RestToXContentListener<>(channel));

0 commit comments

Comments
 (0)