Skip to content

Commit c4f77c7

Browse files
authored
Return 429 instead of 500 for timeout handlers (#133111)
This is consistent with the existing ElasticsearchTimeoutException. Resolves: ES-12238
1 parent 1fd87e4 commit c4f77c7

File tree

3 files changed

+26
-2
lines changed

3 files changed

+26
-2
lines changed

docs/changelog/133111.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
pr: 133111
2+
summary: Return 429 instead of 500 for timeout handlers
3+
area: Network
4+
type: enhancement
5+
issues: []

server/src/internalClusterTest/java/org/elasticsearch/action/admin/cluster/node/tasks/TasksIT.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
*/
99
package org.elasticsearch.action.admin.cluster.node.tasks;
1010

11+
import org.elasticsearch.ElasticsearchException;
1112
import org.elasticsearch.ElasticsearchTimeoutException;
1213
import org.elasticsearch.ExceptionsHelper;
1314
import org.elasticsearch.ResourceNotFoundException;
@@ -41,6 +42,7 @@
4142
import org.elasticsearch.index.query.QueryBuilders;
4243
import org.elasticsearch.persistent.PersistentTasksCustomMetadata;
4344
import org.elasticsearch.plugins.Plugin;
45+
import org.elasticsearch.rest.RestStatus;
4446
import org.elasticsearch.search.builder.SearchSourceBuilder;
4547
import org.elasticsearch.tasks.RemovedTaskListener;
4648
import org.elasticsearch.tasks.Task;
@@ -677,9 +679,14 @@ private void waitForTimeoutTestCase(Function<TaskId, ? extends Iterable<? extend
677679
Iterable<? extends Throwable> failures = wait.apply(taskId);
678680

679681
for (Throwable failure : failures) {
680-
assertNotNull(
681-
ExceptionsHelper.unwrap(failure, ElasticsearchTimeoutException.class, ReceiveTimeoutTransportException.class)
682+
final Throwable cause = ExceptionsHelper.unwrap(
683+
failure,
684+
ElasticsearchTimeoutException.class,
685+
ReceiveTimeoutTransportException.class
682686
);
687+
assertNotNull(cause);
688+
assertThat(asInstanceOf(ElasticsearchException.class, cause).status(), equalTo(RestStatus.TOO_MANY_REQUESTS));
689+
assertTrue(asInstanceOf(ElasticsearchException.class, cause).isTimeout());
683690
}
684691
} finally {
685692
// Now we can unblock those requests

server/src/main/java/org/elasticsearch/transport/ReceiveTimeoutTransportException.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
import org.elasticsearch.cluster.node.DiscoveryNode;
1313
import org.elasticsearch.common.io.stream.StreamInput;
14+
import org.elasticsearch.rest.RestStatus;
1415

1516
import java.io.IOException;
1617

@@ -29,4 +30,15 @@ public synchronized Throwable fillInStackTrace() {
2930
// stack trace is uninformative
3031
return this;
3132
}
33+
34+
@Override
35+
public RestStatus status() {
36+
// closest thing to "your request took longer than you asked for"
37+
return RestStatus.TOO_MANY_REQUESTS;
38+
}
39+
40+
@Override
41+
public boolean isTimeout() {
42+
return true;
43+
}
3244
}

0 commit comments

Comments
 (0)