[fix] fix too strict log barrier condition for pre sync config log

This commit is contained in:
obdev
2022-12-02 06:38:10 +00:00
committed by ob-robot
parent da5b2fb1e4
commit b4aa66c02d

View File

@ -1004,6 +1004,7 @@ int LogConfigMgr::pre_sync_config_log(const common::ObMember &server, const int6
int ret = OB_SUCCESS; int ret = OB_SUCCESS;
SpinLockGuard guard(lock_); SpinLockGuard guard(lock_);
common::ObMemberList member_list; common::ObMemberList member_list;
LogMeta log_meta;
if (IS_NOT_INIT) { if (IS_NOT_INIT) {
ret = OB_NOT_INIT; ret = OB_NOT_INIT;
} else if (false == server.is_valid()) { } else if (false == server.is_valid()) {
@ -1011,8 +1012,16 @@ int LogConfigMgr::pre_sync_config_log(const common::ObMember &server, const int6
} else if (CHANGING == state_) { } else if (CHANGING == state_) {
ret = OB_EAGAIN; ret = OB_EAGAIN;
} else if (FALSE_IT(member_list.add_member(server))) { } else if (FALSE_IT(member_list.add_member(server))) {
} else if (OB_FAIL(log_meta.generate_by_default(AccessMode::APPEND))) {
PALF_LOG(WARN, "generate_default_log_meta failed", KR(ret), K_(palf_id), K_(self));
// Generate default log barrier for pre_sync config log. Therefore, the added member will
// accept this config log as long as receiving it, without waiting for log barrier.
// The config meta has been accepted by majority, so it's safe to skip log barrier
} else if (OB_FAIL(log_engine_->submit_change_config_meta_req(member_list, proposal_id, } else if (OB_FAIL(log_engine_->submit_change_config_meta_req(member_list, proposal_id,
prev_log_proposal_id_, prev_lsn_, prev_mode_pid_, log_ms_meta_))) { INVALID_PROPOSAL_ID,
log_meta.get_log_snapshot_meta().base_lsn_,
log_meta.get_log_prepare_meta().log_proposal_id_,
log_ms_meta_))) {
PALF_LOG(WARN, "submit_change_config_meta_req failed", KR(ret), K_(palf_id), K_(self), K(proposal_id), K(server)); PALF_LOG(WARN, "submit_change_config_meta_req failed", KR(ret), K_(palf_id), K_(self), K(proposal_id), K(server));
} }
return ret; return ret;