diff --git a/mittest/mtlenv/storage/test_ls_migration_param.cpp b/mittest/mtlenv/storage/test_ls_migration_param.cpp index 1afe5edd18..f695d19023 100644 --- a/mittest/mtlenv/storage/test_ls_migration_param.cpp +++ b/mittest/mtlenv/storage/test_ls_migration_param.cpp @@ -237,13 +237,17 @@ TEST_F(TestLSMigrationParam, test_migrate_tablet_param) share::schema::ObTableSchema table_schema; TestSchemaUtils::prepare_data_schema(table_schema); + ObArenaAllocator schema_allocator; + ObCreateTabletSchema create_tablet_schema; + ret = create_tablet_schema.init(schema_allocator, table_schema, lib::Worker::CompatMode::MYSQL, + false/*skip_column_info*/, ObCreateTabletSchema::STORAGE_SCHEMA_VERSION_V3); + ASSERT_EQ(OB_SUCCESS, ret); ObTabletID empty_tablet_id; 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, table_schema, - lib::Worker::CompatMode::MYSQL, false, ls_handle.get_ls()->get_freezer()); + scn, 2022, create_tablet_schema, false, ls_handle.get_ls()->get_freezer()); ASSERT_EQ(common::OB_SUCCESS, ret); ObMigrationTabletParam tablet_param; @@ -297,13 +301,17 @@ TEST_F(TestLSMigrationParam, test_migration_param_compat) share::schema::ObTableSchema table_schema; TestSchemaUtils::prepare_data_schema(table_schema); + ObArenaAllocator schema_allocator; + ObCreateTabletSchema create_tablet_schema; + ret = create_tablet_schema.init(schema_allocator, table_schema, lib::Worker::CompatMode::MYSQL, + false/*skip_column_info*/, ObCreateTabletSchema::STORAGE_SCHEMA_VERSION_V3); + ASSERT_EQ(OB_SUCCESS, ret); ObTabletID empty_tablet_id; 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, table_schema, - lib::Worker::CompatMode::MYSQL, false, ls_handle.get_ls()->get_freezer()); + scn, 2022, create_tablet_schema, false, ls_handle.get_ls()->get_freezer()); ASSERT_EQ(common::OB_SUCCESS, ret); ObMigrationTabletParam tablet_param; 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 54d543d331..94e2448e14 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 @@ -154,13 +154,17 @@ void TestLSTabletInfoWR::fill_tablet_meta() share::schema::ObTableSchema table_schema; TestSchemaUtils::prepare_data_schema(table_schema); + ObArenaAllocator schema_allocator; + ObCreateTabletSchema create_tablet_schema; + ret = create_tablet_schema.init(schema_allocator, table_schema, lib::Worker::CompatMode::MYSQL, + false/*skip_column_info*/, ObCreateTabletSchema::STORAGE_SCHEMA_VERSION_V3); + ASSERT_EQ(OB_SUCCESS, ret); ObTabletID empty_tablet_id; 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, table_schema, - lib::Worker::CompatMode::MYSQL, false, ls_handle.get_ls()->get_freezer()); + scn, 2022, create_tablet_schema, false, ls_handle.get_ls()->get_freezer()); ASSERT_EQ(common::OB_SUCCESS, ret); ObMigrationTabletParam tablet_param; diff --git a/mittest/mtlenv/storage/test_tenant_meta_mem_mgr.cpp b/mittest/mtlenv/storage/test_tenant_meta_mem_mgr.cpp index 549e2cbe9b..f77aa34f27 100644 --- a/mittest/mtlenv/storage/test_tenant_meta_mem_mgr.cpp +++ b/mittest/mtlenv/storage/test_tenant_meta_mem_mgr.cpp @@ -90,8 +90,7 @@ public: virtual void TearDown() override; static void SetUpTestCase(); static void TearDownTestCase(); - - void prepare_data_schema(ObTableSchema &table_schema); + void prepare_data_schema(common::ObArenaAllocator &allocator, ObCreateTabletSchema &create_tablet_schema); void prepare_create_sstable_param(); void gc_all_tablets(); public: @@ -174,9 +173,12 @@ void TestTenantMetaMemMgr::TearDown() tenant_base->set(old_t3m); } -void TestTenantMetaMemMgr::prepare_data_schema(ObTableSchema &table_schema) +void TestTenantMetaMemMgr::prepare_data_schema( + common::ObArenaAllocator &allocator, ObCreateTabletSchema &create_tablet_schema +) { int ret = OB_SUCCESS; + ObTableSchema table_schema; const uint64_t table_id = 219039915101; int64_t micro_block_size = 16 * 1024; ObColumnSchemaV2 column; @@ -221,6 +223,10 @@ void TestTenantMetaMemMgr::prepare_data_schema(ObTableSchema &table_schema) ASSERT_EQ(OB_SUCCESS, table_schema.add_column(column)); } LOG_INFO("dump data table schema", LITERAL_K(TEST_ROWKEY_COLUMN_CNT), K(table_schema)); + + ret = create_tablet_schema.init(allocator, table_schema, lib::Worker::CompatMode::MYSQL, + false/*skip_column_info*/, ObCreateTabletSchema::STORAGE_SCHEMA_VERSION_V3); + ASSERT_EQ(OB_SUCCESS, ret); } void TestTenantMetaMemMgr::prepare_create_sstable_param() @@ -679,8 +685,9 @@ TEST_F(TestTenantMetaMemMgr, test_wash_tablet) ObLSTabletService ls_tablet_svr; MockObLogHandler log_handler; ObFreezer freezer; - ObTableSchema table_schema; - prepare_data_schema(table_schema); + ObArenaAllocator schema_allocator; + ObCreateTabletSchema create_tablet_schema; + prepare_data_schema(schema_allocator, create_tablet_schema); ret = freezer.init(&ls); ASSERT_EQ(common::OB_SUCCESS, ret); @@ -691,8 +698,7 @@ 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(), table_schema, - lib::Worker::CompatMode::MYSQL, true, &freezer); + create_scn, create_scn.get_val_for_tx(), create_tablet_schema, true, &freezer); ASSERT_EQ(common::OB_SUCCESS, ret); ASSERT_EQ(1, tablet->get_ref()); @@ -769,8 +775,9 @@ TEST_F(TestTenantMetaMemMgr, test_wash_inner_tablet) ObLSTabletService ls_tablet_svr; MockObLogHandler log_handler; ObFreezer freezer; - ObTableSchema table_schema; - prepare_data_schema(table_schema); + ObArenaAllocator schema_allocator; + ObCreateTabletSchema create_tablet_schema; + prepare_data_schema(schema_allocator, create_tablet_schema); ret = freezer.init(&ls); ASSERT_EQ(common::OB_SUCCESS, ret); @@ -782,7 +789,7 @@ TEST_F(TestTenantMetaMemMgr, test_wash_inner_tablet) ObTabletID empty_tablet_id; 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(), table_schema, lib::Worker::CompatMode::MYSQL, make_empty_co_sstable, &freezer); + create_scn, create_scn.get_val_for_tx(), create_tablet_schema, make_empty_co_sstable, &freezer); ASSERT_EQ(common::OB_SUCCESS, ret); ASSERT_EQ(1, tablet->get_ref()); @@ -871,8 +878,9 @@ TEST_F(TestTenantMetaMemMgr, test_wash_no_sstable_tablet) ObLSTabletService ls_tablet_svr; MockObLogHandler log_handler; ObFreezer freezer; - ObTableSchema table_schema; - prepare_data_schema(table_schema); + ObArenaAllocator schema_allocator; + ObCreateTabletSchema create_tablet_schema; + prepare_data_schema(schema_allocator, create_tablet_schema); ret = freezer.init(&ls); ASSERT_EQ(common::OB_SUCCESS, ret); @@ -883,7 +891,7 @@ TEST_F(TestTenantMetaMemMgr, test_wash_no_sstable_tablet) ObTabletID empty_tablet_id; 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(), table_schema, lib::Worker::CompatMode::MYSQL, + create_scn, create_scn.get_val_for_tx(), create_tablet_schema, make_empty_co_sstable, &freezer); ASSERT_EQ(common::OB_SUCCESS, ret); ASSERT_EQ(1, tablet->get_ref()); @@ -953,19 +961,15 @@ TEST_F(TestTenantMetaMemMgr, test_get_tablet_with_allocator) ObLSTabletService ls_tablet_svr; MockObLogHandler log_handler; ObFreezer freezer; - ObTableSchema table_schema; - prepare_data_schema(table_schema); + ObArenaAllocator schema_allocator; + ObCreateTabletSchema create_tablet_schema; + prepare_data_schema(schema_allocator, create_tablet_schema); ret = freezer.init(&ls); ASSERT_EQ(common::OB_SUCCESS, ret); ObTabletCreateSSTableParam param; - ObStorageSchema storage_schema; - if (OB_FAIL(storage_schema.init(allocator_, table_schema, lib::Worker::CompatMode::MYSQL))) { - LOG_WARN("failed to init storage schema", K(ret)); - } else { - ret = ObTabletCreateDeleteHelper::build_create_sstable_param(storage_schema, tablet_id, 100, param); - } + ret = ObTabletCreateDeleteHelper::build_create_sstable_param(create_tablet_schema, tablet_id, 100, param); ASSERT_EQ(common::OB_SUCCESS, ret); ret = ObTabletCreateDeleteHelper::create_sstable(param, allocator_, sstable); @@ -977,8 +981,7 @@ TEST_F(TestTenantMetaMemMgr, test_get_tablet_with_allocator) ObTabletID empty_tablet_id; 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(), table_schema, - lib::Worker::CompatMode::MYSQL, make_empty_co_sstable, &freezer); + create_scn, create_scn.get_val_for_tx(), create_tablet_schema, make_empty_co_sstable, &freezer); ASSERT_EQ(common::OB_SUCCESS, ret); ASSERT_EQ(1, tablet->get_ref()); @@ -1053,7 +1056,9 @@ TEST_F(TestTenantMetaMemMgr, test_wash_mem_tablet) ObFreezer freezer; ObTableSchema table_schema; ObTabletCreateSSTableParam param; - prepare_data_schema(table_schema); + ObArenaAllocator schema_allocator; + ObCreateTabletSchema create_tablet_schema; + prepare_data_schema(schema_allocator, create_tablet_schema); ret = freezer.init(&ls); ASSERT_EQ(common::OB_SUCCESS, ret); @@ -1098,8 +1103,7 @@ TEST_F(TestTenantMetaMemMgr, test_wash_mem_tablet) ObTabletID empty_tablet_id; 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(), table_schema, - lib::Worker::CompatMode::MYSQL, make_empty_co_sstable, &freezer); + create_scn, create_scn.get_val_for_tx(), create_tablet_schema, make_empty_co_sstable, &freezer); ASSERT_EQ(common::OB_SUCCESS, ret); ASSERT_EQ(1, tablet->get_ref()); diff --git a/src/storage/ls/ob_ls.h b/src/storage/ls/ob_ls.h index a9da394517..4709664cfc 100644 --- a/src/storage/ls/ob_ls.h +++ b/src/storage/ls/ob_ls.h @@ -533,17 +533,14 @@ public: // create_ls_inner_tablet // @param [in] ls_id // @param [in] tablet_id - // @param [in] memstore_version // @param [in] frozen_timestamp - // @param [in] table_schema - // @param [in] compat_mode + // @param [in] create_tablet_schema // @param [in] create_scn // int create_ls_inner_tablet( // const share::ObLSID &ls_id, // const common::ObTabletID &tablet_id, - // const int64_t frozen_timestamp, - // const share::schema::ObTableSchema &table_schema, - // const lib::Worker::CompatMode &compat_mode, + // const share::SCN &frozen_timestamp, + // const ObCreateTabletSchema &create_tablet_schema, // const share::SCN &create_scn); DELEGATE_WITH_RET(ls_tablet_svr_, create_ls_inner_tablet, int); // remove_ls_inner_tablet diff --git a/src/storage/ls/ob_ls_tablet_service.cpp b/src/storage/ls/ob_ls_tablet_service.cpp index 47a64cdf77..f39818fe3b 100644 --- a/src/storage/ls/ob_ls_tablet_service.cpp +++ b/src/storage/ls/ob_ls_tablet_service.cpp @@ -1984,8 +1984,7 @@ int ObLSTabletService::create_inner_tablet( const common::ObTabletID &data_tablet_id, const share::SCN &create_scn, const int64_t snapshot_version, - const share::schema::ObTableSchema &table_schema, - const lib::Worker::CompatMode &compat_mode, + const ObCreateTabletSchema &create_tablet_schema, ObTabletHandle &tablet_handle) { int ret = OB_SUCCESS; @@ -2007,12 +2006,12 @@ 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(ObTabletCreateDeleteHelper::check_need_create_empty_major_sstable( - table_schema, need_create_empty_major_sstable))) { + create_tablet_schema, need_create_empty_major_sstable))) { LOG_WARN("failed to check need create sstable", K(ret)); } else if (OB_FAIL(tmp_tablet->init_for_first_time_creation(allocator, ls_id, tablet_id, data_tablet_id, - create_scn, snapshot_version, table_schema, compat_mode, need_create_empty_major_sstable, freezer))) { + create_scn, snapshot_version, create_tablet_schema, need_create_empty_major_sstable, 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(table_schema), K(compat_mode)); + K(create_scn), K(snapshot_version), K(create_tablet_schema)); int tmp_ret = OB_SUCCESS; if (OB_TMP_FAIL(inner_remove_tablet(ls_id, tablet_id))) { LOG_ERROR("failed to delete tablet from t3m", K(ret), K(key), K(lbt())); @@ -5843,8 +5842,7 @@ int ObLSTabletService::create_ls_inner_tablet( const share::ObLSID &ls_id, const common::ObTabletID &tablet_id, const SCN &major_frozen_scn, - const share::schema::ObTableSchema &table_schema, - const lib::Worker::CompatMode &compat_mode, + const ObCreateTabletSchema &create_tablet_schema, const SCN &create_scn) { int ret = OB_SUCCESS; @@ -5860,12 +5858,12 @@ int ObLSTabletService::create_ls_inner_tablet( } else if (OB_UNLIKELY(!ls_id.is_valid()) || OB_UNLIKELY(!tablet_id.is_valid()) || OB_UNLIKELY(!major_frozen_scn.is_valid()) - || OB_UNLIKELY(!table_schema.is_valid()) - || OB_UNLIKELY(lib::Worker::CompatMode::INVALID == compat_mode) + || OB_UNLIKELY(!create_tablet_schema.is_valid()) + || OB_UNLIKELY(lib::Worker::CompatMode::INVALID == create_tablet_schema.get_compat_mode()) || OB_UNLIKELY(!create_scn.is_valid())) { ret = OB_INVALID_ARGUMENT; LOG_WARN("invalid args", K(ret), K(ls_id), K(tablet_id), K(major_frozen_scn), - K(table_schema), K(compat_mode), K(create_scn)); + K(create_tablet_schema), K(create_scn)); } else if (OB_UNLIKELY(ls_id != ls_->get_ls_id())) { ret = OB_ERR_UNEXPECTED; LOG_WARN("ls id is unexpected", K(ret), "arg_ls_id", ls_id, "ls_id", ls_->get_ls_id()); @@ -5878,9 +5876,9 @@ int ObLSTabletService::create_ls_inner_tablet( ret = OB_TABLET_EXIST; LOG_WARN("tablet already exists", K(ret), K(ls_id), K(tablet_id)); } else if (OB_FAIL(create_inner_tablet(ls_id, tablet_id, tablet_id/*data_tablet_id*/, - create_scn, snapshot_version, table_schema, compat_mode, tablet_handle))) { + create_scn, snapshot_version, create_tablet_schema, tablet_handle))) { LOG_WARN("failed to do create tablet", K(ret), K(ls_id), K(tablet_id), - K(create_scn), K(major_frozen_scn), K(table_schema), K(compat_mode)); + K(create_scn), K(major_frozen_scn), K(create_tablet_schema)); } return ret; diff --git a/src/storage/ls/ob_ls_tablet_service.h b/src/storage/ls/ob_ls_tablet_service.h index 310808fda0..2c2e96e6ea 100644 --- a/src/storage/ls/ob_ls_tablet_service.h +++ b/src/storage/ls/ob_ls_tablet_service.h @@ -172,8 +172,7 @@ public: const share::ObLSID &ls_id, const common::ObTabletID &tablet_id, const share::SCN &frozen_timestamp, - const share::schema::ObTableSchema &table_schema, - const lib::Worker::CompatMode &compat_mode, + const ObCreateTabletSchema &create_tablet_schema, const share::SCN &create_scn); int remove_ls_inner_tablet( const share::ObLSID &ls_id, @@ -511,8 +510,7 @@ private: const common::ObTabletID &data_tablet_id, const share::SCN &create_scn, const int64_t snapshot_version, - const share::schema::ObTableSchema &table_schema, - const lib::Worker::CompatMode &compat_mode, + const ObCreateTabletSchema &create_tablet_schema, ObTabletHandle &tablet_handle); int refresh_tablet_addr( const share::ObLSID &ls_id, diff --git a/src/storage/tablelock/ob_lock_table.cpp b/src/storage/tablelock/ob_lock_table.cpp index f3d2a72123..5d315fb196 100644 --- a/src/storage/tablelock/ob_lock_table.cpp +++ b/src/storage/tablelock/ob_lock_table.cpp @@ -322,16 +322,20 @@ int ObLockTable::create_tablet(const lib::Worker::CompatMode compat_mode, const share::schema::ObTableSchema table_schema; ObIMemtableMgr *memtable_mgr = nullptr; ObMemtableMgrHandle memtable_mgr_handle; + ObArenaAllocator arena_allocator; + ObCreateTabletSchema create_tablet_schema; if (IS_NOT_INIT) { ret = OB_NOT_INIT; LOG_WARN("ObLockTable not inited", K(ret)); } else if (OB_FAIL(get_table_schema_(tenant_id, table_schema))) { LOG_WARN("get lock table schema failed", K(ret)); + } else if (OB_FAIL(create_tablet_schema.init(arena_allocator, table_schema, compat_mode, + false/*skip_column_info*/, ObCreateTabletSchema::STORAGE_SCHEMA_VERSION_V3))) { + LOG_WARN("failed to init storage schema", KR(ret), K(table_schema)); } else if (OB_FAIL(parent_->create_ls_inner_tablet(ls_id, LS_LOCK_TABLET, ObLS::LS_INNER_TABLET_FROZEN_SCN, - table_schema, - compat_mode, + create_tablet_schema, create_scn))) { LOG_WARN("failed to create lock tablet", K(ret), K(ls_id), K(LS_LOCK_TABLET), K(table_schema), K(compat_mode), K(create_scn)); diff --git a/src/storage/tablet/ob_tablet.cpp b/src/storage/tablet/ob_tablet.cpp index 76b94ea646..4da64f5b75 100644 --- a/src/storage/tablet/ob_tablet.cpp +++ b/src/storage/tablet/ob_tablet.cpp @@ -325,8 +325,6 @@ int ObTablet::init_for_first_time_creation( create_scn, snapshot_version, compat_mode, table_store_flag, storage_schema.get_schema_version()/*create_schema_version*/))) { 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 (is_ls_inner_tablet() && OB_FAIL(inner_create_memtable())) { - LOG_WARN("failed to create first memtable", K(ret), K(tablet_id)); } else if (OB_FAIL(pull_memtables(allocator, ddl_kvs_addr, ddl_kv_count))) { LOG_WARN("fail to pull memtable", K(ret)); } else { @@ -375,101 +373,6 @@ int ObTablet::init_for_first_time_creation( return ret; } -int ObTablet::init_for_first_time_creation( - common::ObArenaAllocator &allocator, - const share::ObLSID &ls_id, - const common::ObTabletID &tablet_id, - const common::ObTabletID &data_tablet_id, - const share::SCN &create_scn, - const int64_t snapshot_version, - const share::schema::ObTableSchema &table_schema, - const lib::Worker::CompatMode compat_mode, - const bool need_empty_major_table, - ObFreezer *freezer) -{ - int ret = OB_SUCCESS; - const int64_t default_max_sync_medium_scn = 0; - ObTableHandleV2 table_handle; - ObTabletTableStoreFlag table_store_flag; - if (need_empty_major_table) { - table_store_flag.set_with_major_sstable(); - } else { - table_store_flag.set_without_major_sstable(); - } - ObITable **ddl_kvs_addr = nullptr; - int64_t ddl_kv_count = 0; - - if (OB_UNLIKELY(is_inited_)) { - ret = OB_INIT_TWICE; - LOG_WARN("init twice", K(ret), K(is_inited_)); - } else if (OB_UNLIKELY(!ls_id.is_valid()) - || OB_UNLIKELY(!tablet_id.is_valid()) - || OB_UNLIKELY(!data_tablet_id.is_valid()) - //|| OB_UNLIKELY(create_scn <= OB_INVALID_TIMESTAMP) - || OB_UNLIKELY(OB_INVALID_VERSION == snapshot_version) - || OB_UNLIKELY(!table_schema.is_valid()) - || OB_UNLIKELY(lib::Worker::CompatMode::INVALID == compat_mode) - || OB_ISNULL(freezer)) { - ret = OB_INVALID_ARGUMENT; - LOG_WARN("invalid args", K(ret), K(ls_id), K(tablet_id), K(data_tablet_id), - K(create_scn), K(snapshot_version), K(table_schema), K(compat_mode), KP(freezer)); - } else if (OB_UNLIKELY(!pointer_hdl_.is_valid()) - || OB_ISNULL(memtable_mgr_) - || OB_ISNULL(log_handler_)) { - ret = OB_ERR_UNEXPECTED; - LOG_WARN("tablet pointer handle is invalid", K(ret), K_(pointer_hdl), K_(memtable_mgr), K_(log_handler)); - } else if (OB_FAIL(init_shared_params(ls_id, tablet_id, table_schema.get_schema_version(), - default_max_sync_medium_scn, compat_mode, freezer))) { - 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, table_schema.get_schema_version()/*create_schema_version*/))) { - 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, ddl_kvs_addr, ddl_kv_count))) { - LOG_WARN("fail to pull memtable", K(ret)); - } else { - ddl_kvs_ = ddl_kvs_addr; - ddl_kv_count_ = ddl_kv_count; - ALLOC_AND_INIT(allocator, storage_schema_addr_, table_schema, compat_mode, - false/*skip_column_info*/, ObStorageSchema::STORAGE_SCHEMA_VERSION_V3); - } - if (OB_FAIL(ret)) { - } else if (need_empty_major_table - && OB_FAIL(ObTabletCreateDeleteHelper::create_empty_sstable( - allocator, *storage_schema_addr_.get_ptr(), tablet_id, snapshot_version, table_handle))) { - LOG_WARN("failed to make empty co sstable", K(ret), K(snapshot_version)); - } else { - ALLOC_AND_INIT(allocator, table_store_addr_, (*this), static_cast(table_handle.get_table())); - } - - if (OB_FAIL(ret)) { - } else if (OB_FAIL(table_store_cache_.init(table_store_addr_.get_ptr()->get_major_sstables(), - table_store_addr_.get_ptr()->get_minor_sstables(), - table_schema.is_row_store()))) { - LOG_WARN("failed to init table store cache", K(ret), KPC(this)); - } else if (OB_FAIL(check_sstable_column_checksum())) { - LOG_WARN("failed to check sstable column checksum", K(ret), KPC(this)); - } else if (OB_FAIL(build_read_info(allocator))) { - LOG_WARN("failed to build read info", K(ret)); - } else if (!is_ls_inner_tablet() && OB_FAIL(mds_data_.init_for_first_creation(allocator))) { - LOG_WARN("failed to init mds data", K(ret)); - } else if (is_ls_inner_tablet() && OB_FAIL(mds_data_.init_with_tablet_status(allocator, ObTabletStatus::NORMAL, ObTabletMdsUserDataType::CREATE_TABLET))) { - LOG_WARN("failed to init mds data for ls inner tablet", K(ret)); - } else if (FALSE_IT(set_mem_addr())) { - } else if (OB_FAIL(inner_inc_macro_ref_cnt())) { - LOG_WARN("failed to increase macro ref cnt", K(ret)); - } else { - is_inited_ = true; - LOG_INFO("succeeded to init tablet for first time creation", K(ret), K(*this)); - } - - if (OB_UNLIKELY(!is_inited_)) { - reset(); - } - - return ret; -} - int ObTablet::init_for_merge( common::ObArenaAllocator &allocator, const ObUpdateTableStoreParam ¶m, diff --git a/src/storage/tablet/ob_tablet.h b/src/storage/tablet/ob_tablet.h index 3fc8b382f4..ece597cce5 100644 --- a/src/storage/tablet/ob_tablet.h +++ b/src/storage/tablet/ob_tablet.h @@ -179,17 +179,6 @@ public: public: // first time create tablet - int init_for_first_time_creation( - common::ObArenaAllocator &allocator, - const share::ObLSID &ls_id, - const common::ObTabletID &tablet_id, - const common::ObTabletID &data_tablet_id, - const share::SCN &create_scn, - const int64_t snapshot_version, - const share::schema::ObTableSchema &table_schema, - const lib::Worker::CompatMode compat_mode, - const bool need_empty_major_table, - ObFreezer *freezer); int init_for_first_time_creation( common::ObArenaAllocator &allocator, const share::ObLSID &ls_id, diff --git a/src/storage/tablet/ob_tablet_create_delete_helper.cpp b/src/storage/tablet/ob_tablet_create_delete_helper.cpp index 718c27e87b..828d316f99 100644 --- a/src/storage/tablet/ob_tablet_create_delete_helper.cpp +++ b/src/storage/tablet/ob_tablet_create_delete_helper.cpp @@ -644,21 +644,6 @@ int ObTabletCreateDeleteHelper::check_need_create_empty_major_sstable( return ret; } -int ObTabletCreateDeleteHelper::check_need_create_empty_major_sstable( - const ObTableSchema &table_schema, - bool &need_create_sstable) -{ - int ret = OB_SUCCESS; - need_create_sstable = false; - if (OB_UNLIKELY(!table_schema.is_valid())) { - ret = OB_INVALID_ARGUMENT; - LOG_WARN("invalid args", K(ret), K(table_schema)); - } else { - need_create_sstable = !(table_schema.is_user_hidden_table() || (table_schema.is_index_table() && !table_schema.can_read_index())); - } - return ret; -} - int ObTabletCreateDeleteHelper::build_create_sstable_param( const ObStorageSchema &storage_schema, const ObTabletID &tablet_id, diff --git a/src/storage/tablet/ob_tablet_create_delete_helper.h b/src/storage/tablet/ob_tablet_create_delete_helper.h index d6312e377d..39cca5b7ed 100644 --- a/src/storage/tablet/ob_tablet_create_delete_helper.h +++ b/src/storage/tablet/ob_tablet_create_delete_helper.h @@ -32,15 +32,6 @@ namespace obrpc { struct ObBatchCreateTabletArg; } - -namespace share -{ -namespace schema -{ -class ObTableSchema; -} -} - namespace blocksstable { class ObSSTable; @@ -135,9 +126,6 @@ public: static int check_need_create_empty_major_sstable( const ObCreateTabletSchema &create_tablet_schema, bool &need_create_sstable); - static int check_need_create_empty_major_sstable( - const ObTableSchema &table_schema, - bool &need_create_sstable); // Attention !!! only used when first creating tablet static int create_empty_sstable( common::ObArenaAllocator &allocator, diff --git a/src/storage/tx_table/ob_tx_table.cpp b/src/storage/tx_table/ob_tx_table.cpp index c51acf276a..69839e85ee 100644 --- a/src/storage/tx_table/ob_tx_table.cpp +++ b/src/storage/tx_table/ob_tx_table.cpp @@ -284,13 +284,17 @@ int ObTxTable::create_ctx_tablet_( { int ret = OB_SUCCESS; share::schema::ObTableSchema table_schema; + ObArenaAllocator arena_allocator; + ObCreateTabletSchema create_tablet_schema; if (OB_FAIL(get_ctx_table_schema_(tenant_id, table_schema))) { LOG_WARN("get ctx table schema failed", K(ret)); + } else if (OB_FAIL(create_tablet_schema.init(arena_allocator, table_schema, compat_mode, + false/*skip_column_info*/, ObCreateTabletSchema::STORAGE_SCHEMA_VERSION_V3))) { + LOG_WARN("failed to init storage schema", KR(ret), K(table_schema)); } else if (OB_FAIL(ls_->create_ls_inner_tablet(ls_id, LS_TX_CTX_TABLET, ObLS::LS_INNER_TABLET_FROZEN_SCN, - table_schema, - compat_mode, + create_tablet_schema, create_scn))) { LOG_WARN("create tx ctx tablet failed", K(ret), K(ls_id), K(LS_TX_CTX_TABLET), K(ObLS::LS_INNER_TABLET_FROZEN_SCN), @@ -405,13 +409,17 @@ int ObTxTable::create_data_tablet_(const uint64_t tenant_id, { int ret = OB_SUCCESS; share::schema::ObTableSchema table_schema; + ObArenaAllocator arena_allocator; + ObCreateTabletSchema create_tablet_schema; if (OB_FAIL(get_data_table_schema_(tenant_id, table_schema))) { LOG_WARN("get data table schema failed", K(ret)); + } else if (OB_FAIL(create_tablet_schema.init(arena_allocator, table_schema, compat_mode, + false/*skip_column_info*/, ObCreateTabletSchema::STORAGE_SCHEMA_VERSION_V3))) { + LOG_WARN("failed to init storage schema", KR(ret), K(table_schema)); } else if (OB_FAIL(ls_->create_ls_inner_tablet(ls_id, LS_TX_DATA_TABLET, ObLS::LS_INNER_TABLET_FROZEN_SCN, - table_schema, - compat_mode, + create_tablet_schema, create_scn))) { LOG_WARN("create tx data tablet failed", K(ret), K(ls_id), K(LS_TX_DATA_TABLET), K(ObLS::LS_INNER_TABLET_FROZEN_SCN), diff --git a/unittest/storage/test_compaction_policy.cpp b/unittest/storage/test_compaction_policy.cpp index e709adf7c0..81c0e53436 100644 --- a/unittest/storage/test_compaction_policy.cpp +++ b/unittest/storage/test_compaction_policy.cpp @@ -388,6 +388,8 @@ int TestCompactionPolicy::mock_tablet( ObLSHandle ls_handle; ObLSService *ls_svr = nullptr; + ObArenaAllocator arena_allocator; + ObCreateTabletSchema create_tablet_schema; if (OB_ISNULL(t3m)) { ret = OB_ERR_UNEXPECTED; @@ -401,8 +403,11 @@ int TestCompactionPolicy::mock_tablet( } else if (OB_FAIL(ObTabletCreateDeleteHelper::create_tmp_tablet(key, allocator, tablet_handle))) { LOG_WARN("failed to acquire tablet", K(ret), K(key)); } else if (FALSE_IT(tablet = tablet_handle.get_obj())) { + } else if (OB_FAIL(create_tablet_schema.init(arena_allocator, table_schema, compat_mode, + false/*skip_column_info*/, ObCreateTabletSchema::STORAGE_SCHEMA_VERSION_V3))) { + LOG_WARN("failed to init storage schema", KR(ret), K(table_schema)); } else if (OB_FAIL(tablet->init_for_first_time_creation(allocator, ls_id, tablet_id, tablet_id, - SCN::min_scn(), snapshot_version, table_schema, compat_mode, need_empty_major_table, ls_handle.get_ls()->get_freezer()))) { + SCN::min_scn(), snapshot_version, create_tablet_schema, need_empty_major_table, 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 dcc4e6caf8..22dda09714 100644 --- a/unittest/storage/test_tablet_helper.h +++ b/unittest/storage/test_tablet_helper.h @@ -110,17 +110,22 @@ inline int TestTabletHelper::create_tablet( int ret = OB_SUCCESS; ObTenantMetaMemMgr *t3m = MTL(ObTenantMetaMemMgr*); ObLSTabletService *ls_tablet_svr = ls_handle.get_ls()->get_tablet_svr(); + const lib::Worker::CompatMode compat_mode = lib::Worker::CompatMode::MYSQL; + ObArenaAllocator schema_allocator; + ObCreateTabletSchema create_tablet_schema; ObTabletCreateSSTableParam param; prepare_sstable_param(tablet_id, table_schema, param); void *buff = nullptr; - if (OB_FAIL(ObSSTableMergeRes::fill_column_checksum_for_empty_major(param.column_cnt_, param.column_checksums_))) { + if (OB_FAIL(create_tablet_schema.init(schema_allocator, table_schema, compat_mode, + false/*skip_column_info*/, ObCreateTabletSchema::STORAGE_SCHEMA_VERSION_V3))) { + STORAGE_LOG(WARN, "failed to init storage schema", KR(ret), K(table_schema)); + } else if (OB_FAIL(ObSSTableMergeRes::fill_column_checksum_for_empty_major(param.column_cnt_, param.column_checksums_))) { STORAGE_LOG(WARN, "fill column checksum failed", K(ret), K(param)); } else { const int64_t snapshot_version = 1; const share::ObLSID &ls_id = ls_handle.get_ls()->get_ls_id(); ObFreezer *freezer = ls_handle.get_ls()->get_freezer(); - const lib::Worker::CompatMode compat_mode = lib::Worker::CompatMode::MYSQL; ObTabletHandle tablet_handle; const ObTabletMapKey key(ls_id, tablet_id); if (OB_FAIL(t3m->create_msd_tablet(WashTabletPriority::WTP_HIGH, key, ls_handle, tablet_handle))) { @@ -128,7 +133,7 @@ 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, table_schema, compat_mode, true, freezer))){ + snapshot_version, create_tablet_schema, true, 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;