in src/main/java/com/spotify/sparkey/IndexHash.java [294:339]
private static void fillFromLogSorted(
ReadWriteData indexData, final File logFile,
IndexHeader header,
final long start, final long end,
LogHeader logHeader, final long maxMemory) throws IOException {
final HashType hashData = header.getHashType();
AddressSize addressData = header.getAddressData();
final long hashCapacity = header.getHashCapacity();
final BlockRandomInput logData =
logHeader.getCompressionTypeBackend().createRandomAccessData(new ReadOnlyMemMap(logFile), logHeader.getCompressionBlockSize());
try {
final Iterator<SortHelper.Entry> iterator2 = SortHelper.sort(
logFile, start, end, hashData, hashCapacity, header.getHashSeed(), maxMemory);
final int maxEntriesPerBlock = logHeader.getMaxEntriesPerBlock();
final int entryIndexbits = calcEntryBlockBits(maxEntriesPerBlock);
final byte[] keyBuf1 = new byte[(int) logHeader.getMaxKeyLen()];
final byte[] keyBuf2 = new byte[(int) logHeader.getMaxKeyLen()];
while (iterator2.hasNext()) {
final SortHelper.Entry entry = iterator2.next();
// Safe cast, since the iterator is known to be a SparkeyLogIterator
final SparkeyReader.Type type = (entry.address & 1) == 0 ? SparkeyReader.Type.DELETE : SparkeyReader.Type.PUT;
final long address = entry.address >>> 1;
final long hash = entry.hash;
switch (type) {
case PUT:
put(indexData, header, hashCapacity, -1, keyBuf1,
logData, keyBuf2, hashData, addressData, header.getEntryBlockBitsBitmask(), entryIndexbits,
hash, address);
break;
case DELETE:
delete(indexData, header, hashCapacity, -1, keyBuf1, logData, keyBuf2,
hashData, addressData, header.getEntryBlockBitsBitmask(), entryIndexbits,
hash, address);
break;
}
}
} finally {
logData.close();
}
}