Получение org.rocksdb.RocksDBException: неправильная запись в блоке

#java #rocksdb #rocksdb-java

#java #rocksdb #rocksdb-java

Вопрос:

Я использую RocksDB для хранения данных, где ключ представляет собой строку, а значение — целое число. Недавно мое приложение выдало следующее исключение при записи в rocks.

 java.lang.Exception: org.rocksdb.RocksDBException: bad entry in block
    at com.techspot.store.RocksStore.encodePacket(RocksStore.java:684) ~[techspot-encoder-dev.jar:?]
    at com.techspot.store.workers.PacketEncoder.run(PacketEncoder.java:67) [techspot-encoder-dev.jar:?]
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_212]
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_212]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_212]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_212]
    at java.lang.Thread.run(Thread.java:748) [?:1.8.0_212]
Caused by: org.rocksdb.RocksDBException: bad entry in block
    at org.rocksdb.RocksDB.get(Native Method) ~[rocksdbjni-6.13.3.jar:?]
    at org.rocksdb.RocksDB.get(RocksDB.java:1948) ~[rocksdbjni-6.13.3.jar:?]
    at com.techspot.store.RocksStore.packetExists(RocksStore.java:402) ~[techspot-encoder-dev.jar:?]
    at com.techspot.store.RocksStore.encodePacket(RocksStore.java:634) ~[techspot-encoder-dev.jar:?]
    ... 6 more
 

Ошибка впервые начала возникать, когда количество записей составило ~ 350 миллионов, а размер базы данных составил ~ 18 ГБ. Эту проблему сложно воспроизвести, я попытался воспроизвести ее, поместив почти ~ 700 миллионов записей, но не смог этого сделать. Я использую RocksDB версии 6.13.3 и использую следующие параметры для RocksDB:

 Options options = new Options();
BlockBasedTableConfig blockBasedTableConfig = new BlockBasedTableConfig();
blockBasedTableConfig.setBlockSize(16 * 1024);// 16Kb

options.setWriteBufferSize(64 * 1024 * 1024);// 64MB
options.setMaxWriteBufferNumber(8);
options.setMinWriteBufferNumberToMerge(1);

options.setTableCacheNumshardbits(8);
options.setLevelZeroSlowdownWritesTrigger(1000);
options.setLevelZeroStopWritesTrigger(2000);
options.setLevelZeroFileNumCompactionTrigger(1);

options.setCompressionType(CompressionType.LZ4_COMPRESSION);
options.setTableFormatConfig(blockBasedTableConfig);
options.setCompactionStyle(CompactionStyle.UNIVERSAL);
options.setCreateIfMissing(Boolean.TRUE);

options.setEnablePipelinedWrite(true);
options.setIncreaseParallelism(8);
 

У кого-нибудь есть идеи, что может быть причиной этого исключения?

Комментарии:

1. Я также обнаружил аналогичную проблему в GitHub github.com/facebook/rocksdb/issues/4821 который также открыт уже почти 3 года