RocksDbChunkStorageProvider class

Пакет: com.hypixel.hytale.server.core.universe.world.storage.provider

Файл: com/hypixel/hytale/server/core/universe/world/storage/provider/RocksDbChunkStorageProvider.java

implements: IChunkStorageProvider<RocksDbChunkStorageProvider.RocksDbResource>

Поля (474)

МодификаторыТипИмя
public static final int LEVEL_COUNT
public static final MetricsRegistry<RocksDbChunkStorageProvider.Loader> METRICS_REGISTRY
public static final MetricsRegistry<RocksDbChunkStorageProvider.RocksDbStatistics> METRICS_REGISTRY
public static final MetricsRegistry<RocksDbChunkStorageProvider.RocksDbStatistics.HistogramSnapshot> METRICS_REGISTRY
public static final MetricsRegistry<RocksDbChunkStorageProvider.RocksDbStats> METRICS_REGISTRY
public static final MetricsRegistry<RocksDbChunkStorageProvider.RocksDbStats.ColumnFamilyStats> METRICS_REGISTRY
public static final MetricsRegistry<RocksDbChunkStorageProvider.Saver> METRICS_REGISTRY
private int arrayCapacity
public MemorySegment blobCache
public MemorySegment blockCache
public MemorySegment blockComponentColumn
break
break
private final BasicOutputBuffer bson
private MemorySegment cfPtrs
public MemorySegment chunkColumn
private final AtomicLong compactCount
continue
continue
private final RocksDbChunkStorageProvider.RocksDbResource db
public MemorySegment db
private final RocksDbChunkStorageProvider.RocksDbResource db
private final ShortArrayList deletes
private final BucketedOpStats deserializeStats
private final ShortSet dirty
public MemorySegment entityColumn
public MemorySegment entitySectionColumn
private final MemorySegment errPtr
private MemorySegment errs
private final AtomicLong flushCount
public MemorySegment flushOptions
public final RocksDbChunkStorageProvider.RocksDbStatistics.HistogramSnapshot[] histograms
public ExecutorService ioExecutor
private MemorySegment keyLens
private MemorySegment keyPtrs
private MemorySegment keys
private final AtomicLong loadCount
private final AtomicLong loadFailureCount
private final AtomicLong loadHitCount
private final AtomicLong loadMissCount
public MemorySegment options
private final ObjectArrayList<Holder<ChunkStore>> putHolders
private final ShortArrayList putIndexes
public MemorySegment readOptions
private final BucketedOpStats readStats
private final AtomicLong removeCount
private final AtomicLong removeFailureCount
private final BucketedOpStats removeStats
private ShortSet removed
private final boolean replaceAll
private final AtomicLong saveCount
private final AtomicLong saveFailureCount
private final BlockComponentSection section
public MemorySegment sectionColumn
private final BucketedOpStats serializeStats
public boolean statisticsEnabled
private final Store<ChunkStore> store
public final long[] tickers
private final AtomicLong totalBytesLoaded
private final AtomicLong totalBytesSaved
private MemorySegment value
private MemorySegment valueLens
private MemorySegment valuePtrs
MetricsRegistry var0
var0
var0
String var1
Runnable var1
MemorySegment var1
String var1
List var1
LongArrayList var1
BlockComponentSection var1
long[] var1
MemorySegment var1
ShortSet var1
MemorySegment var10
long var10
int var10
UUID[] var10
long var10
var10
MemorySegment var10
int var10
Set var10
int var10
Store var10
boolean var10
long var10
var10
ReferenceArrayList var10
List var10
var10
BsonDocument var10
long var10
MemorySegment var11
UUID[] var11
long var11
long var11
ObjectArrayList var11
int var11
long var11
RocksDbChunkStorageProvider.Saver.BlockComponentsToSave var11
ReferenceArrayList var11
EntitySection var11
MemorySegment var11
MemorySegment var11
byte[] var11
Holder var12
var12
MemorySegment var12
Holder var12
var12
ObjectArrayList var12
MemorySegment var12
BsonDocument var12
long var12
BiConsumer var12
CompletableFuture var12
var12
List var12
int var12
MemorySegment var12
String[] var13
Holder[] var13
var13
UUID[] var13
var13
long var13
ReferenceArrayList var13
MemorySegment var13
int var13
boolean var13
var13
int var13
MemorySegment var13
MemorySegment[] var14
UUID[][] var14
long var14
int var14
var14
BlockComponentSection var14
var14
CompletableFuture var14
var14
int var14
ReferenceArrayList var14
Iterator var14
var14
var14
var14
Holder var14
int var15
int var15
long var15
boolean var15
BlockSection var15
var15
boolean var15
UUID var15
var15
RocksDbChunkStorageProvider.Saver.BlockComponentsToSave var15
ChunkColumn var15
UUIDComponent var15
RocksDbChunkStorageProvider.Saver.SectionToSave var15
MemorySegment var16
MemorySegment var16
boolean var16
var16
var16
long var16
TransformComponent var16
boolean var16
boolean var16
var16
Holder var16
ObjectListIterator var16
Holder[] var16
RocksDbChunkStorageProvider.Saver.BlockComponentsToSave var16
var16
Holder var16
MemorySegment var17
int var17
var17
long var17
MemorySegment var17
UUIDComponent var17
Dirty var17
WorldChunk var17
BlockComponentSection var17
BsonDocument var17
MemorySegment var18
long var18
long var18
UUID var18
BiConsumer var18
boolean var18
EntitySection var18
ObjectIterator var18
MemorySegment var18
BsonDocument var19
int var19
MemorySegment var19
ObjectListIterator var19
ReferenceArrayList var19
BlockComponentSection var19
Entry var19
int var19
long var19
String var2
RocksDbChunkStorageProvider.RocksDbResource var2
Thread var2
MemorySegment var2
boolean var2
var2
IOException var2
boolean var2
MemorySegment var2
MemorySegment var2
int var2
CompletableFuture var2
int var2
RocksDbChunkStorageProvider.Scratch var2
ShortSet var2
MemorySegment var2
byte[] var2
var2
MemorySegment var2
MemorySegment var2
int var2
MemorySegment var20
ChunkColumn var20
MemorySegment var20
MemorySegment var20
BsonDocument var20
Dirty var20
ComponentRegistry.Data var20
RocksDbChunkStorageProvider.Saver.BlockComponentsToSave var20
MemorySegment var20
MemorySegment var20
MemorySegment var21
Holder[] var21
int var21
int var21
ComponentRegistry.Data var21
Dirty var21
MemorySegment var21
String var22
int var22
long var22
Holder var22
Ref[] var22
ChunkSection var22
UUID var22
long var22
ByteBuffer var23
BsonDocument var23
long var23
ReferenceArrayList var23
EntitySection var23
MemorySegment var23
BsonDocument var24
UUID[] var24
long var24
CompletableFuture var24
Ref var24
BlockComponentSection var24
Holder var25
Holder var25
TransformComponent var25
Holder var25
var25
Holder var25
var25
Dirty var25
ObjectArrayList var26
BsonDocument var26
ChunkSection var26
int var27
List var27
var27
ByteBuffer var28
EntitySection var28
BsonDocument var29
long var29
List var29
long var29
String var3
String var3
MemorySegment var3
MemorySegment var3
MemorySegment var3
MemorySegment var3
long var3
RocksDbChunkStorageProvider.Scratch var3
MemorySegment var3
MemorySegment var3
long[] var3
RocksDbChunkStorageProvider.Scratch var3
MemorySegment var3
RocksDbChunkStorageProvider.Saver.BlockComponentsToSave var3
RocksDbChunkStorageProvider.Scratch var3
byte[] var3
var3
MemorySegment var30
Holder var30
long var30
Set var30
Holder var30
UUIDComponent var31
ObjectListIterator var32
var32
var32
var32
var32
long var32
long var33
ChunkSection var33
int var33
int var34
UUID var34
int var35
ByteBuffer var36
MemorySegment var36
BiConsumer var36
MemorySegment var36
Holder[] var37
MemorySegment var37
WorldChunk var38
Holder var38
BsonDocument var38
long var39
Holder var39
int var39
MemorySegment var4
MemorySegment var4
int var4
int var4
RocksDbChunkStorageProvider.Scratch var4
int var4
MemorySegment var4
MemorySegment var4
MemorySegment var4
Holder var4
long var4
long var4
RocksDbChunkStorageProvider.Saver.BlockComponentsToSave var4
ComponentRegistry.Data var4
Holder var4
ReferenceArrayList var4
MemorySegment var4
byte[] var4
var4
Holder[] var40
var40
ObjectListIterator var40
Holder var41
var41
Holder var42
Dirty var42
ObjectArrayList var43
ChunkSection var43
ChunkSection var44
List var44
var44
MemorySegment var45
EntitySection var45
List var46
long var47
RocksDbChunkStorageProvider.Saver.BlockComponentsToSave var47
long var48
RocksDbChunkStorageProvider.Saver.BlockComponentsToSave var48
long var49
MemorySegment var5
MemorySegment var5
String var5
var5
int var5
MemorySegment var5
MemorySegment var5
MemorySegment var5
Dirty var5
ShortIterator var5
UUIDComponent var5
Holder var5
Store var5
ChunkColumn var5
long var5
byte[] var5
var5
BsonDocument var50
ByteBuffer var52
Holder var53
EntitySection var53
BlockComponentSection var54
RocksDbChunkStorageProvider.Saver.BlockComponentsToSave var55
Dirty var56
MemorySegment var6
MemorySegment var6
long var6
MemorySegment var6
int var6
RocksDbChunkStorageProvider.Scratch var6
long var6
long var6
Iterator var6
MemorySegment var6
long var6
short var6
MemorySegment var6
Dirty var6
UUIDComponent var6
Store var6
ReferenceArrayList var6
RocksDbChunkStorageProvider.Scratch var6
MemorySegment var7
MemorySegment var7
MemorySegment var7
int var7
MemorySegment var7
MemorySegment var7
MemorySegment var7
MemorySegment var7
Dirty var7
BsonDocument var7
Ref var7
MemorySegment var7
long var7
ReferenceArrayList var7
Dirty var7
Holder[] var7
MemorySegment var7
long var7
MemorySegment var8
MemorySegment var8
MemorySegment var8
long var8
int var8
long var8
MemorySegment var8
RocksDbChunkStorageProvider.RocksDbStatistics.HistogramSnapshot[] var8
Holder var8
MemorySegment var8
ComponentRegistry.Data var8
long var8
int var8
Holder var8
long var8
RocksDbChunkStorageProvider.Saver.BlockComponentsToSave var8
var8
ReferenceArrayList var8
var8
var8
var8
var8
long var8
MemorySegment var9
int var9
MemorySegment var9
CompletableFuture var9
BsonDocument var9
List var9
long var9
CompletableFuture var9
var9
var9
int var9
ReferenceArrayList var9
ChunkSection var9
Holder var9
long var9
private MemorySegment writeBatch
public MemorySegment writeOptions
private final BucketedOpStats writeStats

Методы (246)

