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 = {
@@ -83,6 +87,7 @@ bool OrphanFilesCleanerImpl::SupportToClean(const std::string& file_name) {
8387}
8488
8589Result<std::set<std::string>> OrphanFilesCleanerImpl::Clean () {
90+ Duration main_duration;
8691 if (!MinimalTryBestListingDirs (PathUtil::JoinPath (root_path_, " tag" )).empty ()) {
8792 return Status::NotImplemented (" OrphanFilesCleaner do not support cleaning table with tag" );
8893 }
@@ -98,9 +103,11 @@ Result<std::set<std::string>> OrphanFilesCleanerImpl::Clean() {
98103 }
99104 PAIMON_ASSIGN_OR_RAISE (std::set<std::string> used_file_names, GetUsedFiles ());
100105
106+ Duration duration;
101107 std::set<std::string> need_to_deletes;
102108 std::vector<std::future<void >> futures;
103109 ScopeGuard guard ([&futures]() { Wait (futures); });
110+ uint64_t file_statuses_duration = duration.Reset ();
104111 for (const auto & file_statuses : CollectAll (file_statuses_futures)) {
105112 for (const auto & file_status : file_statuses) {
106113 if (file_status->IsDir ()) {
@@ -129,10 +136,18 @@ Result<std::set<std::string>> OrphanFilesCleanerImpl::Clean() {
129136 }
130137 }
131138 }
139+ metrics_->SetCounter (CleanMetrics::CLEAN_DURATION, main_duration.Get ());
140+ metrics_->SetCounter (CleanMetrics::CLEAN_SCAN_ORPHAN_FILES_DURATION, duration.Get ());
141+ metrics_->SetCounter (CleanMetrics::CLEAN_LIST_FILE_STATUS_DURATION, file_statuses_duration);
142+ metrics_->SetCounter (CleanMetrics::CLEAN_LIST_FILE_STATUS_TASKS,
143+ static_cast <uint64_t >(file_statuses_futures.size ()));
144+ metrics_->SetCounter (CleanMetrics::CLEAN_ORPHAN_FILES,
145+ static_cast <uint64_t >(need_to_deletes.size ()));
132146 return need_to_deletes;
133147}
134148
135149Result<std::set<std::string>> OrphanFilesCleanerImpl::ListPaimonFileDirs () const {
150+ Duration duration;
136151 std::set<std::string> paimon_file_dirs;
137152 paimon_file_dirs.insert (snapshot_manager_->SnapshotDirectory ());
138153 paimon_file_dirs.insert (FileStorePathFactory::ManifestPath (root_path_));
@@ -156,6 +171,9 @@ Result<std::set<std::string>> OrphanFilesCleanerImpl::ListPaimonFileDirs() const
156171 // ListFileDirs(external_path, partition_keys_.size());
157172 // paimon_file_dirs.insert(external_file_dirs.begin(), external_file_dirs.end());
158173 // }
174+ metrics_->SetCounter (CleanMetrics::CLEAN_LIST_DIRECTORIES_DURATION, duration.Get ());
175+ metrics_->SetCounter (CleanMetrics::CLEAN_LIST_DIRECTORIES,
176+ static_cast <uint64_t >(paimon_file_dirs.size ()));
159177 return paimon_file_dirs;
160178}
161179
@@ -225,6 +243,7 @@ Result<std::set<std::string>> OrphanFilesCleanerImpl::GetUsedFiles() const {
225243 // TODO(jinli.zjw): consider changelog(add tests), stats
226244 used_files.insert (SnapshotManager::EARLIEST);
227245 used_files.insert (SnapshotManager::LATEST);
246+ Duration duration;
228247 PAIMON_ASSIGN_OR_RAISE (std::vector<Snapshot> snapshots, snapshot_manager_->GetAllSnapshots ());
229248 for (const auto & snapshot : snapshots) {
230249 used_files.insert (SnapshotManager::SNAPSHOT_PREFIX + std::to_string (snapshot.Id ()));
@@ -257,6 +276,8 @@ Result<std::set<std::string>> OrphanFilesCleanerImpl::GetUsedFiles() const {
257276 }
258277 }
259278 }
279+ metrics_->SetCounter (CleanMetrics::CLEAN_LIST_USED_FILES_DURATION, duration.Get ());
280+ metrics_->SetCounter (CleanMetrics::CLEAN_USED_FILES, static_cast <uint64_t >(used_files.size ()));
260281 return used_files;
261282}
262283
0 commit comments