[BUG] fix snapshot version after transfer
This commit is contained in:
parent
ffed357f8f
commit
179e3b75f5
@ -1827,6 +1827,9 @@ int ObTransferReplaceTableTask::build_transfer_backfill_tablet_param_(
|
||||
} else if (OB_ISNULL(src_tablet = src_tablet_handle.get_obj())) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("src tablet should not be NULL", K(ret), KP(src_tablet));
|
||||
} else if (src_tablet->get_tablet_meta().snapshot_version_ > ctx_->backfill_scn_.get_val_for_tx()) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("transfer src tablet snapshot version is bigger than backfill scn, unexpected", K(ret), KPC(ctx_), KPC(src_tablet));
|
||||
} else if (OB_FAIL(src_tablet->load_storage_schema(allocator, src_storage_schema))) {
|
||||
LOG_WARN("failed to load storage schema", K(ret), KPC(tablet));
|
||||
} else if (OB_FAIL(tablet->build_transfer_backfill_tablet_param(src_tablet->get_tablet_meta(), *src_storage_schema, param))) {
|
||||
|
@ -983,15 +983,53 @@ void ObFreezer::handle_set_tablet_freeze_failed(const bool need_rewrite_meta,
|
||||
}
|
||||
}
|
||||
|
||||
int ObFreezer::decide_real_snapshot_version_(const ObTabletID &tablet_id,
|
||||
const ObTablet *tablet,
|
||||
const SCN freeze_snapshot_version,
|
||||
SCN &real_snapshot_version)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
ObTabletCreateDeleteMdsUserData user_data;
|
||||
bool is_committed = false;
|
||||
share::SCN transfer_scn = share::SCN::max_scn();
|
||||
|
||||
if (tablet_id.is_ls_inner_tablet()) {
|
||||
//do nothing
|
||||
} else if (OB_FAIL(tablet->ObITabletMdsInterface::get_latest_tablet_status(user_data,
|
||||
is_committed))) {
|
||||
LOG_WARN("fail to get latest tablet status", K(ret), KPC(tablet));
|
||||
} else if (ObTabletStatus::TRANSFER_OUT != user_data.tablet_status_
|
||||
&& ObTabletStatus::TRANSFER_OUT_DELETED != user_data.tablet_status_) {
|
||||
//do nothing
|
||||
} else if (user_data.transfer_scn_.is_valid()) {
|
||||
transfer_scn = user_data.transfer_scn_;
|
||||
}
|
||||
|
||||
if (OB_SUCC(ret)) {
|
||||
real_snapshot_version = MIN(freeze_snapshot_version, transfer_scn);
|
||||
if (real_snapshot_version != freeze_snapshot_version) {
|
||||
FLOG_INFO("update tablet snapshot version changed snapshot version for transfer",
|
||||
K(real_snapshot_version), K(freeze_snapshot_version), K(transfer_scn), K(user_data));
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ObFreezer::handle_no_active_memtable_(const ObTabletID &tablet_id,
|
||||
const ObTablet *tablet,
|
||||
const SCN freeze_snapshot_version)
|
||||
SCN freeze_snapshot_version)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
share::ObLSID ls_id = get_ls_id();
|
||||
ObProtectedMemtableMgrHandle *protected_handle = NULL;
|
||||
if (OB_FAIL(tablet->get_protected_memtable_mgr_handle(protected_handle))) {
|
||||
LOG_WARN("failed to get_protected_memtable_mgr_handle", K(ret), KPC(tablet));
|
||||
} else if (OB_FAIL(decide_real_snapshot_version_(tablet_id,
|
||||
tablet,
|
||||
freeze_snapshot_version,
|
||||
freeze_snapshot_version))) {
|
||||
LOG_WARN("failed to decide real snapshot version", K(ret), KPC(tablet));
|
||||
} else if (!protected_handle->has_memtable()) {
|
||||
// We need trigger a dag to rewrite the snapshot version of tablet
|
||||
// meta for the major merge and medium merge. While the implementation
|
||||
|
@ -312,7 +312,11 @@ private:
|
||||
ObIArray<ObTableHandleV2> &frozen_memtable_handles);
|
||||
int handle_no_active_memtable_(const ObTabletID &tablet_id,
|
||||
const ObTablet *tablet,
|
||||
const share::SCN freeze_snapshot_version);
|
||||
share::SCN freeze_snapshot_version);
|
||||
int decide_real_snapshot_version_(const ObTabletID &tablet_id,
|
||||
const ObTablet *tablet,
|
||||
const SCN freeze_snapshot_version,
|
||||
SCN &real_snapshot_version);
|
||||
void handle_set_tablet_freeze_failed(const bool need_rewrite_meta,
|
||||
const ObTabletID &tablet_id,
|
||||
const ObLSID &ls_id,
|
||||
|
Loading…
x
Reference in New Issue
Block a user