МодификаторыВозвратСигнатура
private BlockComponentsToSaveprivate BlockComponentsToSave(@Nullable BlockComponentSection var1, @Nullable ShortSet var2, @Nullable ShortSet var3, boolean var4)
abstract throw new IOExceptionthrow new IOException(var5)
abstract throw new IllegalArgumentExceptionthrow new IllegalArgumentException("negative key scratch size: " + var1)
abstract throw new IllegalArgumentExceptionthrow new IllegalArgumentException("negative value scratch size: " + var1)
abstract throw new IllegalArgumentExceptionthrow new IllegalArgumentException("negative multiGet count: " + var1)
public Loaderpublic Loader(Store<ChunkStore> var1, RocksDbChunkStorageProvider.RocksDbResource var2)
public RocksDbExceptionpublic RocksDbException(@Nonnull String var1)
public RocksDbResourcepublic RocksDbResource()
private RocksDbStatisticsprivate RocksDbStatistics(@Nonnull long[] var1, @Nonnull RocksDbChunkStorageProvider.RocksDbStatistics.HistogramSnapshot[] var2)
public Saverpublic Saver(RocksDbChunkStorageProvider.RocksDbResource var1)
private Scratchprivate Scratch()
private record SectionToSaveprivate record SectionToSave(int x, int y, int z, @Nullable Holder<ChunkStore> section, @Nullable List<UUID> entities, @Nullable RocksDbChunkStorageProvider.Saver.BlockComponentsToSave blockComponents)
private static MetricsRegistry<RocksDbChunkStorageProvider.RocksDbStatistics> buildRegistryprivate static MetricsRegistry<RocksDbChunkStorageProvider.RocksDbStatistics> buildRegistry()
static void checkErrorvoid checkError(@Nonnull MemorySegment var0)
abstract checkError checkError(var3)
abstract checkError checkError(var16)
static int chunkKeyXint chunkKeyX(@Nonnull MemorySegment var0)
static int chunkKeyZint chunkKeyZ(@Nonnull MemorySegment var0)
private MemorySegment clearErrPtrprivate MemorySegment clearErrPtr()
public void closevoid close(@NonNullDecl RocksDbChunkStorageProvider.RocksDbResource var1, @NonNullDecl Store<ChunkStore> var2)
public void closepublic void close()
public void closepublic void close()
private boolean closeInternalboolean closeInternal(@Nonnull RocksDbChunkStorageProvider.RocksDbResource var1)
private static void collectEntityUuidsFromHoldersprivate static void collectEntityUuidsFromHolders(@Nonnull List<Holder<EntityStore>> var0, @Nonnull ComponentRegistry.Data<EntityStore> var1, @Nonnull List<UUID> var2)
abstract collectEntityUuidsFromHolders collectEntityUuidsFromHolders(var9, var8, var11)
abstract collectEntityUuidsFromHolders collectEntityUuidsFromHolders(var46, var20, var44)
abstract collectEntityUuidsFromHolders collectEntityUuidsFromHolders(var29, var20, var27)
private static void collectEntityUuidsFromReferencesprivate static void collectEntityUuidsFromReferences(@Nonnull Iterable<Ref<EntityStore>> var0, @Nonnull ComponentRegistry.Data<EntityStore> var1, @Nonnull List<UUID> var2)
abstract collectEntityUuidsFromReferences collectEntityUuidsFromReferences(var10, var8, var11)
abstract collectEntityUuidsFromReferences collectEntityUuidsFromReferences(var30, var20, var27)
public CompletableFuture<Void> compactpublic CompletableFuture<Void> compact(@Nullable long[] var1)
private static int decodeEntitySectionUuidsprivate static int decodeEntitySectionUuids(@Nonnull RocksDbChunkStorageProvider.Scratch var0, @Nonnull UUID[][] var1, int var2, int var3)
public void deletevoid delete(@Nonnull RocksDbChunkStorageProvider.RocksDbResource var1, @Nonnull Store<ChunkStore> var2)
private void deleteDirtyIndexprivate void deleteDirtyIndex(short var1)
private void destroyprivate void destroy()
static boolean drainIoExecutorboolean drainIoExecutor(@Nonnull ExecutorService var0)
private void ensureArraysprivate void ensureArrays(int var1)
static void failPendingIovoid failPendingIo(@Nonnull RocksDbChunkStorageProvider.RocksDbResource var0)
abstract failPendingIo failPendingIo(var1)
public void flushpublic void flush()
for for(int var19 = 0; var19 < var15; var19++)
for for(CompletableFuture var4 : var1)
for for(int var4 = 0; var4 < var3; var4++)
for for(int var6 = 0; var6 < var3; var6++)
for for(int var2 = 0; var2 < var1; var2++)
for for(int var8 = 0; var8 < 10; var8++)
for for(int var32 = 0; var32 < 10; var32++)
for for(int var18 = 0; var18 < 21; var18++)
for for(int var41 = 0; var41 < var40.length; var41++)
for for(int var22 = 0; var22 < 10; var22++)
for for(int var5 = 0; var5 < 10; var5++)
for for(int var13 = 0; var13 < var10; var13++)
for for(int var9 = 0; var9 < 10; var9++)
for for(UUID var14 : var10)
for for(int var23 = 0; var23 < 10; var23++)
for for(int var27 = 0; var27 < var24.length; var27++)
for for(int var21 = 0; var21 < var19; var21++)
for for(int var46 = 0; var46 < var13.length; var46++)
for for(int var51 = 0; var51 < var13.length; var51++)
for for(int var13 = var3; var13 < var4; var13++)
for for(int var2 = 0; var2 < RocksDbNative.STATISTICS_TICKERS.length; var2++)
for for(int var4 = 0; var4 < RocksDbNative.STATISTICS_HISTOGRAMS.length; var4++)
for for(int var1 = 0; var1 < RocksDbNative.STATISTICS_TICKERS.length; var1++)
for for(int var3 = 0; var3 < RocksDbNative.STATISTICS_HISTOGRAMS.length; var3++)
for for(int var4 = 0; var4 < var3.length; var4++)
for for(int var14 = 0; var14 < var10; var14++)
for for(int var37 = 0; var37 < var16.length; var37++)
for for(int var23 = 0; var23 < var22.length; var23++)
for for(Ref var4 : var0)
for for(Ref var5 : var0)
for for(int var8 = 0; var8 < var7.length; var8++)
for for(int var21 = 0; var21 < var33; var21++)
for for(long var9 : var1)
abstract for for(int var28 = 0; var28 < var12.size()
abstract for for(int var10 = 0; var10 < var6.deletes.size()
abstract for for(int var11 = 0; var11 < var6.putIndexes.size()
abstract for for(int var3 = 0; var3 < var0.size()
abstract for for(int var4 = 0; var4 < var0.size()
abstract for for(int var13 = 0; var13 < var12.size()
abstract for for(int var14 = 0; var14 < var4.size()
abstract for for(int var28 = 0; var28 < var5.size()
static void freeValuesvoid freeValues(@Nonnull RocksDbChunkStorageProvider.Scratch var0, int var1)
public static RocksDbChunkStorageProvider.RocksDbStatistics.HistogramSnapshot frompublic static RocksDbChunkStorageProvider.RocksDbStatistics.HistogramSnapshot from(@Nonnull MemorySegment var0)
public LongList getIndexespublic LongList getIndexes()
public LongList getIndexespublic LongList getIndexes()
private static long getLongCfprivate static long getLongCf(@Nonnull Arena var0, @Nonnull MemorySegment var1, @Nonnull MemorySegment var2, @Nonnull String var3)
private static long getLongDbprivate static long getLongDb(@Nonnull Arena var0, @Nonnull MemorySegment var1, @Nonnull String var2)
private static long getStringLongCfprivate static long getStringLongCf(@Nonnull Arena var0, @Nonnull MemorySegment var1, @Nonnull MemorySegment var2, @Nonnull String var3)
if if(var2.statisticsEnabled)
if if(var22 != null)
if if(var5)
if if(var1 != null)
if if(var1.db == null)
if if(var1.ioExecutor != null)
if if(!var2)
if if(var1.writeOptions != null)
if if(var1.readOptions != null)
if if(var1.flushOptions != null)
if if(var1.blockCache != null)
if if(var1.options != null)
if if(var6 < 8L)
if if(var5 == null)
if if(var1 == null)
if if(var3 > 268435456L)
if if(var36 == null)
if if(var12 == null)
if if(var40.length < 10)
if if(var42 != null)
if if(var23 != null)
if if(var25 == null)
if if(var13 != null)
if if(var16)
if if(var8 % 16L != 0L)
if if(var1 != null)
if if(var3 > 0)
if if(var10 != null)
if if(var24 != null)
if if(var25 == null)
if if(var28 != null)
if if(var29 == null)
if if(var30 != null)
if if(var16 != null)
if if(var3 > 0)
if if(!var15)
if if(var16)
if if(var17 % 16L != 0L)
if if(var12 == null)
if if(var13 != null)
if if(var13.length > 0)
if if(var52 != null)
if if(var23 == null)
if if(var53 != null)
if if(var25 != null)
if if(var18 < 12L)
if if(var18 != 14L)
if if(var21 >= 32768)
if if(!var16)
if if(var22 != null)
if if(var14 == null)
if if(var23 > 268435456L)
if if(var26 != null)
if if(var25 == null)
if if(var7 != null)
if if(var17 == null)
if if(!var15)
if if(var7 != null)
if if(var3x != null)
if if(var0 == null)
if if(var1)
if if(var4 != null)
if if(var1 == null && var2 == null)
if if(var1 != null)
if if(var2 != null)
if if(var6.replaceAll)
if if(var8 == null)
if if(!var10 && var8 != null)
if if(var7 != null)
if if(var8 == null)
if if(var2x != null)
if if(var16 != null)
if if(var39 != null)
if if(var45 != null)
if if(var41 != null || var44 != null || var47 != null)
if if(var28 != null)
if if(var25 != null || var27 != null || var48 != null)
if if(!var13)
if if(var6 != null)
if if(var7x != null)
if if(var6 != null)
if if(var7 != null)
if if(var5 != null)
if if(var7 != null)
if if(var9 != null)
if if(var11 != null)
if if(var17 != null)
if if(var16 != null)
if if(var15.entities != null)
if if(var15.blockComponents != null)
if if(var31 == null)
if if(var1 != null && var1.length > 0)
if if(var2 == null)
if if(this.removed == null)
if if(this.section != null)
if if(var1 < 0)
if if(var1 < 0)
if if(var1 < 0)
if if(this.arrayCapacity < var1)
if if(this.writeBatch == null)
if if(this.writeBatch != null)
public RocksDbChunkStorageProvider.RocksDbResource initializeRocksDbChunkStorageProvider.RocksDbResource initialize(@NonNullDecl Store<ChunkStore> var1)
private MemorySegment keysprivate MemorySegment keys(int var1)
private void loadBlockComponentRowsprivate void loadBlockComponentRows(int var1, int var2, int var3, int var4, @Nonnull IntFunction<Holder<ChunkStore>> var5)
private void loadEntitySectionsprivate void loadEntitySections(@Nullable Holder<ChunkStore>[] var1, @Nonnull UUID[][] var2, int var3, int var4, int var5)
public CompletableFuture<Holder<ChunkStore>> loadHolderpublic CompletableFuture<Holder<ChunkStore>> loadHolder(int var1, int var2)
public CompletableFuture<Holder<ChunkStore>> loadSectionHolderpublic CompletableFuture<Holder<ChunkStore>> loadSectionHolder(int var1, int var2, int var3)
private static boolean markEmbeddedBlockComponentsForRewriteprivate static boolean markEmbeddedBlockComponentsForRewrite(@Nonnull Holder<ChunkStore> var0)
abstract markEmbeddedBlockComponentsForRewrite markEmbeddedBlockComponentsForRewrite(var42)
static void multiGetvoid multiGet(@Nonnull MemorySegment var0, @Nonnull MemorySegment var1, @Nonnull RocksDbChunkStorageProvider.Scratch var2, int var3)
static double parseDoublePropertydouble parseDoubleProperty(@Nonnull String var0, double var1)
static int parseIntPropertyint parseIntProperty(@Nonnull String var0, int var1)
static long parseLongPropertylong parseLongProperty(@Nonnull String var0, long var1)
public void pauseBackgroundSavingpublic void pauseBackgroundSaving(ChunkSavingSystems.Data var1)
private static RocksDbChunkStorageProvider.Saver.BlockComponentsToSave prepareBlockComponentsToSaveprivate static RocksDbChunkStorageProvider.Saver.BlockComponentsToSave prepareBlockComponentsToSave(@Nullable BlockComponentSection var0, boolean var1, @Nonnull ReferenceArrayList<BlockComponentSection> var2, @Nonnull ReferenceArrayList<RocksDbChunkStorageProvider.Saver.BlockComponentsToSave> var3)
static void putBlockComponentKeyvoid putBlockComponentKey(@Nonnull MemorySegment var0, long var1, int var3, int var4, int var5, short var6)
static void putChunkKeyvoid putChunkKey(@Nonnull MemorySegment var0, long var1, int var3, int var4)
static void putSectionKeyvoid putSectionKey(@Nonnull MemorySegment var0, long var1, int var3, int var4, int var5)
abstract putSectionKey putSectionKey(var0, var1, var3, var4, var5)
static void putUuidKeyvoid putUuidKey(@Nonnull MemorySegment var0, long var1, long var3, long var5)
public CompletableFuture<Void> removeEntitypublic CompletableFuture<Void> removeEntity(@Nonnull UUID var1)
public CompletableFuture<Void> removeHolderpublic CompletableFuture<Void> removeHolder(int var1, int var2)
private void restoreprivate void restore()
public CompletableFuture<Void> resumeBackgroundSavingpublic CompletableFuture<Void> resumeBackgroundSaving()
public CompletableFuture<Void> runIopublic CompletableFuture<Void> runIo(@Nonnull Runnable var1)
public CompletableFuture<Void> saveBlockComponentSectionpublic CompletableFuture<Void> saveBlockComponentSection(int var1, int var2, int var3, @Nonnull Store<ChunkStore> var4, @Nonnull BlockComponentSection var5, @Nullable Executor var6, @Nullable Runnable var7)
public CompletableFuture<Void> saveChunkColumnpublic CompletableFuture<Void> saveChunkColumn(int var1, int var2, @Nonnull Store<ChunkStore> var3, @Nonnull Ref<ChunkStore> var4, @Nullable Executor var5, @Nullable Runnable var6)
public CompletableFuture<Void> saveEntitypublic CompletableFuture<Void> saveEntity(UUID var1, @Nonnull Store<EntityStore> var2, @Nonnull Ref<EntityStore> var3)
public CompletableFuture<Void> saveEntitySectionpublic CompletableFuture<Void> saveEntitySection(int var1, int var2, int var3, @Nonnull Store<ChunkStore> var4, @Nonnull EntitySection var5, @Nullable Executor var6, @Nullable Runnable var7)
public CompletableFuture<Void> saveHolderpublic CompletableFuture<Void> saveHolder(int var1, int var2, @Nonnull Holder<ChunkStore> var3)
public CompletableFuture<Void> saveSectionpublic CompletableFuture<Void> saveSection(int var1, int var2, int var3, @Nonnull Store<ChunkStore> var4, @Nonnull Ref<ChunkStore> var5, @Nullable Executor var6, @Nullable Runnable var7)
static void setKeyLenvoid setKeyLen(@Nonnull RocksDbChunkStorageProvider.Scratch var0, int var1, long var2)
public static RocksDbChunkStorageProvider.RocksDbStatistics snapshotpublic static RocksDbChunkStorageProvider.RocksDbStatistics snapshot(@Nonnull MemorySegment var0)
public static RocksDbChunkStorageProvider.RocksDbStats snapshotpublic static RocksDbChunkStorageProvider.RocksDbStats snapshot(@Nonnull RocksDbChunkStorageProvider.RocksDbResource var0)
public static RocksDbChunkStorageProvider.RocksDbStats.ColumnFamilyStats snapshotpublic static RocksDbChunkStorageProvider.RocksDbStats.ColumnFamilyStats snapshot(@Nonnull Arena var0, @Nonnull MemorySegment var1, @Nonnull MemorySegment var2)
private static RocksDbChunkStorageProvider.Saver.BlockComponentsToSave snapshotBlockComponentsprivate static RocksDbChunkStorageProvider.Saver.BlockComponentsToSave snapshotBlockComponents(@Nonnull BlockComponentSection var0)
private static void snapshotDirtyEntityHoldersprivate static void snapshotDirtyEntityHolders(@Nonnull List<Holder<EntityStore>> var0, @Nonnull ComponentRegistry.Data<EntityStore> var1, @Nonnull List<Holder<EntityStore>> var2, @Nonnull List<Dirty> var3)
abstract snapshotDirtyEntityHolders snapshotDirtyEntityHolders(var9, var8, var12, var13)
abstract snapshotDirtyEntityHolders snapshotDirtyEntityHolders(var46, var20, var19, var11)
abstract snapshotDirtyEntityHolders snapshotDirtyEntityHolders(var29, var20, var19, var11)
private static void snapshotDirtyEntityReferencesprivate static void snapshotDirtyEntityReferences(@Nonnull Iterable<Ref<EntityStore>> var0, @Nonnull ComponentRegistry.Data<EntityStore> var1, @Nonnull List<Holder<EntityStore>> var2, @Nonnull List<Dirty> var3)
abstract snapshotDirtyEntityReferences snapshotDirtyEntityReferences(var10, var8, var12, var13)
abstract snapshotDirtyEntityReferences snapshotDirtyEntityReferences(var30, var20, var19, var11)
static int stageValueint stageValue(@Nonnull RocksDbChunkStorageProvider.Scratch var0, @Nullable BsonDocument var1)
private CompletableFuture<Void> submitChunkColumnBatchprivate CompletableFuture<Void> submitChunkColumnBatch(int var1, int var2, @Nonnull Holder<ChunkStore> var3, @Nonnull List<RocksDbChunkStorageProvider.Saver.SectionToSave> var4, @Nonnull List<Holder<EntityStore>> var5)
abstract super super(var1)
public <T> CompletableFuture<T> supplyIopublic <T> CompletableFuture<T> supplyIo(@Nonnull Supplier<T> var1)
static byte[] toKeybyte[] toKey(int var0, int var1)
public MetricResults toMetricResultspublic MetricResults toMetricResults()
public MetricResults toMetricResultspublic MetricResults toMetricResults()
public MetricResults toMetricResultspublic MetricResults toMetricResults()
public MetricResults toMetricResultspublic MetricResults toMetricResults()
public MetricResults toMetricResultspublic MetricResults toMetricResults()
public MetricResults toMetricResultspublic MetricResults toMetricResults()
private MemorySegment valueprivate MemorySegment value(int var1)
static long valueLenlong valueLen(@Nonnull RocksDbChunkStorageProvider.Scratch var0, int var1)
private MemorySegment writeBatchprivate MemorySegment writeBatch()
private static int writeBlockComponentRowsprivate static int writeBlockComponentRows(@Nonnull RocksDbChunkStorageProvider.Scratch var0, @Nonnull MemorySegment var1, @Nonnull MemorySegment var2, int var3, int var4, int var5, @Nonnull RocksDbChunkStorageProvider.Saver.BlockComponentsToSave var6)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.universe.world.storage.provider;

class="kw">import com.hypixel.hytale.codec.Codec;
class="kw">import com.hypixel.hytale.codec.builder.BuilderCodec;
class="kw">import com.hypixel.hytale.component.ComponentRegistry;
class="kw">import com.hypixel.hytale.component.Holder;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.lib.rocksdb.RocksDbNative;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.metrics.BucketedOpStats;
class="kw">import com.hypixel.hytale.metrics.MetricProvider;
class="kw">import com.hypixel.hytale.metrics.MetricResults;
class="kw">import com.hypixel.hytale.metrics.MetricsRegistry;
class="kw">import com.hypixel.hytale.server.core.entity.Dirty;
class="kw">import com.hypixel.hytale.server.core.entity.UUIDComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.BlockComponentChunk;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.ChunkColumn;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.ChunkFlag;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.EntityChunk;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.WorldChunk;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.BlockComponentSection;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.BlockSection;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.ChunkSection;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.EntitySection;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.ChunkStore;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.IChunkLoader;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.IChunkSaver;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.component.ChunkSavingSystems;
class="kw">import com.hypixel.hytale.server.core.util.BsonUtil;
class="kw">import com.hypixel.hytale.server.core.util.io.FileUtil;
class="kw">import com.hypixel.hytale.server.core.util.io.MemorySegmentUtil;
class="kw">import com.hypixel.hytale.sneakythrow.SneakyThrow;
class="kw">import it.unimi.dsi.fastutil.longs.LongArrayList;
class="kw">import it.unimi.dsi.fastutil.longs.LongList;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectIterator;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectListIterator;
class="kw">import it.unimi.dsi.fastutil.objects.ReferenceArrayList;
class="kw">import it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet;
class="kw">import it.unimi.dsi.fastutil.shorts.ShortArrayList;
class="kw">import it.unimi.dsi.fastutil.shorts.ShortIterator;
class="kw">import it.unimi.dsi.fastutil.shorts.ShortOpenHashSet;
class="kw">import it.unimi.dsi.fastutil.shorts.ShortSet;
class="kw">import it.unimi.dsi.fastutil.shorts.Short2ObjectMap.Entry;
class="kw">import java.io.IOException;
class="kw">import java.lang.foreign.Arena;
class="kw">import java.lang.foreign.MemorySegment;
class="kw">import java.lang.foreign.ValueLayout;
class="kw">import java.nio.ByteBuffer;
class="kw">import java.util.Arrays;
class="kw">import java.util.Iterator;
class="kw">import java.util.List;
class="kw">import java.util.Set;
class="kw">import java.util.UUID;
class="kw">import java.util.concurrent.CompletableFuture;
class="kw">import java.util.concurrent.ConcurrentHashMap;
class="kw">import java.util.concurrent.Executor;
class="kw">import java.util.concurrent.ExecutorService;
class="kw">import java.util.concurrent.Executors;
class="kw">import java.util.concurrent.ForkJoinPool;
class="kw">import java.util.concurrent.RejectedExecutionException;
class="kw">import java.util.concurrent.TimeUnit;
class="kw">import java.util.concurrent.atomic.AtomicInteger;
class="kw">import java.util.concurrent.atomic.AtomicLong;
class="kw">import java.util.function.BiConsumer;
class="kw">import java.util.function.IntFunction;
class="kw">import java.util.function.Supplier;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.bson.BsonDocument;
class="kw">import org.bson.io.BasicOutputBuffer;
class="kw">import org.checkerframework.checker.nullness.compatqual.NonNullDecl;

class="kw">public class RocksDbChunkStorageProvider class="kw">implements IChunkStorageProvider<RocksDbChunkStorageProvider.RocksDbResource> {
   @Nonnull
   class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
   class="kw">public class="kw">static class="kw">final String ID = "RocksDb";
   class="kw">public class="kw">static class="kw">final BuilderCodec<RocksDbChunkStorageProvider> CODEC = BuilderCodec.builder(
         RocksDbChunkStorageProvider.class, RocksDbChunkStorageProvider::new
      )
      .build();
   class="kw">public class="kw">static class="kw">final String STATISTICS_PROPERTY = "hytale.rocksdb.stats";
   class="kw">public class="kw">static class="kw">final String BLOB_GC_AGE_CUTOFF_PROPERTY = "hytale.rocksdb.blob_gc_age_cutoff";
   class="kw">public class="kw">static class="kw">final String BLOB_GC_FORCE_THRESHOLD_PROPERTY = "hytale.rocksdb.blob_gc_force_threshold";
   class="kw">public class="kw">static class="kw">final String BLOB_COMPACTION_READAHEAD_SIZE_PROPERTY = "hytale.rocksdb.blob_compaction_readahead_size";
   class="kw">public class="kw">static class="kw">final String MIN_BLOB_SIZE_PROPERTY = "hytale.rocksdb.min_blob_size";
   class="kw">public class="kw">static class="kw">final String BLOB_CACHE_SIZE_PROPERTY = "hytale.rocksdb.blob_cache_size";
   class="kw">public class="kw">static class="kw">final String IO_THREADS_PROPERTY = "hytale.rocksdb.io_threads";
   class="kw">private class="kw">static class="kw">final double BLOB_GC_AGE_CUTOFF = parseDoubleProperty("hytale.rocksdb.blob_gc_age_cutoff", 0.25);
   class="kw">private class="kw">static class="kw">final double BLOB_GC_FORCE_THRESHOLD = parseDoubleProperty("hytale.rocksdb.blob_gc_force_threshold", 0.75);
   class="kw">private class="kw">static class="kw">final long BLOB_COMPACTION_READAHEAD_BYTES = parseLongProperty("hytale.rocksdb.blob_compaction_readahead_size", 2097152L);
   class="kw">private class="kw">static class="kw">final long MIN_BLOB_SIZE_BYTES = parseLongProperty("hytale.rocksdb.min_blob_size", 4096L);
   class="kw">private class="kw">static class="kw">final long BLOCK_CACHE_BYTES = 134217728L;
   class="kw">private class="kw">static class="kw">final long BLOB_CACHE_BYTES = parseLongProperty("hytale.rocksdb.blob_cache_size", 0L);
   class="kw">private class="kw">static class="kw">final long CHUNK_LEVEL_COMPACTION_BUDGET = 33554432L;
   class="kw">private class="kw">static class="kw">final long SECTION_LEVEL_COMPACTION_BUDGET = 67108864L;
   class="kw">private class="kw">static class="kw">final long ENTITY_SECTION_LEVEL_COMPACTION_BUDGET = 8388608L;
   class="kw">private class="kw">static class="kw">final long ENTITY_LEVEL_COMPACTION_BUDGET = 16777216L;
   class="kw">private class="kw">static class="kw">final long BLOCK_COMPONENT_LEVEL_COMPACTION_BUDGET = 8388608L;
   class="kw">private class="kw">static class="kw">final double BLOOM_BITS_PER_KEY = 9.9;
   class="kw">private class="kw">static class="kw">final int IO_THREADS = Math.max(1, parseIntProperty("hytale.rocksdb.io_threads", 4));
   class="kw">private class="kw">static class="kw">final AtomicInteger IO_THREAD_COUNTER = new AtomicInteger();
   class="kw">private class="kw">static class="kw">final int CHUNK_KEY_BYTES = 8;
   class="kw">private class="kw">static class="kw">final int SECTION_KEY_BYTES = 12;
   class="kw">private class="kw">static class="kw">final int ENTITY_KEY_BYTES = 16;
   class="kw">private class="kw">static class="kw">final int BLOCK_COMPONENT_KEY_BYTES = 14;
   class="kw">private class="kw">static class="kw">final long MAX_ENTITIES_PER_SECTION = 65536L;
   class="kw">private class="kw">static class="kw">final long MAX_ROW_BYTES = 268435456L;
   class="kw">private class="kw">static class="kw">final ThreadLocal<RocksDbChunkStorageProvider.Scratch> SCRATCH = ThreadLocal.withInitial(RocksDbChunkStorageProvider.Scratch::new);

   class="kw">public RocksDbChunkStorageProvider() {
   }

   @Nullable
   class="kw">private class="kw">static String rawProperty(@Nonnull String var0) {
      String var1 = System.getProperty(var0);
      class="kw">return var1 != null && !var1.isBlank() ? var1.trim() : null;
   }

   class="kw">private class="kw">static double parseDoubleProperty(@Nonnull String var0, double var1) {
      String var3 = rawProperty(var0);
      class="kw">return var3 == null ? var1 : Double.parseDouble(var3);
   }

   class="kw">private class="kw">static long parseLongProperty(@Nonnull String var0, long var1) {
      String var3 = rawProperty(var0);
      class="kw">return var3 == null ? var1 : Long.parseLong(var3);
   }

   class="kw">private class="kw">static int parseIntProperty(@Nonnull String var0, int var1) {
      String var2 = rawProperty(var0);
      class="kw">return var2 == null ? var1 : Integer.parseInt(var2);
   }

   class="kw">public RocksDbChunkStorageProvider.RocksDbResource initialize(@NonNullDecl Store<ChunkStore> var1) class="kw">throws IOException {
      RocksDbChunkStorageProvider.RocksDbResource var2 = new RocksDbChunkStorageProvider.RocksDbResource();
      var2.statisticsEnabled = Boolean.getBoolean("hytale.rocksdb.stats");
      MemorySegment var3 = RocksDbNative.cacheCreateLru(134217728L);
      var2.blockCache = var3;
      MemorySegment var4 = BLOB_CACHE_BYTES > 0L ? RocksDbNative.cacheCreateLru(BLOB_CACHE_BYTES) : MemorySegment.NULL;
      var2.blobCache = var4;
      MemorySegment var5 = RocksDbNative.optionsCreate();
      var2.options = var5;
      RocksDbNative.optionsSetCreateIfMissing(var5, true);
      RocksDbNative.optionsSetCreateMissingColumnFamilies(var5, true);
      RocksDbNative.optionsIncreaseParallelism(var5, ForkJoinPool.getCommonPoolParallelism());
      RocksDbNative.optionsSetMaxTotalWalSize(var5, 536870912L);
      if (var2.statisticsEnabled) {
         RocksDbNative.optionsEnableStatistics(var5);
      }

      MemorySegment var6 = buildDefaultColumnOptions(var3);
      MemorySegment var7 = buildColumnOptions(var3, var4, 33554432L, 8, true);
      MemorySegment var8 = buildColumnOptions(var3, var4, 67108864L, 12, true);
      MemorySegment var9 = buildColumnOptions(var3, var4, 8388608L, 12, false);
      MemorySegment var10 = buildColumnOptions(var3, var4, 16777216L, 16, true);
      MemorySegment var11 = buildColumnOptions(var3, var4, 8388608L, 12, true);

      try (Arena var12 = Arena.ofConfined()) {
         String[] var13 = new String[]{"class="kw">default", "chunks", "sections", "entity_sections", "entities", "block_components"};
         MemorySegment[] var14 = new MemorySegment[]{var6, var7, var8, var9, var10, var11};
         int var15 = var13.length;
         MemorySegment var16 = var12.allocate(RocksDbNative.C_POINTER, var15);
         MemorySegment var17 = var12.allocate(RocksDbNative.C_POINTER, var15);
         MemorySegment var18 = var12.allocate(RocksDbNative.C_POINTER, var15);

         for (int var19 = 0; var19 < var15; var19++) {
            var16.setAtIndex(RocksDbNative.C_POINTER, var19, var12.allocateFrom(var13[var19]));
            var17.setAtIndex(RocksDbNative.C_POINTER, var19, var14[var19]);
         }

         MemorySegment var30 = var12.allocate(RocksDbNative.C_POINTER);
         var30.set(RocksDbNative.C_POINTER, 0L, MemorySegment.NULL);
         MemorySegment var20 = var12.allocateFrom(String.valueOf(var1.getExternalData().getWorld().getSavePath().resolve("db")));
         MemorySegment var21 = RocksDbNative.openColumnFamilies(var5, var20, var15, var16, var17, var18, var30);
         String var22 = RocksDbNative.consumeError(var30);
         if (var22 != null) {
            RocksDbNative.optionsDestroy(var5);
            RocksDbNative.cacheDestroy(var3);
            if (!var4.equals(MemorySegment.NULL)) {
               RocksDbNative.cacheDestroy(var4);
            }

            throw new RocksDbChunkStorageProvider.RocksDbException("Failed to open RocksDB: " + var22);
         }

         var2.db = var21;
         var2.chunkColumn = var18.getAtIndex(RocksDbNative.C_POINTER, 1L);
         var2.sectionColumn = var18.getAtIndex(RocksDbNative.C_POINTER, 2L);
         var2.entitySectionColumn = var18.getAtIndex(RocksDbNative.C_POINTER, 3L);
         var2.entityColumn = var18.getAtIndex(RocksDbNative.C_POINTER, 4L);
         var2.blockComponentColumn = var18.getAtIndex(RocksDbNative.C_POINTER, 5L);
         RocksDbNative.columnFamilyHandleDestroy(var18.getAtIndex(RocksDbNative.C_POINTER, 0L));
      } class="kw">finally {
         RocksDbNative.optionsDestroy(var6);
         RocksDbNative.optionsDestroy(var7);
         RocksDbNative.optionsDestroy(var8);
         RocksDbNative.optionsDestroy(var9);
         RocksDbNative.optionsDestroy(var10);
         RocksDbNative.optionsDestroy(var11);
      }

      var2.writeOptions = RocksDbNative.writeoptionsCreate();
      var2.readOptions = RocksDbNative.readoptionsCreate();
      var2.flushOptions = RocksDbNative.flushoptionsCreate();
      RocksDbNative.flushoptionsSetWait(var2.flushOptions, true);
      var2.ioExecutor = Executors.newFixedThreadPool(IO_THREADS, var0 -> {
         Runnable var1 = () -> {
            try {
               var0.run();
            } class="kw">finally {
               SCRATCH.get().destroy();
               SCRATCH.remove();
            }
         };
         Thread var2 = new Thread(var1, "rocksdb-io-" + IO_THREAD_COUNTER.getAndIncrement());
         var2.setDaemon(true);
         class="kw">return var2;
      });
      class="kw">return var2;
   }

   @Nonnull
   class="kw">private class="kw">static MemorySegment buildColumnOptions(@Nonnull MemorySegment var0, @Nonnull MemorySegment var1, long var2, int var4, boolean var5) {
      MemorySegment var6 = RocksDbNative.blockBasedOptionsCreate();
      RocksDbNative.blockBasedOptionsSetBlockCache(var6, var0);
      RocksDbNative.blockBasedOptionsSetIndexType(var6, 1);
      RocksDbNative.blockBasedOptionsSetFilterPolicy(var6, RocksDbNative.filterpolicyCreateBloomFull(9.9));
      RocksDbNative.blockBasedOptionsSetOptimizeFiltersForMemory(var6, true);
      MemorySegment var7 = RocksDbNative.optionsCreate();
      RocksDbNative.optionsSetCompression(var7, 4);
      RocksDbNative.optionsSetBottommostCompression(var7, 7);
      RocksDbNative.optionsSetBlockBasedTableFactory(var7, var6);
      RocksDbNative.blockBasedOptionsDestroy(var6);
      RocksDbNative.optionsSetCompactionStyle(var7, 0);
      RocksDbNative.optionsOptimizeLevelStyleCompaction(var7, var2);
      RocksDbNative.optionsSetLevelCompactionDynamicLevelBytes(var7, true);
      RocksDbNative.optionsSetCompactionPri(var7, 3);
      RocksDbNative.optionsSetPrefixExtractor(var7, RocksDbNative.slicetransformCreateFixedPrefix(var4));
      if (var5) {
         RocksDbNative.optionsSetEnableBlobFiles(var7, true);
         RocksDbNative.optionsSetEnableBlobGc(var7, true);
         RocksDbNative.optionsSetBlobCompactionReadaheadSize(var7, BLOB_COMPACTION_READAHEAD_BYTES);
         RocksDbNative.optionsSetMinBlobSize(var7, MIN_BLOB_SIZE_BYTES);
         RocksDbNative.optionsSetBlobGcAgeCutoff(var7, BLOB_GC_AGE_CUTOFF);
         RocksDbNative.optionsSetBlobGcForceThreshold(var7, BLOB_GC_FORCE_THRESHOLD);
         RocksDbNative.optionsSetBlobCompressionType(var7, 7);
         if (!var1.equals(MemorySegment.NULL)) {
            RocksDbNative.optionsSetBlobCache(var7, var1);
         }
      }

      class="kw">return var7;
   }

   @Nonnull
   class="kw">private class="kw">static MemorySegment buildDefaultColumnOptions(@Nonnull MemorySegment var0) {
      MemorySegment var1 = RocksDbNative.blockBasedOptionsCreate();
      RocksDbNative.blockBasedOptionsSetBlockCache(var1, var0);
      MemorySegment var2 = RocksDbNative.optionsCreate();
      RocksDbNative.optionsSetBlockBasedTableFactory(var2, var1);
      RocksDbNative.blockBasedOptionsDestroy(var1);
      class="kw">return var2;
   }

   class="kw">private class="kw">static void checkError(@Nonnull MemorySegment var0) {
      String var1 = RocksDbNative.consumeError(var0);
      if (var1 != null) {
         throw new RocksDbChunkStorageProvider.RocksDbException(var1);
      }
   }

   class="kw">public void delete(@Nonnull RocksDbChunkStorageProvider.RocksDbResource var1, @Nonnull Store<ChunkStore> var2) class="kw">throws IOException {
      if (!this.closeInternal(var1)) {
         LOGGER.at(Level.WARNING).log("RocksDB teardown was abandoned; skipping db directory removal to avoid a use-after-free");
      } else {
         FileUtil.deleteDirectory(var2.getExternalData().getWorld().getSavePath().resolve("db"));
      }
   }

   class="kw">private class="kw">static boolean drainIoExecutor(@Nonnull ExecutorService var0) {
      try {
         if (var0.awaitTermination(30L, TimeUnit.SECONDS)) {
            class="kw">return true;
         }

         var0.shutdownNow();
         class="kw">return var0.awaitTermination(30L, TimeUnit.SECONDS);
      } catch (InterruptedException var5) {
         var0.shutdownNow();
         boolean var2 = false;

         try {
            var2 = var0.awaitTermination(30L, TimeUnit.SECONDS);
         } catch (InterruptedException var4) {
         }

         Thread.currentThread().interrupt();
         class="kw">return var2;
      }
   }

   class="kw">private class="kw">static void failPendingIo(@Nonnull RocksDbChunkStorageProvider.RocksDbResource var0) {
      List var1 = List.copyOf(var0.inFlightIo);
      if (!var1.isEmpty()) {
         LOGGER.at(Level.WARNING)
            .log("Completing %d in-flight RocksDB I/O future(s) exceptionally during teardown so joiners fail fast instead of hanging", var1.size());
         IOException var2 = new IOException("RocksDB storage closed before this I/O task completed");

         for (CompletableFuture var4 : var1) {
            var4.completeExceptionally(var2);
         }
      }
   }

   class="kw">public void close(@NonNullDecl RocksDbChunkStorageProvider.RocksDbResource var1, @NonNullDecl Store<ChunkStore> var2) class="kw">throws IOException {
      this.closeInternal(var1);
   }

   class="kw">private boolean closeInternal(@Nonnull RocksDbChunkStorageProvider.RocksDbResource var1) {
      if (var1.db == null) {
         class="kw">return true;
      }

      if (var1.ioExecutor != null) {
         RocksDbNative.disableManualCompaction(var1.db);
         var1.ioExecutor.shutdown();
         boolean var2 = drainIoExecutor(var1.ioExecutor);
         failPendingIo(var1);
         if (!var2) {
            LOGGER.at(Level.WARNING).log("RocksDB I/O executor did not terminate; leaking class="kw">native handles to avoid a use-after-free during teardown");
            class="kw">return false;
         }
      }

      try (Arena var12 = Arena.ofConfined()) {
         MemorySegment var3 = var12.allocate(RocksDbNative.C_POINTER);
         var3.set(RocksDbNative.C_POINTER, 0L, MemorySegment.NULL);
         RocksDbNative.flushWal(var1.db, true, var3);
         checkError(var3);
      } class="kw">finally {
         RocksDbNative.columnFamilyHandleDestroy(var1.chunkColumn);
         RocksDbNative.columnFamilyHandleDestroy(var1.sectionColumn);
         RocksDbNative.columnFamilyHandleDestroy(var1.entitySectionColumn);
         RocksDbNative.columnFamilyHandleDestroy(var1.entityColumn);
         RocksDbNative.columnFamilyHandleDestroy(var1.blockComponentColumn);
         RocksDbNative.close(var1.db);
         var1.db = null;
         if (var1.writeOptions != null) {
            RocksDbNative.writeoptionsDestroy(var1.writeOptions);
            var1.writeOptions = null;
         }

         if (var1.readOptions != null) {
            RocksDbNative.readoptionsDestroy(var1.readOptions);
            var1.readOptions = null;
         }

         if (var1.flushOptions != null) {
            RocksDbNative.flushoptionsDestroy(var1.flushOptions);
            var1.flushOptions = null;
         }

         if (var1.blockCache != null) {
            RocksDbNative.cacheDestroy(var1.blockCache);
            var1.blockCache = null;
         }

         if (var1.blobCache != null && !var1.blobCache.equals(MemorySegment.NULL)) {
            RocksDbNative.cacheDestroy(var1.blobCache);
            var1.blobCache = null;
         }

         if (var1.options != null) {
            RocksDbNative.optionsDestroy(var1.options);
            var1.options = null;
         }
      }

      class="kw">return true;
   }

   @Nonnull
   class="kw">public IChunkLoader getLoader(@Nonnull RocksDbChunkStorageProvider.RocksDbResource var1, @Nonnull Store<ChunkStore> var2) class="kw">throws IOException {
      class="kw">return new RocksDbChunkStorageProvider.Loader(var2, var1);
   }

   @Nonnull
   class="kw">public IChunkSaver getSaver(@Nonnull RocksDbChunkStorageProvider.RocksDbResource var1, @Nonnull Store<ChunkStore> var2) class="kw">throws IOException {
      class="kw">return new RocksDbChunkStorageProvider.Saver(var1);
   }

   class="kw">private class="kw">static byte[] toKey(int var0, int var1) {
      class="kw">return new byte[]{
         (byte)(var0 >>> 24), (byte)(var0 >>> 16), (byte)(var0 >>> 8), (byte)var0, (byte)(var1 >>> 24), (byte)(var1 >>> 16), (byte)(var1 >>> 8), (byte)var1
      };
   }

   class="kw">private class="kw">static int chunkKeyX(@Nonnull MemorySegment var0) {
      class="kw">return var0.get(MemorySegmentUtil.INT_BE, 0L);
   }

   class="kw">private class="kw">static int chunkKeyZ(@Nonnull MemorySegment var0) {
      class="kw">return var0.get(MemorySegmentUtil.INT_BE, 4L);
   }

   @Nonnull
   class="kw">private class="kw">static LongList chunkIndexesFromColumn(@Nonnull RocksDbChunkStorageProvider.RocksDbResource var0) {
      LongArrayList var1 = new LongArrayList();

      try (Arena var2 = Arena.ofConfined()) {
         MemorySegment var3 = var2.allocate(RocksDbNative.C_SIZE_T);
         MemorySegment var4 = RocksDbNative.createIteratorCf(var0.db, var0.readOptions, var0.chunkColumn);

         try {
            RocksDbNative.iterSeekToFirst(var4);

            while (RocksDbNative.iterValid(var4)) {
               MemorySegment var5 = RocksDbNative.iterKey(var4, var3);
               long var6 = RocksDbNative.getSizeT(var3, 0L);
               if (var6 < 8L) {
                  LOGGER.at(Level.WARNING).log("Skipping corrupted chunk key in chunk column: %d bytes (expected %d)", var6, 8);
                  RocksDbNative.iterNext(var4);
               } else {
                  MemorySegment var8 = var5.reinterpret(var6);
                  var1.add(ChunkUtil.indexChunk(chunkKeyX(var8), chunkKeyZ(var8)));
                  RocksDbNative.iterNext(var4);
               }
            }

            MemorySegment var16 = var2.allocate(RocksDbNative.C_POINTER);
            RocksDbNative.iterGetError(var4, var16);
            checkError(var16);
         } class="kw">finally {
            RocksDbNative.iterDestroy(var4);
         }
      }

      class="kw">return var1;
   }

   class="kw">private class="kw">static void putChunkKey(@Nonnull MemorySegment var0, long var1, int var3, int var4) {
      var0.set(MemorySegmentUtil.INT_BE, var1, var3);
      var0.set(MemorySegmentUtil.INT_BE, var1 + 4L, var4);
   }

   class="kw">private class="kw">static void putSectionKey(@Nonnull MemorySegment var0, long var1, int var3, int var4, int var5) {
      var0.set(MemorySegmentUtil.INT_BE, var1, var3);
      var0.set(MemorySegmentUtil.INT_BE, var1 + 4L, var5);
      var0.set(MemorySegmentUtil.INT_BE, var1 + 8L, var4);
   }

   class="kw">private class="kw">static void putBlockComponentKey(@Nonnull MemorySegment var0, long var1, int var3, int var4, int var5, short var6) {
      putSectionKey(var0, var1, var3, var4, var5);
      var0.set(MemorySegmentUtil.SHORT_BE, var1 + 12L, var6);
   }

   class="kw">private class="kw">static void putUuidKey(@Nonnull MemorySegment var0, long var1, long var3, long var5) {
      var0.set(MemorySegmentUtil.LONG_BE, var1, var3);
      var0.set(MemorySegmentUtil.LONG_BE, var1 + 8L, var5);
   }

   class="kw">private class="kw">static void multiGet(@Nonnull MemorySegment var0, @Nonnull MemorySegment var1, @Nonnull RocksDbChunkStorageProvider.Scratch var2, int var3) {
      RocksDbNative.multiGetCf(var0, var1, var2.cfPtrs, var3, var2.keyPtrs, var2.keyLens, var2.valuePtrs, var2.valueLens, var2.errs);

      for (int var4 = 0; var4 < var3; var4++) {
         if (!var2.errs.getAtIndex(RocksDbNative.C_POINTER, var4).equals(MemorySegment.NULL)) {
            String var5 = null;

            for (int var6 = 0; var6 < var3; var6++) {
               MemorySegment var7 = var2.errs.getAtIndex(RocksDbNative.C_POINTER, var6);
               if (!var7.equals(MemorySegment.NULL)) {
                  if (var5 == null) {
                     var5 = var7.reinterpret(Long.MAX_VALUE).getString(0L);
                  }

                  RocksDbNative.free(var7);
                  var2.errs.setAtIndex(RocksDbNative.C_POINTER, var6, MemorySegment.NULL);
               }

               MemorySegment var8 = var2.valuePtrs.getAtIndex(RocksDbNative.C_POINTER, var6);
               if (!var8.equals(MemorySegment.NULL)) {
                  RocksDbNative.free(var8);
                  var2.valuePtrs.setAtIndex(RocksDbNative.C_POINTER, var6, MemorySegment.NULL);
               }
            }

            throw new RocksDbChunkStorageProvider.RocksDbException("multiGet failed: " + var5);
         }
      }
   }

   class="kw">private class="kw">static void freeValues(@Nonnull RocksDbChunkStorageProvider.Scratch var0, int var1) {
      for (int var2 = 0; var2 < var1; var2++) {
         MemorySegment var3 = var0.valuePtrs.getAtIndex(RocksDbNative.C_POINTER, var2);
         if (!var3.equals(MemorySegment.NULL)) {
            RocksDbNative.free(var3);
            var0.valuePtrs.setAtIndex(RocksDbNative.C_POINTER, var2, MemorySegment.NULL);
         }
      }
   }

   class="kw">private class="kw">static long valueLen(@Nonnull RocksDbChunkStorageProvider.Scratch var0, int var1) {
      class="kw">return RocksDbNative.getSizeT(var0.valueLens, var1 * RocksDbNative.C_SIZE_T.byteSize());
   }

   class="kw">private class="kw">static void setKeyLen(@Nonnull RocksDbChunkStorageProvider.Scratch var0, int var1, long var2) {
      RocksDbNative.setSizeT(var0.keyLens, var1 * RocksDbNative.C_SIZE_T.byteSize(), var2);
   }

   @Nonnull
   class="kw">private class="kw">static MemorySegment toNativeKey(@Nonnull Arena var0, @Nullable byte[] var1) {
      if (var1 == null) {
         class="kw">return MemorySegment.NULL;
      }

      MemorySegment var2 = var0.allocate(var1.length);
      MemorySegment.copy(var1, 0, var2, ValueLayout.JAVA_BYTE, 0L, var1.length);
      class="kw">return var2;
   }

   @Nullable
   class="kw">private class="kw">static ByteBuffer valueBuffer(@Nonnull RocksDbChunkStorageProvider.Scratch var0, int var1) {
      MemorySegment var2 = var0.valuePtrs.getAtIndex(RocksDbNative.C_POINTER, var1);
      if (var2.equals(MemorySegment.NULL)) {
         class="kw">return null;
      } else {
         long var3 = valueLen(var0, var1);
         if (var3 > 268435456L) {
            LOGGER.at(Level.WARNING).log("Skipping oversized row: %d bytes (max %d)", var3, 268435456L);
            class="kw">return null;
         } else {
            class="kw">return var2.reinterpret(var3).asByteBuffer();
         }
      }
   }

   class="kw">private class="kw">static int stageValue(@Nonnull RocksDbChunkStorageProvider.Scratch var0, @Nullable BsonDocument var1) {
      int var2 = BsonUtil.encodeInto(var1, var0.bson);
      MemorySegment.copy(var0.bson.getInternalBuffer(), 0, var0.value(var2), ValueLayout.JAVA_BYTE, 0L, var2);
      class="kw">return var2;
   }

   class="kw">public class="kw">static class Loader class="kw">implements IChunkLoader, IChunkLoader.Cubic, MetricProvider {
      @Nonnull
      class="kw">public class="kw">static class="kw">final MetricsRegistry<RocksDbChunkStorageProvider.Loader> METRICS_REGISTRY = new MetricsRegistry<RocksDbChunkStorageProvider.Loader>()
         .register("LoadCount", var0 -> var0.loadCount.get(), Codec.LONG)
         .register("LoadHitCount", var0 -> var0.loadHitCount.get(), Codec.LONG)
         .register("LoadMissCount", var0 -> var0.loadMissCount.get(), Codec.LONG)
         .register("LoadFailureCount", var0 -> var0.loadFailureCount.get(), Codec.LONG)
         .register("TotalBytesLoaded", var0 -> var0.totalBytesLoaded.get(), Codec.LONG)
         .register("ReadStats", var0 -> var0.readStats)
         .register("DeserializeStats", var0 -> var0.deserializeStats);
      class="kw">private class="kw">final Store<ChunkStore> store;
      class="kw">private class="kw">final RocksDbChunkStorageProvider.RocksDbResource db;
      class="kw">private class="kw">final AtomicLong loadCount = new AtomicLong();
      class="kw">private class="kw">final AtomicLong loadHitCount = new AtomicLong();
      class="kw">private class="kw">final AtomicLong loadMissCount = new AtomicLong();
      class="kw">private class="kw">final AtomicLong loadFailureCount = new AtomicLong();
      class="kw">private class="kw">final AtomicLong totalBytesLoaded = new AtomicLong();
      class="kw">private class="kw">final BucketedOpStats readStats = new BucketedOpStats();
      class="kw">private class="kw">final BucketedOpStats deserializeStats = new BucketedOpStats();

      class="kw">public Loader(Store<ChunkStore> var1, RocksDbChunkStorageProvider.RocksDbResource var2) {
         this.store = var1;
         this.db = var2;
      }

      @Nonnull
      @Override
      class="kw">public CompletableFuture<Holder<ChunkStore>> loadHolder(int var1, int var2) {
         class="kw">return this.db
            .supplyIo(
               SneakyThrow.sneakySupplier(
                  () -> {
                     RocksDbChunkStorageProvider.Scratch var3 = RocksDbChunkStorageProvider.SCRATCH.get();
                     int var4 = 21;
                     var3.ensureArrays(21);
                     int var5 = 248;
                     MemorySegment var6 = var3.keys(248);
                     int var7 = 0;
                     RocksDbChunkStorageProvider.putChunkKey(var6, var7, var1, var2);
                     var3.cfPtrs.setAtIndex(RocksDbNative.C_POINTER, 0L, this.db.chunkColumn);
                     var3.keyPtrs.setAtIndex(RocksDbNative.C_POINTER, 0L, var6.asSlice(var7, 8L));
                     RocksDbChunkStorageProvider.setKeyLen(var3, 0, 8L);
                     var7 += 8;

                     for (int var8 = 0; var8 < 10; var8++) {
                        int var9 = 1 + var8;
                        RocksDbChunkStorageProvider.putSectionKey(var6, var7, var1, var8, var2);
                        var3.cfPtrs.setAtIndex(RocksDbNative.C_POINTER, var9, this.db.sectionColumn);
                        var3.keyPtrs.setAtIndex(RocksDbNative.C_POINTER, var9, var6.asSlice(var7, 12L));
                        RocksDbChunkStorageProvider.setKeyLen(var3, var9, 12L);
                        var7 += 12;
                     }

                     for (int var32 = 0; var32 < 10; var32++) {
                        int var34 = 11 + var32;
                        RocksDbChunkStorageProvider.putSectionKey(var6, var7, var1, var32, var2);
                        var3.cfPtrs.setAtIndex(RocksDbNative.C_POINTER, var34, this.db.entitySectionColumn);
                        var3.keyPtrs.setAtIndex(RocksDbNative.C_POINTER, var34, var6.asSlice(var7, 12L));
                        RocksDbChunkStorageProvider.setKeyLen(var3, var34, 12L);
                        var7 += 12;
                     }

                     long var33 = System.nanoTime();

                     try {
                        RocksDbChunkStorageProvider.multiGet(this.db.db, this.db.readOptions, var3, 21);
                     } catch (RocksDbChunkStorageProvider.RocksDbException var29) {
                        this.loadFailureCount.getAndIncrement();
                        throw var29;
                     }

                     long var10 = System.nanoTime();
                     UUID[][] var14 = new UUID[10][];
                     int var15 = 0;
                     boolean var16 = false;

                     Holder var12;
                     Holder[] var13;
                     int var17;
                     try {
                        for (int var18 = 0; var18 < 21; var18++) {
                           if (!var3.valuePtrs.getAtIndex(RocksDbNative.C_POINTER, var18).equals(MemorySegment.NULL)) {
                              var15 += (int)RocksDbChunkStorageProvider.valueLen(var3, var18);
                           }
                        }

                        this.loadCount.getAndIncrement();
                        this.readStats.record(var10 - var33, var15);
                        ByteBuffer var36 = RocksDbChunkStorageProvider.valueBuffer(var3, 0);
                        if (var36 == null) {
                           this.loadMissCount.getAndIncrement();
                           class="kw">return null;
                        }

                        this.loadHitCount.getAndIncrement();
                        this.totalBytesLoaded.getAndAdd(var15);
                        BsonDocument var19 = BsonUtil.readFromBuffer(var36);
                        var12 = ChunkStore.REGISTRY.deserialize(var19);
                        if (var12 == null) {
                           RocksDbChunkStorageProvider.LOGGER
                              .at(Level.WARNING)
                              .log("Skipping column (%d, %d): column payload failed to deserialize", var1, var2);
                           class="kw">return null;
                        }

                        ChunkColumn var20 = var12.ensureAndGetComponent(ChunkColumn.getComponentType());
                        var16 = var20.getSectionHolders() != null
                           || var12.getComponent(EntityChunk.getComponentType()) != null
                           || var12.getComponent(BlockComponentChunk.getComponentType()) != null;
                        if (var20.getSectionHolders() != null) {
                           Holder[] var40 = var20.getSectionHolders();
                           if (var40.length < 10) {
                              RocksDbChunkStorageProvider.LOGGER
                                 .at(Level.WARNING)
                                 .log("Padding truncated Sections array at chunk (%d, %d): %d sections (expected %d)", var1, var2, var40.length, 10);
                              var40 = Arrays.copyOf(var40, 10);
                              var20.putSectionHolders(var40);
                           }

                           for (int var41 = 0; var41 < var40.length; var41++) {
                              Holder var42 = var40[var41];
                              if (var42 != null) {
                                 var42.putComponent(ChunkSection.getComponentType(), new ChunkSection(null, var1, var41, var2, false));
                                 markEmbeddedBlockComponentsForRewrite(var42);
                              }
                           }
                        } else {
                           Holder[] var21 = new Holder[10];

                           for (int var22 = 0; var22 < 10; var22++) {
                              ByteBuffer var23 = RocksDbChunkStorageProvider.valueBuffer(var3, 1 + var22);
                              if (var23 != null) {
                                 BsonDocument var24 = BsonUtil.readFromBuffer(var23);
                                 Holder var25 = ChunkStore.REGISTRY.deserialize(var24);
                                 if (var25 == null) {
                                    RocksDbChunkStorageProvider.LOGGER
                                       .at(Level.WARNING)
                                       .log("Skipping section (%d, %d, %d): section payload failed to deserialize", var1, var22, var2);
                                 } else {
                                    var25.putComponent(ChunkSection.getComponentType(), new ChunkSection(null, var1, var22, var2, false));
                                    if (markEmbeddedBlockComponentsForRewrite(var25)) {
                                       var16 = true;
                                    }

                                    var21[var22] = var25;
                                 }
                              }
                           }

                           var20.putSectionHolders(var21);
                        }

                        var13 = var20.getSectionHolders();
                        var17 = decodeEntitySectionUuids(var3, var14, var1, var2);
                     } class="kw">finally {
                        RocksDbChunkStorageProvider.freeValues(var3, 21);
                     }

                     this.loadEntitySections(var13, var14, var17, var1, var2);
                     if (var13 != null) {
                        Holder[] var37 = var13;
                        this.loadBlockComponentRows(var1, var2, 0, 10, var1x -> var37[var1x]);
                     }

                     WorldChunk var38 = var12.getComponent(WorldChunk.getComponentType());
                     assert var38 != null;
                     var38.loadFromHolder(this.store.getExternalData().getWorld(), var1, var2, var12);
                     if (var16) {
                        var38.setFlag(ChunkFlag.NEEDS_FORMAT_REWRITE, true);
                     }

                     long var39 = System.nanoTime();
                     this.deserializeStats.record(var39 - var10, var15);
                     class="kw">return var12;
                  }
               )
            );
      }

      class="kw">private class="kw">static int decodeEntitySectionUuids(@Nonnull RocksDbChunkStorageProvider.Scratch var0, @Nonnull UUID[][] var1, int var2, int var3) {
         int var4 = 0;

         for (int var5 = 0; var5 < 10; var5++) {
            int var6 = 11 + var5;
            MemorySegment var7 = var0.valuePtrs.getAtIndex(RocksDbNative.C_POINTER, var6);
            if (!var7.equals(MemorySegment.NULL)) {
               long var8 = RocksDbChunkStorageProvider.valueLen(var0, var6);
               if (var8 % 16L != 0L) {
                  RocksDbChunkStorageProvider.LOGGER
                     .at(Level.WARNING)
                     .log("Skipping corrupted entity_sections row at chunk (%d, %d) section %d: %d bytes (expected multiple of 16)", var2, var3, var5, var8);
               } else if (var8 / 16L > 65536L) {
                  RocksDbChunkStorageProvider.LOGGER
                     .at(Level.WARNING)
                     .log(
                        "Skipping corrupted entity_sections row at chunk (%d, %d) section %d: %d entities exceeds the %d cap",
                        var2,
                        var3,
                        var5,
                        var8 / 16L,
                        65536L
                     );
               } else {
                  int var10 = (int)(var8 / 16L);
                  UUID[] var11 = new UUID[var10];
                  MemorySegment var12 = var7.reinterpret(var8);

                  for (int var13 = 0; var13 < var10; var13++) {
                     long var14 = var12.get(MemorySegmentUtil.LONG_BE, var13 * 16L);
                     long var16 = var12.get(MemorySegmentUtil.LONG_BE, var13 * 16L + 8L);
                     var11[var13] = new UUID(var14, var16);
                  }

                  var1[var5] = var11;
                  var4 += var10;
               }
            }
         }

         class="kw">return var4;
      }

      class="kw">private void loadEntitySections(@Nullable Holder<ChunkStore>[] var1, @Nonnull UUID[][] var2, int var3, int var4, int var5) {
         if (var1 != null) {
            RocksDbChunkStorageProvider.Scratch var6 = RocksDbChunkStorageProvider.SCRATCH.get();
            if (var3 > 0) {
               var6.ensureArrays(var3);
               MemorySegment var7 = var6.keys(var3 * 16);
               int var8 = 0;

               for (int var9 = 0; var9 < 10; var9++) {
                  UUID[] var10 = var2[var9];
                  if (var10 != null) {
                     for (UUID var14 : var10) {
                        long var15 = var8 * 16L;
                        RocksDbChunkStorageProvider.putUuidKey(var7, var15, var14.getMostSignificantBits(), var14.getLeastSignificantBits());
                        var6.cfPtrs.setAtIndex(RocksDbNative.C_POINTER, var8, this.db.entityColumn);
                        var6.keyPtrs.setAtIndex(RocksDbNative.C_POINTER, var8, var7.asSlice(var15, 16L));
                        RocksDbChunkStorageProvider.setKeyLen(var6, var8, 16L);
                        var8++;
                     }
                  }
               }

               RocksDbChunkStorageProvider.multiGet(this.db.db, this.db.readOptions, var6, var3);
            }

            try {
               int var22 = 0;

               for (int var23 = 0; var23 < 10; var23++) {
                  UUID[] var24 = var2[var23];
                  if (var24 != null) {
                     Holder var25 = var1[var23];
                     if (var25 == null) {
                        var22 += var24.length;
                     } else {
                        ObjectArrayList var26 = new ObjectArrayList(var24.length);

                        for (int var27 = 0; var27 < var24.length; var27++) {
                           ByteBuffer var28 = RocksDbChunkStorageProvider.valueBuffer(var6, var22 + var27);
                           if (var28 != null) {
                              try {
                                 BsonDocument var29 = BsonUtil.readFromBuffer(var28);
                                 if (var29 == null) {
                                    RocksDbChunkStorageProvider.LOGGER
                                       .at(Level.WARNING)
                                       .log("Skipping corrupted entity %s at chunk (%d, %d) section %d: empty body row", var24[var27], var4, var5, var23);
                                 } else {
                                    Holder var30 = EntityStore.REGISTRY.deserialize(var29);
                                    if (var30 != null) {
                                       TransformComponent var16 = var30.getComponent(TransformComponent.getComponentType());
                                       if (var16 != null) {
                                          var16.seedLastSavedPosition();
                                       }

                                       var26.add(var30);
                                    }
                                 }
                              } catch (Exception var20) {
                                 ((HytaleLogger.Api)RocksDbChunkStorageProvider.LOGGER.at(Level.WARNING).withCause(var20))
                                    .log("Skipping corrupted entity %s at chunk (%d, %d) section %d: body failed to decode", var24[var27], var4, var5, var23);
                              }
                           }
                        }

                        var22 += var24.length;
                        var25.putComponent(EntitySection.getComponentType(), new EntitySection(var26, new ReferenceOpenHashSet()));
                     }
                  }
               }
            } class="kw">finally {
               if (var3 > 0) {
                  RocksDbChunkStorageProvider.freeValues(var6, var3);
               }
            }
         }
      }

      @Nonnull
      @Override
      class="kw">public LongList getIndexes() class="kw">throws IOException {
         class="kw">return RocksDbChunkStorageProvider.chunkIndexesFromColumn(this.db);
      }

      @Override
      class="kw">public void close() class="kw">throws IOException {
      }

      @Nonnull
      @Override
      class="kw">public MetricResults toMetricResults() {
         class="kw">return METRICS_REGISTRY.toMetricResults(this);
      }

      @Override
      class="kw">public CompletableFuture<Holder<ChunkStore>> loadSectionHolder(int var1, int var2, int var3) {
         class="kw">return this.db
            .supplyIo(
               SneakyThrow.sneakySupplier(
                  () -> {
                     RocksDbChunkStorageProvider.Scratch var4 = RocksDbChunkStorageProvider.SCRATCH.get();
                     var4.ensureArrays(2);
                     MemorySegment var5 = var4.keys(24);
                     RocksDbChunkStorageProvider.putSectionKey(var5, 0L, var1, var2, var3);
                     var4.cfPtrs.setAtIndex(RocksDbNative.C_POINTER, 0L, this.db.sectionColumn);
                     var4.keyPtrs.setAtIndex(RocksDbNative.C_POINTER, 0L, var5.asSlice(0L, 12L));
                     RocksDbChunkStorageProvider.setKeyLen(var4, 0, 12L);
                     RocksDbChunkStorageProvider.putSectionKey(var5, 12L, var1, var2, var3);
                     var4.cfPtrs.setAtIndex(RocksDbNative.C_POINTER, 1L, this.db.entitySectionColumn);
                     var4.keyPtrs.setAtIndex(RocksDbNative.C_POINTER, 1L, var5.asSlice(12L, 12L));
                     RocksDbChunkStorageProvider.setKeyLen(var4, 1, 12L);
                     long var6 = 0L;
                     long var8 = 0L;
                     long var10 = System.nanoTime();

                     try {
                        RocksDbChunkStorageProvider.multiGet(this.db.db, this.db.readOptions, var4, 2);
                     } catch (RocksDbChunkStorageProvider.RocksDbException var37) {
                        this.loadFailureCount.getAndIncrement();
                        throw var37;
                     }

                     var6 += System.nanoTime() - var10;
                     UUID[] var13 = null;

                     Holder var12;
                     int var14;
                     try {
                        boolean var15 = !var4.valuePtrs.getAtIndex(RocksDbNative.C_POINTER, 0L).equals(MemorySegment.NULL);
                        boolean var16 = !var4.valuePtrs.getAtIndex(RocksDbNative.C_POINTER, 1L).equals(MemorySegment.NULL);
                        long var17 = var16 ? RocksDbChunkStorageProvider.valueLen(var4, 1) : 0L;
                        this.loadCount.getAndIncrement();
                        if (!var15) {
                           this.loadMissCount.getAndIncrement();
                           this.readStats.record(var6, (int)var17);
                           class="kw">return null;
                        }

                        this.loadHitCount.getAndIncrement();
                        var14 = (int)(RocksDbChunkStorageProvider.valueLen(var4, 0) + var17);
                        if (var16) {
                           if (var17 % 16L != 0L) {
                              RocksDbChunkStorageProvider.LOGGER
                                 .at(Level.WARNING)
                                 .log(
                                    "Skipping corrupted entity_sections row at section (%d, %d, %d): %d bytes (expected multiple of 16)",
                                    var1,
                                    var2,
                                    var3,
                                    var17
                                 );
                           } else if (var17 / 16L > 65536L) {
                              RocksDbChunkStorageProvider.LOGGER
                                 .at(Level.WARNING)
                                 .log(
                                    "Skipping corrupted entity_sections row at section (%d, %d, %d): %d entities exceeds the %d cap",
                                    var1,
                                    var2,
                                    var3,
                                    var17 / 16L,
                                    65536L
                                 );
                           } else {
                              int var19 = (int)(var17 / 16L);
                              var13 = new UUID[var19];
                              MemorySegment var20 = var4.valuePtrs.getAtIndex(RocksDbNative.C_POINTER, 1L).reinterpret(var17);

                              for (int var21 = 0; var21 < var19; var21++) {
                                 long var22 = var20.get(MemorySegmentUtil.LONG_BE, var21 * 16L);
                                 long var24 = var20.get(MemorySegmentUtil.LONG_BE, var21 * 16L + 8L);
                                 var13[var21] = new UUID(var22, var24);
                              }
                           }
                        }

                        long var48 = System.nanoTime();
                        BsonDocument var50 = BsonUtil.readFromBuffer(RocksDbChunkStorageProvider.valueBuffer(var4, 0));
                        var12 = ChunkStore.REGISTRY.deserialize(var50);
                        if (var12 == null) {
                           RocksDbChunkStorageProvider.LOGGER
                              .at(Level.WARNING)
                              .log("Skipping section (%d, %d, %d): section payload failed to deserialize", var1, var2, var3);
                           class="kw">return null;
                        }

                        var12.putComponent(ChunkSection.getComponentType(), new ChunkSection(null, var1, var2, var3, false));
                        var8 += System.nanoTime() - var48;
                     } class="kw">finally {
                        RocksDbChunkStorageProvider.freeValues(var4, 2);
                     }

                     this.totalBytesLoaded.getAndAdd(var14);
                     if (var13 != null) {
                        ObjectArrayList var43 = new ObjectArrayList(var13.length);
                        if (var13.length > 0) {
                           var4.ensureArrays(var13.length);
                           MemorySegment var45 = var4.keys(var13.length * 16);

                           for (int var46 = 0; var46 < var13.length; var46++) {
                              long var18 = var46 * 16L;
                              RocksDbChunkStorageProvider.putUuidKey(
                                 var45, var18, var13[var46].getMostSignificantBits(), var13[var46].getLeastSignificantBits()
                              );
                              var4.cfPtrs.setAtIndex(RocksDbNative.C_POINTER, var46, this.db.entityColumn);
                              var4.keyPtrs.setAtIndex(RocksDbNative.C_POINTER, var46, var45.asSlice(var18, 16L));
                              RocksDbChunkStorageProvider.setKeyLen(var4, var46, 16L);
                           }

                           var10 = System.nanoTime();
                           RocksDbChunkStorageProvider.multiGet(this.db.db, this.db.readOptions, var4, var13.length);
                           var6 += System.nanoTime() - var10;

                           try {
                              long var47 = System.nanoTime();
                              long var49 = 0L;

                              for (int var51 = 0; var51 < var13.length; var51++) {
                                 ByteBuffer var52 = RocksDbChunkStorageProvider.valueBuffer(var4, var51);
                                 if (var52 != null) {
                                    var49 += RocksDbChunkStorageProvider.valueLen(var4, var51);

                                    try {
                                       BsonDocument var23 = BsonUtil.readFromBuffer(var52);
                                       if (var23 == null) {
                                          RocksDbChunkStorageProvider.LOGGER
                                             .at(Level.WARNING)
                                             .log("Skipping corrupted entity %s at section (%d, %d, %d): empty body row", var13[var51], var1, var2, var3);
                                       } else {
                                          Holder var53 = EntityStore.REGISTRY.deserialize(var23);
                                          if (var53 != null) {
                                             TransformComponent var25 = var53.getComponent(TransformComponent.getComponentType());
                                             if (var25 != null) {
                                                var25.seedLastSavedPosition();
                                             }

                                             var43.add(var53);
                                          }
                                       }
                                    } catch (Exception var36) {
                                       ((HytaleLogger.Api)RocksDbChunkStorageProvider.LOGGER.at(Level.WARNING).withCause(var36))
                                          .log("Skipping corrupted entity %s at section (%d, %d, %d): body failed to decode", var13[var51], var1, var2, var3);
                                    }
                                 }
                              }

                              var8 += System.nanoTime() - var47;
                              var14 += (int)var49;
                              this.totalBytesLoaded.getAndAdd(var49);
                           } class="kw">finally {
                              RocksDbChunkStorageProvider.freeValues(var4, var13.length);
                           }
                        }

                        var12.putComponent(EntitySection.getComponentType(), new EntitySection(var43, new ReferenceOpenHashSet()));
                     }

                     if (markEmbeddedBlockComponentsForRewrite(var12)) {
                        ChunkSection var44 = var12.getComponent(ChunkSection.getComponentType());
                        assert var44 != null;
                        var44.markNeedsSaving();
                     }

                     this.loadBlockComponentRows(var1, var3, var2, var2 + 1, var1x -> var12);
                     this.readStats.record(var6, var14);
                     this.deserializeStats.record(var8, var14);
                     class="kw">return var12;
                  }
               )
            );
      }

      class="kw">private class="kw">static boolean markEmbeddedBlockComponentsForRewrite(@Nonnull Holder<ChunkStore> var0) {
         BlockComponentSection var1 = var0.getComponent(BlockComponentSection.getComponentType());
         if (var1 != null && !var1.getBlockHolders().isEmpty()) {
            var1.markAllBlocksNeedsSaving();
            class="kw">return true;
         } else {
            class="kw">return false;
         }
      }

      class="kw">private void loadBlockComponentRows(int var1, int var2, int var3, int var4, @Nonnull IntFunction<Holder<ChunkStore>> var5) {
         try (Arena var6 = Arena.ofConfined()) {
            MemorySegment var7 = var6.allocate(12L);
            MemorySegment var8 = var6.allocate(RocksDbNative.C_SIZE_T);
            MemorySegment var9 = var6.allocate(RocksDbNative.C_POINTER);
            MemorySegment var10 = RocksDbNative.createIteratorCf(this.db.db, this.db.readOptions, this.db.blockComponentColumn);

            try {
               long var11 = 0L;

               for (int var13 = var3; var13 < var4; var13++) {
                  BlockComponentSection var14 = null;
                  BlockSection var15 = null;
                  boolean var16 = false;
                  RocksDbChunkStorageProvider.putSectionKey(var7, 0L, var1, var13, var2);
                  RocksDbNative.iterSeek(var10, var7, 12L);

                  while (RocksDbNative.iterValid(var10)) {
                     MemorySegment var17 = RocksDbNative.iterKey(var10, var8);
                     long var18 = RocksDbNative.getSizeT(var8, 0L);
                     if (var18 < 12L) {
                        break;
                     }

                     MemorySegment var20 = var17.reinterpret(var18);
                     if (var20.get(MemorySegmentUtil.INT_BE, 0L) != var1
                        || var20.get(MemorySegmentUtil.INT_BE, 4L) != var2
                        || var20.get(MemorySegmentUtil.INT_BE, 8L) != var13) {
                        break;
                     }

                     if (var18 != 14L) {
                        RocksDbChunkStorageProvider.LOGGER
                           .at(Level.WARNING)
                           .log("Skipping corrupted block_components key at section (%d, %d, %d): %d bytes (expected %d)", var1, var13, var2, var18, 14);
                        RocksDbNative.iterNext(var10);
                     } else {
                        int var21 = Short.toUnsignedInt(var20.get(MemorySegmentUtil.SHORT_BE, 12L));
                        if (var21 >= 32768) {
                           RocksDbChunkStorageProvider.LOGGER
                              .at(Level.WARNING)
                              .log("Skipping block component row at section (%d, %d, %d): index %d out of range (max %d)", var1, var13, var2, var21, 32767);
                           RocksDbNative.iterNext(var10);
                        } else {
                           if (!var16) {
                              var16 = true;
                              Holder var22 = var5.apply(var13);
                              if (var22 != null) {
                                 var14 = var22.ensureAndGetComponent(BlockComponentSection.getComponentType());
                                 var15 = var22.getComponent(BlockSection.getComponentType());
                              }
                           }

                           if (var14 == null) {
                              RocksDbChunkStorageProvider.LOGGER
                                 .at(Level.WARNING)
                                 .log("Skipping block component row at section (%d, %d, %d) index %d: no section payload", var1, var13, var2, var21);
                              RocksDbNative.iterNext(var10);
                           } else {
                              MemorySegment var36 = RocksDbNative.iterValue(var10, var8);
                              long var23 = RocksDbNative.getSizeT(var8, 0L);
                              if (var23 > 268435456L) {
                                 RocksDbChunkStorageProvider.LOGGER
                                    .at(Level.WARNING)
                                    .log(
                                       "Skipping oversized block component row at section (%d, %d, %d) index %d: %d bytes (max %d)",
                                       var1,
                                       var13,
                                       var2,
                                       var21,
                                       var23,
                                       268435456L
                                    );
                                 RocksDbNative.iterNext(var10);
                              } else {
                                 var11 += var23;
                                 Holder var25 = null;

                                 try {
                                    BsonDocument var26 = BsonUtil.readFromBuffer(var36.reinterpret(var23).asByteBuffer());
                                    if (var26 != null) {
                                       var25 = ChunkStore.REGISTRY.deserialize(var26);
                                    }
                                 } catch (Exception var33) {
                                    ((HytaleLogger.Api)RocksDbChunkStorageProvider.LOGGER.at(Level.WARNING).withCause(var33))
                                       .log("Skipping corrupted block component row at section (%d, %d, %d) index %d", var1, var13, var2, var21);
                                 }

                                 if (var25 == null) {
                                    RocksDbChunkStorageProvider.LOGGER
                                       .at(Level.WARNING)
                                       .log(
                                          "Skipping block component row at section (%d, %d, %d) index %d: payload failed to deserialize",
                                          var1,
                                          var13,
                                          var2,
                                          var21
                                       );
                                    RocksDbNative.iterNext(var10);
                                 } else {
                                    if (var15 != null && var15.get(ChunkUtil.xFromIndex(var21), ChunkUtil.yFromIndex(var21), ChunkUtil.zFromIndex(var21)) == 0) {
                                       RocksDbChunkStorageProvider.LOGGER
                                          .at(Level.WARNING)
                                          .log("Dropping orphaned block component row at section (%d, %d, %d) index %d: block is air", var1, var13, var2, var21);
                                       var14.removeBlockHolder((short)var21);
                                       var14.tombstoneBlock((short)var21);
                                    } else {
                                       var14.loadBlockHolder((short)var21, var25);
                                    }

                                    RocksDbNative.iterNext(var10);
                                 }
                              }
                           }
                        }
                     }
                  }

                  RocksDbNative.iterGetError(var10, var9);
                  RocksDbChunkStorageProvider.checkError(var9);
               }

               this.totalBytesLoaded.getAndAdd(var11);
            } class="kw">finally {
               RocksDbNative.iterDestroy(var10);
            }
         }
      }
   }

   class="kw">public class="kw">static class RocksDbException class="kw">extends RuntimeException {
      class="kw">public RocksDbException(@Nonnull String var1) {
         super(var1);
      }
   }

   class="kw">public class="kw">static class RocksDbResource {
      class="kw">public MemorySegment db;
      class="kw">public MemorySegment chunkColumn;
      class="kw">public MemorySegment sectionColumn;
      class="kw">public MemorySegment entitySectionColumn;
      class="kw">public MemorySegment entityColumn;
      class="kw">public MemorySegment blockComponentColumn;
      class="kw">public MemorySegment options;
      @Nullable
      class="kw">public MemorySegment blockCache;
      @Nullable
      class="kw">public MemorySegment blobCache;
      class="kw">public MemorySegment writeOptions;
      class="kw">public MemorySegment readOptions;
      class="kw">public MemorySegment flushOptions;
      class="kw">public boolean statisticsEnabled;
      class="kw">public ExecutorService ioExecutor;
      class="kw">private class="kw">final Set<CompletableFuture<?>> inFlightIo = ConcurrentHashMap.newKeySet();

      class="kw">public RocksDbResource() {
      }

      @Nonnull
      class="kw">public <T> CompletableFuture<T> supplyIo(@Nonnull Supplier<T> var1) {
         CompletableFuture var2 = new CompletableFuture<>();
         this.inFlightIo.add(var2);
         var2.whenComplete((var2x, var3) -> this.inFlightIo.remove(var2));

         try {
            this.ioExecutor.execute(() -> {
               try {
                  var2.complete(var1.get());
               } catch (Throwable var3) {
                  var2.completeExceptionally(var3);
               }
            });
         } catch (RejectedExecutionException var4) {
            var2.completeExceptionally(var4);
         }

         class="kw">return var2;
      }

      @Nonnull
      class="kw">public CompletableFuture<Void> runIo(@Nonnull Runnable var1) {
         class="kw">return this.supplyIo(() -> {
            var1.run();
            class="kw">return null;
         });
      }
   }

   class="kw">public class="kw">static class RocksDbStatistics class="kw">implements MetricProvider {
      @Nonnull
      class="kw">public class="kw">static class="kw">final MetricsRegistry<RocksDbChunkStorageProvider.RocksDbStatistics> METRICS_REGISTRY = buildRegistry();
      @Nonnull
      class="kw">public class="kw">final long[] tickers;
      @Nonnull
      class="kw">public class="kw">final RocksDbChunkStorageProvider.RocksDbStatistics.HistogramSnapshot[] histograms;

      class="kw">private RocksDbStatistics(@Nonnull long[] var1, @Nonnull RocksDbChunkStorageProvider.RocksDbStatistics.HistogramSnapshot[] var2) {
         this.tickers = var1;
         this.histograms = var2;
      }

      @Nonnull
      class="kw">public class="kw">static RocksDbChunkStorageProvider.RocksDbStatistics snapshot(@Nonnull MemorySegment var0) {
         long[] var1 = new long[RocksDbNative.STATISTICS_TICKERS.length];

         for (int var2 = 0; var2 < RocksDbNative.STATISTICS_TICKERS.length; var2++) {
            var1[var2] = RocksDbNative.optionsStatisticsGetTickerCount(var0, RocksDbNative.STATISTICS_TICKERS[var2].type());
         }

         RocksDbChunkStorageProvider.RocksDbStatistics.HistogramSnapshot[] var8 = new RocksDbChunkStorageProvider.RocksDbStatistics.HistogramSnapshot[RocksDbNative.STATISTICS_HISTOGRAMS.length];
         MemorySegment var3 = RocksDbNative.statisticsHistogramDataCreate();

         try {
            for (int var4 = 0; var4 < RocksDbNative.STATISTICS_HISTOGRAMS.length; var4++) {
               RocksDbNative.optionsStatisticsGetHistogramData(var0, RocksDbNative.STATISTICS_HISTOGRAMS[var4].type(), var3);
               var8[var4] = RocksDbChunkStorageProvider.RocksDbStatistics.HistogramSnapshot.from(var3);
            }
         } class="kw">finally {
            RocksDbNative.statisticsHistogramDataDestroy(var3);
         }

         class="kw">return new RocksDbChunkStorageProvider.RocksDbStatistics(var1, var8);
      }

      @Nonnull
      @Override
      class="kw">public MetricResults toMetricResults() {
         class="kw">return METRICS_REGISTRY.toMetricResults(this);
      }

      @Nonnull
      class="kw">private class="kw">static MetricsRegistry<RocksDbChunkStorageProvider.RocksDbStatistics> buildRegistry() {
         MetricsRegistry var0 = new MetricsRegistry<>();

         for (int var1 = 0; var1 < RocksDbNative.STATISTICS_TICKERS.length; var1++) {
            int var2 = var1;
            var0 = var0.register(RocksDbNative.STATISTICS_TICKERS[var1].name(), var1x -> var1x.tickers[var2], Codec.LONG);
         }

         for (int var3 = 0; var3 < RocksDbNative.STATISTICS_HISTOGRAMS.length; var3++) {
            int var4 = var3;
            var0 = var0.register(RocksDbNative.STATISTICS_HISTOGRAMS[var3].name(), var1x -> var1x.histograms[var4]);
         }

         class="kw">return var0;
      }

      class="kw">public record HistogramSnapshot(long count, long sum, double average, double median, double p95, double p99, double max, double stdDev)
         class="kw">implements MetricProvider {
         @Nonnull
         class="kw">public class="kw">static class="kw">final MetricsRegistry<RocksDbChunkStorageProvider.RocksDbStatistics.HistogramSnapshot> METRICS_REGISTRY = new MetricsRegistry<RocksDbChunkStorageProvider.RocksDbStatistics.HistogramSnapshot>()
            .register("Count", RocksDbChunkStorageProvider.RocksDbStatistics.HistogramSnapshot::count, Codec.LONG)
            .register("Sum", RocksDbChunkStorageProvider.RocksDbStatistics.HistogramSnapshot::sum, Codec.LONG)
            .register("Average", RocksDbChunkStorageProvider.RocksDbStatistics.HistogramSnapshot::average, Codec.DOUBLE)
            .register("Median", RocksDbChunkStorageProvider.RocksDbStatistics.HistogramSnapshot::median, Codec.DOUBLE)
            .register("P95", RocksDbChunkStorageProvider.RocksDbStatistics.HistogramSnapshot::p95, Codec.DOUBLE)
            .register("P99", RocksDbChunkStorageProvider.RocksDbStatistics.HistogramSnapshot::p99, Codec.DOUBLE)
            .register("Max", RocksDbChunkStorageProvider.RocksDbStatistics.HistogramSnapshot::max, Codec.DOUBLE)
            .register("StdDev", RocksDbChunkStorageProvider.RocksDbStatistics.HistogramSnapshot::stdDev, Codec.DOUBLE);

         class="kw">public HistogramSnapshot {
         }

         @Nonnull
         class="kw">public class="kw">static RocksDbChunkStorageProvider.RocksDbStatistics.HistogramSnapshot from(@Nonnull MemorySegment var0) {
            class="kw">return new RocksDbChunkStorageProvider.RocksDbStatistics.HistogramSnapshot(
               RocksDbNative.statisticsHistogramDataGetCount(var0),
               RocksDbNative.statisticsHistogramDataGetSum(var0),
               RocksDbNative.statisticsHistogramDataGetAverage(var0),
               RocksDbNative.statisticsHistogramDataGetMedian(var0),
               RocksDbNative.statisticsHistogramDataGetP95(var0),
               RocksDbNative.statisticsHistogramDataGetP99(var0),
               RocksDbNative.statisticsHistogramDataGetMax(var0),
               RocksDbNative.statisticsHistogramDataGetStdDev(var0)
            );
         }

         @Nonnull
         @Override
         class="kw">public MetricResults toMetricResults() {
            class="kw">return METRICS_REGISTRY.toMetricResults(this);
         }
      }
   }

   class="kw">public record RocksDbStats(
      long blockCacheBytes,
      long blockCachePinnedBytes,
      long blockCacheCapacityBytes,
      long blobCacheBytes,
      long blobCachePinnedBytes,
      long blobCacheCapacityBytes,
      long backgroundErrors,
      long memTableFlushPending,
      long numRunningFlushes,
      long numSnapshots,
      long numLiveVersions,
      long isWriteStopped,
      long actualDelayedWriteRate,
      @Nonnull RocksDbChunkStorageProvider.RocksDbStats.ColumnFamilyStats chunks,
      @Nonnull RocksDbChunkStorageProvider.RocksDbStats.ColumnFamilyStats sections,
      @Nonnull RocksDbChunkStorageProvider.RocksDbStats.ColumnFamilyStats entitySections,
      @Nonnull RocksDbChunkStorageProvider.RocksDbStats.ColumnFamilyStats entities
   ) class="kw">implements MetricProvider {
      class="kw">public class="kw">static class="kw">final int LEVEL_COUNT = 7;
      @Nonnull
      class="kw">public class="kw">static class="kw">final MetricsRegistry<RocksDbChunkStorageProvider.RocksDbStats> METRICS_REGISTRY = new MetricsRegistry<RocksDbChunkStorageProvider.RocksDbStats>()
         .register("BlockCacheBytes", RocksDbChunkStorageProvider.RocksDbStats::blockCacheBytes, Codec.LONG)
         .register("BlockCachePinnedBytes", RocksDbChunkStorageProvider.RocksDbStats::blockCachePinnedBytes, Codec.LONG)
         .register("BlockCacheCapacityBytes", RocksDbChunkStorageProvider.RocksDbStats::blockCacheCapacityBytes, Codec.LONG)
         .register("BlobCacheBytes", RocksDbChunkStorageProvider.RocksDbStats::blobCacheBytes, Codec.LONG)
         .register("BlobCachePinnedBytes", RocksDbChunkStorageProvider.RocksDbStats::blobCachePinnedBytes, Codec.LONG)
         .register("BlobCacheCapacityBytes", RocksDbChunkStorageProvider.RocksDbStats::blobCacheCapacityBytes, Codec.LONG)
         .register("BackgroundErrors", RocksDbChunkStorageProvider.RocksDbStats::backgroundErrors, Codec.LONG)
         .register("MemTableFlushPending", RocksDbChunkStorageProvider.RocksDbStats::memTableFlushPending, Codec.LONG)
         .register("NumRunningFlushes", RocksDbChunkStorageProvider.RocksDbStats::numRunningFlushes, Codec.LONG)
         .register("NumSnapshots", RocksDbChunkStorageProvider.RocksDbStats::numSnapshots, Codec.LONG)
         .register("NumLiveVersions", RocksDbChunkStorageProvider.RocksDbStats::numLiveVersions, Codec.LONG)
         .register("IsWriteStopped", RocksDbChunkStorageProvider.RocksDbStats::isWriteStopped, Codec.LONG)
         .register("ActualDelayedWriteRate", RocksDbChunkStorageProvider.RocksDbStats::actualDelayedWriteRate, Codec.LONG)
         .register("Chunks", RocksDbChunkStorageProvider.RocksDbStats::chunks)
         .register("Sections", RocksDbChunkStorageProvider.RocksDbStats::sections)
         .register("EntitySections", RocksDbChunkStorageProvider.RocksDbStats::entitySections)
         .register("Entities", RocksDbChunkStorageProvider.RocksDbStats::entities);

      class="kw">public RocksDbStats {
      }

      @Nonnull
      class="kw">public class="kw">static RocksDbChunkStorageProvider.RocksDbStats snapshot(@Nonnull RocksDbChunkStorageProvider.RocksDbResource var0) {
         MemorySegment var1 = var0.db;

         try (Arena var2 = Arena.ofConfined()) {
            class="kw">return new RocksDbChunkStorageProvider.RocksDbStats(
               getLongDb(var2, var1, "rocksdb.block-cache-usage"),
               getLongDb(var2, var1, "rocksdb.block-cache-pinned-usage"),
               getLongDb(var2, var1, "rocksdb.block-cache-capacity"),
               RocksDbChunkStorageProvider.RocksDbStats.ColumnFamilyStats.getLongCf(var2, var1, var0.chunkColumn, "rocksdb.blob-cache-usage"),
               RocksDbChunkStorageProvider.RocksDbStats.ColumnFamilyStats.getLongCf(var2, var1, var0.chunkColumn, "rocksdb.blob-cache-pinned-usage"),
               RocksDbChunkStorageProvider.RocksDbStats.ColumnFamilyStats.getLongCf(var2, var1, var0.chunkColumn, "rocksdb.blob-cache-capacity"),
               getLongDb(var2, var1, "rocksdb.background-errors"),
               getLongDb(var2, var1, "rocksdb.mem-table-flush-pending"),
               getLongDb(var2, var1, "rocksdb.num-running-flushes"),
               getLongDb(var2, var1, "rocksdb.num-snapshots"),
               getLongDb(var2, var1, "rocksdb.num-live-versions"),
               getLongDb(var2, var1, "rocksdb.is-write-stopped"),
               getLongDb(var2, var1, "rocksdb.actual-delayed-write-rate"),
               RocksDbChunkStorageProvider.RocksDbStats.ColumnFamilyStats.snapshot(var2, var1, var0.chunkColumn),
               RocksDbChunkStorageProvider.RocksDbStats.ColumnFamilyStats.snapshot(var2, var1, var0.sectionColumn),
               RocksDbChunkStorageProvider.RocksDbStats.ColumnFamilyStats.snapshot(var2, var1, var0.entitySectionColumn),
               RocksDbChunkStorageProvider.RocksDbStats.ColumnFamilyStats.snapshot(var2, var1, var0.entityColumn)
            );
         }
      }

      @Nonnull
      @Override
      class="kw">public MetricResults toMetricResults() {
         class="kw">return METRICS_REGISTRY.toMetricResults(this);
      }

      class="kw">private class="kw">static long getLongDb(@Nonnull Arena var0, @Nonnull MemorySegment var1, @Nonnull String var2) {
         MemorySegment var3 = var0.allocateFrom(var2);
         MemorySegment var4 = var0.allocate(ValueLayout.JAVA_LONG);
         class="kw">return RocksDbNative.propertyInt(var1, var3, var4) == 0 ? var4.get(ValueLayout.JAVA_LONG, 0L) : -1L;
      }

      class="kw">public record ColumnFamilyStats(
         long estimateNumKeys,
         long estimateLiveDataBytes,
         long totalSstFilesBytes,
         long liveSstFilesBytes,
         long numBlobFiles,
         long totalBlobFilesBytes,
         long liveBlobFilesBytes,
         long memTableBytes,
         long allMemTableBytes,
         long numImmutableMemTable,
         long compactionPending,
         long numRunningCompactions,
         long pendingCompactionBytes,
         @Nonnull long[] filesPerLevel
      ) class="kw">implements MetricProvider {
         @Nonnull
         class="kw">public class="kw">static class="kw">final MetricsRegistry<RocksDbChunkStorageProvider.RocksDbStats.ColumnFamilyStats> METRICS_REGISTRY = new MetricsRegistry<RocksDbChunkStorageProvider.RocksDbStats.ColumnFamilyStats>()
            .register("EstimateNumKeys", RocksDbChunkStorageProvider.RocksDbStats.ColumnFamilyStats::estimateNumKeys, Codec.LONG)
            .register("EstimateLiveDataBytes", RocksDbChunkStorageProvider.RocksDbStats.ColumnFamilyStats::estimateLiveDataBytes, Codec.LONG)
            .register("TotalSstFilesBytes", RocksDbChunkStorageProvider.RocksDbStats.ColumnFamilyStats::totalSstFilesBytes, Codec.LONG)
            .register("LiveSstFilesBytes", RocksDbChunkStorageProvider.RocksDbStats.ColumnFamilyStats::liveSstFilesBytes, Codec.LONG)
            .register("NumBlobFiles", RocksDbChunkStorageProvider.RocksDbStats.ColumnFamilyStats::numBlobFiles, Codec.LONG)
            .register("TotalBlobFilesBytes", RocksDbChunkStorageProvider.RocksDbStats.ColumnFamilyStats::totalBlobFilesBytes, Codec.LONG)
            .register("LiveBlobFilesBytes", RocksDbChunkStorageProvider.RocksDbStats.ColumnFamilyStats::liveBlobFilesBytes, Codec.LONG)
            .register("MemTableBytes", RocksDbChunkStorageProvider.RocksDbStats.ColumnFamilyStats::memTableBytes, Codec.LONG)
            .register("AllMemTableBytes", RocksDbChunkStorageProvider.RocksDbStats.ColumnFamilyStats::allMemTableBytes, Codec.LONG)
            .register("NumImmutableMemTable", RocksDbChunkStorageProvider.RocksDbStats.ColumnFamilyStats::numImmutableMemTable, Codec.LONG)
            .register("CompactionPending", RocksDbChunkStorageProvider.RocksDbStats.ColumnFamilyStats::compactionPending, Codec.LONG)
            .register("NumRunningCompactions", RocksDbChunkStorageProvider.RocksDbStats.ColumnFamilyStats::numRunningCompactions, Codec.LONG)
            .register("PendingCompactionBytes", RocksDbChunkStorageProvider.RocksDbStats.ColumnFamilyStats::pendingCompactionBytes, Codec.LONG)
            .register("FilesPerLevel", RocksDbChunkStorageProvider.RocksDbStats.ColumnFamilyStats::filesPerLevel, Codec.LONG_ARRAY);

         class="kw">public ColumnFamilyStats {
         }

         @Nonnull
         class="kw">public class="kw">static RocksDbChunkStorageProvider.RocksDbStats.ColumnFamilyStats snapshot(
            @Nonnull Arena var0, @Nonnull MemorySegment var1, @Nonnull MemorySegment var2
         ) {
            long[] var3 = new long[7];

            for (int var4 = 0; var4 < var3.length; var4++) {
               var3[var4] = getStringLongCf(var0, var1, var2, "rocksdb.num-files-at-level" + var4);
            }

            class="kw">return new RocksDbChunkStorageProvider.RocksDbStats.ColumnFamilyStats(
               getLongCf(var0, var1, var2, "rocksdb.estimate-num-keys"),
               getLongCf(var0, var1, var2, "rocksdb.estimate-live-data-size"),
               getLongCf(var0, var1, var2, "rocksdb.total-sst-files-size"),
               getLongCf(var0, var1, var2, "rocksdb.live-sst-files-size"),
               getLongCf(var0, var1, var2, "rocksdb.num-blob-files"),
               getLongCf(var0, var1, var2, "rocksdb.total-blob-file-size"),
               getLongCf(var0, var1, var2, "rocksdb.live-blob-file-size"),
               getLongCf(var0, var1, var2, "rocksdb.cur-size-all-mem-tables"),
               getLongCf(var0, var1, var2, "rocksdb.size-all-mem-tables"),
               getLongCf(var0, var1, var2, "rocksdb.num-immutable-mem-table"),
               getLongCf(var0, var1, var2, "rocksdb.compaction-pending"),
               getLongCf(var0, var1, var2, "rocksdb.num-running-compactions"),
               getLongCf(var0, var1, var2, "rocksdb.estimate-pending-compaction-bytes"),
               var3
            );
         }

         @Nonnull
         @Override
         class="kw">public MetricResults toMetricResults() {
            class="kw">return METRICS_REGISTRY.toMetricResults(this);
         }

         class="kw">private class="kw">static long getLongCf(@Nonnull Arena var0, @Nonnull MemorySegment var1, @Nonnull MemorySegment var2, @Nonnull String var3) {
            MemorySegment var4 = var0.allocateFrom(var3);
            MemorySegment var5 = var0.allocate(ValueLayout.JAVA_LONG);
            class="kw">return RocksDbNative.propertyIntCf(var1, var2, var4, var5) == 0 ? var5.get(ValueLayout.JAVA_LONG, 0L) : -1L;
         }

         class="kw">private class="kw">static long getStringLongCf(@Nonnull Arena var0, @Nonnull MemorySegment var1, @Nonnull MemorySegment var2, @Nonnull String var3) {
            MemorySegment var4 = var0.allocateFrom(var3);
            MemorySegment var5 = RocksDbNative.propertyValueCf(var1, var2, var4);
            if (var5.equals(MemorySegment.NULL)) {
               class="kw">return -1L;
            }

            try {
               class="kw">return Long.parseLong(var5.reinterpret(Long.MAX_VALUE).getString(0L).trim());
            } catch (NumberFormatException var12) {
               class="kw">return -1L;
            } class="kw">finally {
               RocksDbNative.free(var5);
            }
         }
      }
   }

   class="kw">public class="kw">static class Saver class="kw">implements IChunkSaver, IChunkSaver.Cubic, MetricProvider {
      @Nonnull
      class="kw">public class="kw">static class="kw">final MetricsRegistry<RocksDbChunkStorageProvider.Saver> METRICS_REGISTRY = new MetricsRegistry<RocksDbChunkStorageProvider.Saver>()
         .register("SaveCount", var0 -> var0.saveCount.get(), Codec.LONG)
         .register("SaveFailureCount", var0 -> var0.saveFailureCount.get(), Codec.LONG)
         .register("RemoveCount", var0 -> var0.removeCount.get(), Codec.LONG)
         .register("RemoveFailureCount", var0 -> var0.removeFailureCount.get(), Codec.LONG)
         .register("TotalBytesSaved", var0 -> var0.totalBytesSaved.get(), Codec.LONG)
         .register("FlushCount", var0 -> var0.flushCount.get(), Codec.LONG)
         .register("CompactCount", var0 -> var0.compactCount.get(), Codec.LONG)
         .register("SerializeStats", var0 -> var0.serializeStats)
         .register("WriteStats", var0 -> var0.writeStats)
         .register("RemoveStats", var0 -> var0.removeStats)
         .register("DbStats", var0 -> RocksDbChunkStorageProvider.RocksDbStats.snapshot(var0.db))
         .register("DbStatistics", var0 -> var0.db.statisticsEnabled ? RocksDbChunkStorageProvider.RocksDbStatistics.snapshot(var0.db.options) : null);
      class="kw">private class="kw">final RocksDbChunkStorageProvider.RocksDbResource db;
      class="kw">private class="kw">final AtomicLong saveCount = new AtomicLong();
      class="kw">private class="kw">final AtomicLong saveFailureCount = new AtomicLong();
      class="kw">private class="kw">final AtomicLong removeCount = new AtomicLong();
      class="kw">private class="kw">final AtomicLong removeFailureCount = new AtomicLong();
      class="kw">private class="kw">final AtomicLong totalBytesSaved = new AtomicLong();
      class="kw">private class="kw">final AtomicLong flushCount = new AtomicLong();
      class="kw">private class="kw">final AtomicLong compactCount = new AtomicLong();
      class="kw">private class="kw">final BucketedOpStats serializeStats = new BucketedOpStats();
      class="kw">private class="kw">final BucketedOpStats writeStats = new BucketedOpStats();
      class="kw">private class="kw">final BucketedOpStats removeStats = new BucketedOpStats();

      class="kw">public Saver(RocksDbChunkStorageProvider.RocksDbResource var1) {
         this.db = var1;
      }

      @Override
      class="kw">public CompletableFuture<Void> saveSection(
         int var1, int var2, int var3, @Nonnull Store<ChunkStore> var4, @Nonnull Ref<ChunkStore> var5, @Nullable Executor var6, @Nullable Runnable var7
      ) {
         Holder var8 = var4.copySerializableEntity(
            var5,
            ChunkStore.REGISTRY.newHolder(),
            var0 -> !var0.equals(EntitySection.getComponentType()) && !var0.equals(BlockComponentSection.getComponentType())
         );
         CompletableFuture var9 = this.db.runIo(SneakyThrow.sneakyRunnable(() -> {
            RocksDbChunkStorageProvider.Scratch var5 = RocksDbChunkStorageProvider.SCRATCH.get();
            long var6 = System.nanoTime();

            try {
               MemorySegment var8 = var5.keys(12);
               RocksDbChunkStorageProvider.putSectionKey(var8, 0L, var1, var2, var3);
               BsonDocument var9 = ChunkStore.REGISTRY.serialize(var8);
               int var10 = RocksDbChunkStorageProvider.stageValue(var5, var9);
               long var11 = System.nanoTime();
               RocksDbNative.putCf(this.db.db, this.db.writeOptions, this.db.sectionColumn, var8, 12L, var5.value, var10, var5.clearErrPtr());
               RocksDbChunkStorageProvider.checkError(var5.errPtr);
               long var13 = System.nanoTime();
               this.saveCount.getAndIncrement();
               this.totalBytesSaved.getAndAdd(var10);
               this.serializeStats.record(var11 - var6, var10);
               this.writeStats.record(var13 - var11, var10);
            } catch (RocksDbChunkStorageProvider.RocksDbException var15) {
               this.saveFailureCount.getAndIncrement();
               throw var15;
            }
         }));
         if (var7 != null) {
            var9.whenComplete((var1x, var2x) -> var7.run());
         }

         class="kw">return var9;
      }

      @Override
      class="kw">public CompletableFuture<Void> saveEntitySection(
         int var1, int var2, int var3, @Nonnull Store<ChunkStore> var4, @Nonnull EntitySection var5, @Nullable Executor var6, @Nullable Runnable var7
      ) {
         ComponentRegistry.Data var8 = EntityStore.REGISTRY.getData();
         List var9 = var5.getEntityHolders();
         Set var10 = var5.getEntityReferences();
         ObjectArrayList var11 = new ObjectArrayList(var9.size() + var10.size());
         collectEntityUuidsFromHolders(var9, var8, var11);
         collectEntityUuidsFromReferences(var10, var8, var11);
         ObjectArrayList var12 = new ObjectArrayList(var9.size() + var10.size());
         ReferenceArrayList var13 = new ReferenceArrayList();
         boolean var15 = false;

         CompletableFuture var14;
         try {
            snapshotDirtyEntityHolders(var9, var8, var12, var13);
            snapshotDirtyEntityReferences(var10, var8, var12, var13);
            var14 = this.db
               .runIo(
                  SneakyThrow.sneakyRunnable(
                     () -> {
                        RocksDbChunkStorageProvider.Scratch var6 = RocksDbChunkStorageProvider.SCRATCH.get();
                        MemorySegment var7 = var6.writeBatch();
                        long var8 = System.nanoTime();

                        try {
                           int var10 = var11.size();
                           int var11 = 16 * var10;
                           MemorySegment var12 = var6.keys(12);
                           RocksDbChunkStorageProvider.putSectionKey(var12, 0L, var1, var2, var3);
                           MemorySegment var13 = var6.value(var11);

                           for (int var14 = 0; var14 < var10; var14++) {
                              UUID var15 = (UUID)var11.get(var14);
                              RocksDbChunkStorageProvider.putUuidKey(var13, var14 * 16L, var15.getMostSignificantBits(), var15.getLeastSignificantBits());
                           }

                           RocksDbNative.writebatchPutCf(var7, this.db.entitySectionColumn, var12, 12L, var13, var11);
                           int var27 = var11;

                           for (int var28 = 0; var28 < var12.size(); var28++) {
                              Holder var16 = (Holder<EntityStore>)var12.get(var28);
                              UUIDComponent var17 = var16.getComponent(UUIDComponent.getComponentType());
                              if (var17 == null) {
                                 RocksDbChunkStorageProvider.LOGGER
                                    .at(Level.WARNING)
                                    .log("Skipping entity with no UUID component while saving entity section (%d, %d, %d)", var1, var2, var3);
                              } else {
                                 UUID var18 = var17.getUuid();
                                 MemorySegment var19 = var6.keys(16);
                                 RocksDbChunkStorageProvider.putUuidKey(var19, 0L, var18.getMostSignificantBits(), var18.getLeastSignificantBits());
                                 BsonDocument var20 = EntityStore.REGISTRY.serialize(var16);
                                 int var21 = RocksDbChunkStorageProvider.stageValue(var6, var20);
                                 RocksDbNative.writebatchPutCf(var7, this.db.entityColumn, var19, 16L, var6.value, var21);
                                 var27 += var21;
                              }
                           }

                           long var29 = System.nanoTime();
                           RocksDbNative.write(this.db.db, this.db.writeOptions, var7, var6.clearErrPtr());
                           RocksDbChunkStorageProvider.checkError(var6.errPtr);
                           long var30 = System.nanoTime();
                           this.saveCount.getAndIncrement();
                           this.totalBytesSaved.getAndAdd(var27);
                           this.serializeStats.record(var29 - var8, var27);
                           this.writeStats.record(var30 - var29, var27);
                        } catch (RocksDbChunkStorageProvider.RocksDbException var25) {
                           this.saveFailureCount.getAndIncrement();
                           throw var25;
                        } class="kw">finally {
                           RocksDbNative.writebatchClear(var7);
                        }
                     }
                  )
               );
            ObjectListIterator var16 = var13.iterator();

            while (var16.hasNext()) {
               Dirty var17 = (Dirty)var16.next();
               var17.setSaving(var14);
            }

            var15 = true;
         } class="kw">finally {
            if (!var15) {
               ObjectListIterator var19 = var13.iterator();

               while (var19.hasNext()) {
                  Dirty var20 = (Dirty)var19.next();
                  var20.markDirty();
               }
            }
         }

         if (var7 != null) {
            var14.whenComplete((var1x, var2x) -> var7.run());
         }

         if (var13.isEmpty()) {
            class="kw">return var14;
         }

         ReferenceArrayList var23 = var13;
         CompletableFuture var24 = var14;
         BiConsumer var18 = (var2x, var3x) -> {
            if (var3x != null) {
               Iterator var4 = var23.iterator();

               while (var4.hasNext()) {
                  Dirty var5 = (Dirty)var4.next();
                  var5.markDirty();
               }
            }

            Iterator var6 = var23.iterator();

            while (var6.hasNext()) {
               Dirty var7 = (Dirty)var6.next();
               var7.clearSaving(var24);
            }
         };
         class="kw">return var6 != null ? var14.whenCompleteAsync(var18, var6) : var14.whenComplete(var18);
      }

      @Override
      class="kw">public CompletableFuture<Void> saveEntity(UUID var1, @Nonnull Store<EntityStore> var2, @Nonnull Ref<EntityStore> var3) {
         Holder var4 = var2.copySerializableEntity(var3);
         class="kw">return this.db.runIo(SneakyThrow.sneakyRunnable(() -> {
            RocksDbChunkStorageProvider.Scratch var3 = RocksDbChunkStorageProvider.SCRATCH.get();
            long var4 = System.nanoTime();

            try {
               MemorySegment var6 = var3.keys(16);
               RocksDbChunkStorageProvider.putUuidKey(var6, 0L, var1.getMostSignificantBits(), var1.getLeastSignificantBits());
               BsonDocument var7 = EntityStore.REGISTRY.serialize(var4);
               int var8 = RocksDbChunkStorageProvider.stageValue(var3, var7);
               long var9 = System.nanoTime();
               RocksDbNative.putCf(this.db.db, this.db.writeOptions, this.db.entityColumn, var6, 16L, var3.value, var8, var3.clearErrPtr());
               RocksDbChunkStorageProvider.checkError(var3.errPtr);
               long var11 = System.nanoTime();
               this.saveCount.getAndIncrement();
               this.totalBytesSaved.getAndAdd(var8);
               this.serializeStats.record(var9 - var4, var8);
               this.writeStats.record(var11 - var9, var8);
            } catch (RocksDbChunkStorageProvider.RocksDbException var13) {
               this.saveFailureCount.getAndIncrement();
               throw var13;
            }
         }));
      }

      @Nonnull
      @Override
      class="kw">public CompletableFuture<Void> removeEntity(@Nonnull UUID var1) {
         class="kw">return this.db.runIo(SneakyThrow.sneakyRunnable(() -> {
            RocksDbChunkStorageProvider.Scratch var2 = RocksDbChunkStorageProvider.SCRATCH.get();
            MemorySegment var3 = var2.keys(16);
            RocksDbChunkStorageProvider.putUuidKey(var3, 0L, var1.getMostSignificantBits(), var1.getLeastSignificantBits());
            long var4 = System.nanoTime();

            try {
               RocksDbNative.deleteCf(this.db.db, this.db.writeOptions, this.db.entityColumn, var3, 16L, var2.clearErrPtr());
               RocksDbChunkStorageProvider.checkError(var2.errPtr);
            } catch (RocksDbChunkStorageProvider.RocksDbException var8) {
               this.removeFailureCount.getAndIncrement();
               throw var8;
            }

            long var6 = System.nanoTime() - var4;
            this.removeCount.getAndIncrement();
            this.removeStats.record(var6, 0L);
         }));
      }

      @Nullable
      class="kw">private class="kw">static RocksDbChunkStorageProvider.Saver.BlockComponentsToSave prepareBlockComponentsToSave(
         @Nullable BlockComponentSection var0,
         boolean var1,
         @Nonnull ReferenceArrayList<BlockComponentSection> var2,
         @Nonnull ReferenceArrayList<RocksDbChunkStorageProvider.Saver.BlockComponentsToSave> var3
      ) {
         if (var0 == null) {
            class="kw">return null;
         }

         if (var1) {
            var0.markAllBlocksNeedsSaving();
         }

         if (!var0.isSaving() && var0.consumeNeedsSaving()) {
            var0.setSaving(true);
            var2.add(var0);
            RocksDbChunkStorageProvider.Saver.BlockComponentsToSave var4 = snapshotBlockComponents(var0);
            if (var4 != null) {
               var3.add(var4);
            }

            class="kw">return var4;
         } else {
            class="kw">return null;
         }
      }

      @Nullable
      class="kw">private class="kw">static RocksDbChunkStorageProvider.Saver.BlockComponentsToSave snapshotBlockComponents(@Nonnull BlockComponentSection var0) {
         ShortSet var1 = var0.takeRemovedBlocks();
         ShortSet var2 = var0.takeDirtyBlocks();
         if (var1 == null && var2 == null) {
            class="kw">return null;
         }

         RocksDbChunkStorageProvider.Saver.BlockComponentsToSave var3 = new RocksDbChunkStorageProvider.Saver.BlockComponentsToSave(var0, var2, var1, false);

         try {
            if (var1 != null) {
               var3.deletes.addAll(var1);
            }

            if (var2 != null) {
               ComponentRegistry.Data var4 = ChunkStore.REGISTRY.getData();
               ShortIterator var5 = var2.iterator();

               while (var5.hasNext()) {
                  short var6 = var5.nextShort();
                  Ref var7 = var0.getBlockReference(var6);
                  if (var7 != null && var7.isValid()) {
                     Store var10 = var7.getStore();
                     if (var10.getArchetype(var7).hasSerializableComponents(var4)) {
                        var3.putIndexes.add(var6);
                        var3.putHolders.add(var10.copySerializableEntity(var7));
                     } else {
                        var3.deleteDirtyIndex(var6);
                     }
                  } else {
                     Holder var8 = var0.getBlockHolder(var6);
                     if (var8 != null && var8.hasSerializableComponents(var4)) {
                        var3.putIndexes.add(var6);
                        var3.putHolders.add(var8.cloneSerializable(var4));
                     } else {
                        var3.deleteDirtyIndex(var6);
                     }
                  }
               }
            }

            class="kw">return var3;
         } catch (Throwable var9) {
            var3.restore();
            throw var9;
         }
      }

      class="kw">private class="kw">static int writeBlockComponentRows(
         @Nonnull RocksDbChunkStorageProvider.Scratch var0,
         @Nonnull MemorySegment var1,
         @Nonnull MemorySegment var2,
         int var3,
         int var4,
         int var5,
         @Nonnull RocksDbChunkStorageProvider.Saver.BlockComponentsToSave var6
      ) {
         MemorySegment var7 = var0.keys(38);
         long var8 = 24L;
         if (var6.replaceAll) {
            RocksDbChunkStorageProvider.putSectionKey(var7, 0L, var3, var4, var5);
            RocksDbChunkStorageProvider.putSectionKey(var7, 12L, var3, var4 + 1, var5);
            RocksDbNative.writebatchDeleteRangeCf(var1, var2, var7.asSlice(0L, 12L), 12L, var7.asSlice(12L, 12L), 12L);
         }

         for (int var10 = 0; var10 < var6.deletes.size(); var10++) {
            RocksDbChunkStorageProvider.putBlockComponentKey(var7, 24L, var3, var4, var5, var6.deletes.getShort(var10));
            RocksDbNative.writebatchDeleteCf(var1, var2, var7.asSlice(24L, 14L), 14L);
         }

         int var14 = 0;

         for (int var11 = 0; var11 < var6.putIndexes.size(); var11++) {
            RocksDbChunkStorageProvider.putBlockComponentKey(var7, 24L, var3, var4, var5, var6.putIndexes.getShort(var11));
            BsonDocument var12 = ChunkStore.REGISTRY.serialize((Holder<ChunkStore>)var6.putHolders.get(var11));
            int var13 = RocksDbChunkStorageProvider.stageValue(var0, var12);
            RocksDbNative.writebatchPutCf(var1, var2, var7.asSlice(24L, 14L), 14L, var0.value, var13);
            var14 += var13;
         }

         class="kw">return var14;
      }

      @Override
      class="kw">public CompletableFuture<Void> saveBlockComponentSection(
         int var1, int var2, int var3, @Nonnull Store<ChunkStore> var4, @Nonnull BlockComponentSection var5, @Nullable Executor var6, @Nullable Runnable var7
      ) {
         RocksDbChunkStorageProvider.Saver.BlockComponentsToSave var8 = null;
         boolean var10 = false;

         CompletableFuture var9;
         try {
            var8 = snapshotBlockComponents(var5);
            if (var8 == null) {
               var9 = CompletableFuture.completedFuture(null);
            } else {
               RocksDbChunkStorageProvider.Saver.BlockComponentsToSave var11 = var8;
               var9 = this.db.runIo(SneakyThrow.sneakyRunnable(() -> {
                  RocksDbChunkStorageProvider.Scratch var5 = RocksDbChunkStorageProvider.SCRATCH.get();
                  MemorySegment var6 = var5.writeBatch();
                  long var7 = System.nanoTime();

                  try {
                     int var9 = writeBlockComponentRows(var5, var6, this.db.blockComponentColumn, var1, var2, var3, var11);
                     long var10 = System.nanoTime();
                     RocksDbNative.write(this.db.db, this.db.writeOptions, var6, var5.clearErrPtr());
                     RocksDbChunkStorageProvider.checkError(var5.errPtr);
                     long var12 = System.nanoTime();
                     this.saveCount.getAndIncrement();
                     this.totalBytesSaved.getAndAdd(var9);
                     this.serializeStats.record(var10 - var7, var9);
                     this.writeStats.record(var12 - var10, var9);
                  } catch (RocksDbChunkStorageProvider.RocksDbException var17) {
                     this.saveFailureCount.getAndIncrement();
                     throw var17;
                  } class="kw">finally {
                     RocksDbNative.writebatchClear(var6);
                  }
               }));
            }

            var10 = true;
         } class="kw">finally {
            if (!var10 && var8 != null) {
               var8.restore();
            }
         }

         if (var7 != null) {
            var9.whenComplete((var1x, var2x) -> var7.run());
         }

         if (var8 == null) {
            class="kw">return var9;
         }

         RocksDbChunkStorageProvider.Saver.BlockComponentsToSave var15 = var8;
         BiConsumer var12 = (var1x, var2x) -> {
            if (var2x != null) {
               var15.restore();
            }
         };
         class="kw">return var6 != null ? var9.whenCompleteAsync(var12, var6) : var9.whenComplete(var12);
      }

      @Nonnull
      @Override
      class="kw">public CompletableFuture<Void> saveChunkColumn(
         int var1, int var2, @Nonnull Store<ChunkStore> var3, @Nonnull Ref<ChunkStore> var4, @Nullable Executor var5, @Nullable Runnable var6
      ) {
         ReferenceArrayList var7 = new ReferenceArrayList(10);
         ReferenceArrayList var8 = new ReferenceArrayList(10);
         ReferenceArrayList var9 = new ReferenceArrayList(10);
         ReferenceArrayList var10 = new ReferenceArrayList(10);
         ReferenceArrayList var11 = new ReferenceArrayList(10);
         boolean var13 = false;

         CompletableFuture var12;
         try {
            ReferenceArrayList var14 = new ReferenceArrayList();
            ChunkColumn var15 = var3.getComponent(var4, ChunkColumn.getComponentType());
            assert var15 != null;
            Holder[] var16 = var15.getSectionHolders();
            WorldChunk var17 = var3.getComponent(var4, WorldChunk.getComponentType());
            assert var17 != null;
            boolean var18 = !var17.is(ChunkFlag.ON_DISK);
            ReferenceArrayList var19 = new ReferenceArrayList();
            ComponentRegistry.Data var20 = EntityStore.REGISTRY.getData();
            ComponentRegistry.Data var21 = ChunkStore.REGISTRY.getData();
            if (var16 != null) {
               for (int var37 = 0; var37 < var16.length; var37++) {
                  Holder var39 = var16[var37];
                  if (var39 != null) {
                     Holder var41 = null;
                     ChunkSection var43 = var39.getComponent(ChunkSection.getComponentType());
                     if (!var43.isSaving() && (var43.consumeNeedsSaving() || var18)) {
                        var43.setSaving(true);
                        var7.add(var43);
                        var41 = var39.cloneSerializable(
                           var21, var0 -> !var0.equals(EntitySection.getComponentType()) && !var0.equals(BlockComponentSection.getComponentType())
                        );
                     }

                     List var44 = null;
                     EntitySection var45 = var39.getComponent(EntitySection.getComponentType());
                     if (var45 != null) {
                        List var46 = var45.getEntityHolders();
                        if (!var45.isSaving() && var45.consumeNeedsSaving()) {
                           var45.setSaving(true);
                           var8.add(var45);
                           var44 = new ObjectArrayList(var46.size());
                           collectEntityUuidsFromHolders(var46, var20, var44);
                        }

                        snapshotDirtyEntityHolders(var46, var20, var19, var11);
                     }

                     RocksDbChunkStorageProvider.Saver.BlockComponentsToSave var47 = prepareBlockComponentsToSave(
                        var39.getComponent(BlockComponentSection.getComponentType()), var18, var9, var10
                     );
                     if (var41 != null || var44 != null || var47 != null) {
                        var14.add(new RocksDbChunkStorageProvider.Saver.SectionToSave(var1, var37, var2, var41, var44, var47));
                     }
                  }
               }
            } else {
               Ref[] var22 = var15.getSections();

               for (int var23 = 0; var23 < var22.length; var23++) {
                  Ref var24 = var22[var23];
                  if (var24 != null && var24.isValid()) {
                     Holder var25 = null;
                     ChunkSection var26 = var3.getComponent(var24, ChunkSection.getComponentType());
                     if (!var26.isSaving() && (var26.consumeNeedsSaving() || var18)) {
                        var26.setSaving(true);
                        var7.add(var26);
                        var25 = var3.copySerializableEntity(
                           var24,
                           ChunkStore.REGISTRY.newHolder(),
                           var0 -> !var0.equals(EntitySection.getComponentType()) && !var0.equals(BlockComponentSection.getComponentType())
                        );
                     }

                     List var27 = null;
                     EntitySection var28 = var3.getComponent(var24, EntitySection.getComponentType());
                     if (var28 != null) {
                        List var29 = var28.getEntityHolders();
                        Set var30 = var28.getEntityReferences();
                        if (!var28.isSaving() && var28.consumeNeedsSaving()) {
                           var28.setSaving(true);
                           var8.add(var28);
                           var27 = new ObjectArrayList(var29.size() + var30.size());
                           collectEntityUuidsFromHolders(var29, var20, var27);
                           collectEntityUuidsFromReferences(var30, var20, var27);
                        }

                        snapshotDirtyEntityHolders(var29, var20, var19, var11);
                        snapshotDirtyEntityReferences(var30, var20, var19, var11);
                     }

                     RocksDbChunkStorageProvider.Saver.BlockComponentsToSave var48 = prepareBlockComponentsToSave(
                        var3.getComponent(var24, BlockComponentSection.getComponentType()), var18, var9, var10
                     );
                     if (var25 != null || var27 != null || var48 != null) {
                        var14.add(new RocksDbChunkStorageProvider.Saver.SectionToSave(var1, var23, var2, var25, var27, var48));
                     }
                  }
               }
            }

            Holder var38 = var3.copySerializableEntity(var4, ChunkStore.REGISTRY.newHolder(), var0 -> !var0.equals(ChunkColumn.getComponentType()));
            var12 = this.submitChunkColumnBatch(var1, var2, var38, var14, var19);
            ObjectListIterator var40 = var11.iterator();

            while (var40.hasNext()) {
               Dirty var42 = (Dirty)var40.next();
               var42.setSaving(var12);
            }

            var13 = true;
         } class="kw">finally {
            if (!var13) {
               ObjectListIterator var32 = var7.iterator();

               while (var32.hasNext()) {
                  ChunkSection var33 = (ChunkSection)var32.next();
                  var33.markNeedsSaving();
                  var33.setSaving(false);
               }

               var32 = var8.iterator();

               while (var32.hasNext()) {
                  EntitySection var53 = (EntitySection)var32.next();
                  var53.markNeedsSaving();
                  var53.setSaving(false);
               }

               var32 = var9.iterator();

               while (var32.hasNext()) {
                  BlockComponentSection var54 = (BlockComponentSection)var32.next();
                  var54.markNeedsSaving();
                  var54.setSaving(false);
               }

               var32 = var10.iterator();

               while (var32.hasNext()) {
                  RocksDbChunkStorageProvider.Saver.BlockComponentsToSave var55 = (RocksDbChunkStorageProvider.Saver.BlockComponentsToSave)var32.next();
                  var55.restore();
               }

               var32 = var11.iterator();

               while (var32.hasNext()) {
                  Dirty var56 = (Dirty)var32.next();
                  var56.markDirty();
               }
            }
         }

         if (var6 != null) {
            var12.whenComplete((var1x, var2x) -> var6.run());
         }

         if (var7.isEmpty() && var8.isEmpty() && var9.isEmpty() && var11.isEmpty()) {
            class="kw">return var12;
         }

         BiConsumer var36 = (var6x, var7x) -> {
            if (var7x != null) {
               Iterator var8 = var7.iterator();

               while (var8.hasNext()) {
                  ChunkSection var9 = (ChunkSection)var8.next();
                  var9.markNeedsSaving();
               }

               var8 = var8.iterator();

               while (var8.hasNext()) {
                  EntitySection var18 = (EntitySection)var8.next();
                  var18.markNeedsSaving();
               }

               var8 = var9.iterator();

               while (var8.hasNext()) {
                  BlockComponentSection var19 = (BlockComponentSection)var8.next();
                  var19.markNeedsSaving();
               }

               var8 = var10.iterator();

               while (var8.hasNext()) {
                  RocksDbChunkStorageProvider.Saver.BlockComponentsToSave var20 = (RocksDbChunkStorageProvider.Saver.BlockComponentsToSave)var8.next();
                  var20.restore();
               }

               var8 = var11.iterator();

               while (var8.hasNext()) {
                  Dirty var21 = (Dirty)var8.next();
                  var21.markDirty();
               }
            }

            Iterator var14 = var7.iterator();

            while (var14.hasNext()) {
               ChunkSection var22 = (ChunkSection)var14.next();
               var22.setSaving(false);
            }

            var14 = var8.iterator();

            while (var14.hasNext()) {
               EntitySection var23 = (EntitySection)var14.next();
               var23.setSaving(false);
            }

            var14 = var9.iterator();

            while (var14.hasNext()) {
               BlockComponentSection var24 = (BlockComponentSection)var14.next();
               var24.setSaving(false);
            }

            var14 = var11.iterator();

            while (var14.hasNext()) {
               Dirty var25 = (Dirty)var14.next();
               var25.clearSaving(var12);
            }
         };
         class="kw">return var5 != null ? var12.whenCompleteAsync(var36, var5) : var12.whenComplete(var36);
      }

      class="kw">private class="kw">static void collectEntityUuidsFromHolders(
         @Nonnull List<Holder<EntityStore>> var0, @Nonnull ComponentRegistry.Data<EntityStore> var1, @Nonnull List<UUID> var2
      ) {
         for (int var3 = 0; var3 < var0.size(); var3++) {
            Holder var4 = var0.get(var3);
            if (var4.hasSerializableComponents(var1)) {
               UUIDComponent var5 = var4.ensureAndGetComponent(UUIDComponent.getComponentType());
               var2.add(var5.getUuid());
            }
         }
      }

      class="kw">private class="kw">static void snapshotDirtyEntityHolders(
         @Nonnull List<Holder<EntityStore>> var0,
         @Nonnull ComponentRegistry.Data<EntityStore> var1,
         @Nonnull List<Holder<EntityStore>> var2,
         @Nonnull List<Dirty> var3
      ) {
         for (int var4 = 0; var4 < var0.size(); var4++) {
            Holder var5 = var0.get(var4);
            if (var5.hasSerializableComponents(var1)) {
               Dirty var6 = var5.getComponent(Dirty.getComponentType());
               if (var6 != null) {
                  if (var6.isSaving() || !var6.isDirty()) {
                     class="kw">continue;
                  }

                  var3.add(var6);
                  var6.consumeDirty();
               }

               var2.add(var5.cloneSerializable(var1));
            }
         }
      }

      class="kw">private class="kw">static void collectEntityUuidsFromReferences(
         @Nonnull Iterable<Ref<EntityStore>> var0, @Nonnull ComponentRegistry.Data<EntityStore> var1, @Nonnull List<UUID> var2
      ) {
         for (Ref var4 : var0) {
            Store var5 = var4.getStore();
            if (var5.getArchetype(var4).hasSerializableComponents(var1)) {
               UUIDComponent var6 = var5.getComponent(var4, UUIDComponent.getComponentType());
               assert var6 != null;
               var2.add(var6.getUuid());
            }
         }
      }

      class="kw">private class="kw">static void snapshotDirtyEntityReferences(
         @Nonnull Iterable<Ref<EntityStore>> var0,
         @Nonnull ComponentRegistry.Data<EntityStore> var1,
         @Nonnull List<Holder<EntityStore>> var2,
         @Nonnull List<Dirty> var3
      ) {
         for (Ref var5 : var0) {
            Store var6 = var5.getStore();
            if (var6.getArchetype(var5).hasSerializableComponents(var1)) {
               Dirty var7 = var6.getComponent(var5, Dirty.getComponentType());
               if (var7 != null) {
                  if (var7.isSaving() || !var7.isDirty()) {
                     class="kw">continue;
                  }

                  var3.add(var7);
                  var7.consumeDirty();
               }

               var2.add(var6.copySerializableEntity(var5));
            }
         }
      }

      @Nonnull
      @Override
      class="kw">public CompletableFuture<Void> saveHolder(int var1, int var2, @Nonnull Holder<ChunkStore> var3) {
         ReferenceArrayList var4 = new ReferenceArrayList();
         ChunkColumn var5 = var3.getComponent(ChunkColumn.getComponentType());
         var3.removeComponent(ChunkColumn.getComponentType());
         ReferenceArrayList var6 = new ReferenceArrayList();
         if (var5 != null) {
            Holder[] var7 = var5.getSectionHolders();
            if (var7 != null) {
               for (int var8 = 0; var8 < var7.length; var8++) {
                  Holder var9 = var7[var8];
                  if (var9 != null) {
                     List var10 = null;
                     EntitySection var11 = var9.getComponent(EntitySection.getComponentType());
                     if (var11 != null) {
                        List var12 = var11.getEntityHolders();
                        var10 = new ObjectArrayList(var12.size());

                        for (int var13 = 0; var13 < var12.size(); var13++) {
                           Holder var14 = var12.get(var13);
                           UUIDComponent var15 = var14.ensureAndGetComponent(UUIDComponent.getComponentType());
                           var10.add(var15.getUuid());
                           var6.add(var14);
                        }
                     }

                     RocksDbChunkStorageProvider.Saver.BlockComponentsToSave var16 = null;
                     BlockComponentSection var17 = var9.getComponent(BlockComponentSection.getComponentType());
                     if (var17 != null) {
                        var16 = new RocksDbChunkStorageProvider.Saver.BlockComponentsToSave(null, null, null, true);
                        ObjectIterator var18 = var17.getBlockHolders().short2ObjectEntrySet().iterator();

                        while (var18.hasNext()) {
                           Entry var19 = (Entry<Holder<ChunkStore>>)var18.next();
                           var16.putIndexes.add(var19.getShortKey());
                           var16.putHolders.add((Holder)var19.getValue());
                        }
                     }

                     var9.tryRemoveComponent(EntitySection.getComponentType());
                     var9.tryRemoveComponent(BlockComponentSection.getComponentType());
                     var4.add(new RocksDbChunkStorageProvider.Saver.SectionToSave(var1, var8, var2, var9, var10, var16));
                  }
               }
            }
         }

         class="kw">return this.submitChunkColumnBatch(var1, var2, var3, var4, var6);
      }

      class="kw">private CompletableFuture<Void> submitChunkColumnBatch(
         int var1,
         int var2,
         @Nonnull Holder<ChunkStore> var3,
         @Nonnull List<RocksDbChunkStorageProvider.Saver.SectionToSave> var4,
         @Nonnull List<Holder<EntityStore>> var5
      ) {
         class="kw">return this.db
            .runIo(
               SneakyThrow.sneakyRunnable(
                  () -> {
                     RocksDbChunkStorageProvider.Scratch var6 = RocksDbChunkStorageProvider.SCRATCH.get();
                     MemorySegment var7 = var6.writeBatch();
                     long var8 = System.nanoTime();

                     try {
                        BsonDocument var10 = ChunkStore.REGISTRY.serialize(var3);
                        MemorySegment var11 = var6.keys(8);
                        RocksDbChunkStorageProvider.putChunkKey(var11, 0L, var1, var2);
                        int var12 = RocksDbChunkStorageProvider.stageValue(var6, var10);
                        RocksDbNative.writebatchPutCf(var7, this.db.chunkColumn, var11, 8L, var6.value, var12);
                        int var13 = var12;

                        for (int var14 = 0; var14 < var4.size(); var14++) {
                           RocksDbChunkStorageProvider.Saver.SectionToSave var15 = var4.get(var14);
                           Holder var16 = var15.section;
                           if (var16 != null) {
                              BsonDocument var17 = ChunkStore.REGISTRY.serialize(var16);
                              MemorySegment var18 = var6.keys(12);
                              RocksDbChunkStorageProvider.putSectionKey(var18, 0L, var15.x, var15.y, var15.z);
                              int var19 = RocksDbChunkStorageProvider.stageValue(var6, var17);
                              RocksDbNative.writebatchPutCf(var7, this.db.sectionColumn, var18, 12L, var6.value, var19);
                              var13 += var19;
                           }

                           if (var15.entities != null) {
                              int var33 = var15.entities.size();
                              int var35 = 16 * var33;
                              MemorySegment var37 = var6.keys(12);
                              RocksDbChunkStorageProvider.putSectionKey(var37, 0L, var15.x, var15.y, var15.z);
                              MemorySegment var20 = var6.value(var35);

                              for (int var21 = 0; var21 < var33; var21++) {
                                 UUID var22 = var15.entities.get(var21);
                                 RocksDbChunkStorageProvider.putUuidKey(var20, var21 * 16L, var22.getMostSignificantBits(), var22.getLeastSignificantBits());
                              }

                              RocksDbNative.writebatchPutCf(var7, this.db.entitySectionColumn, var37, 12L, var20, var35);
                              var13 += var35;
                           }

                           if (var15.blockComponents != null) {
                              var13 += writeBlockComponentRows(var6, var7, this.db.blockComponentColumn, var15.x, var15.y, var15.z, var15.blockComponents);
                           }
                        }

                        for (int var28 = 0; var28 < var5.size(); var28++) {
                           Holder var30 = var5.get(var28);
                           UUIDComponent var31 = var30.getComponent(UUIDComponent.getComponentType());
                           if (var31 == null) {
                              RocksDbChunkStorageProvider.LOGGER
                                 .at(Level.WARNING)
                                 .log("Skipping entity with no UUID component while saving chunk column (%d, %d)", var1, var2);
                           } else {
                              UUID var34 = var31.getUuid();
                              MemorySegment var36 = var6.keys(16);
                              RocksDbChunkStorageProvider.putUuidKey(var36, 0L, var34.getMostSignificantBits(), var34.getLeastSignificantBits());
                              BsonDocument var38 = EntityStore.REGISTRY.serialize(var30);
                              int var39 = RocksDbChunkStorageProvider.stageValue(var6, var38);
                              RocksDbNative.writebatchPutCf(var7, this.db.entityColumn, var36, 16L, var6.value, var39);
                              var13 += var39;
                           }
                        }

                        long var29 = System.nanoTime();
                        RocksDbNative.write(this.db.db, this.db.writeOptions, var7, var6.clearErrPtr());
                        RocksDbChunkStorageProvider.checkError(var6.errPtr);
                        long var32 = System.nanoTime();
                        this.saveCount.getAndIncrement();
                        this.totalBytesSaved.getAndAdd(var13);
                        this.serializeStats.record(var29 - var8, var13);
                        this.writeStats.record(var32 - var29, var13);
                     } catch (RocksDbChunkStorageProvider.RocksDbException var26) {
                        this.saveFailureCount.getAndIncrement();
                        throw var26;
                     } class="kw">finally {
                        RocksDbNative.writebatchClear(var7);
                     }
                  }
               )
            );
      }

      @Nonnull
      @Override
      class="kw">public CompletableFuture<Void> removeHolder(int var1, int var2) {
         class="kw">return this.db.runIo(SneakyThrow.sneakyRunnable(() -> {
            RocksDbChunkStorageProvider.Scratch var3 = RocksDbChunkStorageProvider.SCRATCH.get();
            MemorySegment var4 = var3.keys(32);
            long var5 = 8L;
            long var7 = 20L;
            RocksDbChunkStorageProvider.putChunkKey(var4, 0L, var1, var2);
            RocksDbChunkStorageProvider.putSectionKey(var4, 8L, var1, 0, var2);
            RocksDbChunkStorageProvider.putSectionKey(var4, 20L, var1, 10, var2);
            long var9 = System.nanoTime();
            MemorySegment var11 = var3.writeBatch();

            try {
               RocksDbNative.writebatchDeleteCf(var11, this.db.chunkColumn, var4.asSlice(0L, 8L), 8L);
               MemorySegment var12 = var4.asSlice(8L, 12L);
               MemorySegment var13 = var4.asSlice(20L, 12L);
               RocksDbNative.writebatchDeleteRangeCf(var11, this.db.sectionColumn, var12, 12L, var13, 12L);
               RocksDbNative.writebatchDeleteRangeCf(var11, this.db.entitySectionColumn, var12, 12L, var13, 12L);
               RocksDbNative.writebatchDeleteRangeCf(var11, this.db.blockComponentColumn, var12, 12L, var13, 12L);
               RocksDbNative.write(this.db.db, this.db.writeOptions, var11, var3.clearErrPtr());
               RocksDbChunkStorageProvider.checkError(var3.errPtr);
            } catch (RocksDbChunkStorageProvider.RocksDbException var17) {
               this.removeFailureCount.getAndIncrement();
               throw var17;
            } class="kw">finally {
               RocksDbNative.writebatchClear(var11);
            }

            long var19 = System.nanoTime() - var9;
            this.removeCount.getAndIncrement();
            this.removeStats.record(var19, 0L);
         }));
      }

      @Nonnull
      @Override
      class="kw">public LongList getIndexes() class="kw">throws IOException {
         class="kw">return RocksDbChunkStorageProvider.chunkIndexesFromColumn(this.db);
      }

      @Override
      class="kw">public void flush() class="kw">throws IOException {
         try (Arena var1 = Arena.ofConfined()) {
            MemorySegment var2 = var1.allocate(RocksDbNative.C_POINTER);
            var2.set(RocksDbNative.C_POINTER, 0L, MemorySegment.NULL);
            RocksDbNative.flush(this.db.db, this.db.flushOptions, var2);

            try {
               RocksDbChunkStorageProvider.checkError(var2);
            } catch (RocksDbChunkStorageProvider.RocksDbException var5) {
               throw new IOException(var5);
            }

            this.flushCount.getAndIncrement();
         }
      }

      @Nonnull
      @Override
      class="kw">public CompletableFuture<Void> compact(@Nullable long[] var1) {
         class="kw">return this.db.runIo(SneakyThrow.sneakyRunnable(() -> {
            byte[] var2 = null;
            byte[] var3 = null;
            if (var1 != null && var1.length > 0) {
               byte[] var4 = null;
               byte[] var5 = null;

               for (long var9 : var1) {
                  byte[] var11 = RocksDbChunkStorageProvider.toKey(ChunkUtil.xOfChunkIndex(var9), ChunkUtil.zOfChunkIndex(var9));
                  if (var4 == null || Arrays.compareUnsigned(var11, var4) < 0) {
                     var4 = var11;
                  }

                  if (var5 == null || Arrays.compareUnsigned(var11, var5) > 0) {
                     var5 = var11;
                  }
               }

               var2 = var4;
               var3 = new byte[var5.length + 1];
               System.arraycopy(var5, 0, var3, 0, var5.length);
            }

            try (Arena var19 = Arena.ofConfined()) {
               MemorySegment var20 = RocksDbNative.compactoptionsCreate();

               try {
                  RocksDbNative.compactoptionsSetBottommostLevelCompaction(var20, (byte)3);
                  MemorySegment var21 = RocksDbChunkStorageProvider.toNativeKey(var19, var2);
                  long var22 = var2 == null ? 0L : var2.length;
                  MemorySegment var23 = RocksDbChunkStorageProvider.toNativeKey(var19, var3);
                  long var10 = var3 == null ? 0L : var3.length;
                  RocksDbNative.compactRangeCfOpt(this.db.db, this.db.chunkColumn, var20, var21, var22, var23, var10);
                  RocksDbNative.compactRangeCfOpt(this.db.db, this.db.sectionColumn, var20, var21, var22, var23, var10);
                  RocksDbNative.compactRangeCfOpt(this.db.db, this.db.entitySectionColumn, var20, var21, var22, var23, var10);
                  RocksDbNative.compactRangeCfOpt(this.db.db, this.db.blockComponentColumn, var20, var21, var22, var23, var10);
                  if (var2 == null) {
                     RocksDbNative.compactRangeCfOpt(this.db.db, this.db.entityColumn, var20, MemorySegment.NULL, 0L, MemorySegment.NULL, 0L);
                  }

                  this.compactCount.getAndIncrement();
               } class="kw">finally {
                  RocksDbNative.compactoptionsDestroy(var20);
               }
            }
         }));
      }

      @Override
      class="kw">public void close() class="kw">throws IOException {
      }

      @Override
      class="kw">public void pauseBackgroundSaving(ChunkSavingSystems.Data var1) {
         var1.pushSavingFuture(this.db.runIo(SneakyThrow.sneakyRunnable(() -> {
            try (Arena var1 = Arena.ofConfined()) {
               MemorySegment var2 = var1.allocate(RocksDbNative.C_POINTER);
               var2.set(RocksDbNative.C_POINTER, 0L, MemorySegment.NULL);
               RocksDbNative.pauseBackgroundWork(this.db.db, var2);
               RocksDbChunkStorageProvider.checkError(var2);
            }
         })));
      }

      @Nonnull
      @Override
      class="kw">public CompletableFuture<Void> resumeBackgroundSaving() {
         class="kw">return this.db.runIo(SneakyThrow.sneakyRunnable(() -> {
            try (Arena var1 = Arena.ofConfined()) {
               MemorySegment var2 = var1.allocate(RocksDbNative.C_POINTER);
               var2.set(RocksDbNative.C_POINTER, 0L, MemorySegment.NULL);
               RocksDbNative.continueBackgroundWork(this.db.db, var2);
               RocksDbChunkStorageProvider.checkError(var2);
            }
         }));
      }

      @Nonnull
      @Override
      class="kw">public MetricResults toMetricResults() {
         class="kw">return METRICS_REGISTRY.toMetricResults(this);
      }

      class="kw">private class="kw">static class="kw">final class BlockComponentsToSave {
         @Nullable
         class="kw">private class="kw">final BlockComponentSection section;
         @Nullable
         class="kw">private class="kw">final ShortSet dirty;
         @Nullable
         class="kw">private ShortSet removed;
         class="kw">private class="kw">final boolean replaceAll;
         class="kw">private class="kw">final ShortArrayList deletes = new ShortArrayList();
         class="kw">private class="kw">final ShortArrayList putIndexes = new ShortArrayList();
         class="kw">private class="kw">final ObjectArrayList<Holder<ChunkStore>> putHolders = new ObjectArrayList();

         class="kw">private BlockComponentsToSave(@Nullable BlockComponentSection var1, @Nullable ShortSet var2, @Nullable ShortSet var3, boolean var4) {
            this.section = var1;
            this.dirty = var2;
            this.removed = var3;
            this.replaceAll = var4;
         }

         class="kw">private void deleteDirtyIndex(short var1) {
            this.deletes.add(var1);
            if (this.removed == null) {
               this.removed = new ShortOpenHashSet();
            }

            this.removed.add(var1);
         }

         class="kw">private void restore() {
            if (this.section != null) {
               this.section.restoreSaveFailure(this.dirty, this.removed);
            }
         }
      }

      class="kw">private record SectionToSave(
         int x,
         int y,
         int z,
         @Nullable Holder<ChunkStore> section,
         @Nullable List<UUID> entities,
         @Nullable RocksDbChunkStorageProvider.Saver.BlockComponentsToSave blockComponents
      ) {
         class="kw">private SectionToSave {
         }
      }
   }

   class="kw">private class="kw">static class="kw">final class Scratch {
      class="kw">private class="kw">final MemorySegment errPtr = Arena.ofAuto().allocate(RocksDbNative.C_POINTER);
      class="kw">private MemorySegment keys = Arena.ofAuto().allocate(256L);
      class="kw">private MemorySegment value = Arena.ofAuto().allocate(8192L);
      class="kw">private MemorySegment cfPtrs = Arena.ofAuto().allocate(RocksDbNative.C_POINTER, 8L);
      class="kw">private MemorySegment keyPtrs = Arena.ofAuto().allocate(RocksDbNative.C_POINTER, 8L);
      class="kw">private MemorySegment keyLens = Arena.ofAuto().allocate(RocksDbNative.C_SIZE_T, 8L);
      class="kw">private MemorySegment valuePtrs = Arena.ofAuto().allocate(RocksDbNative.C_POINTER, 8L);
      class="kw">private MemorySegment valueLens = Arena.ofAuto().allocate(RocksDbNative.C_SIZE_T, 8L);
      class="kw">private MemorySegment errs = Arena.ofAuto().allocate(RocksDbNative.C_POINTER, 8L);
      class="kw">private int arrayCapacity = 8;
      class="kw">private class="kw">final BasicOutputBuffer bson = new BasicOutputBuffer();
      class="kw">private MemorySegment writeBatch;

      class="kw">private Scratch() {
      }

      class="kw">private MemorySegment clearErrPtr() {
         this.errPtr.set(RocksDbNative.C_POINTER, 0L, MemorySegment.NULL);
         class="kw">return this.errPtr;
      }

      class="kw">private MemorySegment keys(int var1) {
         if (var1 < 0) {
            throw new IllegalArgumentException("negative key scratch size: " + var1);
         }

         if (this.keys.byteSize() < var1) {
            this.keys = Arena.ofAuto().allocate(Math.max(var1, this.keys.byteSize() * 2L));
         }

         class="kw">return this.keys;
      }

      class="kw">private MemorySegment value(int var1) {
         if (var1 < 0) {
            throw new IllegalArgumentException("negative value scratch size: " + var1);
         }

         if (this.value.byteSize() < var1) {
            this.value = Arena.ofAuto().allocate(Math.max(var1, this.value.byteSize() * 2L));
         }

         class="kw">return this.value;
      }

      class="kw">private void ensureArrays(int var1) {
         if (var1 < 0) {
            throw new IllegalArgumentException("negative multiGet count: " + var1);
         }

         if (this.arrayCapacity < var1) {
            int var2 = Math.max(var1, this.arrayCapacity * 2);
            this.cfPtrs = Arena.ofAuto().allocate(RocksDbNative.C_POINTER, var2);
            this.keyPtrs = Arena.ofAuto().allocate(RocksDbNative.C_POINTER, var2);
            this.keyLens = Arena.ofAuto().allocate(RocksDbNative.C_SIZE_T, var2);
            this.valuePtrs = Arena.ofAuto().allocate(RocksDbNative.C_POINTER, var2);
            this.valueLens = Arena.ofAuto().allocate(RocksDbNative.C_SIZE_T, var2);
            this.errs = Arena.ofAuto().allocate(RocksDbNative.C_POINTER, var2);
            this.arrayCapacity = var2;
         }
      }

      class="kw">private MemorySegment writeBatch() {
         if (this.writeBatch == null) {
            this.writeBatch = RocksDbNative.writebatchCreate();
         } else {
            RocksDbNative.writebatchClear(this.writeBatch);
         }

         class="kw">return this.writeBatch;
      }

      class="kw">private void destroy() {
         if (this.writeBatch != null) {
            RocksDbNative.writebatchDestroy(this.writeBatch);
            this.writeBatch = null;
         }
      }
   }
}