Skip to content

Commit 2db52ae

Browse files
authored
Fix trappy timeouts in downsample action (#112734)
Relates #107984
1 parent b6b0d3d commit 2db52ae

File tree

7 files changed

+32
-9
lines changed

7 files changed

+32
-9
lines changed

modules/data-streams/src/main/java/org/elasticsearch/datastreams/lifecycle/DataStreamLifecycleService.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -561,7 +561,13 @@ private Set<Index> waitForInProgressOrTriggerDownsampling(
561561
* Issues a request downsample the source index to the downsample index for the specified round.
562562
*/
563563
private void downsampleIndexOnce(DataStreamLifecycle.Downsampling.Round round, String sourceIndex, String downsampleIndexName) {
564-
DownsampleAction.Request request = new DownsampleAction.Request(sourceIndex, downsampleIndexName, null, round.config());
564+
DownsampleAction.Request request = new DownsampleAction.Request(
565+
TimeValue.THIRTY_SECONDS /* TODO should this be longer/configurable? */,
566+
sourceIndex,
567+
downsampleIndexName,
568+
null,
569+
round.config()
570+
);
565571
transportActionsDeduplicator.executeOnce(
566572
request,
567573
new ErrorRecordingActionListener(

server/src/main/java/org/elasticsearch/action/downsample/DownsampleAction.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,20 +45,21 @@ public static class Request extends MasterNodeRequest<Request> implements Indice
4545
private DownsampleConfig downsampleConfig;
4646

4747
public Request(
48+
TimeValue masterNodeTimeout,
4849
final String sourceIndex,
4950
final String targetIndex,
5051
final TimeValue waitTimeout,
5152
final DownsampleConfig downsampleConfig
5253
) {
53-
super(TRAPPY_IMPLICIT_DEFAULT_MASTER_NODE_TIMEOUT);
54+
super(masterNodeTimeout);
5455
this.sourceIndex = sourceIndex;
5556
this.targetIndex = targetIndex;
5657
this.waitTimeout = waitTimeout == null ? DEFAULT_WAIT_TIMEOUT : waitTimeout;
5758
this.downsampleConfig = downsampleConfig;
5859
}
5960

60-
public Request() {
61-
super(TRAPPY_IMPLICIT_DEFAULT_MASTER_NODE_TIMEOUT);
61+
public Request(TimeValue masterNodeTimeout) {
62+
super(masterNodeTimeout);
6263
}
6364

6465
public Request(StreamInput in) throws IOException {

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/ilm/DownsampleStep.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,13 @@ public void performAction(
9090

9191
void performDownsampleIndex(String indexName, String downsampleIndexName, ActionListener<Void> listener) {
9292
DownsampleConfig config = new DownsampleConfig(fixedInterval);
93-
DownsampleAction.Request request = new DownsampleAction.Request(indexName, downsampleIndexName, waitTimeout, config)
94-
.masterNodeTimeout(TimeValue.MAX_VALUE);
93+
DownsampleAction.Request request = new DownsampleAction.Request(
94+
TimeValue.MAX_VALUE,
95+
indexName,
96+
downsampleIndexName,
97+
waitTimeout,
98+
config
99+
);
95100
// Currently, DownsampleAction always acknowledges action was complete when no exceptions are thrown.
96101
getClient().execute(DownsampleAction.INSTANCE, request, listener.delegateFailureAndWrap((l, response) -> l.onResponse(null)));
97102
}

x-pack/plugin/downsample/src/internalClusterTest/java/org/elasticsearch/xpack/downsample/DownsampleTransportFailureIT.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,7 @@ public void testNoDisruption() {
267267
// GIVEN
268268

269269
final DownsampleAction.Request downsampleRequest = new DownsampleAction.Request(
270+
TEST_REQUEST_TIMEOUT,
270271
SOURCE_INDEX_NAME,
271272
TARGET_INDEX_NAME,
272273
WAIT_TIMEOUT,
@@ -294,6 +295,7 @@ public void testDownsampleActionExceptionDisruption() {
294295
// GIVEN
295296
final MockTransportService coordinator = MockTransportService.getInstance(testCluster.coordinator);
296297
final DownsampleAction.Request downsampleRequest = new DownsampleAction.Request(
298+
TEST_REQUEST_TIMEOUT,
297299
SOURCE_INDEX_NAME,
298300
TARGET_INDEX_NAME,
299301
WAIT_TIMEOUT,

x-pack/plugin/downsample/src/main/java/org/elasticsearch/xpack/downsample/RestDownsampleAction.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import org.elasticsearch.core.TimeValue;
1414
import org.elasticsearch.rest.BaseRestHandler;
1515
import org.elasticsearch.rest.RestRequest;
16+
import org.elasticsearch.rest.RestUtils;
1617
import org.elasticsearch.rest.Scope;
1718
import org.elasticsearch.rest.ServerlessScope;
1819
import org.elasticsearch.rest.action.RestToXContentListener;
@@ -40,6 +41,7 @@ protected RestChannelConsumer prepareRequest(RestRequest restRequest, NodeClient
4041
config = DownsampleConfig.fromXContent(parser);
4142
}
4243
DownsampleAction.Request request = new DownsampleAction.Request(
44+
RestUtils.getMasterNodeTimeout(restRequest),
4345
sourceIndex,
4446
targetIndex,
4547
TimeValue.parseTimeValue(timeout, null, "wait_timeout"),

x-pack/plugin/downsample/src/test/java/org/elasticsearch/xpack/downsample/DownsampleActionSingleNodeTests.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -594,7 +594,7 @@ public void onFailure(Exception e) {
594594
};
595595
client().execute(
596596
DownsampleAction.INSTANCE,
597-
new DownsampleAction.Request(sourceIndex, downsampleIndex, TIMEOUT, config),
597+
new DownsampleAction.Request(TEST_REQUEST_TIMEOUT, sourceIndex, downsampleIndex, TIMEOUT, config),
598598
downsampleListener
599599
);
600600
assertBusy(() -> {
@@ -607,7 +607,10 @@ public void onFailure(Exception e) {
607607

608608
assertBusy(() -> {
609609
try {
610-
client().execute(DownsampleAction.INSTANCE, new DownsampleAction.Request(sourceIndex, downsampleIndex, TIMEOUT, config));
610+
client().execute(
611+
DownsampleAction.INSTANCE,
612+
new DownsampleAction.Request(TEST_REQUEST_TIMEOUT, sourceIndex, downsampleIndex, TIMEOUT, config)
613+
);
611614
} catch (ElasticsearchException e) {
612615
fail("transient failure due to overlapping downsample operations");
613616
}
@@ -1145,7 +1148,10 @@ private void prepareSourceIndex(final String sourceIndex, boolean blockWrite) {
11451148

11461149
private void downsample(String sourceIndex, String downsampleIndex, DownsampleConfig config) {
11471150
assertAcked(
1148-
client().execute(DownsampleAction.INSTANCE, new DownsampleAction.Request(sourceIndex, downsampleIndex, TIMEOUT, config))
1151+
client().execute(
1152+
DownsampleAction.INSTANCE,
1153+
new DownsampleAction.Request(TEST_REQUEST_TIMEOUT, sourceIndex, downsampleIndex, TIMEOUT, config)
1154+
)
11491155
);
11501156
}
11511157

x-pack/plugin/downsample/src/test/java/org/elasticsearch/xpack/downsample/DownsampleDataStreamTests.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ public void testDataStreamDownsample() throws ExecutionException, InterruptedExc
9898
// WHEN (simulate downsampling as done by an ILM action)
9999
final String downsampleTargetIndex = DataStream.BACKING_INDEX_PREFIX + dataStreamName + "-downsample-1h";
100100
final DownsampleAction.Request downsampleRequest = new DownsampleAction.Request(
101+
TEST_REQUEST_TIMEOUT,
101102
rolloverResponse.getOldIndex(),
102103
downsampleTargetIndex,
103104
TIMEOUT,

0 commit comments

Comments
 (0)