fix problem with region priority

This commit is contained in:
yy0 2021-08-20 10:26:02 +08:00 committed by wangzelin.wzl
parent a0ff8aaa32
commit 61ae7ea4d0
2 changed files with 14 additions and 2 deletions

View File

@ -256,6 +256,11 @@ int ObPartitionLogService::init(ObILogEngine* log_engine, ObLogReplayEngineWrapp
archive_mgr_ = archive_mgr;
max_flushed_ilog_id_ = 0;
scan_confirmed_log_cnt_ = 0;
// priority of log replica include encrypted log replica should be initialize with UINT64_MAX,
// while other replica types with 0.
const uint64_t zone_priority = ObReplicaTypeCheck::is_log_replica(replica_type) ? UINT64_MAX : 0;
ATOMIC_STORE(&zone_priority_, zone_priority);
is_inited_ = true;
election_has_removed_ = false;
}
@ -4144,7 +4149,7 @@ void ObPartitionLogService::destroy()
self_.reset();
// checksum_.destroy()
saved_base_storage_info_.reset();
zone_priority_ = UINT64_MAX;
zone_priority_ = 0;
is_candidate_ = false;
free_cursor_array_cache_();
free_broadcast_info_mgr_();
@ -6386,7 +6391,9 @@ int64_t ObPartitionLogService::get_zone_priority() const
void ObPartitionLogService::set_zone_priority(const uint64_t zone_priority)
{
ATOMIC_STORE(&zone_priority_, zone_priority);
const uint64_t final_zone_priority =
ObReplicaTypeCheck::is_log_replica(mm_.get_replica_type()) ? UINT64_MAX : zone_priority;
ATOMIC_STORE(&zone_priority_, final_zone_priority);
}
int ObPartitionLogService::set_region(const common::ObRegion& region)
@ -6672,6 +6679,9 @@ int ObPartitionLogService::set_replica_type(const enum ObReplicaType replica_typ
free_broadcast_info_mgr_();
}
} else {
if (ObReplicaTypeCheck::is_log_replica(replica_type)) {
ATOMIC_STORE(&zone_priority_, UINT64_MAX);
}
// change success
if (REPLICA_TYPE_LOGONLY == mm_.get_replica_type()) {
sw_.destroy_aggre_buffer();

View File

@ -364,6 +364,8 @@ int ObLocalityTableOperator::load_region(const ObAddr& addr, const bool& is_self
region_priority = UINT64_MAX;
if (ObPrimaryZoneUtil::no_need_to_check_primary_zone(tenant_schema->get_primary_zone()) ||
!is_self_cluster) {
// fix bug: https://work.aone.alibaba-inc.com/issue/34933159
region_priority = 0;
// FIXME: do not process the semantics of leader balance of primary_zone
LOG_INFO("tenant_schema primary_zone is NULL, or no need calc region priority",
K(tenant_id),