Catch assertion errors on commit and turn it into a real exception (#19357)
Lucene IndexWriter asserts on files existing on the filesystem but some tests throw IOException explicitly on those operatiosn such that some tests trip asserts. We had this before on InternalEngine#ctor and added some logic there to catch only a specific assertions based on some excepition stack analysis. This change applies the same logic to the IndexWriter#commit part of the engine since it can hit the same issue. This also fixes a self-suppression issue in Store.java. Closes #19356
This commit is contained in:
parent
db111174ec
commit
1d03a1409c
|
@ -1185,6 +1185,20 @@ public class InternalEngine extends Engine {
|
||||||
ex.addSuppressed(inner);
|
ex.addSuppressed(inner);
|
||||||
}
|
}
|
||||||
throw ex;
|
throw ex;
|
||||||
|
} catch (AssertionError e) {
|
||||||
|
// IndexWriter throws AssertionError on commit, if asserts are enabled, if any files don't exist, but tests that
|
||||||
|
// randomly throw FNFE/NSFE can also hit this:
|
||||||
|
if (ExceptionsHelper.stackTrace(e).contains("org.apache.lucene.index.IndexWriter.filesExist")) {
|
||||||
|
EngineException engineException = new EngineException(shardId, "failed to commit engine", e);
|
||||||
|
try {
|
||||||
|
failEngine("lucene commit failed", engineException);
|
||||||
|
} catch (Exception inner) {
|
||||||
|
engineException.addSuppressed(inner);
|
||||||
|
}
|
||||||
|
throw engineException;
|
||||||
|
} else {
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -846,14 +846,14 @@ public class Store extends AbstractIndexShardComponent implements Closeable, Ref
|
||||||
logger.warn("failed to build store metadata. checking segment info integrity (with commit [{}])",
|
logger.warn("failed to build store metadata. checking segment info integrity (with commit [{}])",
|
||||||
ex, commit == null ? "no" : "yes");
|
ex, commit == null ? "no" : "yes");
|
||||||
Lucene.checkSegmentInfoIntegrity(directory);
|
Lucene.checkSegmentInfoIntegrity(directory);
|
||||||
throw ex;
|
|
||||||
} catch (CorruptIndexException | IndexFormatTooOldException | IndexFormatTooNewException cex) {
|
} catch (CorruptIndexException | IndexFormatTooOldException | IndexFormatTooNewException cex) {
|
||||||
cex.addSuppressed(ex);
|
cex.addSuppressed(ex);
|
||||||
throw cex;
|
throw cex;
|
||||||
} catch (Exception inner) {
|
} catch (Exception inner) {
|
||||||
ex.addSuppressed(inner);
|
inner.addSuppressed(ex);
|
||||||
throw ex;
|
throw inner;
|
||||||
}
|
}
|
||||||
|
throw ex;
|
||||||
}
|
}
|
||||||
return new LoadedMetadata(unmodifiableMap(builder), unmodifiableMap(commitUserDataBuilder), numDocs);
|
return new LoadedMetadata(unmodifiableMap(builder), unmodifiableMap(commitUserDataBuilder), numDocs);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue