2525
2626#include " fmt/format.h"
2727#include " paimon/common/executor/future.h"
28+ #include " paimon/common/metrics/metrics_impl.h"
2829#include " paimon/common/utils/path_util.h"
2930#include " paimon/common/utils/scope_guard.h"
3031#include " paimon/common/utils/string_utils.h"
3132#include " paimon/core/manifest/manifest_entry.h"
3233#include " paimon/core/manifest/manifest_file.h"
3334#include " paimon/core/manifest/manifest_file_meta.h"
3435#include " paimon/core/manifest/manifest_list.h"
36+ #include " paimon/core/operation/metrics/clean_metrics.h"
3537#include " paimon/core/snapshot.h"
38+ #include " paimon/core/utils/duration.h"
3639#include " paimon/core/utils/file_store_path_factory.h"
3740#include " paimon/core/utils/snapshot_manager.h"
3841#include " paimon/status.h"
@@ -61,7 +64,8 @@ OrphanFilesCleanerImpl::OrphanFilesCleanerImpl(
6164 manifest_file_(manifest_file),
6265 manifest_list_(manifest_list),
6366 older_than_ms_(older_than_ms),
64- should_be_retained_(should_be_retained) {}
67+ should_be_retained_(should_be_retained),
68+ metrics_(std::make_shared<MetricsImpl>()) {}
6569
6670bool OrphanFilesCleanerImpl::SupportToClean (const std::string& file_name) {
6771 static std::vector<std::pair<std::string, std::string>> supported_pattern = {
@@ -91,16 +95,18 @@ Result<std::set<std::string>> OrphanFilesCleanerImpl::Clean() {
9195 " OrphanFilesCleaner do not support cleaning table with branch" );
9296 }
9397 PAIMON_ASSIGN_OR_RAISE (std::set<std::string> all_dirs, ListPaimonFileDirs ());
98+ PAIMON_ASSIGN_OR_RAISE (std::set<std::string> used_file_names, GetUsedFiles ());
99+ Duration duration;
94100 std::vector<std::future<std::vector<std::unique_ptr<FileStatus>>>> file_statuses_futures;
95101 for (const auto & dir : all_dirs) {
96102 file_statuses_futures.push_back (
97103 Via (executor_.get (), [this , dir] { return TryBestListingDirs (dir); }));
98104 }
99- PAIMON_ASSIGN_OR_RAISE (std::set<std::string> used_file_names, GetUsedFiles ());
100105
101106 std::set<std::string> need_to_deletes;
102107 std::vector<std::future<void >> futures;
103108 ScopeGuard guard ([&futures]() { Wait (futures); });
109+ uint64_t file_statuses_duration = duration.Reset ();
104110 for (const auto & file_statuses : CollectAll (file_statuses_futures)) {
105111 for (const auto & file_status : file_statuses) {
106112 if (file_status->IsDir ()) {
@@ -129,10 +135,17 @@ Result<std::set<std::string>> OrphanFilesCleanerImpl::Clean() {
129135 }
130136 }
131137 }
138+ metrics_->SetCounter (CleanMetrics::CLEAN_SCAN_ORPHAN_FILES_DURATION , duration.Get ());
139+ metrics_->SetCounter (CleanMetrics::CLEAN_LIST_FILE_STATUS_DURATION , file_statuses_duration);
140+ metrics_->SetCounter (CleanMetrics::CLEAN_LIST_FILE_STATUS_TASKS ,
141+ static_cast <uint64_t >(file_statuses_futures.size ()));
142+ metrics_->SetCounter (CleanMetrics::CLEAN_ORPHAN_FILES ,
143+ static_cast <uint64_t >(need_to_deletes.size ()));
132144 return need_to_deletes;
133145}
134146
135147Result<std::set<std::string>> OrphanFilesCleanerImpl::ListPaimonFileDirs () const {
148+ Duration duration;
136149 std::set<std::string> paimon_file_dirs;
137150 paimon_file_dirs.insert (snapshot_manager_->SnapshotDirectory ());
138151 paimon_file_dirs.insert (FileStorePathFactory::ManifestPath (root_path_));
@@ -156,6 +169,9 @@ Result<std::set<std::string>> OrphanFilesCleanerImpl::ListPaimonFileDirs() const
156169 // ListFileDirs(external_path, partition_keys_.size());
157170 // paimon_file_dirs.insert(external_file_dirs.begin(), external_file_dirs.end());
158171 // }
172+ metrics_->SetCounter (CleanMetrics::CLEAN_LIST_DIRECTORIES_DURATION , duration.Get ());
173+ metrics_->SetCounter (CleanMetrics::CLEAN_LIST_DIRECTORIES ,
174+ static_cast <uint64_t >(paimon_file_dirs.size ()));
159175 return paimon_file_dirs;
160176}
161177
@@ -225,6 +241,7 @@ Result<std::set<std::string>> OrphanFilesCleanerImpl::GetUsedFiles() const {
225241 // TODO(jinli.zjw): consider changelog(add tests), stats
226242 used_files.insert (SnapshotManager::EARLIEST );
227243 used_files.insert (SnapshotManager::LATEST );
244+ Duration duration;
228245 PAIMON_ASSIGN_OR_RAISE (std::vector<Snapshot> snapshots, snapshot_manager_->GetAllSnapshots ());
229246 for (const auto & snapshot : snapshots) {
230247 used_files.insert (SnapshotManager::SNAPSHOT_PREFIX + std::to_string (snapshot.Id ()));
@@ -257,6 +274,8 @@ Result<std::set<std::string>> OrphanFilesCleanerImpl::GetUsedFiles() const {
257274 }
258275 }
259276 }
277+ metrics_->SetCounter (CleanMetrics::CLEAN_LIST_USED_FILES_DURATION , duration.Get ());
278+ metrics_->SetCounter (CleanMetrics::CLEAN_USED_FILES , static_cast <uint64_t >(used_files.size ()));
260279 return used_files;
261280}
262281
0 commit comments