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

Method writeCheckpoint

src/storage/checkpointer.cpp:155–196  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

153}
154
155void Checkpointer::writeCheckpoint() {
156 if (isInMemory) {
157 return;
158 }
159
160 checkpointTargets = collectCheckpointTargets();
161
162 for (const auto& target : checkpointTargets) {
163 auto rotated = target.storageManager->getWAL().rotateForCheckpoint(&clientContext);
164 walRotatedByManager[target.storageManager] = rotated;
165 walRotated = walRotated || rotated;
166 }
167
168 auto databaseHeader = *mainStorageManager->getOrInitDatabaseHeader(clientContext);
169 const auto oldStorageVersion = databaseHeader.storageVersion;
170 databaseHeader.storageVersion = StorageVersionInfo::getStorageVersion();
171 hasStorageVersionUpgrade = oldStorageVersion != databaseHeader.storageVersion;
172 bool localHasStorageChanges = checkpointStorage();
173 serializeCatalogAndMetadata(databaseHeader, localHasStorageChanges);
174 databaseHeader.dataFileNumPages = mainStorageManager->getDataFH()->getNumPages();
175 writeDatabaseHeader(databaseHeader);
176 logCheckpointAndApplyShadowPages(walRotatedByManager.at(mainStorageManager));
177 for (const auto& target : checkpointTargets) {
178 if (target.storageManager == mainStorageManager) {
179 continue;
180 }
181 logCheckpointAndApplyShadowPagesForStorage(clientContext, *target.storageManager,
182 walRotatedByManager.at(target.storageManager));
183 }
184
185 // Snapshot versions while the write gate is still held.
186 for (const auto& target : checkpointTargets) {
187 catalogVersionAtCheckpointByCatalog[target.catalog] = target.catalog->getVersion();
188 pageManagerVersionAtCheckpointByManager[target.storageManager] =
189 target.storageManager->getDataFH()->getPageManager()->getVersion();
190 }
191 catalogVersionAtCheckpoint =
192 catalogVersionAtCheckpointByCatalog[clientContext.getDatabase()->getCatalog()];
193 pageManagerVersionAtCheckpoint = pageManagerVersionAtCheckpointByManager[mainStorageManager];
194
195 postCheckpointCleanup();
196}
197
198void Checkpointer::beginCheckpoint(common::transaction_t snapshotTimestamp) {
199 if (isInMemory) {

Callers

nothing calls this directly

Calls 10

getStorageVersionFunction · 0.85
rotateForCheckpointMethod · 0.80
getPageManagerMethod · 0.80
getCatalogMethod · 0.80
getNumPagesMethod · 0.45
getDataFHMethod · 0.45
getVersionMethod · 0.45
getDatabaseMethod · 0.45

Tested by

no test coverage detected