From 4b5ebaeef43099191ecb15c12819ea323597bd82 Mon Sep 17 00:00:00 2001 From: ZhuangYumin Date: Thu, 25 Apr 2024 15:05:53 +0000 Subject: [PATCH] set up api chain --- CMakeLists.txt | 2 ++ bpt/include/bpt/bpt.hpp | 10 ++++++++-- bpt/include/bpt/buffer_pool_manager.h | 2 ++ bpt/include/bpt/disk_manager.h | 2 +- bpt/src/buffer_pool_manager.cpp | 5 ++--- bpt/src/disk_manager.cpp | 6 +++--- snapshot/CMakeLists.txt | 2 ++ snapshot/include/snapshot/snapshot.h | 4 ++++ snapshot/src/snapshot.cpp | 2 ++ src/CMakeLists.txt | 1 - src/main.cpp | 1 - 11 files changed, 26 insertions(+), 11 deletions(-) create mode 100644 snapshot/CMakeLists.txt create mode 100644 snapshot/include/snapshot/snapshot.h create mode 100644 snapshot/src/snapshot.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index a379d97..dd02b22 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -84,11 +84,13 @@ set(ZSTD_BUILD_DEPRECATED OFF CACHE BOOL "Build deprecated module") FetchContent_MakeAvailable(zstd) include_directories(${CMAKE_SOURCE_DIR}/bpt/include) +include_directories(${CMAKE_SOURCE_DIR}/snapshot/include) include_directories(${CMAKE_SOURCE_DIR}/stlite) include(CTest) enable_testing() add_subdirectory(bpt) +add_subdirectory(snapshot) add_subdirectory(test) add_subdirectory(src) \ No newline at end of file diff --git a/bpt/include/bpt/bpt.hpp b/bpt/include/bpt/bpt.hpp index 168473c..642b203 100644 --- a/bpt/include/bpt/bpt.hpp +++ b/bpt/include/bpt/bpt.hpp @@ -34,6 +34,7 @@ class BPlusTreeIndexer { // TODO } }; + BPlusTreeIndexer() = delete; BPlusTreeIndexer(const BPlusTreeIndexer &) = delete; BPlusTreeIndexer(BPlusTreeIndexer &&) = delete; BPlusTreeIndexer &operator=(const BPlusTreeIndexer &) = delete; @@ -80,12 +81,17 @@ class BPlusTreeIndexer { return true; } size_t Size() { return siz; } + void Flush() { + // TODO: do some recording + bpm->FlushAllPages(); + } private: - page_id_t root_page_id; - size_t siz; + page_id_t root_page_id; // stored in the first 4 (0-3) bytes of RawDatMemory + uint64_t siz; // stored in the next 8 (4-11) bytes of RawDatMemory static KeyComparator key_cmp; std::shared_mutex latch; + BufferPoolManager *bpm; }; template KeyComparator BPlusTreeIndexer::key_cmp = KeyComparator(); diff --git a/bpt/include/bpt/buffer_pool_manager.h b/bpt/include/bpt/buffer_pool_manager.h index 59d681f..077b569 100644 --- a/bpt/include/bpt/buffer_pool_manager.h +++ b/bpt/include/bpt/buffer_pool_manager.h @@ -249,6 +249,8 @@ class BufferPoolManager { BufferPoolManager &operator=(const BufferPoolManager &) = delete; BufferPoolManager &operator=(BufferPoolManager &&) = delete; ~BufferPoolManager(); + inline char *RawDataMemory() { return disk_manager->RawDataMemory(); } + inline size_t RawDatMemorySize() { return disk_manager->RawDatMemorySize(); } /** * @brief Allocate a page on disk. Caller should acquire the latch before calling this function. * @return the id of the allocated page diff --git a/bpt/include/bpt/disk_manager.h b/bpt/include/bpt/disk_manager.h index 232e68f..e7ef391 100644 --- a/bpt/include/bpt/disk_manager.h +++ b/bpt/include/bpt/disk_manager.h @@ -21,7 +21,7 @@ class DiskManager { ~DiskManager(); char *RawDataMemory(); size_t RawDatMemorySize(); - void FlushInternalPage(); + void FullyFlush(); void Close(); void ReadPage(page_id_t page_id, char *page_data_ptr); void WritePage(page_id_t page_id, const char *page_data_ptr); // in fact, the page_id is the offest diff --git a/bpt/src/buffer_pool_manager.cpp b/bpt/src/buffer_pool_manager.cpp index ae0a0cb..544d470 100644 --- a/bpt/src/buffer_pool_manager.cpp +++ b/bpt/src/buffer_pool_manager.cpp @@ -104,9 +104,7 @@ page_id_t BufferPoolManager::AllocatePage() { return page_id; } -void BufferPoolManager::DeallocatePage(page_id_t page_id) { - disk_manager->DeallocatePage(page_id); -} +void BufferPoolManager::DeallocatePage(page_id_t page_id) { disk_manager->DeallocatePage(page_id); } size_t BufferPoolManager::GetPoolSize() { return pool_size; } Page *BufferPoolManager::GetPages() { return pages_; } @@ -224,6 +222,7 @@ void BufferPoolManager::FlushAllPages() { for (auto &pair : page_table_) { FlushPage(pair.first); } + disk_manager->FullyFlush(); } auto BufferPoolManager::DeletePage(page_id_t page_id) -> bool { diff --git a/bpt/src/disk_manager.cpp b/bpt/src/disk_manager.cpp index 138c7a6..3b6af91 100644 --- a/bpt/src/disk_manager.cpp +++ b/bpt/src/disk_manager.cpp @@ -20,7 +20,7 @@ DiskManager::DiskManager(const std::string &file_path_) current_none_empty_page_count = 0; raw_data_memory = new char[kPageSize - meta_data_size]; memset(raw_data_memory, 0, kPageSize - meta_data_size); - FlushInternalPage(); + FullyFlush(); is_new = true; } else { // File exists, read metadata from internal page @@ -45,7 +45,7 @@ char *DiskManager::RawDataMemory() { return raw_data_memory; } size_t DiskManager::RawDatMemorySize() { return kPageSize - meta_data_size; } -void DiskManager::FlushInternalPage() { +void DiskManager::FullyFlush() { fseek(fp, 0, SEEK_SET); fwrite(&first_empty_page_id, sizeof(page_id_t), 1, fp); fwrite(¤t_total_page_count, sizeof(size_t), 1, fp); @@ -56,7 +56,7 @@ void DiskManager::FlushInternalPage() { void DiskManager::Close() { if (fp != nullptr) { - FlushInternalPage(); + FullyFlush(); fclose(fp); fp = nullptr; } diff --git a/snapshot/CMakeLists.txt b/snapshot/CMakeLists.txt new file mode 100644 index 0000000..f7534a8 --- /dev/null +++ b/snapshot/CMakeLists.txt @@ -0,0 +1,2 @@ +add_library(snapshot STATIC src/snapshot.cpp) +target_link_libraries(snapshot libzstd_static) \ No newline at end of file diff --git a/snapshot/include/snapshot/snapshot.h b/snapshot/include/snapshot/snapshot.h new file mode 100644 index 0000000..e5f0b29 --- /dev/null +++ b/snapshot/include/snapshot/snapshot.h @@ -0,0 +1,4 @@ +#ifndef SNAP_SHOT_H +#define SNAP_SHOT_H + +#endif // SNAP_SHOT_H \ No newline at end of file diff --git a/snapshot/src/snapshot.cpp b/snapshot/src/snapshot.cpp new file mode 100644 index 0000000..52feaa8 --- /dev/null +++ b/snapshot/src/snapshot.cpp @@ -0,0 +1,2 @@ +#include "snapshot/snapshot.h" +#include diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 9cefa83..bb410ad 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -7,5 +7,4 @@ add_executable(${BACKEND_EXETUABLE_NAME} main.cpp) target_link_libraries(${BACKEND_EXETUABLE_NAME} argparse) target_link_libraries(${BACKEND_EXETUABLE_NAME} spdlog::spdlog) target_link_libraries(${BACKEND_EXETUABLE_NAME} sockpp) -target_link_libraries(${BACKEND_EXETUABLE_NAME} libzstd_static) set_target_properties(${BACKEND_EXETUABLE_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index d3a5ff7..929595b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,5 +1,4 @@ #include -#include #include "basic_defs.h" const std::string main_version = "0.0.1"; const std::string build_version = GIT_COMMIT_HASH;