use the latest start scn to allocate ddl kv.

This commit is contained in:
obdev
2024-02-09 05:14:36 +00:00
committed by ob-robot
parent df30569176
commit d0d26de23d
11 changed files with 89 additions and 57 deletions

View File

@ -299,35 +299,36 @@ int ObDDLRedoReplayExecutor::do_replay_(ObTabletHandle &tablet_handle)
const ObITable::TableKey &table_key = redo_info.table_key_;
bool is_major_sstable_exist = false;
uint64_t data_format_version = redo_info.data_format_version_;
if (data_format_version <= 0) {
// to upgrade from lower version without `data_format_version` in redo log,
// use data_format_version in start log instead.
ObTenantDirectLoadMgr *tenant_direct_load_mgr = MTL(ObTenantDirectLoadMgr *);
ObTabletDirectLoadMgrHandle direct_load_mgr_handle;
if (OB_ISNULL(tenant_direct_load_mgr)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("unexpected err", K(ret));
} else if (OB_FAIL(tenant_direct_load_mgr->get_tablet_mgr_and_check_major(
ls_->get_ls_id(),
redo_info.table_key_.tablet_id_,
true/* is_full_direct_load */,
direct_load_mgr_handle,
is_major_sstable_exist))) {
if (OB_ENTRY_NOT_EXIST == ret && is_major_sstable_exist) {
ret = OB_SUCCESS;
LOG_INFO("major sstable already exist", K(ret), K(scn_), K(table_key));
} else {
LOG_WARN("get tablet mgr failed", K(ret), K(table_key));
}
// to upgrade from lower version without `data_format_version` in redo log,
// use data_format_version in start log instead.
ObTabletDirectLoadMgrHandle direct_load_mgr_handle;
ObTenantDirectLoadMgr *tenant_direct_load_mgr = MTL(ObTenantDirectLoadMgr *);
if (OB_ISNULL(tenant_direct_load_mgr)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("unexpected err", K(ret));
} else if (OB_FAIL(tenant_direct_load_mgr->get_tablet_mgr_and_check_major(
ls_->get_ls_id(),
redo_info.table_key_.tablet_id_,
true/* is_full_direct_load */,
direct_load_mgr_handle,
is_major_sstable_exist))) {
if (OB_ENTRY_NOT_EXIST == ret && is_major_sstable_exist) {
need_replay = false;
ret = OB_SUCCESS;
LOG_INFO("major sstable already exist, ship replay", K(ret), K(scn_), K(table_key));
} else {
data_format_version = direct_load_mgr_handle.get_obj()->get_data_format_version();
LOG_WARN("get tablet mgr failed", K(ret), K(table_key));
}
} else if (data_format_version <= 0) {
data_format_version = direct_load_mgr_handle.get_obj()->get_data_format_version();
}
if (OB_FAIL(ret)) {
} else if (OB_FAIL(ObDDLKVPendingGuard::set_macro_block(tablet_handle.get_obj(), macro_block,
snapshot_version, data_format_version))) {
LOG_WARN("set macro block into ddl kv failed", K(ret), K(tablet_handle), K(macro_block),
K(snapshot_version), K(data_format_version));
if (OB_SUCC(ret) && need_replay) {
if (OB_FAIL(ObDDLKVPendingGuard::set_macro_block(tablet_handle.get_obj(), macro_block,
snapshot_version, data_format_version, direct_load_mgr_handle))) {
LOG_WARN("set macro block into ddl kv failed", K(ret), K(tablet_handle), K(macro_block),
K(snapshot_version), K(data_format_version));
}
}
}
}