|
@@ -5980,4 +5980,29 @@ public class InternalEngineTests extends EngineTestCase {
|
|
|
equalTo(seqNos));
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ public void testNoOpFailure() throws IOException {
|
|
|
+ engine.close();
|
|
|
+ final Settings settings = Settings.builder()
|
|
|
+ .put(defaultSettings.getSettings())
|
|
|
+ .put(IndexSettings.INDEX_SOFT_DELETES_SETTING.getKey(), true).build();
|
|
|
+ final IndexSettings indexSettings = IndexSettingsModule.newIndexSettings(
|
|
|
+ IndexMetaData.builder(defaultSettings.getIndexMetaData()).settings(settings).build());
|
|
|
+ try (Store store = createStore();
|
|
|
+ Engine engine = createEngine((dir, iwc) -> new IndexWriter(dir, iwc) {
|
|
|
+ @Override
|
|
|
+ public long addDocument(Iterable<? extends IndexableField> doc) throws IOException {
|
|
|
+ throw new IllegalArgumentException("fatal");
|
|
|
+ }
|
|
|
+ }, null, null, config(indexSettings, store, createTempDir(), NoMergePolicy.INSTANCE, null))) {
|
|
|
+ final Engine.NoOp op = new Engine.NoOp(0, 0, PRIMARY, System.currentTimeMillis(), "test");
|
|
|
+ final IllegalArgumentException e = expectThrows(IllegalArgumentException. class, () -> engine.noOp(op));
|
|
|
+ assertThat(e.getMessage(), equalTo("fatal"));
|
|
|
+ assertTrue(engine.isClosed.get());
|
|
|
+ assertThat(engine.failedEngine.get(), not(nullValue()));
|
|
|
+ assertThat(engine.failedEngine.get(), instanceOf(IllegalArgumentException.class));
|
|
|
+ assertThat(engine.failedEngine.get().getMessage(), equalTo("fatal"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|