提交 14cd684e 编写于 作者: K KyrielightWei 提交者: ob-robot

recover lease list from dup table ckpt meta

上级 f646d357
......@@ -673,6 +673,37 @@ int ObDupTableLSLeaseMgr::get_lease_mgr_stat(FollowerLeaseMgrStatArr &collect_ar
return ret;
}
int ObDupTableLSLeaseMgr::recover_lease_from_ckpt(
const ObDupTableLSCheckpoint::ObLSDupTableMeta &dup_ls_meta)
{
int ret = OB_SUCCESS;
SpinWLockGuard guard(lease_lock_);
if (!dup_ls_meta.is_valid()) {
ret = OB_INVALID_ARGUMENT;
DUP_TABLE_LOG(WARN, "invalid argument", K(ret), K(dup_ls_meta));
} else {
DupTableLeaderLeaseInfo leader_lease_info;
for (int i = 0; i < dup_ls_meta.lease_item_array_.count() && OB_SUCC(ret); i++) {
leader_lease_info.reset();
leader_lease_info.confirmed_lease_info_ = dup_ls_meta.lease_item_array_[i].durable_lease_;
// lease expired ts will be updated in leader_takeover
leader_lease_info.lease_expired_ts_ =
leader_lease_info.confirmed_lease_info_.lease_interval_us_
+ leader_lease_info.confirmed_lease_info_.request_ts_;
if (OB_FAIL(leader_lease_map_.set_refactored(
dup_ls_meta.lease_item_array_[i].log_header_.get_lease_owner(), leader_lease_info,
1))) {
DUP_TABLE_LOG(WARN, "insert into leader lease map failed ", K(ret), K(i),
K(dup_ls_meta.lease_item_array_[i]), K(leader_lease_info));
}
}
}
return ret;
}
void ObDupTableLSLeaseMgr::update_request_ts_(int64_t loop_start_time)
{
// set self_request_ts_ = 0 when replay lease log success
......
......@@ -30,6 +30,7 @@ namespace transaction
class ObDupTableLSHandler;
class ObDupTableLeaseRequest;
class ObLSDupTableMeta;
class ObDupTableLSLeaseMgr
{
......@@ -95,6 +96,7 @@ public:
int get_lease_mgr_stat(FollowerLeaseMgrStatArr &collect_arr);
int recover_lease_from_ckpt(const ObDupTableLSCheckpoint::ObLSDupTableMeta &dup_ls_meta);
private:
bool can_grant_lease_(const common::ObAddr &addr,
const share::SCN &local_max_applyed_scn,
......
......@@ -1000,6 +1000,41 @@ int ObDupTableLSHandler::try_to_confirm_tablets_(const share::SCN &confirm_scn)
return ret;
}
int ObDupTableLSHandler::recover_ckpt_into_memory_()
{
int ret = OB_SUCCESS;
if (dup_ls_ckpt_.is_useful_meta()) {
const bool is_dup_table = true;
if (OB_SUCC(ret) && OB_FAIL(init(is_dup_table))) {
if (OB_INIT_TWICE == ret) {
ret = OB_SUCCESS;
} else {
DUP_TABLE_LOG(WARN, "init dup ls handler failed", K(ret), KPC(this));
}
}
if (OB_SUCC(ret)) {
ObDupTableLSCheckpoint::ObLSDupTableMeta dup_ls_meta;
if (OB_ISNULL(lease_mgr_ptr_)) {
ret = OB_ERR_UNEXPECTED;
DUP_TABLE_LOG(WARN, "unexpected lease mgr ptr after inited", K(ret), KPC(lease_mgr_ptr_),
KPC(this));
} else if (OB_FAIL(dup_ls_ckpt_.get_dup_ls_meta(dup_ls_meta))) {
DUP_TABLE_LOG(WARN, "copy a dup table ls meta failed", K(ret), K(dup_ls_meta),
K(dup_ls_ckpt_));
} else if (OB_FAIL(lease_mgr_ptr_->recover_lease_from_ckpt(dup_ls_meta))) {
DUP_TABLE_LOG(WARN, "recover lease array failed", K(ret), KPC(this), KPC(lease_mgr_ptr_));
}
}
} else {
DUP_TABLE_LOG(DEBUG, "unuseful dup table checkpoint, no need to recover", K(ret), K(ls_id_),
K(dup_ls_ckpt_));
}
return ret;
}
int ObDupTableLSHandler::unblock_confirm_with_prepare_scn(
const share::SCN &dup_tablet_change_snapshot,
const share::SCN &redo_scn)
......
......@@ -231,6 +231,8 @@ private:
int try_to_confirm_tablets_(const share::SCN &confirm_ts);
int recover_ckpt_into_memory_();
private:
share::ObLSID ls_id_;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册