fix compatibility problem

This commit is contained in:
obdev
2023-03-10 08:11:17 +00:00
committed by ob-robot
parent a51173a6e5
commit a0466b3249
3 changed files with 35 additions and 4 deletions

View File

@ -33,6 +33,7 @@
#include "storage/blocksstable/ob_index_block_macro_iterator.h" #include "storage/blocksstable/ob_index_block_macro_iterator.h"
#include "mtlenv/mock_tenant_module_env.h" #include "mtlenv/mock_tenant_module_env.h"
#include "share/scn.h" #include "share/scn.h"
#include "storage/blocksstable/ob_shared_macro_block_manager.h"
namespace oceanbase namespace oceanbase
{ {
@ -83,12 +84,14 @@ protected:
ObRowGenerate index_row_generate_; ObRowGenerate index_row_generate_;
ObITable::TableKey table_key_; ObITable::TableKey table_key_;
ObArenaAllocator allocator_; ObArenaAllocator allocator_;
ObSharedMacroBlockMgr *shared_blk_mgr_;
}; };
TestIndexTree::TestIndexTree() TestIndexTree::TestIndexTree()
: tenant_id_(500), : tenant_id_(500),
mgr_(nullptr), mgr_(nullptr),
tenant_base_(500) tenant_base_(500),
shared_blk_mgr_(nullptr)
{ {
ObAddr self; ObAddr self;
rpc::frame::ObReqTransport req_transport(NULL, NULL); rpc::frame::ObReqTransport req_transport(NULL, NULL);
@ -107,6 +110,7 @@ TestIndexTree::~TestIndexTree()
void TestIndexTree::SetUpTestCase() void TestIndexTree::SetUpTestCase()
{ {
int ret = OB_SUCCESS;
STORAGE_LOG(INFO, "SetUpTestCase"); STORAGE_LOG(INFO, "SetUpTestCase");
EXPECT_EQ(OB_SUCCESS, MockTenantModuleEnv::get_instance().init()); EXPECT_EQ(OB_SUCCESS, MockTenantModuleEnv::get_instance().init());
} }
@ -120,12 +124,16 @@ void TestIndexTree::SetUp()
{ {
int ret = OB_SUCCESS; int ret = OB_SUCCESS;
mgr_ = OB_NEW(ObTenantFreezeInfoMgr, ObModIds::TEST); mgr_ = OB_NEW(ObTenantFreezeInfoMgr, ObModIds::TEST);
shared_blk_mgr_ = OB_NEW(ObSharedMacroBlockMgr, ObModIds::TEST);
tenant_base_.set(shared_blk_mgr_);
tenant_base_.set(mgr_); tenant_base_.set(mgr_);
share::ObTenantEnv::set_tenant(&tenant_base_); share::ObTenantEnv::set_tenant(&tenant_base_);
ASSERT_EQ(OB_SUCCESS, tenant_base_.init()); ASSERT_EQ(OB_SUCCESS, tenant_base_.init());
ASSERT_EQ(OB_SUCCESS, mgr_->init(500, *GCTX.sql_proxy_)); ASSERT_EQ(OB_SUCCESS, mgr_->init(500, *GCTX.sql_proxy_));
ASSERT_EQ(OB_SUCCESS, shared_blk_mgr_->init());
fake_freeze_info(); fake_freeze_info();
ASSERT_EQ(shared_blk_mgr_, MTL(ObSharedMacroBlockMgr *));
ASSERT_EQ(mgr_, MTL(ObTenantFreezeInfoMgr *)); ASSERT_EQ(mgr_, MTL(ObTenantFreezeInfoMgr *));
int tmp_ret = OB_SUCCESS; int tmp_ret = OB_SUCCESS;
ObTenantIOConfig io_config = ObTenantIOConfig::default_instance(); ObTenantIOConfig io_config = ObTenantIOConfig::default_instance();
@ -1134,6 +1142,21 @@ TEST_F(TestIndexTree, test_single_row_desc)
OK(rebuilder.close()); OK(rebuilder.close());
ObSSTableMergeRes res2; ObSSTableMergeRes res2;
OK(sstable_builder2.close(res.data_column_cnt_, res2)); OK(sstable_builder2.close(res.data_column_cnt_, res2));
// test rebuild sstable by another append_macro_row
ObSSTableIndexBuilder sstable_builder3;
prepare_index_builder(index_desc, sstable_builder3);
sstable_builder3.index_store_desc_.major_working_cluster_version_ = DATA_VERSION_4_1_0_0;
sstable_builder3.container_store_desc_.major_working_cluster_version_ = DATA_VERSION_4_1_0_0;
ObIndexBlockRebuilder other_rebuilder;
OK(other_rebuilder.init(sstable_builder3));
ObDataMacroBlockMeta *macro_meta = nullptr;
OK(sstable_builder.roots_[0]->macro_metas_->at(0)->deep_copy(macro_meta, allocator_));
OK(other_rebuilder.append_macro_row(*macro_meta));
OK(other_rebuilder.close());
ObSSTableMergeRes res3;
sstable_builder3.optimization_mode_ = ObSSTableIndexBuilder::ObSpaceOptimizationMode::AUTO;
OK(sstable_builder3.close(res.data_column_cnt_, res3));
} }
TEST_F(TestIndexTree, test_data_block_checksum) TEST_F(TestIndexTree, test_data_block_checksum)

View File

@ -866,8 +866,7 @@ int ObSSTableIndexBuilder::close(const int64_t column_cnt, ObSSTableMergeRes &re
STORAGE_LOG(DEBUG, "sstable has no data", K(ret)); STORAGE_LOG(DEBUG, "sstable has no data", K(ret));
} else if (OB_FAIL(sort_roots())) { } else if (OB_FAIL(sort_roots())) {
STORAGE_LOG(WARN, "fail to sort roots", K(ret)); STORAGE_LOG(WARN, "fail to sort roots", K(ret));
} else if (!index_store_desc_.is_major_merge() } else if (check_version_for_small_sstable(index_store_desc_)) {
|| index_store_desc_.major_working_cluster_version_ >= DATA_VERSION_4_1_0_0) {
const bool is_single_block = check_single_block(); const bool is_single_block = check_single_block();
if (is_single_block) { if (is_single_block) {
switch (optimization_mode_) { switch (optimization_mode_) {
@ -939,6 +938,12 @@ int ObSSTableIndexBuilder::close(const int64_t column_cnt, ObSSTableMergeRes &re
return ret; return ret;
} }
bool ObSSTableIndexBuilder::check_version_for_small_sstable(const ObDataStoreDesc &index_desc)
{
return !index_desc.is_major_merge()
|| index_desc.major_working_cluster_version_ >= DATA_VERSION_4_1_0_0;
}
int ObSSTableIndexBuilder::check_and_rewrite_sstable(ObSSTableMergeRes &res) int ObSSTableIndexBuilder::check_and_rewrite_sstable(ObSSTableMergeRes &res)
{ {
int ret = OB_SUCCESS; int ret = OB_SUCCESS;
@ -2179,7 +2184,8 @@ int ObMetaIndexBlockBuilder::close(
} else if (OB_FAIL(build_single_node_tree(*allocator_, micro_block_desc, block_desc))) { } else if (OB_FAIL(build_single_node_tree(*allocator_, micro_block_desc, block_desc))) {
STORAGE_LOG(WARN, "fail to build single node tree of meta", K(ret)); STORAGE_LOG(WARN, "fail to build single node tree of meta", K(ret));
} }
} else if (row_count_ <= 0 && 1 == micro_block_desc.row_count_) { } else if (row_count_ <= 0 && 1 == micro_block_desc.row_count_
&& ObSSTableIndexBuilder::check_version_for_small_sstable(*index_store_desc_)) {
// this sstable only has one data block, but the size of meta data exceeds ROOT_BLOCK_SIZE_LIMIT, // this sstable only has one data block, but the size of meta data exceeds ROOT_BLOCK_SIZE_LIMIT,
// so sstable's root points to the tail of its data block (macro meta row) // so sstable's root points to the tail of its data block (macro meta row)
if (OB_FAIL(build_single_macro_row_desc(roots))) { if (OB_FAIL(build_single_macro_row_desc(roots))) {

View File

@ -453,6 +453,8 @@ public:
int close(const int64_t column_cnt, ObSSTableMergeRes &res); int close(const int64_t column_cnt, ObSSTableMergeRes &res);
const ObDataStoreDesc &get_index_store_desc() const { return index_store_desc_; } const ObDataStoreDesc &get_index_store_desc() const { return index_store_desc_; }
TO_STRING_KV(K(roots_.count())); TO_STRING_KV(K(roots_.count()));
public:
static bool check_version_for_small_sstable(const ObDataStoreDesc &index_desc);
private: private:
int check_and_rewrite_sstable(ObSSTableMergeRes &res); int check_and_rewrite_sstable(ObSSTableMergeRes &res);
int check_and_rewrite_sstable_without_size(ObSSTableMergeRes &res); int check_and_rewrite_sstable_without_size(ObSSTableMergeRes &res);