[TEST] ensure expected sequence no and version are set when index/delete engine operation has a document failure

This commit is contained in:
Areek Zillur 2017-04-20 13:38:52 -04:00
parent 22e0795990
commit 077a6c3ee7
1 changed files with 13 additions and 4 deletions

View File

@ -2911,27 +2911,36 @@ public class InternalEngineTests extends ESTestCase {
} else { } else {
throwingIndexWriter.get().setThrowFailure(() -> new IllegalArgumentException("simulated max token length")); throwingIndexWriter.get().setThrowFailure(() -> new IllegalArgumentException("simulated max token length"));
} }
// test index with document failure
Engine.IndexResult indexResult = engine.index(indexForDoc(doc1)); Engine.IndexResult indexResult = engine.index(indexForDoc(doc1));
assertNotNull(indexResult.getFailure()); assertNotNull(indexResult.getFailure());
// document failures should be recorded in translog assertThat(indexResult.getSeqNo(), equalTo(0L));
assertThat(indexResult.getVersion(), equalTo(Versions.MATCH_ANY));
assertNotNull(indexResult.getTranslogLocation()); assertNotNull(indexResult.getTranslogLocation());
throwingIndexWriter.get().clearFailure(); throwingIndexWriter.get().clearFailure();
indexResult = engine.index(indexForDoc(doc1)); indexResult = engine.index(indexForDoc(doc1));
assertThat(indexResult.getSeqNo(), equalTo(1L));
assertThat(indexResult.getVersion(), equalTo(1L));
assertNull(indexResult.getFailure()); assertNull(indexResult.getFailure());
// document failures should be recorded in translog
assertNotNull(indexResult.getTranslogLocation()); assertNotNull(indexResult.getTranslogLocation());
engine.index(indexForDoc(doc2)); engine.index(indexForDoc(doc2));
// test failure while deleting // test failure while deleting
// all these simulated exceptions are not fatal to the IW so we treat them as document failures // all these simulated exceptions are not fatal to the IW so we treat them as document failures
final Engine.DeleteResult deleteResult;
if (randomBoolean()) { if (randomBoolean()) {
throwingIndexWriter.get().setThrowFailure(() -> new IOException("simulated")); throwingIndexWriter.get().setThrowFailure(() -> new IOException("simulated"));
assertThat(engine.delete(new Engine.Delete("test", "1", newUid(doc1))).getFailure(), instanceOf(IOException.class)); deleteResult = engine.delete(new Engine.Delete("test", "1", newUid(doc1)));
assertThat(deleteResult.getFailure(), instanceOf(IOException.class));
} else { } else {
throwingIndexWriter.get().setThrowFailure(() -> new IllegalArgumentException("simulated max token length")); throwingIndexWriter.get().setThrowFailure(() -> new IllegalArgumentException("simulated max token length"));
assertThat(engine.delete(new Engine.Delete("test", "1", newUid(doc1))).getFailure(), deleteResult = engine.delete(new Engine.Delete("test", "1", newUid(doc1)));
assertThat(deleteResult.getFailure(),
instanceOf(IllegalArgumentException.class)); instanceOf(IllegalArgumentException.class));
} }
assertThat(deleteResult.getVersion(), equalTo(2L));
assertThat(deleteResult.getSeqNo(), equalTo(3L));
// test non document level failure is thrown // test non document level failure is thrown
if (randomBoolean()) { if (randomBoolean()) {