提交 85c634e1 编写于 作者: H hf0 提交者: LINGuanRen

optimize get_clog_parent interface.

上级 0121cc45
......@@ -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);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册