From e15c445fb5927ede8022e44390936ace25ed95ca Mon Sep 17 00:00:00 2001 From: Xu Peng Date: Fri, 24 May 2019 17:41:43 +0800 Subject: [PATCH] feat(db): add size api for meta Former-commit-id: 0b240dbf664348f65a70e57a5d545857469ad37b --- cpp/src/db/DBMetaImpl.cpp | 33 ++++++++++++++++++++------------- cpp/src/db/DBMetaImpl.h | 2 ++ cpp/src/db/LocalMetaImpl.cpp | 5 +++++ cpp/src/db/LocalMetaImpl.h | 2 ++ cpp/src/db/Meta.h | 2 ++ 5 files changed, 31 insertions(+), 13 deletions(-) diff --git a/cpp/src/db/DBMetaImpl.cpp b/cpp/src/db/DBMetaImpl.cpp index 172e7f42f3..a4c3f5d77e 100644 --- a/cpp/src/db/DBMetaImpl.cpp +++ b/cpp/src/db/DBMetaImpl.cpp @@ -476,20 +476,11 @@ Status DBMetaImpl::archive_files() { } if (criteria == "disk") { size_t G = 1024*1024*1024UL; - long unsigned int sum = 0; - try { - auto sum_c = ConnectorPtr->sum( - &GroupFileSchema::rows, - where( - c(&GroupFileSchema::file_type) != (int)GroupFileSchema::TO_DELETE - )); - sum = *sum_c; - } catch (std::exception & e) { - LOG(DEBUG) << e.what(); - throw e; - } + long sum = 0; + size(sum); + // PXU TODO: refactor rows - auto to_delete = sum - limit*G/sizeof(float); + auto to_delete = (sum - limit*G)/sizeof(float); discard_files_of_size(to_delete); } } @@ -497,6 +488,22 @@ Status DBMetaImpl::archive_files() { return Status::OK(); } +Status DBMetaImpl::size(long& result) { + try { + auto sum_c = ConnectorPtr->sum( + &GroupFileSchema::rows, + where( + c(&GroupFileSchema::file_type) != (int)GroupFileSchema::TO_DELETE + )); + result = *sum_c*sizeof(float); + } catch (std::exception & e) { + LOG(DEBUG) << e.what(); + throw e; + } + + return Status::OK(); +} + Status DBMetaImpl::discard_files_of_size(long to_discard_size) { LOG(DEBUG) << "Abort to discard size=" << to_discard_size; if (to_discard_size <= 0) { diff --git a/cpp/src/db/DBMetaImpl.h b/cpp/src/db/DBMetaImpl.h index 6433361d7a..20f91b8482 100644 --- a/cpp/src/db/DBMetaImpl.h +++ b/cpp/src/db/DBMetaImpl.h @@ -52,6 +52,8 @@ public: virtual Status archive_files() override; + virtual Status size(long& result) override; + virtual Status cleanup() override; virtual Status cleanup_ttl_files(uint16_t seconds) override; diff --git a/cpp/src/db/LocalMetaImpl.cpp b/cpp/src/db/LocalMetaImpl.cpp index 2ec5c08ce4..aa852a3db6 100644 --- a/cpp/src/db/LocalMetaImpl.cpp +++ b/cpp/src/db/LocalMetaImpl.cpp @@ -261,6 +261,11 @@ Status LocalMetaImpl::drop_all() { return Status::OK(); } +Status LocalMetaImpl::size(long& result) { + // PXU TODO + return Status::OK(); +} + Status LocalMetaImpl::count(const std::string& group_id, long& result) { // PXU TODO return Status::OK(); diff --git a/cpp/src/db/LocalMetaImpl.h b/cpp/src/db/LocalMetaImpl.h index 71927e8425..fb989d5f67 100644 --- a/cpp/src/db/LocalMetaImpl.h +++ b/cpp/src/db/LocalMetaImpl.h @@ -55,6 +55,8 @@ public: virtual Status drop_all() override; + virtual Status size(long& result) override; + private: Status GetGroupMetaInfoByPath(const std::string& path, GroupSchema& group_info); diff --git a/cpp/src/db/Meta.h b/cpp/src/db/Meta.h index 74e1637f77..e6150cea11 100644 --- a/cpp/src/db/Meta.h +++ b/cpp/src/db/Meta.h @@ -93,6 +93,8 @@ public: virtual Status files_to_merge(const std::string& group_id, DatePartionedGroupFilesSchema& files) = 0; + virtual Status size(long& result) = 0; + virtual Status archive_files() = 0; virtual Status files_to_index(GroupFilesSchema&) = 0;