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

Method checkpointInMemOnly

src/storage/table/csr_node_group.cpp:1027–1138  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1025}
1026
1027void CSRNodeGroup::checkpointInMemOnly(const UniqLock& lock, NodeGroupCheckpointState& state) {
1028 const auto* txn = state.transaction ? state.transaction : &DUMMY_CHECKPOINT_TRANSACTION;
1029 auto numRels = 0u;
1030 for (auto& chunkedGroup : chunkedGroups.getAllGroups(lock)) {
1031 numRels += chunkedGroup->getNumRows();
1032 }
1033 if (numRels == 0) {
1034 return;
1035 }
1036 // Construct in-mem csr header chunks.
1037 auto& csrState = state.cast<CSRNodeGroupCheckpointState>();
1038 csrState.newHeader = std::make_unique<InMemChunkedCSRHeader>(*state.mm,
1039 false /*enableCompression*/, StorageConfig::NODE_GROUP_SIZE);
1040 const auto numNodes = csrIndex->getMaxOffsetWithRels() + 1;
1041 csrState.newHeader->setNumValues(numNodes);
1042 populateCSRLengthInMemOnly(lock, numNodes, csrState);
1043 const auto rightCSROffsetsOfRegions =
1044 csrState.newHeader->populateStartCSROffsetsFromLength(true /* leaveGap */);
1045 csrState.newHeader->populateEndCSROffsetFromStartAndLength();
1046 csrState.newHeader->finalizeCSRRegionEndOffsets(rightCSROffsetsOfRegions);
1047
1048 // Init scan chunk and scan state.
1049 const auto numColumnsToCheckpoint = csrState.columnIDs.size();
1050 auto scanChunk = initScanDataChunk(csrState, dataTypes);
1051 std::vector<const Column*> columns(numColumnsToCheckpoint);
1052 for (auto i = 0u; i < numColumnsToCheckpoint; i++) {
1053 columns[i] = csrState.columns[i];
1054 }
1055 std::vector<ValueVector*> outVectors;
1056 for (auto i = 0u; i < numColumnsToCheckpoint; i++) {
1057 outVectors.push_back(scanChunk.valueVectors[i].get());
1058 }
1059 auto scanState = std::make_unique<TableScanState>(nullptr, outVectors, scanChunk.state);
1060 scanState->columnIDs = csrState.columnIDs;
1061 scanState->columns = columns;
1062 scanState->nodeGroupScanState =
1063 std::make_unique<CSRNodeGroupScanState>(csrState.columnIDs.size());
1064
1065 auto dummyChunk = initScanDataChunk(csrState, dataTypes);
1066 for (auto i = 0u; i < dummyChunk.getNumValueVectors(); i++) {
1067 dummyChunk.getValueVectorMutable(i).setAllNull();
1068 }
1069
1070 // Init data chunks to be appended and flushed.
1071 auto chunkCapacity = rightCSROffsetsOfRegions.back() + 1;
1072 std::vector<std::unique_ptr<ColumnChunk>> dataChunksToFlush(numColumnsToCheckpoint);
1073 for (auto i = 0u; i < numColumnsToCheckpoint; i++) {
1074 const auto columnID = csrState.columnIDs[i];
1075 DASSERT(columnID < dataTypes.size());
1076 dataChunksToFlush[i] = std::make_unique<ColumnChunk>(*state.mm, dataTypes[columnID].copy(),
1077 chunkCapacity, enableCompression, ResidencyState::IN_MEMORY);
1078 }
1079
1080 // Scan tuples from in mem node groups and append to data chunks to flush.
1081 for (auto offset = 0u; offset < numNodes; offset++) {
1082 const auto numRows = csrIndex->getNumRows(offset);
1083 auto rows = csrIndex->indices[offset].getRows();
1084 auto numRowsTryAppended = 0u;

Callers

nothing calls this directly

Calls 15

initScanDataChunkFunction · 0.85
ChunkedCSRHeaderClass · 0.85
getMaxOffsetWithRelsMethod · 0.80
getRowsMethod · 0.80
setSelSizeMethod · 0.80
getGapSizeMethod · 0.80
isUnfilteredMethod · 0.80
getNumRowsMethod · 0.45
setNumValuesMethod · 0.45

Tested by

no test coverage detected