recover lease list from dup table ckpt meta
This commit is contained in:
@ -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_;
|
||||
|
||||
|
Reference in New Issue
Block a user