RocksDbStatistics class

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

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

implements: MetricProvider

Поля (12)

МодификаторыТипИмя
public static final MetricsRegistry<RocksDbChunkStorageProvider.RocksDbStatistics> METRICS_REGISTRY
public static final MetricsRegistry<RocksDbChunkStorageProvider.RocksDbStatistics.HistogramSnapshot> METRICS_REGISTRY
public final RocksDbChunkStorageProvider.RocksDbStatistics.HistogramSnapshot[] histograms
public final long[] tickers
MetricsRegistry var0
var0
var0
long[] var1
int var2
MemorySegment var3
int var4
RocksDbChunkStorageProvider.RocksDbStatistics.HistogramSnapshot[] var8

Методы (9)

МодификаторыВозвратСигнатура
private static MetricsRegistry<RocksDbChunkStorageProvider.RocksDbStatistics> buildRegistryprivate static MetricsRegistry<RocksDbChunkStorageProvider.RocksDbStatistics> buildRegistry()
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++)
public static RocksDbChunkStorageProvider.RocksDbStatistics.HistogramSnapshot frompublic static RocksDbChunkStorageProvider.RocksDbStatistics.HistogramSnapshot from(@Nonnull MemorySegment var0)
public static RocksDbChunkStorageProvider.RocksDbStatistics snapshotpublic static RocksDbChunkStorageProvider.RocksDbStatistics snapshot(@Nonnull MemorySegment var0)
public MetricResults toMetricResultspublic MetricResults toMetricResults()
public MetricResults toMetricResultspublic MetricResults toMetricResults()

Исходный код

Показать/скрыть
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;
         }
      }
   }
}