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

Method checkpointInMemAndOnDisk

src/storage/table/node_group.cpp:459–503  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

457}
458
459std::unique_ptr<ChunkedNodeGroup> NodeGroup::checkpointInMemAndOnDisk(MemoryManager& memoryManager,
460 const UniqLock& lock, NodeGroupCheckpointState& state) const {
461 const auto* txn = state.transaction ? state.transaction : &DUMMY_CHECKPOINT_TRANSACTION;
462 const auto firstGroup = chunkedGroups.getFirstGroup(lock);
463 const auto numPersistentRows = firstGroup->getNumRows();
464 std::vector<const Column*> columnPtrs;
465 columnPtrs.reserve(state.columns.size());
466 for (auto* column : state.columns) {
467 columnPtrs.push_back(column);
468 }
469 const auto insertChunkedGroup = scanAllInsertedAndVersions<ResidencyState::IN_MEMORY>(
470 memoryManager, lock, state.columnIDs, columnPtrs, txn);
471 const auto numInsertedRows = insertChunkedGroup->getNumRows();
472 for (auto i = 0u; i < state.columnIDs.size(); i++) {
473 const auto columnID = state.columnIDs[i];
474 // Scan updates from the persistent chunked group when persistent data exists.
475 DASSERT(firstGroup && firstGroup->getResidencyState() == ResidencyState::ON_DISK);
476 const auto columnHasUpdates =
477 firstGroup->hasAnyUpdates(txn, columnID, 0, firstGroup->getNumRows());
478 if (numInsertedRows == 0 && !columnHasUpdates) {
479 continue;
480 }
481 std::vector<ChunkCheckpointState> chunkCheckpointStates;
482 if (columnHasUpdates) {
483 scanCommittedUpdatesForColumn(chunkCheckpointStates, memoryManager, lock, columnID,
484 state.columns[columnID], txn);
485 }
486 if (numInsertedRows > 0) {
487 chunkCheckpointStates.emplace_back(insertChunkedGroup->moveColumnChunk(columnID),
488 numPersistentRows, numInsertedRows);
489 }
490 firstGroup->getColumnChunk(columnID).checkpoint(*state.columns[i],
491 std::move(chunkCheckpointStates), state.pageAllocator);
492 }
493 auto checkpointedChunkedGroup =
494 std::make_unique<ChunkedNodeGroup>(*chunkedGroups.getGroup(lock, 0), state.columnIDs);
495 DASSERT(checkpointedChunkedGroup->getResidencyState() == ResidencyState::ON_DISK);
496 checkpointedChunkedGroup->resetNumRowsFromChunks();
497 checkpointedChunkedGroup->resetVersionAndUpdateInfo();
498 // The first chunked group is the only persistent one
499 // The checkpointed columns have been moved to the checkpointedChunkedGroup, the
500 // remaining must have been dropped
501 firstGroup->reclaimStorage(state.pageAllocator);
502 return checkpointedChunkedGroup;
503}
504
505std::unique_ptr<ChunkedNodeGroup> NodeGroup::checkpointInMemOnly(MemoryManager& memoryManager,
506 const UniqLock& lock, const NodeGroupCheckpointState& state) const {

Callers

nothing calls this directly

Calls 14

getFirstGroupMethod · 0.80
hasAnyUpdatesMethod · 0.80
emplace_backMethod · 0.80
moveColumnChunkMethod · 0.80
getNumRowsMethod · 0.45
reserveMethod · 0.45
sizeMethod · 0.45
push_backMethod · 0.45
getResidencyStateMethod · 0.45
checkpointMethod · 0.45

Tested by

no test coverage detected