pin/unpin tablets for tablet binding transaction
This commit is contained in:

committed by
wangzelin.wzl

parent
6201df2c3d
commit
ff836b6230
@ -395,6 +395,7 @@ int ObTabletBindingHelper::lock_tablet_binding_for_unbind(const ObBatchUnbindTab
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (OB_FAIL(ret) && !trans_flags.for_replay_) {
|
if (OB_FAIL(ret) && !trans_flags.for_replay_) {
|
||||||
int tmp_ret = OB_SUCCESS;
|
int tmp_ret = OB_SUCCESS;
|
||||||
ObMulSourceDataNotifyArg rollback_trans_flags = trans_flags;
|
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*/))) {
|
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));
|
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))) {
|
} 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;
|
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 ObTabletBindingHelper::lock_tablet_binding(ObTabletHandle &handle, const ObMulSourceDataNotifyArg &trans_flags)
|
||||||
{
|
{
|
||||||
int ret = OB_SUCCESS;
|
int ret = OB_SUCCESS;
|
||||||
|
ObTenantMetaMemMgr *t3m = MTL(ObTenantMetaMemMgr*);
|
||||||
const ObTransID &tx_id = trans_flags.tx_id_;
|
const ObTransID &tx_id = trans_flags.tx_id_;
|
||||||
const int64_t log_ts = trans_flags.log_ts_;
|
const int64_t log_ts = trans_flags.log_ts_;
|
||||||
const bool for_replay = trans_flags.for_replay_;
|
const bool for_replay = trans_flags.for_replay_;
|
||||||
ObTablet *tablet = handle.get_obj();
|
ObTablet *tablet = handle.get_obj();
|
||||||
|
const ObTabletMapKey key(tablet->tablet_meta_.ls_id_, tablet->tablet_meta_.tablet_id_);
|
||||||
ObTabletTxMultiSourceDataUnit tx_data;
|
ObTabletTxMultiSourceDataUnit tx_data;
|
||||||
if (OB_FAIL(tablet->get_tx_data(tx_data))) {
|
if (OB_FAIL(tablet->get_tx_data(tx_data))) {
|
||||||
LOG_WARN("failed to get tx data", K(ret));
|
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,
|
} else if (need_update && OB_FAIL(tablet->set_tx_data(tx_data, memtable_log_ts, for_replay,
|
||||||
update_cache, ref_op, false/*is_callback*/))) {
|
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));
|
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;
|
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 ObTabletBindingHelper::check_need_dec_cnt_for_abort(const ObTabletTxMultiSourceDataUnit &tx_data, bool &need_dec)
|
||||||
{
|
{
|
||||||
int ret = OB_SUCCESS;
|
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;
|
need_dec = false;
|
||||||
if ((tx_data.is_tx_end() && cnt == 2) || (!tx_data.is_tx_end() && cnt == 1)) {
|
if ((tx_data.is_tx_end() && cnt == 2) || (!tx_data.is_tx_end() && cnt == 1)) {
|
||||||
need_dec = true;
|
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 ObTabletBindingHelper::unlock_tablet_binding(ObTabletHandle &handle, const ObMulSourceDataNotifyArg &trans_flags)
|
||||||
{
|
{
|
||||||
int ret = OB_SUCCESS;
|
int ret = OB_SUCCESS;
|
||||||
|
ObTenantMetaMemMgr *t3m = MTL(ObTenantMetaMemMgr*);
|
||||||
const ObTransID &tx_id = trans_flags.tx_id_;
|
const ObTransID &tx_id = trans_flags.tx_id_;
|
||||||
const int64_t log_ts = trans_flags.log_ts_;
|
const int64_t log_ts = trans_flags.log_ts_;
|
||||||
const bool for_replay = trans_flags.for_replay_;
|
const bool for_replay = trans_flags.for_replay_;
|
||||||
const bool for_commit = trans_flags.notify_type_ == NotifyType::ON_COMMIT;
|
const bool for_commit = trans_flags.notify_type_ == NotifyType::ON_COMMIT;
|
||||||
ObTablet *tablet = handle.get_obj();
|
ObTablet *tablet = handle.get_obj();
|
||||||
|
const ObTabletMapKey key(tablet->tablet_meta_.ls_id_, tablet->tablet_meta_.tablet_id_);
|
||||||
ObTabletTxMultiSourceDataUnit tx_data;
|
ObTabletTxMultiSourceDataUnit tx_data;
|
||||||
LOG_INFO("unlock_tablet_binding", KPC(tablet), K(trans_flags));
|
LOG_INFO("unlock_tablet_binding", KPC(tablet), K(trans_flags));
|
||||||
if (OB_FAIL(tablet->get_tx_data(tx_data))) {
|
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 (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))) {
|
} 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));
|
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 {
|
} else {
|
||||||
|
Reference in New Issue
Block a user