提交 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 ...@@ -229,7 +229,10 @@ int ObLogCascadingMgr::set_parent_(const common::ObAddr& new_parent_addr, const
} else { } else {
state_mgr_->reset_need_rebuild(); state_mgr_->reset_need_rebuild();
state_mgr_->reset_fetch_state(); state_mgr_->reset_fetch_state();
if (parent_.is_valid()) {
// update prev_parent by valid old parent
prev_parent_ = parent_; prev_parent_ = parent_;
}
parent_ = new_parent; parent_ = new_parent;
if (partition_reach_time_interval(60 * 1000 * 1000, update_parent_warn_time_)) { if (partition_reach_time_interval(60 * 1000 * 1000, update_parent_warn_time_)) {
CLOG_LOG(INFO, CLOG_LOG(INFO,
......
...@@ -98,6 +98,10 @@ public: ...@@ -98,6 +98,10 @@ public:
{ {
return parent_; return parent_;
} }
share::ObCascadMember get_prev_parent() const
{
return prev_parent_;
}
common::ObAddr get_parent_addr() const common::ObAddr get_parent_addr() const
{ {
return parent_.get_server(); return parent_.get_server();
......
...@@ -1319,7 +1319,7 @@ int ObPartitionLogService::get_leader(common::ObAddr& leader) const ...@@ -1319,7 +1319,7 @@ int ObPartitionLogService::get_leader(common::ObAddr& leader) const
return ret; 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; int ret = OB_SUCCESS;
RLockGuard guard(lock_); RLockGuard guard(lock_);
...@@ -1330,22 +1330,34 @@ int ObPartitionLogService::get_clog_parent(common::ObAddr& parent, int64_t& clus ...@@ -1330,22 +1330,34 @@ int ObPartitionLogService::get_clog_parent(common::ObAddr& parent, int64_t& clus
parent = restore_mgr_.get_restore_leader(); parent = restore_mgr_.get_restore_leader();
cluster_id = state_mgr_.get_self_cluster_id(); cluster_id = state_mgr_.get_self_cluster_id();
} else { } 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 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()) { if (parent_member.is_valid()) {
parent = parent_member.get_server(); parent = parent_member.get_server();
cluster_id = parent_member.get_cluster_id(); 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 // returns corresponding leader when parent is invalid
share::ObCascadMember cascad_leader;
(void)state_mgr_.get_cascad_leader(cascad_leader);
parent = cascad_leader.get_server(); parent = cascad_leader.get_server();
cluster_id = cascad_leader.get_cluster_id(); 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()) { if (!parent.is_valid()) {
ret = OB_NEED_RETRY; 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; return ret;
} }
......
...@@ -249,7 +249,7 @@ public: ...@@ -249,7 +249,7 @@ public:
virtual common::ObPartitionKey get_partition_key() const = 0; 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_saved_base_storage_info(common::ObBaseStorageInfo& base_storage_info) const = 0;
virtual int get_leader(common::ObAddr& leader) 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_leader(const common::ObAddr& leader, common::ObTsWindows& changing_leader_windows) = 0;
virtual int change_restore_leader(const common::ObAddr& leader) = 0; virtual int change_restore_leader(const common::ObAddr& leader) = 0;
virtual int check_and_set_restore_progress() = 0; virtual int check_and_set_restore_progress() = 0;
...@@ -523,7 +523,7 @@ public: ...@@ -523,7 +523,7 @@ public:
virtual common::ObPartitionKey get_partition_key() const override; 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_saved_base_storage_info(common::ObBaseStorageInfo& base_storage_info) const override;
virtual int get_leader(common::ObAddr& addr) 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_leader(const common::ObAddr& leader, common::ObTsWindows& changing_leader_windows) override;
virtual int change_restore_leader(const common::ObAddr& leader) override; virtual int change_restore_leader(const common::ObAddr& leader) override;
virtual int check_and_set_restore_progress() override; virtual int check_and_set_restore_progress() override;
......
...@@ -13261,7 +13261,7 @@ int ObMigrateGetLeaderUtil::get_clog_parent(clog::ObIPartitionLogService &log_se ...@@ -13261,7 +13261,7 @@ int ObMigrateGetLeaderUtil::get_clog_parent(clog::ObIPartitionLogService &log_se
ObAddr parent_src; ObAddr parent_src;
int64_t cluster_id = -1; 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)); STORAGE_LOG(WARN, "get parent addr failed", K(ret));
} else { } else {
parent_info.src_addr_ = parent_src; parent_info.src_addr_ = parent_src;
......
...@@ -13386,7 +13386,7 @@ int ObPartitionService::get_primary_cluster_migrate_src(const common::ObPartitio ...@@ -13386,7 +13386,7 @@ int ObPartitionService::get_primary_cluster_migrate_src(const common::ObPartitio
ret = OB_ERR_UNEXPECTED; ret = OB_ERR_UNEXPECTED;
LOG_WARN("log service should not be NULL", K(ret), K(pkey)); 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 (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) { if (OB_NEED_RETRY == ret) {
ret = OB_SUCCESS; ret = OB_SUCCESS;
} else { } else {
...@@ -13463,7 +13463,7 @@ int ObPartitionService::get_standby_cluster_migrate_src(const common::ObPartitio ...@@ -13463,7 +13463,7 @@ int ObPartitionService::get_standby_cluster_migrate_src(const common::ObPartitio
ret = OB_ERR_UNEXPECTED; ret = OB_ERR_UNEXPECTED;
LOG_WARN("log service should not be NULL", K(ret), K(pkey)); LOG_WARN("log service should not be NULL", K(ret), K(pkey));
} else if (ObRole::STANDBY_LEADER == role) { } 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) { if (OB_NEED_RETRY == ret) {
ret = OB_SUCCESS; ret = OB_SUCCESS;
} else { } else {
...@@ -13472,7 +13472,7 @@ int ObPartitionService::get_standby_cluster_migrate_src(const common::ObPartitio ...@@ -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))) { } 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)); LOG_WARN("failed to add migrate src", K(ret), K(role), K(src_info), K(pkey));
} else { } else {
LOG_INFO("get_clog_parent", K(src_info)); LOG_INFO("get_clog_parent_for_migration", K(src_info));
src_info.reset(); src_info.reset();
} }
} }
......
...@@ -245,7 +245,7 @@ int ObRebuildReplicaTaskProducer::build_local_replica_info() ...@@ -245,7 +245,7 @@ int ObRebuildReplicaTaskProducer::build_local_replica_info()
// skip // skip
} else if (OB_FAIL(partition->get_pg_storage().get_pg_meta(pg_meta))) { } 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())); 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)); STORAGE_LOG(WARN, "get parent addr failed", K(ret));
} else { } else {
// now only consider memstore pecent 0 is D replica, and read-only replica in ofs mode. // now only consider memstore pecent 0 is D replica, and read-only replica in ofs mode.
......
...@@ -528,7 +528,7 @@ public: ...@@ -528,7 +528,7 @@ public:
UNUSED(leader); UNUSED(leader);
return common::OB_SUCCESS; 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(parent);
UNUSED(cluster_id); UNUSED(cluster_id);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册