MCPcopy Create free account
hub / github.com/LadybugDB/ladybug / serializeCatalogAndMetadata

Method serializeCatalogAndMetadata

src/storage/checkpointer.cpp:327–374  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

325}
326
327void Checkpointer::serializeCatalogAndMetadata(DatabaseHeader& databaseHeader,
328 bool storageChanges) {
329 // IMPORTANT: Always use the main database's catalog, not Catalog::Get()
330 // which might return a graph's catalog if a default graph is set!
331 const auto catalog = clientContext.getDatabase()->getCatalog();
332 auto* dataFH = mainStorageManager->getDataFH();
333 const bool useSnapshot = snapshotTS > 0;
334
335 if (databaseHeader.catalogPageRange.startPageIdx == common::INVALID_PAGE_IDX ||
336 catalog->changedSinceLastCheckpoint() || hasStorageVersionUpgrade) {
337 databaseHeader.updateCatalogPageRange(*dataFH->getPageManager(),
338 useSnapshot ? serializeCatalogSnapshot(*catalog, *mainStorageManager) :
339 serializeCatalog(*catalog, *mainStorageManager));
340 }
341 if (databaseHeader.metadataPageRange.startPageIdx == common::INVALID_PAGE_IDX ||
342 storageChanges || catalog->changedSinceLastCheckpoint() ||
343 dataFH->getPageManager()->changedSinceLastCheckpoint()) {
344 databaseHeader.freeMetadataPageRange(*dataFH->getPageManager());
345 databaseHeader.metadataPageRange =
346 useSnapshot ? serializeMetadataSnapshot(*catalog, *mainStorageManager) :
347 serializeMetadata(*catalog, *mainStorageManager);
348 }
349
350 for (const auto& target : checkpointTargets) {
351 if (target.storageManager == mainStorageManager) {
352 continue;
353 }
354 auto graphHeader = *target.storageManager->getOrInitDatabaseHeader(clientContext);
355 auto* graphDataFH = target.storageManager->getDataFH();
356 const auto graphStorageChanges = storageChangesByManager.at(target.storageManager);
357 if (graphHeader.catalogPageRange.startPageIdx == common::INVALID_PAGE_IDX ||
358 target.catalog->changedSinceLastCheckpoint() || hasStorageVersionUpgrade) {
359 graphHeader.updateCatalogPageRange(*graphDataFH->getPageManager(),
360 useSnapshot ? serializeCatalogSnapshot(*target.catalog, *target.storageManager) :
361 serializeCatalog(*target.catalog, *target.storageManager));
362 }
363 if (graphHeader.metadataPageRange.startPageIdx == common::INVALID_PAGE_IDX ||
364 graphStorageChanges || target.catalog->changedSinceLastCheckpoint() ||
365 graphDataFH->getPageManager()->changedSinceLastCheckpoint()) {
366 graphHeader.freeMetadataPageRange(*graphDataFH->getPageManager());
367 graphHeader.metadataPageRange =
368 useSnapshot ? serializeMetadataSnapshot(*target.catalog, *target.storageManager) :
369 serializeMetadata(*target.catalog, *target.storageManager);
370 }
371 graphHeader.dataFileNumPages = graphDataFH->getNumPages();
372 writeDatabaseHeaderToStorage(clientContext, graphHeader, *target.storageManager);
373 }
374}
375
376void Checkpointer::writeDatabaseHeader(const DatabaseHeader& header) {
377 writeDatabaseHeaderToStorage(clientContext, header, *mainStorageManager);

Callers

nothing calls this directly

Calls 11

serializeMetadataFunction · 0.85
getCatalogMethod · 0.80
getPageManagerMethod · 0.80
freeMetadataPageRangeMethod · 0.80
getDatabaseMethod · 0.45
getDataFHMethod · 0.45
getNumPagesMethod · 0.45

Tested by

no test coverage detected