use the latest start scn to allocate ddl kv.
This commit is contained in:
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user