diff --git a/src/storage/compaction/ob_partition_merge_policy.cpp b/src/storage/compaction/ob_partition_merge_policy.cpp index 7e03b9030..449343362 100644 --- a/src/storage/compaction/ob_partition_merge_policy.cpp +++ b/src/storage/compaction/ob_partition_merge_policy.cpp @@ -127,7 +127,11 @@ int ObPartitionMergePolicy::get_medium_merge_tables( } } - if (OB_SUCC(ret)) { + if (OB_FAIL(ret)) { + } else if (OB_ISNULL(base_table)) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("get unexpected null base table", K(ret), K(tablet)); + } else { result.version_range_.base_version_ = base_table->get_upper_trans_version(); result.version_range_.multi_version_start_ = tablet.get_multi_version_start(); result.version_range_.snapshot_version_ = param.merge_version_; @@ -1210,9 +1214,6 @@ int ObAdaptiveMergePolicy::find_meta_major_tables( LOG_WARN("Failed to find meta merge base table", K(ret), KPC(last_major), KPC(last_major), KPC(base_table)); } } else if (FALSE_IT(base_table = nullptr == base_table ? last_major : base_table)) { - } else if (OB_ISNULL(base_table)) { - ret = OB_ERR_UNEXPECTED; - LOG_WARN("base table is unexpected null", K(ret), KP(base_table)); } else if (base_table->get_snapshot_version() < min_snapshot || max_snapshot != INT64_MAX) { // max_snapshot == INT64_MAX means there's no next freeze_info ret = OB_NO_NEED_MERGE; diff --git a/unittest/storage/test_tenant_tablet_stat_mgr.cpp b/unittest/storage/test_tenant_tablet_stat_mgr.cpp index c1b48653f..80d6a1759 100644 --- a/unittest/storage/test_tenant_tablet_stat_mgr.cpp +++ b/unittest/storage/test_tenant_tablet_stat_mgr.cpp @@ -21,6 +21,25 @@ using namespace common; using namespace storage; using namespace compaction; + +template +int ObTabletStream::get_bucket_tablet_stat( + const ObTabletStatBucket &bucket, + common::ObIArray &tablet_stats) const +{ + int ret = OB_SUCCESS; + int64_t idx = bucket.head_idx_; + + for (int64_t i = 0; OB_SUCC(ret) && i < bucket.count(); ++i) { + int64_t curr_idx = bucket.get_idx(idx); + if (OB_FAIL(tablet_stats.push_back(bucket.units_[curr_idx]))) { + LOG_WARN("failed to add tablet stat", K(ret), K(idx)); + } + ++idx; + } + return ret; +} + class TestTenantTabletStatMgr : public ::testing::Test { public: @@ -242,7 +261,7 @@ TEST_F(TestTenantTabletStatMgr, get_all_tablet_stat) for (int64_t i = 0; i < curr_bucket_size; ++i) { curr_buckets.units_[i] += tablet_stat; } - ret = stream.get_bucket_tablet_stat(curr_buckets, tablet_stats); + ret = stream.get_bucket_tablet_stat(curr_buckets, tablet_stats); ASSERT_EQ(OB_SUCCESS, ret); ASSERT_TRUE(curr_bucket_size == tablet_stats.count()); @@ -250,7 +269,7 @@ TEST_F(TestTenantTabletStatMgr, get_all_tablet_stat) for (int64_t i = 0; i < latest_bucket_size; ++i) { latest_buckets.units_[i] += tablet_stat; } - ret = stream.get_bucket_tablet_stat(latest_buckets, tablet_stats); + ret = stream.get_bucket_tablet_stat(stream.latest_buckets_, tablet_stats); ASSERT_EQ(OB_SUCCESS, ret); ASSERT_TRUE((curr_bucket_size + latest_bucket_size) == tablet_stats.count()); @@ -258,7 +277,7 @@ TEST_F(TestTenantTabletStatMgr, get_all_tablet_stat) for (int64_t i = 0; i < past_bucket_size; ++i) { past_buckets.units_[i] += tablet_stat; } - ret = stream.get_bucket_tablet_stat(past_buckets, tablet_stats); + ret = stream.get_bucket_tablet_stat(stream.past_buckets_, tablet_stats); ASSERT_EQ(OB_SUCCESS, ret); ASSERT_TRUE((curr_bucket_size + latest_bucket_size + past_bucket_size) == tablet_stats.count()); }