optimize get_clog_parent interface.
This commit is contained in:
parent
0121cc45a8
commit
85c634e194
@ -229,7 +229,10 @@ int ObLogCascadingMgr::set_parent_(const common::ObAddr& new_parent_addr, const
|
||||
} else {
|
||||
state_mgr_->reset_need_rebuild();
|
||||
state_mgr_->reset_fetch_state();
|
||||
prev_parent_ = parent_;
|
||||
if (parent_.is_valid()) {
|
||||
// update prev_parent by valid old parent
|
||||
prev_parent_ = parent_;
|
||||
}
|
||||
parent_ = new_parent;
|
||||
if (partition_reach_time_interval(60 * 1000 * 1000, update_parent_warn_time_)) {
|
||||
CLOG_LOG(INFO,
|
||||
|
@ -98,6 +98,10 @@ public:
|
||||
{
|
||||
return parent_;
|
||||
}
|
||||
share::ObCascadMember get_prev_parent() const
|
||||
{
|
||||
return prev_parent_;
|
||||
}
|
||||
common::ObAddr get_parent_addr() const
|
||||
{
|
||||
return parent_.get_server();
|
||||
|
@ -1319,7 +1319,7 @@ int ObPartitionLogService::get_leader(common::ObAddr& leader) const
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ObPartitionLogService::get_clog_parent(common::ObAddr& parent, int64_t& cluster_id) const
|
||||
int ObPartitionLogService::get_clog_parent_for_migration(common::ObAddr &parent, int64_t &cluster_id) const
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
RLockGuard guard(lock_);
|
||||
@ -1330,22 +1330,34 @@ int ObPartitionLogService::get_clog_parent(common::ObAddr& parent, int64_t& clus
|
||||
parent = restore_mgr_.get_restore_leader();
|
||||
cluster_id = state_mgr_.get_self_cluster_id();
|
||||
} else {
|
||||
const bool is_paxos_replica = ObReplicaTypeCheck::is_paxos_replica(mm_.get_replica_type());
|
||||
const share::ObCascadMember parent_member = cascading_mgr_.get_parent();
|
||||
const share::ObCascadMember prev_parent_member = cascading_mgr_.get_prev_parent();
|
||||
share::ObCascadMember cascad_leader;
|
||||
(void)state_mgr_.get_cascad_leader(cascad_leader);
|
||||
if (parent_member.is_valid()) {
|
||||
parent = parent_member.get_server();
|
||||
cluster_id = parent_member.get_cluster_id();
|
||||
} else {
|
||||
} else if (!is_paxos_replica && prev_parent_member.is_valid()) {
|
||||
// prev_parent is preferred choice for non-paxos replica
|
||||
parent = prev_parent_member.get_server();
|
||||
cluster_id = prev_parent_member.get_cluster_id();
|
||||
} else if (cascad_leader.is_valid()) {
|
||||
// returns corresponding leader when parent is invalid
|
||||
share::ObCascadMember cascad_leader;
|
||||
(void)state_mgr_.get_cascad_leader(cascad_leader);
|
||||
parent = cascad_leader.get_server();
|
||||
cluster_id = cascad_leader.get_cluster_id();
|
||||
} else if (prev_parent_member.is_valid()) {
|
||||
// at last return prev_parent
|
||||
parent = prev_parent_member.get_server();
|
||||
cluster_id = prev_parent_member.get_cluster_id();
|
||||
} else {
|
||||
// it does not have valid parent
|
||||
}
|
||||
}
|
||||
if (!parent.is_valid()) {
|
||||
ret = OB_NEED_RETRY;
|
||||
}
|
||||
CLOG_LOG(INFO, "get clog parent", K(ret), K_(partition_key), K(parent));
|
||||
CLOG_LOG(INFO, "get clog parent", K(ret), K_(partition_key), K(parent), K(cluster_id));
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -249,7 +249,7 @@ public:
|
||||
virtual common::ObPartitionKey get_partition_key() const = 0;
|
||||
virtual int get_saved_base_storage_info(common::ObBaseStorageInfo& base_storage_info) const = 0;
|
||||
virtual int get_leader(common::ObAddr& leader) const = 0;
|
||||
virtual int get_clog_parent(common::ObAddr& parent, int64_t& cluster_id) const = 0;
|
||||
virtual int get_clog_parent_for_migration(common::ObAddr &parent, int64_t &cluster_id) const = 0;
|
||||
virtual int change_leader(const common::ObAddr& leader, common::ObTsWindows& changing_leader_windows) = 0;
|
||||
virtual int change_restore_leader(const common::ObAddr& leader) = 0;
|
||||
virtual int check_and_set_restore_progress() = 0;
|
||||
@ -523,7 +523,7 @@ public:
|
||||
virtual common::ObPartitionKey get_partition_key() const override;
|
||||
virtual int get_saved_base_storage_info(common::ObBaseStorageInfo& base_storage_info) const override;
|
||||
virtual int get_leader(common::ObAddr& addr) const override;
|
||||
virtual int get_clog_parent(common::ObAddr& parent, int64_t& cluster_id) const override;
|
||||
virtual int get_clog_parent_for_migration(common::ObAddr &parent, int64_t &cluster_id) const;
|
||||
virtual int change_leader(const common::ObAddr& leader, common::ObTsWindows& changing_leader_windows) override;
|
||||
virtual int change_restore_leader(const common::ObAddr& leader) override;
|
||||
virtual int check_and_set_restore_progress() override;
|
||||
|
@ -13261,7 +13261,7 @@ int ObMigrateGetLeaderUtil::get_clog_parent(clog::ObIPartitionLogService &log_se
|
||||
ObAddr parent_src;
|
||||
int64_t cluster_id = -1;
|
||||
|
||||
if (OB_FAIL(log_service.get_clog_parent(parent_src, cluster_id))) {
|
||||
if (OB_FAIL(log_service.get_clog_parent_for_migration(parent_src, cluster_id))) {
|
||||
STORAGE_LOG(WARN, "get parent addr failed", K(ret));
|
||||
} else {
|
||||
parent_info.src_addr_ = parent_src;
|
||||
|
@ -13386,7 +13386,7 @@ int ObPartitionService::get_primary_cluster_migrate_src(const common::ObPartitio
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("log service should not be NULL", K(ret), K(pkey));
|
||||
} else if (FALSE_IT(is_restore = partition->get_pg_storage().is_restore())) {
|
||||
} else if (OB_FAIL(log_service->get_clog_parent(src_info.src_addr_, src_info.cluster_id_))) {
|
||||
} else if (OB_FAIL(log_service->get_clog_parent_for_migration(src_info.src_addr_, src_info.cluster_id_))) {
|
||||
if (OB_NEED_RETRY == ret) {
|
||||
ret = OB_SUCCESS;
|
||||
} else {
|
||||
@ -13463,7 +13463,7 @@ int ObPartitionService::get_standby_cluster_migrate_src(const common::ObPartitio
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("log service should not be NULL", K(ret), K(pkey));
|
||||
} else if (ObRole::STANDBY_LEADER == role) {
|
||||
if (OB_FAIL(log_service->get_clog_parent(src_info.src_addr_, src_info.cluster_id_))) {
|
||||
if (OB_FAIL(log_service->get_clog_parent_for_migration(src_info.src_addr_, src_info.cluster_id_))) {
|
||||
if (OB_NEED_RETRY == ret) {
|
||||
ret = OB_SUCCESS;
|
||||
} else {
|
||||
@ -13472,7 +13472,7 @@ int ObPartitionService::get_standby_cluster_migrate_src(const common::ObPartitio
|
||||
} else if (OB_FAIL(add_migrate_src(src_info, src_set, src_array))) {
|
||||
LOG_WARN("failed to add migrate src", K(ret), K(role), K(src_info), K(pkey));
|
||||
} else {
|
||||
LOG_INFO("get_clog_parent", K(src_info));
|
||||
LOG_INFO("get_clog_parent_for_migration", K(src_info));
|
||||
src_info.reset();
|
||||
}
|
||||
}
|
||||
|
@ -245,7 +245,7 @@ int ObRebuildReplicaTaskProducer::build_local_replica_info()
|
||||
// skip
|
||||
} else if (OB_FAIL(partition->get_pg_storage().get_pg_meta(pg_meta))) {
|
||||
STORAGE_LOG(WARN, "failed to get pg meta", K(ret), K(partition->get_partition_key()));
|
||||
} else if (OB_FAIL(partition->get_log_service()->get_clog_parent(parent_addr, parent_cluster_id))) {
|
||||
} else if (OB_FAIL(partition->get_log_service()->get_clog_parent_for_migration(parent_addr, parent_cluster_id))) {
|
||||
STORAGE_LOG(WARN, "get parent addr failed", K(ret));
|
||||
} else {
|
||||
// now only consider memstore pecent 0 is D replica, and read-only replica in ofs mode.
|
||||
|
@ -528,7 +528,7 @@ public:
|
||||
UNUSED(leader);
|
||||
return common::OB_SUCCESS;
|
||||
}
|
||||
virtual int get_clog_parent(common::ObAddr& parent, int64_t& cluster_id) const
|
||||
virtual int get_clog_parent_for_migration(common::ObAddr &parent, int64_t &cluster_id) const
|
||||
{
|
||||
UNUSED(parent);
|
||||
UNUSED(cluster_id);
|
||||
|
Loading…
x
Reference in New Issue
Block a user