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