| 27 | namespace { |
| 28 | |
| 29 | void writeDatabaseHeaderToStorage(main::ClientContext& clientContext, const DatabaseHeader& header, |
| 30 | StorageManager& storageManager) { |
| 31 | auto headerWriter = |
| 32 | std::make_shared<common::InMemFileWriter>(*MemoryManager::Get(clientContext)); |
| 33 | common::Serializer headerSerializer(headerWriter); |
| 34 | header.serialize(headerSerializer); |
| 35 | auto headerPage = headerWriter->getPage(0); |
| 36 | |
| 37 | auto dataFH = storageManager.getDataFH(); |
| 38 | auto& shadowFile = storageManager.getShadowFile(); |
| 39 | auto shadowHeader = ShadowUtils::createShadowVersionIfNecessaryAndPinPage( |
| 40 | common::StorageConstants::DB_HEADER_PAGE_IDX, true /* skipReadingOriginalPage */, *dataFH, |
| 41 | shadowFile); |
| 42 | memcpy(shadowHeader.frame, headerPage.data(), common::LBUG_PAGE_SIZE); |
| 43 | shadowFile.getShadowingFH().unpinPage(shadowHeader.shadowPage); |
| 44 | |
| 45 | storageManager.setDatabaseHeader(std::make_unique<DatabaseHeader>(header)); |
| 46 | } |
| 47 | |
| 48 | void logCheckpointAndApplyShadowPagesForStorage(main::ClientContext& clientContext, |
| 49 | StorageManager& storageManager, bool walRotated) { |