the RethrottleTests assumed that tasks that were unprepared to rethrottle would bubble up into the Rethrottle response as an ElasticsearchException wrapping an IllegalArgumentException. This seems to have changed to potentially involve further levels of wrapping. This change makes the retry logic more resilient to arbitrary nesting of the underlying IllegalArgumentException
This commit is contained in:
parent
109b6451fd
commit
f30f1fe9b6
|
@ -20,6 +20,7 @@
|
||||||
package org.elasticsearch.index.reindex;
|
package org.elasticsearch.index.reindex;
|
||||||
|
|
||||||
import org.elasticsearch.ElasticsearchException;
|
import org.elasticsearch.ElasticsearchException;
|
||||||
|
import org.elasticsearch.ExceptionsHelper;
|
||||||
import org.elasticsearch.action.ActionFuture;
|
import org.elasticsearch.action.ActionFuture;
|
||||||
import org.elasticsearch.action.admin.cluster.node.tasks.list.ListTasksResponse;
|
import org.elasticsearch.action.admin.cluster.node.tasks.list.ListTasksResponse;
|
||||||
import org.elasticsearch.action.admin.cluster.node.tasks.list.TaskGroup;
|
import org.elasticsearch.action.admin.cluster.node.tasks.list.TaskGroup;
|
||||||
|
@ -37,6 +38,7 @@ import java.util.concurrent.atomic.AtomicReference;
|
||||||
import static org.hamcrest.Matchers.allOf;
|
import static org.hamcrest.Matchers.allOf;
|
||||||
import static org.hamcrest.Matchers.both;
|
import static org.hamcrest.Matchers.both;
|
||||||
import static org.hamcrest.Matchers.empty;
|
import static org.hamcrest.Matchers.empty;
|
||||||
|
import static org.hamcrest.Matchers.equalTo;
|
||||||
import static org.hamcrest.Matchers.greaterThan;
|
import static org.hamcrest.Matchers.greaterThan;
|
||||||
import static org.hamcrest.Matchers.greaterThanOrEqualTo;
|
import static org.hamcrest.Matchers.greaterThanOrEqualTo;
|
||||||
import static org.hamcrest.Matchers.hasSize;
|
import static org.hamcrest.Matchers.hasSize;
|
||||||
|
@ -191,13 +193,15 @@ public class RethrottleTests extends ReindexTestCase {
|
||||||
assertThat(rethrottleResponse.getTasks(), hasSize(1));
|
assertThat(rethrottleResponse.getTasks(), hasSize(1));
|
||||||
response.set(rethrottleResponse);
|
response.set(rethrottleResponse);
|
||||||
} catch (ElasticsearchException e) {
|
} catch (ElasticsearchException e) {
|
||||||
if (e.getCause() instanceof IllegalArgumentException) {
|
Throwable unwrapped = ExceptionsHelper.unwrap(e, IllegalArgumentException.class);
|
||||||
// We want to retry in this case so we throw an assertion error
|
if (unwrapped == null) {
|
||||||
logger.info("caught unprepared task, retrying until prepared");
|
|
||||||
throw new AssertionError("Rethrottle request for task [" + taskToRethrottle.getId() + "] failed", e);
|
|
||||||
} else {
|
|
||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
|
// We want to retry in this case so we throw an assertion error
|
||||||
|
assertThat(unwrapped.getMessage(), equalTo("task [" + taskToRethrottle.getId()
|
||||||
|
+ "] has not yet been initialized to the point where it knows how to rethrottle itself"));
|
||||||
|
logger.info("caught unprepared task, retrying until prepared");
|
||||||
|
throw new AssertionError("Rethrottle request for task [" + taskToRethrottle.getId() + "] failed", e);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue