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 <15605149...@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-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org