diff --git a/be/src/cloud/cloud_tablet_mgr.cpp b/be/src/cloud/cloud_tablet_mgr.cpp index 82dd46a924dbdc..d8dc19b1559bbe 100644 --- a/be/src/cloud/cloud_tablet_mgr.cpp +++ b/be/src/cloud/cloud_tablet_mgr.cpp @@ -555,11 +555,13 @@ void CloudTabletMgr::build_all_report_tablets_info(std::map* VLOG_NOTICE << "begin to build all report cloud tablets info"; HistogramStat tablet_version_num_hist; + HistogramStat tablet_approximate_num_rowsets_hist; auto handler = [&](const std::weak_ptr& tablet_wk) { auto tablet = tablet_wk.lock(); if (!tablet) return; (*tablet_num)++; + tablet_approximate_num_rowsets_hist.add(tablet->fetch_add_approximate_num_rowsets(0)); TTabletInfo tablet_info; tablet->build_tablet_report_info(&tablet_info); using namespace std::chrono; @@ -581,6 +583,8 @@ void CloudTabletMgr::build_all_report_tablets_info(std::map* DorisMetrics::instance()->tablet_version_num_distribution->set_histogram( tablet_version_num_hist); + DorisMetrics::instance()->tablet_approximate_num_rowsets_distribution->set_histogram( + tablet_approximate_num_rowsets_hist); LOG(INFO) << "success to build all cloud report tablets info. all_tablet_count=" << *tablet_num << " exceed drop time limit count=" << tablets_info->size(); } diff --git a/be/src/common/metrics/doris_metrics.cpp b/be/src/common/metrics/doris_metrics.cpp index 3799a95da05e25..07fe8b859a8cf0 100644 --- a/be/src/common/metrics/doris_metrics.cpp +++ b/be/src/common/metrics/doris_metrics.cpp @@ -207,6 +207,8 @@ DEFINE_GAUGE_METRIC_PROTOTYPE_2ARG(compaction_used_permits, MetricUnit::NOUNIT); DEFINE_GAUGE_METRIC_PROTOTYPE_2ARG(compaction_waitting_permits, MetricUnit::NOUNIT); DEFINE_HISTOGRAM_METRIC_PROTOTYPE_2ARG(tablet_version_num_distribution, MetricUnit::NOUNIT); +DEFINE_HISTOGRAM_METRIC_PROTOTYPE_2ARG(tablet_approximate_num_rowsets_distribution, + MetricUnit::NOUNIT); DEFINE_GAUGE_CORE_METRIC_PROTOTYPE_2ARG(query_scan_bytes_per_second, MetricUnit::BYTES); @@ -406,6 +408,7 @@ DorisMetrics::DorisMetrics() : _metric_registry(_s_registry_name) { INT_GAUGE_METRIC_REGISTER(_server_metric_entity, compaction_waitting_permits); HISTOGRAM_METRIC_REGISTER(_server_metric_entity, tablet_version_num_distribution); + HISTOGRAM_METRIC_REGISTER(_server_metric_entity, tablet_approximate_num_rowsets_distribution); INT_GAUGE_METRIC_REGISTER(_server_metric_entity, query_scan_bytes_per_second); diff --git a/be/src/common/metrics/doris_metrics.h b/be/src/common/metrics/doris_metrics.h index d50354f24d548d..05d2c4f11ff3a6 100644 --- a/be/src/common/metrics/doris_metrics.h +++ b/be/src/common/metrics/doris_metrics.h @@ -182,6 +182,7 @@ class DorisMetrics { IntGauge* compaction_waitting_permits = nullptr; HistogramMetric* tablet_version_num_distribution = nullptr; + HistogramMetric* tablet_approximate_num_rowsets_distribution = nullptr; // The following metrics will be calculated // by metric calculator diff --git a/be/test/cloud/cloud_tablet_mgr_test.cpp b/be/test/cloud/cloud_tablet_mgr_test.cpp index c893b72a475c7f..ba244807c2640a 100644 --- a/be/test/cloud/cloud_tablet_mgr_test.cpp +++ b/be/test/cloud/cloud_tablet_mgr_test.cpp @@ -28,6 +28,8 @@ #include #include "cloud/cloud_storage_engine.h" +#include "cloud/cloud_tablet.h" +#include "common/metrics/doris_metrics.h" #include "cpp/sync_point.h" #include "storage/tablet/tablet_meta.h" #include "util/uid_util.h" @@ -210,4 +212,29 @@ TEST_F(CloudTabletMgrTest, TestGetTabletIfCachedOnlyReturnsCachedTablet) { sp->clear_all_call_backs(); } +TEST_F(CloudTabletMgrTest, TestApproximateRowsetsMetricIncludesActiveTablets) { + const uint64_t previous_inactive_duration = g_tablet_report_inactive_duration_ms; + g_tablet_report_inactive_duration_ms = 1000; + CloudTabletMgr mgr(_engine); + auto tablet = std::make_shared(_engine, _tablet_meta); + auto* metric = DorisMetrics::instance()->tablet_approximate_num_rowsets_distribution; + metric->clear(); + tablet->reset_approximate_stats(0, 0, 0, 0); + tablet->fetch_add_approximate_num_rowsets(8); + tablet->last_access_time_ms = std::chrono::duration_cast( + std::chrono::system_clock::now().time_since_epoch()) + .count(); + mgr.put_tablet_for_UT(tablet); + + std::map tablets_info; + uint64_t tablet_num = 0; + mgr.build_all_report_tablets_info(&tablets_info, &tablet_num); + + EXPECT_EQ(1, tablet_num); + EXPECT_TRUE(tablets_info.empty()); + EXPECT_EQ(1, metric->num()); + EXPECT_EQ(8, metric->max()); + g_tablet_report_inactive_duration_ms = previous_inactive_duration; +} + } // namespace doris