pin/unpin tablets for tablet binding transaction

This commit is contained in:
hiddenbomb 2022-11-07 16:35:36 +00:00 committed by wangzelin.wzl
parent 6201df2c3d
commit ff836b6230

View File

@ -395,6 +395,7 @@ int ObTabletBindingHelper::lock_tablet_binding_for_unbind(const ObBatchUnbindTab
}
}
}
if (OB_FAIL(ret) && !trans_flags.for_replay_) {
int tmp_ret = OB_SUCCESS;
ObMulSourceDataNotifyArg rollback_trans_flags = trans_flags;
@ -875,7 +876,7 @@ int ObTabletBindingHelper::lock_and_set_tx_data(ObTabletHandle &handle, ObTablet
false/*update_cache*/, ref_op, false/*is_callback*/))) {
LOG_WARN("failed to save msd", K(ret), K(tx_data), K(log_ts), K(for_replay), K(ref_op));
} else if (OB_FAIL(t3m->insert_pinned_tablet(key))) {
LOG_WARN("failed to insert in tx tablet", K(key));
LOG_WARN("failed to insert in tx tablet", K(ret), K(key));
}
}
return ret;
@ -885,10 +886,12 @@ int ObTabletBindingHelper::lock_and_set_tx_data(ObTabletHandle &handle, ObTablet
int ObTabletBindingHelper::lock_tablet_binding(ObTabletHandle &handle, const ObMulSourceDataNotifyArg &trans_flags)
{
int ret = OB_SUCCESS;
ObTenantMetaMemMgr *t3m = MTL(ObTenantMetaMemMgr*);
const ObTransID &tx_id = trans_flags.tx_id_;
const int64_t log_ts = trans_flags.log_ts_;
const bool for_replay = trans_flags.for_replay_;
ObTablet *tablet = handle.get_obj();
const ObTabletMapKey key(tablet->tablet_meta_.ls_id_, tablet->tablet_meta_.tablet_id_);
ObTabletTxMultiSourceDataUnit tx_data;
if (OB_FAIL(tablet->get_tx_data(tx_data))) {
LOG_WARN("failed to get tx data", K(ret));
@ -912,6 +915,8 @@ int ObTabletBindingHelper::lock_tablet_binding(ObTabletHandle &handle, const ObM
} else if (need_update && OB_FAIL(tablet->set_tx_data(tx_data, memtable_log_ts, for_replay,
update_cache, ref_op, false/*is_callback*/))) {
LOG_WARN("failed to save tx data", K(ret), K(tx_data), K(log_ts), K(for_replay), K(ref_op));
} else if (OB_FAIL(t3m->insert_pinned_tablet(key))) {
LOG_WARN("failed to insert in tx tablet", K(ret), K(key));
}
}
return ret;
@ -1006,7 +1011,7 @@ int ObTabletBindingHelper::set_log_ts(const ObIArray<ObTabletID> &tablet_ids) co
int ObTabletBindingHelper::check_need_dec_cnt_for_abort(const ObTabletTxMultiSourceDataUnit &tx_data, bool &need_dec)
{
int ret = OB_SUCCESS;
const int cnt = tx_data.get_unsync_cnt_for_multi_data();
const int cnt = tx_data.get_unsync_cnt_for_multi_data();
need_dec = false;
if ((tx_data.is_tx_end() && cnt == 2) || (!tx_data.is_tx_end() && cnt == 1)) {
need_dec = true;
@ -1022,11 +1027,13 @@ int ObTabletBindingHelper::check_need_dec_cnt_for_abort(const ObTabletTxMultiSou
int ObTabletBindingHelper::unlock_tablet_binding(ObTabletHandle &handle, const ObMulSourceDataNotifyArg &trans_flags)
{
int ret = OB_SUCCESS;
ObTenantMetaMemMgr *t3m = MTL(ObTenantMetaMemMgr*);
const ObTransID &tx_id = trans_flags.tx_id_;
const int64_t log_ts = trans_flags.log_ts_;
const bool for_replay = trans_flags.for_replay_;
const bool for_commit = trans_flags.notify_type_ == NotifyType::ON_COMMIT;
ObTablet *tablet = handle.get_obj();
const ObTabletMapKey key(tablet->tablet_meta_.ls_id_, tablet->tablet_meta_.tablet_id_);
ObTabletTxMultiSourceDataUnit tx_data;
LOG_INFO("unlock_tablet_binding", KPC(tablet), K(trans_flags));
if (OB_FAIL(tablet->get_tx_data(tx_data))) {
@ -1056,6 +1063,8 @@ int ObTabletBindingHelper::unlock_tablet_binding(ObTabletHandle &handle, const O
} else if (FALSE_IT(ref_op = (need_dec ? MemtableRefOp::DEC_REF : MemtableRefOp::NONE))) {
} else if (OB_FAIL(tablet->set_tablet_final_status(tx_data, memtable_log_ts, for_replay, ref_op))) {
LOG_WARN("failed to save tx data", K(ret), K(tx_data), K(log_ts), K(for_replay), K(ref_op));
} else if (OB_FAIL(t3m->erase_pinned_tablet(key))) {
LOG_WARN("failed to erase in tx tablet", K(ret), K(key));
}
}
} else {