From 0fa613ffd606381e9b4381756045c640aee503d7 Mon Sep 17 00:00:00 2001 From: Hongqin-Li Date: Tue, 29 Oct 2024 10:18:15 +0000 Subject: [PATCH] Set mds_checkpoint_scn when creating split dst tablets --- mittest/mtlenv/storage/test_ls_migration_param.cpp | 6 ++++-- .../test_ls_tablet_info_writer_and_reader.cpp | 3 ++- .../mtlenv/storage/test_tenant_meta_mem_mgr.cpp | 14 +++++++++----- src/rootserver/ob_split_partition_helper.cpp | 2 +- src/rootserver/ob_tablet_creator.cpp | 2 ++ src/rootserver/ob_tablet_creator.h | 5 ++++- src/share/ob_rpc_struct.cpp | 10 ++++++---- src/share/ob_rpc_struct.h | 1 + src/storage/ls/ob_ls_tablet_service.cpp | 6 ++++-- src/storage/ls/ob_ls_tablet_service.h | 1 + src/storage/tablet/ob_tablet.cpp | 4 +++- src/storage/tablet/ob_tablet.h | 1 + src/storage/tablet/ob_tablet_create_mds_helper.cpp | 12 ++++++++---- src/storage/tablet/ob_tablet_meta.cpp | 3 ++- src/storage/tablet/ob_tablet_meta.h | 1 + unittest/storage/test_compaction_policy.cpp | 3 ++- unittest/storage/test_tablet_helper.h | 3 ++- 17 files changed, 53 insertions(+), 24 deletions(-) diff --git a/mittest/mtlenv/storage/test_ls_migration_param.cpp b/mittest/mtlenv/storage/test_ls_migration_param.cpp index e48212f6b..c7ba12d71 100644 --- a/mittest/mtlenv/storage/test_ls_migration_param.cpp +++ b/mittest/mtlenv/storage/test_ls_migration_param.cpp @@ -253,7 +253,8 @@ TEST_F(TestLSMigrationParam, test_migrate_tablet_param) SCN scn; scn.convert_from_ts(ObTimeUtility::current_time()); ret = src_handle.get_obj()->init_for_first_time_creation(allocator_, src_key.ls_id_, src_key.tablet_id_, src_key.tablet_id_, - scn, 2022, create_tablet_schema, true/*need_create_empty_major_sstable*/, SCN::invalid_scn(), true/*micro_index_clustered*/, false/*need_generate_cs_replica_cg_array*/, false/*has_cs_replica*/, ls_handle.get_ls()->get_freezer()); + scn, 2022, create_tablet_schema, true/*need_create_empty_major_sstable*/, SCN::invalid_scn()/*clog_checkpoint_scn*/, + SCN::invalid_scn()/*mds_checkpoint_scn*/, true/*micro_index_clustered*/, false/*need_generate_cs_replica_cg_array*/, false/*has_cs_replica*/, ls_handle.get_ls()->get_freezer()); ASSERT_EQ(common::OB_SUCCESS, ret); share::SCN create_commit_scn; @@ -337,7 +338,8 @@ TEST_F(TestLSMigrationParam, test_migration_param_compat) SCN scn; scn.convert_from_ts(ObTimeUtility::current_time()); ret = src_handle.get_obj()->init_for_first_time_creation(allocator_, src_key.ls_id_, src_key.tablet_id_, src_key.tablet_id_, - scn, 2022, create_tablet_schema, true/*need_create_empty_major_sstable*/, SCN::invalid_scn(), true/*micro_index_clustered*/, false/*need_generate_cs_replica_cg_array*/, false/*has_cs_replica*/, ls_handle.get_ls()->get_freezer()); + scn, 2022, create_tablet_schema, true/*need_create_empty_major_sstable*/, SCN::invalid_scn()/*clog_checkpoint_scn*/, + SCN::invalid_scn()/*mds_checkpoint_scn*/, true/*micro_index_clustered*/, false/*need_generate_cs_replica_cg_array*/, false/*has_cs_replica*/, ls_handle.get_ls()->get_freezer()); ASSERT_EQ(common::OB_SUCCESS, ret); share::SCN create_commit_scn; diff --git a/mittest/mtlenv/storage/test_ls_tablet_info_writer_and_reader.cpp b/mittest/mtlenv/storage/test_ls_tablet_info_writer_and_reader.cpp index 3814f4e89..780fb8e78 100644 --- a/mittest/mtlenv/storage/test_ls_tablet_info_writer_and_reader.cpp +++ b/mittest/mtlenv/storage/test_ls_tablet_info_writer_and_reader.cpp @@ -170,7 +170,8 @@ void TestLSTabletInfoWR::fill_tablet_meta() SCN scn; scn.convert_from_ts(ObTimeUtility::current_time()); ret = src_handle.get_obj()->init_for_first_time_creation(arena_allocator_, src_key.ls_id_, src_key.tablet_id_, src_key.tablet_id_, - scn, 2022, create_tablet_schema, true/*need_create_empty_major_sstable*/, share::SCN::invalid_scn(), false/*micro_index_clustered*/, false/*need_generate_cs_replica_cg_array*/, false/*has_cs_replica*/, ls_handle.get_ls()->get_freezer()); + scn, 2022, create_tablet_schema, true/*need_create_empty_major_sstable*/, share::SCN::invalid_scn()/*clog_checkpoint_scn*/, + share::SCN::invalid_scn()/*mds_checkpoint_scn*/, false/*micro_index_clustered*/, false/*need_generate_cs_replica_cg_array*/, false/*has_cs_replica*/, ls_handle.get_ls()->get_freezer()); ASSERT_EQ(common::OB_SUCCESS, ret); share::SCN create_commit_scn; diff --git a/mittest/mtlenv/storage/test_tenant_meta_mem_mgr.cpp b/mittest/mtlenv/storage/test_tenant_meta_mem_mgr.cpp index dbd0be0f4..06bc12b11 100644 --- a/mittest/mtlenv/storage/test_tenant_meta_mem_mgr.cpp +++ b/mittest/mtlenv/storage/test_tenant_meta_mem_mgr.cpp @@ -728,7 +728,8 @@ TEST_F(TestTenantMetaMemMgr, test_wash_tablet) ObTabletID empty_tablet_id; ret = tablet->init_for_first_time_creation(allocator_, ls_id_, tablet_id, tablet_id, - create_scn, create_scn.get_val_for_tx(), create_tablet_schema, true/*need_create_empty_major_sstable*/, SCN::invalid_scn(), false/*micro_index_clustered*/, false/*need_generate_cs_replica_cg_array*/, false/*has_cs_replica*/, &freezer); + create_scn, create_scn.get_val_for_tx(), create_tablet_schema, true/*need_create_empty_major_sstable*/, + SCN::invalid_scn()/*clog_checkpoint_scn*/, SCN::invalid_scn()/*mds_checkpoint_scn*/, false/*micro_index_clustered*/, false/*need_generate_cs_replica_cg_array*/, false/*has_cs_replica*/, &freezer); ASSERT_EQ(common::OB_SUCCESS, ret); ASSERT_EQ(1, tablet->get_ref()); const ObTabletPersisterParam persist_param(ls_id_, ls_handle.get_ls()->get_ls_epoch(), tablet_id, tablet->get_transfer_seq()); @@ -829,7 +830,7 @@ TEST_F(TestTenantMetaMemMgr, test_wash_inner_tablet) bool make_empty_co_sstable = true; ret = tablet->init_for_first_time_creation(allocator_, ls_id_, tablet_id, tablet_id, create_scn, create_scn.get_val_for_tx(), create_tablet_schema, - make_empty_co_sstable/*need_create_empty_major_sstable*/, share::SCN::invalid_scn(), false/*micro_index_clustered*/, false/*need_generate_cs_replica_cg_array*/, false/*has_cs_replica*/, &freezer); + make_empty_co_sstable/*need_create_empty_major_sstable*/, share::SCN::invalid_scn()/*clog_checkpoint_scn*/, SCN::invalid_scn()/*mds_checkpoint_scn*/, false/*micro_index_clustered*/, false/*need_generate_cs_replica_cg_array*/, false/*has_cs_replica*/, &freezer); ASSERT_EQ(common::OB_SUCCESS, ret); ASSERT_EQ(1, tablet->get_ref()); @@ -942,7 +943,8 @@ TEST_F(TestTenantMetaMemMgr, test_wash_no_sstable_tablet) bool make_empty_co_sstable = false; ret = tablet->init_for_first_time_creation(allocator_, ls_id_, tablet_id, tablet_id, create_scn, create_scn.get_val_for_tx(), create_tablet_schema, - make_empty_co_sstable/*need_create_empty_major_sstable*/, share::SCN::invalid_scn(), false/*micro_index_clustered*/, false/*need_generate_cs_replica_cg_array*/, false/*has_cs_replica*/, &freezer); + make_empty_co_sstable/*need_create_empty_major_sstable*/, share::SCN::invalid_scn()/*clog_checkpoint_scn*/, + share::SCN::invalid_scn()/*mds_checkpoint_scn*/, false/*micro_index_clustered*/, false/*need_generate_cs_replica_cg_array*/, false/*has_cs_replica*/, &freezer); ASSERT_EQ(common::OB_SUCCESS, ret); ASSERT_EQ(1, tablet->get_ref()); @@ -1041,7 +1043,8 @@ TEST_F(TestTenantMetaMemMgr, test_get_tablet_with_allocator) bool make_empty_co_sstable = true; ret = tablet->init_for_first_time_creation(allocator_, ls_id_, tablet_id, tablet_id, create_scn, create_scn.get_val_for_tx(), create_tablet_schema, - make_empty_co_sstable/*need_create_empty_major_sstable*/, share::SCN::invalid_scn(), false/*micro_index_clustered*/, false/*need_generate_cs_replica_cg_array*/, false/*has_cs_replica*/, &freezer); + make_empty_co_sstable/*need_create_empty_major_sstable*/, share::SCN::invalid_scn()/*clog_checkpoint_scn*/, + share::SCN::invalid_scn()/*mds_checkpoint_scn*/, false/*micro_index_clustered*/, false/*need_generate_cs_replica_cg_array*/, false/*has_cs_replica*/, &freezer); ASSERT_EQ(common::OB_SUCCESS, ret); ASSERT_EQ(1, tablet->get_ref()); @@ -1173,7 +1176,8 @@ TEST_F(TestTenantMetaMemMgr, test_wash_mem_tablet) bool make_empty_co_sstable = false; ret = tablet->init_for_first_time_creation(allocator_, ls_id_, tablet_id, tablet_id, create_scn, create_scn.get_val_for_tx(), create_tablet_schema, - make_empty_co_sstable/*need_create_empty_major_sstable*/, share::SCN::invalid_scn(), false/*micro_index_clustered*/, false/*need_generate_cs_replica_cg_array*/, false/*has_cs_replica*/, &freezer); + make_empty_co_sstable/*need_create_empty_major_sstable*/, share::SCN::invalid_scn()/*clog_checkpoint_scn*/, + share::SCN::invalid_scn()/*mds_checkpoint_scn*/, false/*micro_index_clustered*/, false/*need_generate_cs_replica_cg_array*/, false/*has_cs_replica*/, &freezer); ASSERT_EQ(common::OB_SUCCESS, ret); ASSERT_EQ(1, tablet->get_ref()); diff --git a/src/rootserver/ob_split_partition_helper.cpp b/src/rootserver/ob_split_partition_helper.cpp index 387aa1207..81df098da 100644 --- a/src/rootserver/ob_split_partition_helper.cpp +++ b/src/rootserver/ob_split_partition_helper.cpp @@ -736,7 +736,7 @@ int ObSplitPartitionHelper::start_dst_( // create dst tablets if (OB_FAIL(ret)) { - } else if (OB_FAIL(tablet_creator->modify_batch_args(storage::ObTabletMdsUserDataType::START_SPLIT_DST, data_end_scn, true/*clear_auto_part_size*/))) { + } else if (OB_FAIL(tablet_creator->modify_batch_args(storage::ObTabletMdsUserDataType::START_SPLIT_DST, data_end_scn, data_end_scn, true/*clear_auto_part_size*/))) { LOG_WARN("failed to set clog checkpoint scn of tablet creator args", KR(ret)); } else if (OB_FAIL(tablet_creator->execute())) { LOG_WARN("execute create partition failed", KR(ret)); diff --git a/src/rootserver/ob_tablet_creator.cpp b/src/rootserver/ob_tablet_creator.cpp index f1323aaa4..c7169cfb9 100644 --- a/src/rootserver/ob_tablet_creator.cpp +++ b/src/rootserver/ob_tablet_creator.cpp @@ -390,6 +390,7 @@ int ObTabletCreator::add_create_tablet_arg(const ObTabletCreatorArg &arg) int ObTabletCreator::modify_batch_args( const storage::ObTabletMdsUserDataType &create_type, const SCN &clog_checkpoint_scn, + const SCN &mds_checkpoint_scn, const bool clear_auto_part_size) { int ret = OB_SUCCESS; @@ -405,6 +406,7 @@ int ObTabletCreator::modify_batch_args( } else { while (OB_SUCC(ret) && OB_NOT_NULL(batch_arg)) { batch_arg->batch_arg_.clog_checkpoint_scn_ = clog_checkpoint_scn; + batch_arg->batch_arg_.mds_checkpoint_scn_ = mds_checkpoint_scn; batch_arg->batch_arg_.create_type_ = create_type; if (clear_auto_part_size) { batch_arg->auto_part_size_arr_.reset(); diff --git a/src/rootserver/ob_tablet_creator.h b/src/rootserver/ob_tablet_creator.h index 1c091592d..363d3b88b 100644 --- a/src/rootserver/ob_tablet_creator.h +++ b/src/rootserver/ob_tablet_creator.h @@ -140,7 +140,10 @@ const static int64_t BATCH_ARG_SIZE = 1024 * 1024; // 1M int execute(); bool need_retry(int ret); int add_create_tablet_arg(const ObTabletCreatorArg &arg); - int modify_batch_args(const storage::ObTabletMdsUserDataType &create_type, const share::SCN &clog_checkpoint_scn, const bool clear_auto_part_size); + int modify_batch_args(const storage::ObTabletMdsUserDataType &create_type, + const share::SCN &clog_checkpoint_scn, + const share::SCN &mds_checkpoint_scn, + const bool clear_auto_part_size); void reset(); private: int find_leader_of_ls(const share::ObLSID &id, ObAddr &addr); diff --git a/src/share/ob_rpc_struct.cpp b/src/share/ob_rpc_struct.cpp index b75cc2f61..44b614b87 100644 --- a/src/share/ob_rpc_struct.cpp +++ b/src/share/ob_rpc_struct.cpp @@ -10385,6 +10385,7 @@ void ObBatchCreateTabletArg::reset() allocator_.reset(); tablet_extra_infos_.reset(); clog_checkpoint_scn_.reset(); + mds_checkpoint_scn_.reset(); create_type_ = ObTabletMdsUserDataType::CREATE_TABLET; } @@ -10433,6 +10434,7 @@ int ObBatchCreateTabletArg::assign(const ObBatchCreateTabletArg &arg) need_check_tablet_cnt_ = arg.need_check_tablet_cnt_; is_old_mds_ = arg.is_old_mds_; clog_checkpoint_scn_ = arg.clog_checkpoint_scn_; + mds_checkpoint_scn_ = arg.mds_checkpoint_scn_; create_type_ = arg.create_type_; } return ret; @@ -10640,7 +10642,7 @@ int ObBatchCreateTabletArg::is_old_mds(const char *buf, DEF_TO_STRING(ObBatchCreateTabletArg) { int64_t pos = 0; - J_KV(K_(id), K_(major_frozen_scn), K_(need_check_tablet_cnt), K_(is_old_mds), K_(tablets), K_(tablet_extra_infos), K_(clog_checkpoint_scn), K_(create_type)); + J_KV(K_(id), K_(major_frozen_scn), K_(need_check_tablet_cnt), K_(is_old_mds), K_(tablets), K_(tablet_extra_infos), K_(clog_checkpoint_scn), K_(create_type), K_(mds_checkpoint_scn)); return pos; } @@ -10654,7 +10656,7 @@ OB_DEF_SERIALIZE(ObBatchCreateTabletArg) } else { OB_UNIS_ENCODE_ARRAY(tablet_extra_infos_, tablet_extra_infos_.count()); } - LST_DO_CODE(OB_UNIS_ENCODE, clog_checkpoint_scn_, create_type_); + LST_DO_CODE(OB_UNIS_ENCODE, clog_checkpoint_scn_, create_type_, mds_checkpoint_scn_); return ret; } @@ -10664,7 +10666,7 @@ OB_DEF_SERIALIZE_SIZE(ObBatchCreateTabletArg) LST_DO_CODE(OB_UNIS_ADD_LEN, id_, major_frozen_scn_, tablets_, table_schemas_, need_check_tablet_cnt_, is_old_mds_); len += get_serialize_size_for_create_tablet_schemas(); OB_UNIS_ADD_LEN_ARRAY(tablet_extra_infos_, tablet_extra_infos_.count()); - LST_DO_CODE(OB_UNIS_ADD_LEN, clog_checkpoint_scn_, create_type_); + LST_DO_CODE(OB_UNIS_ADD_LEN, clog_checkpoint_scn_, create_type_, mds_checkpoint_scn_); return len; } @@ -10708,7 +10710,7 @@ OB_DEF_DESERIALIZE(ObBatchCreateTabletArg) } } } - LST_DO_CODE(OB_UNIS_DECODE, clog_checkpoint_scn_, create_type_); + LST_DO_CODE(OB_UNIS_DECODE, clog_checkpoint_scn_, create_type_, mds_checkpoint_scn_); return ret; } diff --git a/src/share/ob_rpc_struct.h b/src/share/ob_rpc_struct.h index 991a4d88a..f427a9d79 100644 --- a/src/share/ob_rpc_struct.h +++ b/src/share/ob_rpc_struct.h @@ -4419,6 +4419,7 @@ public: common::ObSArray tablet_extra_infos_; share::SCN clog_checkpoint_scn_; storage::ObTabletMdsUserDataType create_type_; + share::SCN mds_checkpoint_scn_; }; struct ObBatchRemoveTabletArg diff --git a/src/storage/ls/ob_ls_tablet_service.cpp b/src/storage/ls/ob_ls_tablet_service.cpp index 8e6705702..0000ada95 100644 --- a/src/storage/ls/ob_ls_tablet_service.cpp +++ b/src/storage/ls/ob_ls_tablet_service.cpp @@ -2408,6 +2408,7 @@ int ObLSTabletService::create_tablet( const lib::Worker::CompatMode &compat_mode, const bool need_create_empty_major_sstable, const share::SCN &clog_checkpoint_scn, + const share::SCN &mds_checkpoint_scn, const bool micro_index_clustered, const bool has_cs_replica, ObTabletHandle &tablet_handle) @@ -2437,7 +2438,7 @@ int ObLSTabletService::create_tablet( ret = OB_ERR_UNEXPECTED; LOG_ERROR("new tablet is null", K(ret), KP(tablet), KP(allocator), K(tablet_handle)); } else if (OB_FAIL(tablet->init_for_first_time_creation(*allocator, ls_id, tablet_id, data_tablet_id, - create_scn, snapshot_version, create_tablet_schema, need_create_empty_major_sstable, clog_checkpoint_scn, micro_index_clustered, need_generate_cs_replica_cg_array, has_cs_replica, freezer))) { + create_scn, snapshot_version, create_tablet_schema, need_create_empty_major_sstable, clog_checkpoint_scn, mds_checkpoint_scn, micro_index_clustered, need_generate_cs_replica_cg_array, has_cs_replica, freezer))) { LOG_WARN("failed to init tablet", K(ret), K(ls_id), K(tablet_id), K(data_tablet_id), K(create_scn), K(snapshot_version), K(create_tablet_schema)); } else if (OB_FAIL(tablet->get_updating_tablet_pointer_param(param))) { @@ -2489,6 +2490,7 @@ int ObLSTabletService::create_inner_tablet( const ObTabletPersisterParam param(ls_id, ls_->get_ls_epoch(), tablet_id, ObTabletTransferInfo::TRANSFER_INIT_SEQ); ObTimeGuard time_guard("ObLSTabletService::create_inner_tablet", 10_ms); const share::SCN clog_checkpoint_scn = ObTabletMeta::INIT_CLOG_CHECKPOINT_SCN; + const share::SCN mds_checkpoint_scn = ObTabletMeta::INIT_CLOG_CHECKPOINT_SCN; ObBucketHashWLockGuard lock_guard(bucket_lock_, tablet_id.hash()); if (OB_FAIL(ObTabletCreateDeleteHelper::create_tmp_tablet(key, allocator, tmp_tablet_hdl))) { @@ -2498,7 +2500,7 @@ int ObLSTabletService::create_inner_tablet( LOG_ERROR("new tablet is null", K(ret), KPC(tmp_tablet), K(tmp_tablet_hdl)); } else if (FALSE_IT(time_guard.click("CreateTablet"))) { } else if (OB_FAIL(tmp_tablet->init_for_first_time_creation(allocator, ls_id, tablet_id, data_tablet_id, - create_scn, snapshot_version, create_tablet_schema, true/*need_create_empty_major_sstable*/, clog_checkpoint_scn, false/*micro_index_clustered*/, false/*need_generate_cs_replica_cg_array*/, false/*has_cs_replica*/, freezer))) { + create_scn, snapshot_version, create_tablet_schema, true/*need_create_empty_major_sstable*/, clog_checkpoint_scn, mds_checkpoint_scn, false/*micro_index_clustered*/, false/*need_generate_cs_replica_cg_array*/, false/*has_cs_replica*/, freezer))) { LOG_WARN("failed to init tablet", K(ret), K(ls_id), K(tablet_id), K(data_tablet_id), K(create_scn), K(snapshot_version), K(create_tablet_schema)); } else if (FALSE_IT(time_guard.click("InitTablet"))) { diff --git a/src/storage/ls/ob_ls_tablet_service.h b/src/storage/ls/ob_ls_tablet_service.h index 5c0c9bb8b..cf90d08aa 100644 --- a/src/storage/ls/ob_ls_tablet_service.h +++ b/src/storage/ls/ob_ls_tablet_service.h @@ -172,6 +172,7 @@ public: const lib::Worker::CompatMode &compat_mode, const bool need_create_empty_major_sstable, const share::SCN &clog_checkpoint_scn, + const share::SCN &mds_checkpoint_scn, const bool micro_index_clustered, const bool has_cs_replica, ObTabletHandle &tablet_handle); diff --git a/src/storage/tablet/ob_tablet.cpp b/src/storage/tablet/ob_tablet.cpp index a6d9a3165..2ac612779 100644 --- a/src/storage/tablet/ob_tablet.cpp +++ b/src/storage/tablet/ob_tablet.cpp @@ -343,6 +343,7 @@ int ObTablet::init_for_first_time_creation( const ObCreateTabletSchema &create_tablet_schema, const bool need_create_empty_major_sstable, const share::SCN &clog_checkpoint_scn, + const share::SCN &mds_checkpoint_scn, const bool micro_index_clustered, const bool need_generate_cs_replica_cg_array, const bool has_cs_replica, @@ -379,7 +380,7 @@ int ObTablet::init_for_first_time_creation( LOG_WARN("failed to init shared params", K(ret), K(ls_id), K(tablet_id), K(compat_mode), KP(freezer)); } else if (OB_FAIL(tablet_meta_.init(ls_id, tablet_id, data_tablet_id, create_scn, snapshot_version, compat_mode, table_store_flag, create_tablet_schema.get_schema_version()/*create_schema_version*/, - clog_checkpoint_scn, micro_index_clustered, has_cs_replica, need_generate_cs_replica_cg_array))) { + clog_checkpoint_scn, mds_checkpoint_scn, micro_index_clustered, has_cs_replica, need_generate_cs_replica_cg_array))) { LOG_WARN("failed to init tablet meta", K(ret), K(ls_id), K(tablet_id), K(data_tablet_id), K(create_scn), K(snapshot_version), K(compat_mode), K(table_store_flag)); } else if (OB_FAIL(pull_memtables(allocator))) { @@ -602,6 +603,7 @@ int ObTablet::init_for_shared_merge( old_tablet.tablet_meta_.table_store_flag_, old_tablet.tablet_meta_.create_schema_version_, SCN::invalid_scn()/*clog_checkpoint_scn*/, + SCN::invalid_scn()/*mds_checkpoint_scn*/, old_tablet.tablet_meta_.micro_index_clustered_, false /*has_cs_replica*/, false /*need_generate_cs_replica_cg_array*/))) { diff --git a/src/storage/tablet/ob_tablet.h b/src/storage/tablet/ob_tablet.h index f3ba1d83e..2940d307f 100644 --- a/src/storage/tablet/ob_tablet.h +++ b/src/storage/tablet/ob_tablet.h @@ -197,6 +197,7 @@ public: const ObCreateTabletSchema &storage_schema, const bool need_create_empty_major_sstable, const share::SCN &clog_checkpoint_scn, + const share::SCN &mds_checkpoint_scn, const bool micro_index_clustered, const bool need_generate_cs_replica_cg_array, const bool has_cs_replica, diff --git a/src/storage/tablet/ob_tablet_create_mds_helper.cpp b/src/storage/tablet/ob_tablet_create_mds_helper.cpp index 028946d6e..1d644e1cc 100644 --- a/src/storage/tablet/ob_tablet_create_mds_helper.cpp +++ b/src/storage/tablet/ob_tablet_create_mds_helper.cpp @@ -676,6 +676,7 @@ int ObTabletCreateMdsHelper::build_pure_data_tablet( const lib::Worker::CompatMode &compat_mode = info.compat_mode_; const int64_t snapshot_version = arg.major_frozen_scn_.get_val_for_tx(); const share::SCN &clog_checkpoint_scn = arg.clog_checkpoint_scn_; + const share::SCN &mds_checkpoint_scn = arg.mds_checkpoint_scn_; const bool has_cs_replica = info.has_cs_replica_; ObTabletHandle tablet_handle; bool exist = false; @@ -719,7 +720,7 @@ int ObTabletCreateMdsHelper::build_pure_data_tablet( LOG_WARN("check and get create tablet schema_info failed", K(ret)); } else if (CLICK_FAIL(ls->get_tablet_svr()->create_tablet(ls_id, data_tablet_id, data_tablet_id, scn, snapshot_version, *create_tablet_schema, compat_mode, - need_create_empty_major_sstable, clog_checkpoint_scn, micro_index_clustered, has_cs_replica, tablet_handle))) { + need_create_empty_major_sstable, clog_checkpoint_scn, mds_checkpoint_scn, micro_index_clustered, has_cs_replica, tablet_handle))) { LOG_WARN("failed to do create tablet", K(ret), K(ls_id), K(data_tablet_id), "arg", PRETTY_ARG(arg)); } @@ -751,6 +752,7 @@ int ObTabletCreateMdsHelper::build_mixed_tablets( const ObSArray &create_tablet_extra_infos = arg.tablet_extra_infos_; const int64_t snapshot_version = arg.major_frozen_scn_.get_val_for_tx(); const share::SCN &clog_checkpoint_scn = arg.clog_checkpoint_scn_; + const share::SCN &mds_checkpoint_scn = arg.mds_checkpoint_scn_; const bool has_cs_replica = info.has_cs_replica_; ObTabletHandle data_tablet_handle; ObTabletHandle tablet_handle; @@ -808,7 +810,7 @@ int ObTabletCreateMdsHelper::build_mixed_tablets( LOG_WARN("failed to push back tablet id", K(ret), K(ls_id), K(tablet_id)); } else if (CLICK_FAIL(ls->get_tablet_svr()->create_tablet(ls_id, tablet_id, data_tablet_id, scn, snapshot_version, *create_tablet_schema, compat_mode, - need_create_empty_major_sstable, clog_checkpoint_scn, micro_index_clustered, has_cs_replica, tablet_handle))) { + need_create_empty_major_sstable, clog_checkpoint_scn, mds_checkpoint_scn, micro_index_clustered, has_cs_replica, tablet_handle))) { LOG_WARN("failed to do create tablet", K(ret), K(ls_id), K(tablet_id), K(data_tablet_id), "arg", PRETTY_ARG(arg)); } @@ -858,6 +860,7 @@ int ObTabletCreateMdsHelper::build_pure_aux_tablets( const ObSArray &create_tablet_extra_infos = arg.tablet_extra_infos_; const int64_t snapshot_version = arg.major_frozen_scn_.get_val_for_tx(); const share::SCN &clog_checkpoint_scn = arg.clog_checkpoint_scn_; + const share::SCN &mds_checkpoint_scn = arg.mds_checkpoint_scn_; const bool has_cs_replica = info.has_cs_replica_; ObTabletHandle tablet_handle; bool exist = false; @@ -905,7 +908,7 @@ int ObTabletCreateMdsHelper::build_pure_aux_tablets( LOG_WARN("check and get create tablet schema_info failed", K(ret)); } else if (CLICK_FAIL(ls->get_tablet_svr()->create_tablet(ls_id, tablet_id, data_tablet_id, scn, snapshot_version, *create_tablet_schema, compat_mode, - need_create_empty_major_sstable, clog_checkpoint_scn, micro_index_clustered, has_cs_replica, tablet_handle))) { + need_create_empty_major_sstable, clog_checkpoint_scn, mds_checkpoint_scn, micro_index_clustered, has_cs_replica, tablet_handle))) { LOG_WARN("failed to do create tablet", K(ret), K(ls_id), K(tablet_id), K(data_tablet_id), "arg", PRETTY_ARG(arg)); } @@ -940,6 +943,7 @@ int ObTabletCreateMdsHelper::build_bind_hidden_tablets( const ObSArray &create_tablet_extra_infos = arg.tablet_extra_infos_; const int64_t snapshot_version = arg.major_frozen_scn_.get_val_for_tx(); const share::SCN &clog_checkpoint_scn = arg.clog_checkpoint_scn_; + const share::SCN &mds_checkpoint_scn = arg.mds_checkpoint_scn_; const bool has_cs_replica = info.has_cs_replica_; ObTabletHandle tablet_handle; int64_t aux_info_idx = -1; @@ -1010,7 +1014,7 @@ int ObTabletCreateMdsHelper::build_bind_hidden_tablets( LOG_WARN("failed to push back tablet id", K(ret), K(ls_id), K(tablet_id)); } else if (CLICK_FAIL(ls->get_tablet_svr()->create_tablet(ls_id, tablet_id, tablet_id, scn, snapshot_version, *create_tablet_schema, compat_mode, - need_create_empty_major_sstable, clog_checkpoint_scn, micro_index_clustered, has_cs_replica, tablet_handle))) { + need_create_empty_major_sstable, clog_checkpoint_scn, mds_checkpoint_scn, micro_index_clustered, has_cs_replica, tablet_handle))) { LOG_WARN("failed to do create tablet", K(ret), K(ls_id), K(tablet_id), K(orig_tablet_id), "arg", PRETTY_ARG(arg)); } diff --git a/src/storage/tablet/ob_tablet_meta.cpp b/src/storage/tablet/ob_tablet_meta.cpp index 65aee1ec6..f4f2a4d9f 100644 --- a/src/storage/tablet/ob_tablet_meta.cpp +++ b/src/storage/tablet/ob_tablet_meta.cpp @@ -88,6 +88,7 @@ int ObTabletMeta::init( const ObTabletTableStoreFlag &table_store_flag, const int64_t create_schema_version, const share::SCN &clog_checkpoint_scn, + const share::SCN &mds_checkpoint_scn, const bool micro_index_clustered, const bool has_cs_replica, const bool need_generate_cs_replica_cg_array) @@ -129,7 +130,7 @@ int ObTabletMeta::init( ddl_snapshot_version_ = 0; max_sync_storage_schema_version_ = create_schema_version; ddl_data_format_version_ = 0; - mds_checkpoint_scn_ = INIT_CLOG_CHECKPOINT_SCN; + mds_checkpoint_scn_ = mds_checkpoint_scn.is_valid() ? mds_checkpoint_scn : INIT_CLOG_CHECKPOINT_SCN; report_status_.merge_snapshot_version_ = snapshot_version; report_status_.cur_report_version_ = snapshot_version; report_status_.data_checksum_ = 0; diff --git a/src/storage/tablet/ob_tablet_meta.h b/src/storage/tablet/ob_tablet_meta.h index 109ba9855..9d7ef9196 100644 --- a/src/storage/tablet/ob_tablet_meta.h +++ b/src/storage/tablet/ob_tablet_meta.h @@ -71,6 +71,7 @@ public: const ObTabletTableStoreFlag &table_store_flag, const int64_t create_schema_version, const share::SCN &clog_checkpoint_scn, + const share::SCN &mds_checkpoint_scn, const bool micro_index_clustered, const bool has_cs_replica, const bool need_generate_cs_replica_cg_array); diff --git a/unittest/storage/test_compaction_policy.cpp b/unittest/storage/test_compaction_policy.cpp index c28f02407..c5d4f1731 100644 --- a/unittest/storage/test_compaction_policy.cpp +++ b/unittest/storage/test_compaction_policy.cpp @@ -443,7 +443,8 @@ int TestCompactionPolicy::mock_tablet( LOG_WARN("failed to init storage schema", KR(ret), K(table_schema)); } else if (FALSE_IT(need_generate_cs_replica_cg_array = ls_handle.get_ls()->is_cs_replica() && create_tablet_schema.is_row_store() && create_tablet_schema.is_user_data_table())) { } else if (OB_FAIL(tablet->init_for_first_time_creation(allocator, ls_id, tablet_id, tablet_id, - SCN::min_scn(), snapshot_version, create_tablet_schema, need_empty_major_table, SCN::invalid_scn(), false/*micro_index_clustered*/, need_generate_cs_replica_cg_array, false/*has_cs_replica*/, ls_handle.get_ls()->get_freezer()))) { + SCN::min_scn(), snapshot_version, create_tablet_schema, need_empty_major_table, SCN::invalid_scn()/*clog_checkpoint_scn*/, + SCN::invalid_scn()/*mds_checkpoint_scn*/, false/*micro_index_clustered*/, need_generate_cs_replica_cg_array, false/*has_cs_replica*/, ls_handle.get_ls()->get_freezer()))) { LOG_WARN("failed to init tablet", K(ret), K(ls_id), K(tablet_id), K(snapshot_version), K(table_schema), K(compat_mode)); } else { diff --git a/unittest/storage/test_tablet_helper.h b/unittest/storage/test_tablet_helper.h index 88d0cc43f..62f702200 100644 --- a/unittest/storage/test_tablet_helper.h +++ b/unittest/storage/test_tablet_helper.h @@ -138,7 +138,8 @@ inline int TestTabletHelper::create_tablet( } else if (OB_FAIL(tablet_handle.get_obj()->init_for_first_time_creation( *tablet_handle.get_allocator(), ls_id, tablet_id, tablet_id, share::SCN::base_scn(), - snapshot_version, create_tablet_schema, need_create_empty_major_sstable, share::SCN::invalid_scn(), false/*micro_index_clustered*/, need_generate_cs_replica_cg_array, false/*has_cs_replica*/, freezer))){ + snapshot_version, create_tablet_schema, need_create_empty_major_sstable, share::SCN::invalid_scn()/*clog_checkpoint_scn*/, + share::SCN::invalid_scn()/*mds_checkpoint_scn*/, false/*micro_index_clustered*/, need_generate_cs_replica_cg_array, false/*has_cs_replica*/, freezer))){ STORAGE_LOG(WARN, "failed to init tablet", K(ret), K(ls_id), K(tablet_id)); } else if (ObTabletStatus::Status::MAX != tablet_status) { ObTabletCreateDeleteMdsUserData data;