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;
|
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)
|
void ObDupTableLSLeaseMgr::update_request_ts_(int64_t loop_start_time)
|
||||||
{
|
{
|
||||||
// set self_request_ts_ = 0 when replay lease log success
|
// set self_request_ts_ = 0 when replay lease log success
|
||||||
|
@ -30,6 +30,7 @@ namespace transaction
|
|||||||
|
|
||||||
class ObDupTableLSHandler;
|
class ObDupTableLSHandler;
|
||||||
class ObDupTableLeaseRequest;
|
class ObDupTableLeaseRequest;
|
||||||
|
class ObLSDupTableMeta;
|
||||||
|
|
||||||
class ObDupTableLSLeaseMgr
|
class ObDupTableLSLeaseMgr
|
||||||
{
|
{
|
||||||
@ -95,6 +96,7 @@ public:
|
|||||||
|
|
||||||
int get_lease_mgr_stat(FollowerLeaseMgrStatArr &collect_arr);
|
int get_lease_mgr_stat(FollowerLeaseMgrStatArr &collect_arr);
|
||||||
|
|
||||||
|
int recover_lease_from_ckpt(const ObDupTableLSCheckpoint::ObLSDupTableMeta &dup_ls_meta);
|
||||||
private:
|
private:
|
||||||
bool can_grant_lease_(const common::ObAddr &addr,
|
bool can_grant_lease_(const common::ObAddr &addr,
|
||||||
const share::SCN &local_max_applyed_scn,
|
const share::SCN &local_max_applyed_scn,
|
||||||
|
@ -1000,6 +1000,41 @@ int ObDupTableLSHandler::try_to_confirm_tablets_(const share::SCN &confirm_scn)
|
|||||||
return ret;
|
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(
|
int ObDupTableLSHandler::unblock_confirm_with_prepare_scn(
|
||||||
const share::SCN &dup_tablet_change_snapshot,
|
const share::SCN &dup_tablet_change_snapshot,
|
||||||
const share::SCN &redo_scn)
|
const share::SCN &redo_scn)
|
||||||
|
@ -231,6 +231,8 @@ private:
|
|||||||
|
|
||||||
int try_to_confirm_tablets_(const share::SCN &confirm_ts);
|
int try_to_confirm_tablets_(const share::SCN &confirm_ts);
|
||||||
|
|
||||||
|
int recover_ckpt_into_memory_();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
share::ObLSID ls_id_;
|
share::ObLSID ls_id_;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user