35class DBChunkStorage :
public ::ChunkSource {
43 enum class ChunkCacheStatus :
int {
49 struct PreCavesAndCliffsMetaData {
59 PreCavesAndCliffsMetaData& operator=(PreCavesAndCliffsMetaData
const&);
60 PreCavesAndCliffsMetaData(PreCavesAndCliffsMetaData
const&);
61 PreCavesAndCliffsMetaData();
67 ::ll::TypedStorage<8, 64, ::std::unordered_map<::DBChunkStorageKey, ::DBChunkStorage::ChunkCacheStatus>>
69 ::ll::TypedStorage<8, 8, ::std::shared_mutex> mHasChunkCacheSharedMutex;
70 ::ll::TypedStorage<8, 64, ::std::unordered_map<::ChunkPos, ::std::pair<bool, ::std::shared_ptr<::BlendingData>>>>
71 mChunkBlendingDataCache;
72 ::ll::TypedStorage<8, 8, ::std::shared_mutex> mChunkBlendingDataSharedMutex;
73 ::ll::TypedStorage<8, 8, ::std::shared_mutex> mAttenuatorSharedMutex;
74 ::ll::TypedStorage<8, 8, ::DBStorage&> mStorage;
75 ::ll::TypedStorage<8, 24, ::std::vector<::std::shared_ptr<::LevelStorageWriteBatch>>> mBufferPool;
76 ::ll::TypedStorage<8, 24, ::std::vector<::std::unique_ptr<::LevelChunk, ::LevelChunkFinalDeleter>>> mDiscardBatch;
77 ::ll::TypedStorage<8, 64, ::std::unordered_set<::ChunkPos>> mLiveChunksBeingSaved;
79 TypedStorage<8, 64, ::std::unordered_map<::ChunkPos, ::std::unique_ptr<::LevelChunk, ::LevelChunkFinalDeleter>>>
80 mDiscardedWhileLiveSaved;
81 ::ll::TypedStorage<1, 1, bool> mBatch;
82 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::TaskGroup>> mIOTaskGroup;
83 ::ll::TypedStorage<8, 32, ::BaseGameVersion> mCurrentLevelVersion;
88 DBChunkStorage& operator=(DBChunkStorage
const&);
89 DBChunkStorage(DBChunkStorage
const&);
95 virtual ~DBChunkStorage() ;
97 virtual void shutdown() ;
99 virtual bool isShutdownDone() ;
101 virtual void loadChunk(
::LevelChunk& lc,
bool forceImmediateReplacementDataLoad) ;
103 virtual bool isChunkKnown(
::ChunkPos const& chunkPos) ;
105 virtual bool isChunkSaved(
::ChunkPos const& chunkPos) ;
113 virtual bool verifyChunkNeedsNeighborAwareUpgrade(
::LevelChunk& lc) ;
117 virtual void deleteAllChunkData(
118 ::std::unordered_set<::ChunkPos> excludedChunks,
119 ::std::function<
void()> completionCallback,
120 ::std::shared_ptr<::ChunkDeletionMetadata> metadata
123 virtual void deleteStoredChunkData(
124 ::std::unordered_set<::ChunkPos> chunksToDelete,
125 ::std::function<
void()> completionCallback,
126 ::std::shared_ptr<::ChunkDeletionMetadata> metadata
131 virtual void writeEntityChunkTransfer(
::LevelChunk& lc) ;
133 virtual void writeEntityChunkTransfersToUnloadedChunk(
135 ::std::vector<::ActorUnloadedChunkTransferEntry>
const& transfers
138 virtual void acquireDiscarded(::std::unique_ptr<::LevelChunk, ::LevelChunkFinalDeleter> ptr) ;
140 virtual void hintDiscardBatchBegin() ;
142 virtual void hintDiscardBatchEnd() ;
144 virtual void flushPendingDiscardedChunkWrites() ;
146 virtual void flushThreadBatch() ;
148 virtual ::std::unique_ptr<::BlendingDataProvider> tryGetBlendingDataProvider() ;
150 virtual ::std::shared_ptr<::LevelChunkMetaDataDictionary> loadLevelChunkMetaDataDictionary() ;
152 virtual void deserializeActorStorageToLevelChunk(
::LevelChunk& levelChunk) ;
154 virtual bool chunkPosNeedsBlending(
::ChunkPos const& cp) ;
160 MCAPI DBChunkStorage(
161 ::std::unique_ptr<::ChunkSource> parent,
167 MCAPI
void _batchDelete(
169 ::std::string
const& key,
170 ::DBHelpers::Category category,
171 ::std::string_view reason
174 MCAPI
void _batchPut(
176 ::std::string
const& key,
178 ::DBHelpers::Category category,
179 ::std::string_view reason
182 MCAPI ::std::pair<bool, ::std::shared_ptr<::BlendingData>> _cacheSeamlessChunkBlendingData(
185 ::std::shared_ptr<::BlendingData> blendingData
193 MCAPI
void _deserializeIndependentActorStorage(
::LevelChunk& lc, ::std::string
const& storageKeyDigestBuffer);
199 MCAPI ::std::pair<bool, ::std::unique_ptr<::PersistentBlendData>>
206 MCAPI
void _saveBlendData(
208 ::std::string_view prefix,
216 MCAPI
void _serializeEntities(
220 bool markEntitiesProcesedOnChunkDiscard
223 MCAPI ::std::pair<bool, ::std::shared_ptr<::BlendingData>>
224 _tryGetBlendingDataForChunk(
::ChunkPos const& checkPosition);
226 MCAPI ::std::optional<::DBChunkStorageKey> _tryGetChunkKeyFromString(::std::string_view key);
228 MCAPI ::std::string _upgradeActorStorage(
::ChunkKey chunkKey, ::std::string_view& legacyActorData);
233 MCAPI
void _writeActorDigestFormatVersion(
236 ::ActorDigestFormat formatVersion
239 MCAPI
void _writeDiscardChunksBatch();
245 MCAPI static ::std::vector<::std::string> _deserializeChunkActorStorageKeys(
::IDataInput& digestStream);
247 MCAPI static ::ConsoleChunkBlender::BlenderMode
250 MCAPI static ::std::string deserializeActorStorageToString(
251 bool hasActorDigestVersionTag,
252 ::std::string
const& storageKeyDigestBuffer,
253 ::std::function<
bool(::std::string_view, ::std::string&)> loadDataCallback
260 MCAPI static ::LevelStorageWriteBatch& threadBatch();
262 MCAPI static ::std::string& threadBuffer();
269 ::std::unique_ptr<::ChunkSource> parent,
285 MCAPI
void $shutdown();
287 MCAPI
bool $isShutdownDone();
289 MCAPI
void $loadChunk(
::LevelChunk& lc,
bool forceImmediateReplacementDataLoad);
291 MCFOLD
bool $isChunkKnown(
::ChunkPos const& chunkPos);
293 MCFOLD
bool $isChunkSaved(
::ChunkPos const& chunkPos);
301 MCAPI
bool $verifyChunkNeedsNeighborAwareUpgrade(
::LevelChunk& lc);
305 MCAPI
void $deleteAllChunkData(
306 ::std::unordered_set<::ChunkPos> excludedChunks,
307 ::std::function<
void()> completionCallback,
308 ::std::shared_ptr<::ChunkDeletionMetadata> metadata
311 MCAPI
void $deleteStoredChunkData(
312 ::std::unordered_set<::ChunkPos> chunksToDelete,
313 ::std::function<
void()> completionCallback,
314 ::std::shared_ptr<::ChunkDeletionMetadata> metadata
321 MCAPI
void $writeEntityChunkTransfersToUnloadedChunk(
323 ::std::vector<::ActorUnloadedChunkTransferEntry>
const& transfers
326 MCAPI
void $acquireDiscarded(::std::unique_ptr<::LevelChunk, ::LevelChunkFinalDeleter> ptr);
328 MCAPI
void $hintDiscardBatchBegin();
330 MCAPI
void $hintDiscardBatchEnd();
332 MCAPI
void $flushPendingDiscardedChunkWrites();
334 MCAPI
void $flushThreadBatch();
336 MCAPI ::std::unique_ptr<::BlendingDataProvider> $tryGetBlendingDataProvider();
338 MCAPI ::std::shared_ptr<::LevelChunkMetaDataDictionary> $loadLevelChunkMetaDataDictionary();
340 MCAPI
void $deserializeActorStorageToLevelChunk(
::LevelChunk& levelChunk);
342 MCAPI
bool $chunkPosNeedsBlending(
::ChunkPos const& cp);