This is an automated email from the ASF dual-hosted git repository. yiguolei pushed a commit to branch branch-4.2 in repository https://gitbox.apache.org/repos/asf/doris.git
commit 1e02c27ef946d16f1bd30813f681837778185fba Author: Xin Liao <[email protected]> AuthorDate: Wed Sep 16 16:20:10 2026 +0800 branch-4.1: [fix](cloud) refresh tablet meta of continuously ingested tablets #67972 (#68044) Pick #67972 --- be/src/cloud/cloud_base_compaction.cpp | 6 +- be/src/cloud/cloud_cumulative_compaction.cpp | 6 +- be/src/cloud/cloud_full_compaction.cpp | 2 +- be/src/cloud/cloud_index_change_compaction.cpp | 4 +- be/src/cloud/cloud_meta_mgr.cpp | 2 +- be/src/cloud/cloud_tablet.cpp | 1 + be/src/cloud/cloud_tablet.h | 9 +- be/src/cloud/cloud_tablet_mgr.cpp | 85 +++++++++++++---- be/src/storage/compaction/compaction.cpp | 2 +- be/test/cloud/cloud_compaction_test.cpp | 16 ++-- be/test/cloud/cloud_tablet_mgr_test.cpp | 101 +++++++++++++++++++++ .../cloud_index_change_compaction_test.cpp | 4 +- 12 files changed, 196 insertions(+), 42 deletions(-) diff --git a/be/src/cloud/cloud_base_compaction.cpp b/be/src/cloud/cloud_base_compaction.cpp index 87e2378fdba..3570abe492f 100644 --- a/be/src/cloud/cloud_base_compaction.cpp +++ b/be/src/cloud/cloud_base_compaction.cpp @@ -67,7 +67,7 @@ Status CloudBaseCompaction::prepare_compact() { // synchronized with meta-service. if (_tablet->tablet_meta()->all_rs_metas().size() >= cloud_tablet()->fetch_add_approximate_num_rowsets(0) && - cloud_tablet()->last_sync_time_s > 0) { + cloud_tablet()->last_sync_rowsets_time_s > 0) { need_sync_tablet = false; } } @@ -136,7 +136,7 @@ Status CloudBaseCompaction::request_global_lock() { cloud_tablet()->set_last_base_compaction_failure_time(UnixMillis()); if (resp.status().code() == cloud::STALE_TABLET_CACHE) { // set last_sync_time to 0 to force sync tablet next time - cloud_tablet()->last_sync_time_s = 0; + cloud_tablet()->last_sync_rowsets_time_s = 0; } else if (resp.status().code() == cloud::TABLET_NOT_FOUND) { // tablet not found cloud_tablet()->clear_cache(); @@ -440,7 +440,7 @@ Status CloudBaseCompaction::modify_rowsets() { // the tablet to be unable to synchronize the rowset meta changes generated by cumu compaction. cloud_tablet()->set_base_compaction_cnt(stats.base_compaction_cnt()); if (stats.cumulative_point() > cloud_tablet()->cumulative_layer_point()) { - cloud_tablet()->last_sync_time_s = 0; + cloud_tablet()->last_sync_rowsets_time_s = 0; } if (output_rowset_delete_bitmap) { _tablet->tablet_meta()->delete_bitmap().merge(*output_rowset_delete_bitmap); diff --git a/be/src/cloud/cloud_cumulative_compaction.cpp b/be/src/cloud/cloud_cumulative_compaction.cpp index a032cfdb392..b1854f07216 100644 --- a/be/src/cloud/cloud_cumulative_compaction.cpp +++ b/be/src/cloud/cloud_cumulative_compaction.cpp @@ -83,7 +83,7 @@ Status CloudCumulativeCompaction::prepare_compact() { // synchronized with meta-service. if (_tablet->tablet_meta()->all_rs_metas().size() >= cloud_tablet()->fetch_add_approximate_num_rowsets(0) && - cloud_tablet()->last_sync_time_s > 0) { + cloud_tablet()->last_sync_rowsets_time_s > 0) { need_sync_tablet = false; } } @@ -164,7 +164,7 @@ Status CloudCumulativeCompaction::request_global_lock() { if (!st.ok()) { if (resp.status().code() == cloud::STALE_TABLET_CACHE) { // set last_sync_time to 0 to force sync tablet next time - cloud_tablet()->last_sync_time_s = 0; + cloud_tablet()->last_sync_rowsets_time_s = 0; } else if (resp.status().code() == cloud::TABLET_NOT_FOUND) { // tablet not found cloud_tablet()->clear_cache(); @@ -743,7 +743,7 @@ void CloudCumulativeCompaction::update_cumulative_point(int64_t input_cumulative if (!st.ok()) { if (start_resp.status().code() == cloud::STALE_TABLET_CACHE) { // set last_sync_time to 0 to force sync tablet next time - cloud_tablet()->last_sync_time_s = 0; + cloud_tablet()->last_sync_rowsets_time_s = 0; } else if (start_resp.status().code() == cloud::TABLET_NOT_FOUND) { // tablet not found cloud_tablet()->clear_cache(); diff --git a/be/src/cloud/cloud_full_compaction.cpp b/be/src/cloud/cloud_full_compaction.cpp index 12ea9c87c99..1133330baa4 100644 --- a/be/src/cloud/cloud_full_compaction.cpp +++ b/be/src/cloud/cloud_full_compaction.cpp @@ -113,7 +113,7 @@ Status CloudFullCompaction::request_global_lock() { if (!st.ok()) { if (resp.status().code() == cloud::STALE_TABLET_CACHE) { // set last_sync_time to 0 to force sync tablet next time - cloud_tablet()->last_sync_time_s = 0; + cloud_tablet()->last_sync_rowsets_time_s = 0; } else if (resp.status().code() == cloud::TABLET_NOT_FOUND) { // tablet not found cloud_tablet()->clear_cache(); diff --git a/be/src/cloud/cloud_index_change_compaction.cpp b/be/src/cloud/cloud_index_change_compaction.cpp index 66e008dba84..bb45656494d 100644 --- a/be/src/cloud/cloud_index_change_compaction.cpp +++ b/be/src/cloud/cloud_index_change_compaction.cpp @@ -164,7 +164,7 @@ Status CloudIndexChangeCompaction::request_global_lock(bool& should_skip_err) { if (!st.ok()) { if (resp.status().code() == cloud::STALE_TABLET_CACHE) { // set last_sync_time to 0 to force sync tablet next time - cloud_tablet()->last_sync_time_s = 0; + cloud_tablet()->last_sync_rowsets_time_s = 0; should_skip_err = true; } else if (resp.status().code() == cloud::TABLET_NOT_FOUND) { // tablet not found @@ -374,7 +374,7 @@ void CloudIndexChangeCompaction::_update_tablet_for_base_compaction( // the tablet to be unable to synchronize the rowset meta changes generated by cumu compaction. cloud_tablet()->set_base_compaction_cnt(stats.base_compaction_cnt()); if (stats.cumulative_point() > cloud_tablet()->cumulative_layer_point()) { - cloud_tablet()->last_sync_time_s = 0; + cloud_tablet()->last_sync_rowsets_time_s = 0; } if (output_rowset_delete_bitmap) { _tablet->tablet_meta()->delete_bitmap().merge(*output_rowset_delete_bitmap); diff --git a/be/src/cloud/cloud_meta_mgr.cpp b/be/src/cloud/cloud_meta_mgr.cpp index 378f3686f3a..d6293997e77 100644 --- a/be/src/cloud/cloud_meta_mgr.cpp +++ b/be/src/cloud/cloud_meta_mgr.cpp @@ -881,7 +881,7 @@ Status CloudMetaMgr::sync_tablet_rowsets_unlocked(CloudTablet* tablet, } int64_t now = duration_cast<seconds>(system_clock::now().time_since_epoch()).count(); - tablet->last_sync_time_s = now; + tablet->last_sync_rowsets_time_s = now; if (sync_stats) { sync_stats->get_remote_rowsets_rpc_ns += diff --git a/be/src/cloud/cloud_tablet.cpp b/be/src/cloud/cloud_tablet.cpp index 3be758fefd1..f2398128424 100644 --- a/be/src/cloud/cloud_tablet.cpp +++ b/be/src/cloud/cloud_tablet.cpp @@ -1552,6 +1552,7 @@ Status CloudTablet::sync_meta() { new_vertical_compaction_num_columns_per_group); } + last_sync_tablet_meta_time_s = ::time(nullptr); return Status::OK(); } diff --git a/be/src/cloud/cloud_tablet.h b/be/src/cloud/cloud_tablet.h index b08d39005c2..47b92acac06 100644 --- a/be/src/cloud/cloud_tablet.h +++ b/be/src/cloud/cloud_tablet.h @@ -347,7 +347,14 @@ public: const auto& rowset_map() const { return _rs_version_map; } - int64_t last_sync_time_s = 0; + // How long since this tablet's ROWSETS were pulled from MS. Only sync_rowsets() advances + // it, and only when it actually issues the RPC. + int64_t last_sync_rowsets_time_s = 0; + // How long since this tablet's META was pulled from MS, which is what carries properties + // such as the file cache TTL. Only sync_meta() advances it. Tracked separately on + // purpose: a tablet under continuous ingest keeps the rowsets clock permanently fresh, + // so gating meta work on that one starves the meta refresh entirely. + int64_t last_sync_tablet_meta_time_s = 0; int64_t last_load_time_ms = 0; int64_t last_base_compaction_success_time_ms = 0; int64_t last_cumu_compaction_success_time_ms = 0; diff --git a/be/src/cloud/cloud_tablet_mgr.cpp b/be/src/cloud/cloud_tablet_mgr.cpp index 7c8c2f64272..b18dfe9401c 100644 --- a/be/src/cloud/cloud_tablet_mgr.cpp +++ b/be/src/cloud/cloud_tablet_mgr.cpp @@ -19,7 +19,10 @@ #include <bthread/countdown_event.h> +#include <algorithm> #include <chrono> +#include <set> +#include <utility> #include "cloud/cloud_cluster_info.h" #include "cloud/cloud_meta_mgr.h" @@ -40,6 +43,8 @@ bvar::Adder<uint64_t> g_base_compaction_not_frozen_tablet_num( "base_compaction_not_frozen_tablet_num"); bvar::Adder<uint64_t> g_cumu_compaction_not_frozen_tablet_num( "cumu_compaction_not_frozen_tablet_num"); +bvar::Adder<uint64_t> g_sync_tablets_meta_num("sync_tablets_meta_num"); +bvar::Adder<uint64_t> g_sync_tablets_rowsets_num("sync_tablets_rowsets_num"); namespace { // port from @@ -375,53 +380,93 @@ std::vector<std::weak_ptr<CloudTablet>> CloudTabletMgr::get_weak_tablets() { void CloudTabletMgr::sync_tablets(const CountDownLatch& stop_latch) { LOG_INFO("begin to sync tablets"); - int64_t last_sync_time_bound = ::time(nullptr) - config::tablet_sync_interval_s; - auto weak_tablets = get_weak_tablets(); + // A tablet carries two staleness clocks and each one gates a different RPC: + // + // last_sync_rowsets_time_s + // how long since we pulled this tablet's ROWSETS from MS. Only sync_rowsets() + // advances it, and only when it actually issues the RPC -- a query whose requested + // version we already hold returns early and leaves the clock untouched. + // + // last_sync_tablet_meta_time_s + // how long since we pulled this tablet's META from MS, which is what carries + // properties such as the file cache TTL. Only sync_meta() advances it. + // + // They have to be read separately. A tablet under continuous ingest keeps the rowsets + // clock permanently fresh, so selecting meta work by it -- as this used to -- means such a + // tablet never has its meta refreshed at all, and it keeps serving whatever TTL it was + // built with. + const int64_t stale_before = ::time(nullptr) - config::tablet_sync_interval_s; + + struct Work { + std::weak_ptr<CloudTablet> tablet; + bool needs_meta = false; + bool needs_rowsets = false; + }; - // sort by last_sync_time + // Ordered by the older of the two clocks, so that if we are told to stop half way, the + // tablets that have been waiting longest have already been served. static auto cmp = [](const auto& a, const auto& b) { return a.first < b.first; }; - std::multiset<std::pair<int64_t, std::weak_ptr<CloudTablet>>, decltype(cmp)> - sync_time_tablet_set(cmp); + std::multiset<std::pair<int64_t, Work>, decltype(cmp)> due(cmp); - for (auto& weak_tablet : weak_tablets) { - if (auto tablet = weak_tablet.lock()) { - int64_t last_sync_time = tablet->last_sync_time_s; - if (last_sync_time <= last_sync_time_bound) { - sync_time_tablet_set.emplace(last_sync_time, weak_tablet); - } + for (auto& weak_tablet : get_weak_tablets()) { + auto tablet = weak_tablet.lock(); + if (!tablet) { + continue; + } + const bool needs_rowsets = tablet->last_sync_rowsets_time_s <= stale_before; + Work work { + .tablet = weak_tablet, + // Pulling rowsets implies pulling the tablet meta: the rowsets we are about + // to take are only as trustworthy as the meta they belong to, and this is + // the relationship the previous single pass had. + .needs_meta = needs_rowsets || tablet->last_sync_tablet_meta_time_s <= stale_before, + .needs_rowsets = needs_rowsets}; + if (!work.needs_meta && !work.needs_rowsets) { + continue; } + due.emplace( + std::min(tablet->last_sync_tablet_meta_time_s, tablet->last_sync_rowsets_time_s), + std::move(work)); } int num_sync = 0; - for (auto&& [_, weak_tablet] : sync_time_tablet_set) { + int num_sync_meta = 0; + for (auto&& [_, work] : due) { if (stop_latch.count() <= 0) { break; } + auto tablet = work.tablet.lock(); + if (!tablet) { + continue; + } - if (auto tablet = weak_tablet.lock()) { - if (tablet->last_sync_time_s > last_sync_time_bound) { - continue; - } - - ++num_sync; + if (work.needs_meta) { + ++num_sync_meta; + g_sync_tablets_meta_num << 1; auto st = tablet->sync_meta(); if (!st) { LOG_WARNING("failed to sync tablet meta {}", tablet->tablet_id()).error(st); if (st.is<ErrorCode::NOT_FOUND>()) { + // the tablet is gone from MS, there is nothing left to sync continue; } } + } + + if (work.needs_rowsets) { + ++num_sync; + g_sync_tablets_rowsets_num << 1; SyncOptions options; options.query_version = -1; options.merge_schema = true; - st = tablet->sync_rowsets(options); + auto st = tablet->sync_rowsets(options); if (!st) { LOG_WARNING("failed to sync tablet rowsets {}", tablet->tablet_id()).error(st); } } } - LOG_INFO("finish sync tablets").tag("num_sync", num_sync); + LOG_INFO("finish sync tablets").tag("num_sync", num_sync).tag("num_sync_meta", num_sync_meta); } Status CloudTabletMgr::get_topn_tablets_to_compact( diff --git a/be/src/storage/compaction/compaction.cpp b/be/src/storage/compaction/compaction.cpp index b2aa69ffe6d..a60ce91da5b 100644 --- a/be/src/storage/compaction/compaction.cpp +++ b/be/src/storage/compaction/compaction.cpp @@ -1617,7 +1617,7 @@ bool CloudCompactionMixin::should_apply_cumulative_compaction_result( } if (response_cumulative_compaction_cnt != local_cumulative_compaction_cnt + 1) { // Only the current task's output is available locally. Sync all missing outputs instead. - cloud_tablet()->last_sync_time_s = 0; + cloud_tablet()->last_sync_rowsets_time_s = 0; LOG_INFO("defer applying cumulative compaction result until tablet sync") .tag("tablet_id", _tablet->tablet_id()) .tag("job_id", _uuid) diff --git a/be/test/cloud/cloud_compaction_test.cpp b/be/test/cloud/cloud_compaction_test.cpp index 62141d5ad88..d67ea4244a3 100644 --- a/be/test/cloud/cloud_compaction_test.cpp +++ b/be/test/cloud/cloud_compaction_test.cpp @@ -364,7 +364,7 @@ TEST_F(CloudCompactionTest, cumulative_global_lock_failure_keeps_thread_count_ba tablet->_approximate_num_rowsets = rowsets.size(); tablet->_approximate_cumu_num_rowsets = rowsets.size(); tablet->_approximate_cumu_num_deltas = rowsets.size(); - tablet->last_sync_time_s = 1; + tablet->last_sync_rowsets_time_s = 1; auto* sync_point = SyncPoint::get_instance(); sync_point->enable_processing(); @@ -433,16 +433,16 @@ public: TEST_F(CloudCompactionTest, cumulative_result_requires_next_counter) { auto tablet = std::make_shared<CloudTablet>(_engine, _tablet_meta); tablet->set_cumulative_compaction_cnt(1); - tablet->last_sync_time_s = 1; + tablet->last_sync_rowsets_time_s = 1; TestableCloudCompaction compaction(_engine, tablet); std::unique_lock lock(tablet->get_header_lock()); EXPECT_FALSE(compaction.test_should_apply_cumulative_compaction_result(1)); - EXPECT_EQ(tablet->last_sync_time_s, 1); + EXPECT_EQ(tablet->last_sync_rowsets_time_s, 1); EXPECT_TRUE(compaction.test_should_apply_cumulative_compaction_result(2)); - EXPECT_EQ(tablet->last_sync_time_s, 1); + EXPECT_EQ(tablet->last_sync_rowsets_time_s, 1); EXPECT_FALSE(compaction.test_should_apply_cumulative_compaction_result(3)); - EXPECT_EQ(tablet->last_sync_time_s, 0); + EXPECT_EQ(tablet->last_sync_rowsets_time_s, 0); } class TestableCloudCumulativeCompaction : public CloudCumulativeCompaction { @@ -481,7 +481,7 @@ static CloudTabletSPtr create_cloud_tablet_with_rowsets(CloudStorageEngine& engi tablet->set_cumulative_layer_point(cumulative_point); tablet->fetch_add_approximate_num_rowsets(static_cast<int64_t>(num_rowsets) - tablet->fetch_add_approximate_num_rowsets(0)); - tablet->last_sync_time_s = 1; + tablet->last_sync_rowsets_time_s = 1; return tablet; } @@ -548,7 +548,7 @@ TEST_F(CloudCompactionTest, base_result_with_newer_cumulative_point_forces_sync) ASSERT_TRUE(compaction.modify_rowsets().ok()); EXPECT_EQ(tablet->cumulative_layer_point(), 6); - EXPECT_EQ(tablet->last_sync_time_s, expected_sync_time); + EXPECT_EQ(tablet->last_sync_rowsets_time_s, expected_sync_time); }; run_case(10008, 8, 0); @@ -757,7 +757,7 @@ TEST_F(CloudCompactionTest, parallel_pick_keeps_mode_after_dynamic_config_change EXPECT_TRUE(commit_called); EXPECT_EQ(tablet->cumulative_compaction_cnt(), 0); EXPECT_EQ(tablet->cumulative_layer_point(), 2); - EXPECT_EQ(tablet->last_sync_time_s, 0); + EXPECT_EQ(tablet->last_sync_rowsets_time_s, 0); } TEST_F(CloudCompactionTest, parallel_pick_advances_continuous_low_prefix_through_delete) { diff --git a/be/test/cloud/cloud_tablet_mgr_test.cpp b/be/test/cloud/cloud_tablet_mgr_test.cpp index 3c9e0b26eb1..a5e6968afb4 100644 --- a/be/test/cloud/cloud_tablet_mgr_test.cpp +++ b/be/test/cloud/cloud_tablet_mgr_test.cpp @@ -26,10 +26,15 @@ #include <memory> #include <mutex> #include <thread> +#include <unordered_map> +#include <vector> #include "cloud/cloud_storage_engine.h" +#include "cloud/cloud_tablet.h" +#include "cloud/config.h" #include "cpp/sync_point.h" #include "storage/tablet/tablet_meta.h" +#include "util/countdown_latch.h" #include "util/uid_util.h" namespace doris { @@ -178,4 +183,100 @@ TEST_F(CloudTabletMgrTest, TestConcurrentGetTabletTabletMapConsistency) { sp->clear_all_call_backs(); } +// A tablet under continuous ingest keeps last_sync_rowsets_time_s permanently fresh, because every +// rowset sync advances it. Selecting meta work by that same clock meant such a tablet never had +// sync_meta() called on it at all, so it kept serving the tablet properties -- the file cache +// TTL among them -- that it happened to be built with. +TEST_F(CloudTabletMgrTest, SyncTabletsRefreshesMetaOfContinuouslyIngestedTablet) { + auto sp = SyncPoint::get_instance(); + sp->clear_all_call_backs(); + sp->enable_processing(); + + std::mutex mutex; + std::unordered_map<int64_t, TabletMetaSharedPtr> metas; + std::unordered_map<int64_t, int> meta_syncs; + std::unordered_map<int64_t, int> rowset_syncs; + + auto meta_for = [&](int64_t tablet_id) { + std::lock_guard<std::mutex> lock(mutex); + auto it = metas.find(tablet_id); + if (it == metas.end()) { + it = metas.emplace(tablet_id, std::make_shared<TabletMeta>( + 1, 2, tablet_id, 15674, 4, 5, TTabletSchema(), 6, + std::unordered_map<uint32_t, uint32_t> {{7, 8}}, + UniqueId(9, 10), TTabletType::TABLET_TYPE_DISK, + TCompressionType::LZ4F)) + .first; + } + return it->second; + }; + + sp->set_call_back("CloudMetaMgr::get_tablet_meta", [&](auto&& args) { + auto tablet_id = try_any_cast<int64_t>(args[0]); + auto* tablet_meta_ptr = try_any_cast<TabletMetaSharedPtr*>(args[1]); + *tablet_meta_ptr = meta_for(tablet_id); + { + std::lock_guard<std::mutex> lock(mutex); + ++meta_syncs[tablet_id]; + } + try_any_cast_ret<Status>(args)->second = true; + }); + sp->set_call_back("CloudMetaMgr::sync_tablet_rowsets", [&](auto&& args) { + auto* tablet = try_any_cast<CloudTablet*>(args[0]); + { + std::lock_guard<std::mutex> lock(mutex); + ++rowset_syncs[tablet->tablet_id()]; + } + try_any_cast_ret<Status>(args)->second = true; + }); + + CloudTabletMgr mgr(_engine); + constexpr int64_t kBothStale = 70001; + constexpr int64_t kIngesting = 70002; + constexpr int64_t kFresh = 70003; + + std::vector<std::shared_ptr<CloudTablet>> tablets; + for (int64_t tablet_id : {kBothStale, kIngesting, kFresh}) { + auto res = mgr.get_tablet(tablet_id); + ASSERT_TRUE(res.has_value()) << res.error(); + tablets.push_back(res.value()); + } + + const int64_t now = ::time(nullptr); + const int64_t stale = now - config::tablet_sync_interval_s - 10; + + tablets[0]->last_sync_rowsets_time_s = stale; + tablets[0]->last_sync_tablet_meta_time_s = stale; + // Rowsets pulled a moment ago, meta left behind. + tablets[1]->last_sync_rowsets_time_s = now; + tablets[1]->last_sync_tablet_meta_time_s = stale; + tablets[2]->last_sync_rowsets_time_s = now; + tablets[2]->last_sync_tablet_meta_time_s = now; + + { + std::lock_guard<std::mutex> lock(mutex); + meta_syncs.clear(); + rowset_syncs.clear(); + } + + CountDownLatch latch(1); + mgr.sync_tablets(latch); + + std::lock_guard<std::mutex> lock(mutex); + EXPECT_EQ(1, meta_syncs[kBothStale]); + EXPECT_EQ(1, rowset_syncs[kBothStale]); + + // The regression: meta has to be refreshed even though the rowset clock never goes stale, + // and it costs one RPC rather than the two a full sync would. + EXPECT_EQ(1, meta_syncs[kIngesting]); + EXPECT_EQ(0, rowset_syncs[kIngesting]); + EXPECT_GE(tablets[1]->last_sync_tablet_meta_time_s, now); + + EXPECT_EQ(0, meta_syncs[kFresh]); + EXPECT_EQ(0, rowset_syncs[kFresh]); + + sp->disable_processing(); + sp->clear_all_call_backs(); +} + } // namespace doris diff --git a/be/test/storage/compaction/cloud_index_change_compaction_test.cpp b/be/test/storage/compaction/cloud_index_change_compaction_test.cpp index c1654a96914..71c26609b7a 100644 --- a/be/test/storage/compaction/cloud_index_change_compaction_test.cpp +++ b/be/test/storage/compaction/cloud_index_change_compaction_test.cpp @@ -330,7 +330,7 @@ TEST_F(CloudIndexChangeCompactionTest, ms_ret_status_test) { { tablet->set_base_compaction_cnt(0); tablet->set_cumulative_layer_point(6); - tablet->last_sync_time_s = 1; + tablet->last_sync_rowsets_time_s = 1; auto index_change_compact = std::make_shared<CloudIndexChangeCompaction>( *_engine, tablet, 0, index_list, columns); index_change_compact->_input_rowsets.push_back(rowset_ptr); @@ -344,7 +344,7 @@ TEST_F(CloudIndexChangeCompactionTest, ms_ret_status_test) { index_change_compact->_update_tablet_for_base_compaction(response, nullptr); EXPECT_EQ(tablet->cumulative_layer_point(), 6); - EXPECT_EQ(tablet->last_sync_time_s, 0); + EXPECT_EQ(tablet->last_sync_rowsets_time_s, 0); } } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
