[STORE] use Directory#fileLength() less during calculating checksums
This commit is contained in:
parent
09eb8d1383
commit
287fab46a1
|
@ -713,7 +713,13 @@ public class Store extends AbstractIndexShardComponent implements Closeable, Ref
|
||||||
if (maxVersion.onOrAfter(FIRST_LUCENE_CHECKSUM_VERSION)) {
|
if (maxVersion.onOrAfter(FIRST_LUCENE_CHECKSUM_VERSION)) {
|
||||||
checksumFromLuceneFile(directory, segmentsFile, builder, logger, maxVersion, true);
|
checksumFromLuceneFile(directory, segmentsFile, builder, logger, maxVersion, true);
|
||||||
} else {
|
} else {
|
||||||
builder.put(segmentsFile, new StoreFileMetaData(segmentsFile, directory.fileLength(segmentsFile), legacyChecksum, maxVersion, hashFile(directory, segmentsFile)));
|
final BytesRefBuilder fileHash = new BytesRefBuilder();
|
||||||
|
final long length;
|
||||||
|
try (final IndexInput in = directory.openInput(segmentsFile, IOContext.READONCE)) {
|
||||||
|
length = in.length();
|
||||||
|
hashFile(fileHash, new InputStreamIndexInput(in, length), length);
|
||||||
|
}
|
||||||
|
builder.put(segmentsFile, new StoreFileMetaData(segmentsFile, length, legacyChecksum, maxVersion, fileHash.get()));
|
||||||
}
|
}
|
||||||
} catch (CorruptIndexException | IndexNotFoundException | IndexFormatTooOldException | IndexFormatTooNewException ex) {
|
} catch (CorruptIndexException | IndexNotFoundException | IndexFormatTooOldException | IndexFormatTooNewException ex) {
|
||||||
// we either know the index is corrupted or it's just not there
|
// we either know the index is corrupted or it's just not there
|
||||||
|
@ -798,14 +804,16 @@ public class Store extends AbstractIndexShardComponent implements Closeable, Ref
|
||||||
final String checksum;
|
final String checksum;
|
||||||
final BytesRefBuilder fileHash = new BytesRefBuilder();
|
final BytesRefBuilder fileHash = new BytesRefBuilder();
|
||||||
try (final IndexInput in = directory.openInput(file, IOContext.READONCE)) {
|
try (final IndexInput in = directory.openInput(file, IOContext.READONCE)) {
|
||||||
|
final long length;
|
||||||
try {
|
try {
|
||||||
if (in.length() < CodecUtil.footerLength()) {
|
length = in.length();
|
||||||
|
if (length < CodecUtil.footerLength()) {
|
||||||
// truncated files trigger IAE if we seek negative... these files are really corrupted though
|
// truncated files trigger IAE if we seek negative... these files are really corrupted though
|
||||||
throw new CorruptIndexException("Can't retrieve checksum from file: " + file + " file length must be >= " + CodecUtil.footerLength() + " but was: " + in.length(), in);
|
throw new CorruptIndexException("Can't retrieve checksum from file: " + file + " file length must be >= " + CodecUtil.footerLength() + " but was: " + in.length(), in);
|
||||||
}
|
}
|
||||||
if (readFileAsHash) {
|
if (readFileAsHash) {
|
||||||
final VerifyingIndexInput verifyingIndexInput = new VerifyingIndexInput(in); // additional safety we checksum the entire file we read the hash for...
|
final VerifyingIndexInput verifyingIndexInput = new VerifyingIndexInput(in); // additional safety we checksum the entire file we read the hash for...
|
||||||
hashFile(fileHash, new InputStreamIndexInput(verifyingIndexInput, in.length()), in.length());
|
hashFile(fileHash, new InputStreamIndexInput(verifyingIndexInput, length), length);
|
||||||
checksum = digestToString(verifyingIndexInput.verify());
|
checksum = digestToString(verifyingIndexInput.verify());
|
||||||
} else {
|
} else {
|
||||||
checksum = digestToString(CodecUtil.retrieveChecksum(in));
|
checksum = digestToString(CodecUtil.retrieveChecksum(in));
|
||||||
|
@ -815,7 +823,7 @@ public class Store extends AbstractIndexShardComponent implements Closeable, Ref
|
||||||
logger.debug("Can retrieve checksum from file [{}]", ex, file);
|
logger.debug("Can retrieve checksum from file [{}]", ex, file);
|
||||||
throw ex;
|
throw ex;
|
||||||
}
|
}
|
||||||
builder.put(file, new StoreFileMetaData(file, directory.fileLength(file), checksum, version, fileHash.get()));
|
builder.put(file, new StoreFileMetaData(file, length, checksum, version, fileHash.get()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue