You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by el...@apache.org on 2023/06/14 05:30:11 UTC

[doris] 01/01: move delay logic to tablet

This is an automated email from the ASF dual-hosted git repository.

eldenmoon pushed a commit to branch 2pr-unused-rs
in repository https://gitbox.apache.org/repos/asf/doris.git

commit bda61ebab674ac57c1fd5224088e7bf951aa005c
Author: eldenmoon <15...@163.com>
AuthorDate: Wed Jun 14 13:29:46 2023 +0800

    move delay logic to tablet
---
 be/src/olap/data_dir.cpp            |  4 +---
 be/src/olap/storage_engine.cpp      | 13 +++----------
 be/src/olap/storage_engine.h        |  2 --
 be/src/olap/tablet.cpp              | 19 +++++++++++--------
 be/src/service/internal_service.cpp |  9 ++-------
 5 files changed, 17 insertions(+), 30 deletions(-)

diff --git a/be/src/olap/data_dir.cpp b/be/src/olap/data_dir.cpp
index 464bc33483..b83ce43635 100644
--- a/be/src/olap/data_dir.cpp
+++ b/be/src/olap/data_dir.cpp
@@ -627,9 +627,7 @@ void DataDir::perform_path_gc_by_rowsetid() {
                 TabletSharedPtr tablet = _tablet_manager->get_tablet(tablet_id);
                 if (tablet != nullptr) {
                     if (!tablet->check_rowset_id(rowset_id) &&
-                        !StorageEngine::instance()
-                                 ->get_rowset_in_unused_rowsets(rowset_id)
-                                 .has_value()) {
+                        !StorageEngine::instance()->check_rowset_id_in_unused_rowsets(rowset_id)) {
                         _process_garbage_path(path);
                     }
                 }
diff --git a/be/src/olap/storage_engine.cpp b/be/src/olap/storage_engine.cpp
index 263df09455..1d65da4d59 100644
--- a/be/src/olap/storage_engine.cpp
+++ b/be/src/olap/storage_engine.cpp
@@ -1004,9 +1004,7 @@ void StorageEngine::start_delete_unused_rowset() {
     {
         std::lock_guard<std::mutex> lock(_gc_mutex);
         for (auto it = _unused_rowsets.begin(); it != _unused_rowsets.end();) {
-            uint64_t now = UnixSeconds();
-            if (it->second.use_count() == 1 && it->second->need_delete_file() &&
-                now > it->second->delayed_expired_timestamp()) {
+            if (it->second.use_count() == 1 && it->second->need_delete_file()) {
                 if (it->second->is_local()) {
                     unused_rowsets_copy[it->first] = it->second;
                 }
@@ -1157,15 +1155,10 @@ Status StorageEngine::execute_task(EngineTask* task) {
 }
 
 // check whether any unused rowsets's id equal to rowset_id
-std::optional<RowsetSharedPtr> StorageEngine::get_rowset_in_unused_rowsets(
-        const RowsetId& rowset_id) {
+bool StorageEngine::check_rowset_id_in_unused_rowsets(const RowsetId& rowset_id) {
     std::lock_guard<std::mutex> lock(_gc_mutex);
     auto search = _unused_rowsets.find(rowset_id.to_string());
-    if (search != _unused_rowsets.end()) {
-        return search->second;
-    }
-    // Not found
-    return {};
+    return search != _unused_rowsets.end();
 }
 
 void StorageEngine::create_cumulative_compaction(
diff --git a/be/src/olap/storage_engine.h b/be/src/olap/storage_engine.h
index 63c304393c..42e7bfdef7 100644
--- a/be/src/olap/storage_engine.h
+++ b/be/src/olap/storage_engine.h
@@ -215,8 +215,6 @@ public:
 
     Status process_index_change_task(const TAlterInvertedIndexReq& reqest);
 
-    std::optional<RowsetSharedPtr> get_rowset_in_unused_rowsets(const RowsetId& rowset_id);
-
 private:
     // Instance should be inited from `static open()`
     // MUST NOT be called in other circumstances.
diff --git a/be/src/olap/tablet.cpp b/be/src/olap/tablet.cpp
index 7c21b47707..f2e2424864 100644
--- a/be/src/olap/tablet.cpp
+++ b/be/src/olap/tablet.cpp
@@ -794,14 +794,17 @@ void Tablet::delete_expired_stale_rowset() {
         for (auto& timestampedVersion : to_delete_version) {
             auto it = _stale_rs_version_map.find(timestampedVersion->version());
             if (it != _stale_rs_version_map.end()) {
-                // delete rowset
-                StorageEngine::instance()->add_unused_rowset(it->second);
-                _stale_rs_version_map.erase(it);
-                VLOG_NOTICE << "delete stale rowset tablet=" << full_name() << " version["
-                            << timestampedVersion->version().first << ","
-                            << timestampedVersion->version().second
-                            << "] move to unused_rowset success " << std::fixed
-                            << expired_stale_sweep_endtime;
+                uint64_t now = UnixSeconds();
+                if (now > it->second->delayed_expired_timestamp()) {
+                    // delete rowset
+                    StorageEngine::instance()->add_unused_rowset(it->second);
+                    _stale_rs_version_map.erase(it);
+                    VLOG_NOTICE << "delete stale rowset tablet=" << full_name() << " version["
+                                << timestampedVersion->version().first << ","
+                                << timestampedVersion->version().second
+                                << "] move to unused_rowset success " << std::fixed
+                                << expired_stale_sweep_endtime;
+                }
             } else {
                 LOG(WARNING) << "delete stale rowset tablet=" << full_name() << " version["
                              << timestampedVersion->version().first << ","
diff --git a/be/src/service/internal_service.cpp b/be/src/service/internal_service.cpp
index 7f2e231df5..ef4cca22cc 100644
--- a/be/src/service/internal_service.cpp
+++ b/be/src/service/internal_service.cpp
@@ -1517,13 +1517,8 @@ Status PInternalServiceImpl::_multi_get(const PMultiGetRequest& request,
         // Get Rowset from either tablet or unused rowsets, since this rowset maybe expired and swept.
         // But we ensured it's rowset is not released when init Tablet reader param, rowset->update_delayed_expired_timestamp();
         if (!rowset) {
-            std::optional<RowsetSharedPtr> from_unused_rowset =
-                    StorageEngine::instance()->get_rowset_in_unused_rowsets(rowset_id);
-            if (!from_unused_rowset.has_value()) {
-                LOG(INFO) << "no such rowset " << rowset_id;
-                continue;
-            }
-            rowset = std::static_pointer_cast<BetaRowset>(from_unused_rowset.value());
+            LOG(INFO) << "no such rowset " << rowset_id;
+            continue;
         }
         size_t row_size = 0;
         Defer _defer([&]() {


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org