all_server_list improvement

This commit is contained in:
linqiucen
2023-05-24 06:41:30 +00:00
committed by ob-robot
parent 2724fef69d
commit 9c1c501715
14 changed files with 137 additions and 94 deletions

View File

@ -648,6 +648,7 @@ ObRootService::ObRootService()
snapshot_manager_(), snapshot_manager_(),
core_meta_table_version_(0), core_meta_table_version_(0),
update_rs_list_timer_task_(*this), update_rs_list_timer_task_(*this),
update_all_server_config_task_(*this),
baseline_schema_version_(0), baseline_schema_version_(0),
backup_service_(), backup_service_(),
backup_task_scheduler_(), backup_task_scheduler_(),
@ -1606,6 +1607,26 @@ int ObRootService::schedule_update_rs_list_task()
} }
return ret; return ret;
} }
ERRSIM_POINT_DEF(ALL_SERVER_SCHEDULE_ERROR);
int ObRootService::schedule_update_all_server_config_task()
{
int ret = OB_SUCCESS;
const bool did_repeat = true;
if (OB_UNLIKELY(!inited_)) {
ret = OB_NOT_INIT;
LOG_WARN("not init", KR(ret), K(inited_));
} else if (task_queue_.exist_timer_task(update_all_server_config_task_)) {
LOG_WARN("already have one update rs list timer task , ignore this");
} else if (OB_FAIL(task_queue_.add_timer_task(
update_all_server_config_task_,
ALL_SERVER_SCHEDULE_ERROR ? (ObUpdateAllServerConfigTask::RETRY_INTERVAL / 2) : ObUpdateAllServerConfigTask::RETRY_INTERVAL,
did_repeat))) {
LOG_WARN("fail to add timer task", KR(ret));
} else {
LOG_INFO("add update server config task success");
}
return ret;
}
int ObRootService::schedule_load_ddl_task() int ObRootService::schedule_load_ddl_task()
{ {
@ -5226,6 +5247,14 @@ int ObRootService::start_timer_tasks()
} }
} }
if (OB_SUCC(ret) && !task_queue_.exist_timer_task(update_all_server_config_task_)) {
if (OB_FAIL(schedule_update_all_server_config_task())) {
LOG_WARN("fail to schedule update_all_server_config_task", KR(ret));
} else {
LOG_INFO("add update_all_server_config_task");
}
}
if (OB_SUCC(ret)) { if (OB_SUCC(ret)) {
if (OB_FAIL(schedule_inspector_task())) { if (OB_FAIL(schedule_inspector_task())) {
LOG_WARN("start inspector fail", K(ret)); LOG_WARN("start inspector fail", K(ret));
@ -5270,6 +5299,7 @@ int ObRootService::stop_timer_tasks()
task_queue_.cancel_timer_task(event_table_clear_task_); task_queue_.cancel_timer_task(event_table_clear_task_);
task_queue_.cancel_timer_task(self_check_task_); task_queue_.cancel_timer_task(self_check_task_);
task_queue_.cancel_timer_task(update_rs_list_timer_task_); task_queue_.cancel_timer_task(update_rs_list_timer_task_);
task_queue_.cancel_timer_task(update_all_server_config_task_);
inspect_task_queue_.cancel_timer_task(inspector_task_); inspect_task_queue_.cancel_timer_task(inspector_task_);
inspect_task_queue_.cancel_timer_task(purge_recyclebin_task_); inspect_task_queue_.cancel_timer_task(purge_recyclebin_task_);
} }
@ -8598,17 +8628,33 @@ int ObRootService::update_all_server_config()
int ret = OB_SUCCESS; int ret = OB_SUCCESS;
ObZone empty_zone; ObZone empty_zone;
ObArray<ObAddr> server_list; ObArray<ObAddr> server_list;
ObArray<ObAddr> config_all_server_list;
ObArray<ObAddr> empty_excluded_server_list;
bool need_update = true;
HEAP_VAR(ObAdminSetConfigItem, all_server_config) { HEAP_VAR(ObAdminSetConfigItem, all_server_config) {
auto &value = all_server_config.value_; auto &value = all_server_config.value_;
int64_t pos = 0; int64_t pos = 0;
if (!inited_) { if (!inited_) {
ret = OB_NOT_INIT; ret = OB_NOT_INIT;
LOG_WARN("not init", K(ret)); LOG_WARN("not init", K(ret));
} else if (OB_UNLIKELY(!SVR_TRACER.has_build())) {
need_update = false;
} else if (OB_FAIL(SVR_TRACER.get_servers_of_zone(empty_zone, server_list))) { } else if (OB_FAIL(SVR_TRACER.get_servers_of_zone(empty_zone, server_list))) {
LOG_WARN("fail to get server", K(ret)); LOG_WARN("fail to get server", K(ret));
} else if (OB_UNLIKELY(0 == server_list.size())) {
need_update = false;
LOG_WARN("no servers in all_server_tracer");
} else if (OB_FAIL(all_server_config.name_.assign(config_->all_server_list.name()))) { } else if (OB_FAIL(all_server_config.name_.assign(config_->all_server_list.name()))) {
LOG_WARN("fail to assign name", K(ret)); LOG_WARN("fail to assign name", K(ret));
} else if (OB_FAIL(ObShareUtil::parse_all_server_list(empty_excluded_server_list, config_all_server_list))) {
LOG_WARN("fail to parse all_server_list from GCONF", KR(ret));
} else if (ObRootUtils::is_subset(server_list, config_all_server_list)
&& ObRootUtils::is_subset(config_all_server_list, server_list)) {
need_update = false;
LOG_TRACE("server_list is the same as config_all_server_list, no need to update GCONF.all_server_list",
K(server_list), K(config_all_server_list));
} else { } else {
LOG_INFO("GCONF.all_server_list should be updated", K(config_all_server_list), K(server_list));
char ip_port_buf[MAX_IP_PORT_LENGTH]; char ip_port_buf[MAX_IP_PORT_LENGTH];
for (int64_t i = 0; i < server_list.count() - 1; i++) { for (int64_t i = 0; i < server_list.count() - 1; i++) {
if (OB_FAIL(server_list.at(i).ip_port_to_string(ip_port_buf, MAX_IP_PORT_LENGTH))) { if (OB_FAIL(server_list.at(i).ip_port_to_string(ip_port_buf, MAX_IP_PORT_LENGTH))) {
@ -8630,7 +8676,7 @@ int ObRootService::update_all_server_config()
if (OB_SIZE_OVERFLOW == ret) { if (OB_SIZE_OVERFLOW == ret) {
LOG_ERROR("can't print server addr to buffer, size overflow", K(ret), K(server_list)); LOG_ERROR("can't print server addr to buffer, size overflow", K(ret), K(server_list));
} }
if (OB_SUCC(ret)) { if (need_update && OB_SUCC(ret)) {
ObAdminSetConfigArg arg; ObAdminSetConfigArg arg;
arg.is_inner_ = true; arg.is_inner_ = true;
if (OB_FAIL(arg.items_.push_back(all_server_config))) { if (OB_FAIL(arg.items_.push_back(all_server_config))) {
@ -8644,7 +8690,6 @@ int ObRootService::update_all_server_config()
} }
return ret; return ret;
} }
///////////////////////// /////////////////////////
ObRootService::ObReportCoreTableReplicaTask::ObReportCoreTableReplicaTask(ObRootService &root_service) ObRootService::ObReportCoreTableReplicaTask::ObReportCoreTableReplicaTask(ObRootService &root_service)
: ObAsyncTimerTask(root_service.task_queue_), : ObAsyncTimerTask(root_service.task_queue_),

View File

@ -290,6 +290,7 @@ public:
class ObUpdateAllServerConfigTask : public common::ObAsyncTimerTask class ObUpdateAllServerConfigTask : public common::ObAsyncTimerTask
{ {
public: public:
const static int64_t RETRY_INTERVAL = 600 * 1000L * 1000L; // 10min
explicit ObUpdateAllServerConfigTask(ObRootService &root_service); explicit ObUpdateAllServerConfigTask(ObRootService &root_service);
virtual ~ObUpdateAllServerConfigTask() {} virtual ~ObUpdateAllServerConfigTask() {}
public: public:
@ -743,6 +744,7 @@ public:
// @see ObInspector // @see ObInspector
int schedule_inspector_task(); int schedule_inspector_task();
int schedule_update_rs_list_task(); int schedule_update_rs_list_task();
int schedule_update_all_server_config_task();
//update statistic cache //update statistic cache
int update_stat_cache(const obrpc::ObUpdateStatCacheArg &arg); int update_stat_cache(const obrpc::ObUpdateStatCacheArg &arg);
@ -949,6 +951,7 @@ private:
ObSnapshotInfoManager snapshot_manager_; ObSnapshotInfoManager snapshot_manager_;
int64_t core_meta_table_version_; int64_t core_meta_table_version_;
ObUpdateRsListTimerTask update_rs_list_timer_task_; ObUpdateRsListTimerTask update_rs_list_timer_task_;
ObUpdateAllServerConfigTask update_all_server_config_task_;
int64_t baseline_schema_version_; int64_t baseline_schema_version_;
// backup // backup

View File

@ -1962,21 +1962,6 @@ bool ObRootUtils::has_intersection(const common::ObIArray<T> &this_array,
return bret; return bret;
} }
template<class T>
bool ObRootUtils::is_subset(const common::ObIArray<T> &superset_array,
const common::ObIArray<T> &array)
{
bool bret = true;
for (int64_t i = 0; i < array.count() && bret; i++) {
if (has_exist_in_array(superset_array, array.at(i))) {
//nothing todo
} else {
bret = false;
}
}
return bret;
}
//iter the tenant, table's primary_zone is covered by zone_list //iter the tenant, table's primary_zone is covered by zone_list
int ObRootUtils::check_primary_region_in_zonelist(ObMultiVersionSchemaService *schema_service, int ObRootUtils::check_primary_region_in_zonelist(ObMultiVersionSchemaService *schema_service,
ObDDLService *ddl_service, ObDDLService *ddl_service,

View File

@ -676,6 +676,21 @@ public:
}; };
template<class T>
bool ObRootUtils::is_subset(const common::ObIArray<T> &superset_array,
const common::ObIArray<T> &array)
{
bool bret = true;
for (int64_t i = 0; i < array.count() && bret; i++) {
if (has_exist_in_array(superset_array, array.at(i))) {
//nothing todo
} else {
bret = false;
}
}
return bret;
}
class ObClusterInfoGetter class ObClusterInfoGetter
{ {
public: public:

View File

@ -18,6 +18,7 @@
#include "share/ob_service_epoch_proxy.h" #include "share/ob_service_epoch_proxy.h"
#include "share/ob_max_id_fetcher.h" #include "share/ob_max_id_fetcher.h"
#include "lib/mysqlclient/ob_mysql_transaction.h" // ObMySQLTransaction #include "lib/mysqlclient/ob_mysql_transaction.h" // ObMySQLTransaction
#include "lib/utility/ob_tracepoint.h" // ERRSIM
#include "rootserver/ob_root_service.h" // callback #include "rootserver/ob_root_service.h" // callback
#include "share/ob_all_server_tracer.h" #include "share/ob_all_server_tracer.h"
#include "rootserver/ob_server_manager.h" #include "rootserver/ob_server_manager.h"
@ -134,10 +135,6 @@ int ObServerZoneOpService::add_servers(const ObIArray<ObAddr> &servers, const Ob
} else {} } else {}
} }
} }
int tmp_ret = OB_SUCCESS;
if (OB_TMP_FAIL(SVR_TRACER.refresh())) {
LOG_WARN("fail to refresh server tracer", KR(ret), KR(tmp_ret));
}
return ret; return ret;
} }
int ObServerZoneOpService::delete_servers( int ObServerZoneOpService::delete_servers(
@ -165,10 +162,6 @@ int ObServerZoneOpService::delete_servers(
} }
} }
} }
int tmp_ret = OB_SUCCESS;
if (OB_TMP_FAIL(SVR_TRACER.refresh())) {
LOG_WARN("fail to refresh server tracer", KR(ret), KR(tmp_ret));
}
return ret; return ret;
} }
int ObServerZoneOpService::cancel_delete_servers( int ObServerZoneOpService::cancel_delete_servers(
@ -207,10 +200,6 @@ int ObServerZoneOpService::cancel_delete_servers(
(void) end_trans_and_on_server_change_(ret, trans, "cancel_delete_server", server, server_info_in_table.get_zone(), now); (void) end_trans_and_on_server_change_(ret, trans, "cancel_delete_server", server, server_info_in_table.get_zone(), now);
} }
} }
int tmp_ret = OB_SUCCESS;
if (OB_TMP_FAIL(SVR_TRACER.refresh())) {
LOG_WARN("fail to refresh server tracer", KR(ret), KR(tmp_ret));
}
return ret; return ret;
} }
int ObServerZoneOpService::finish_delete_server( int ObServerZoneOpService::finish_delete_server(
@ -240,10 +229,6 @@ int ObServerZoneOpService::finish_delete_server(
LOG_WARN("fail to remove this server from __all_server table", KR(ret), K(server)); LOG_WARN("fail to remove this server from __all_server table", KR(ret), K(server));
} }
(void) end_trans_and_on_server_change_(ret, trans, "finish_delete_server", server, server_info_in_table.get_zone(), now); (void) end_trans_and_on_server_change_(ret, trans, "finish_delete_server", server, server_info_in_table.get_zone(), now);
int tmp_ret = OB_SUCCESS;
if (OB_TMP_FAIL(SVR_TRACER.refresh())) {
LOG_WARN("fail to refresh server tracer", KR(ret), KR(tmp_ret));
}
return ret; return ret;
} }
int ObServerZoneOpService::stop_servers( int ObServerZoneOpService::stop_servers(
@ -265,10 +250,6 @@ int ObServerZoneOpService::stop_servers(
} }
} }
} }
int tmp_ret = OB_SUCCESS;
if (OB_TMP_FAIL(SVR_TRACER.refresh())) {
LOG_WARN("fail to refresh server tracer", KR(ret), KR(tmp_ret));
}
return ret; return ret;
} }
int ObServerZoneOpService::start_servers( int ObServerZoneOpService::start_servers(
@ -290,10 +271,6 @@ int ObServerZoneOpService::start_servers(
} }
} }
} }
int tmp_ret = OB_SUCCESS;
if (OB_TMP_FAIL(SVR_TRACER.refresh())) {
LOG_WARN("fail to refresh server tracer", KR(ret), KR(tmp_ret));
}
return ret; return ret;
} }
int ObServerZoneOpService::stop_server_precheck( int ObServerZoneOpService::stop_server_precheck(
@ -739,6 +716,7 @@ int ObServerZoneOpService::check_zone_and_server_(
} }
return ret; return ret;
} }
ERRSIM_POINT_DEF(ALL_SERVER_LIST_ERROR);
void ObServerZoneOpService::end_trans_and_on_server_change_( void ObServerZoneOpService::end_trans_and_on_server_change_(
int &ret, int &ret,
common::ObMySQLTransaction &trans, common::ObMySQLTransaction &trans,
@ -758,10 +736,15 @@ void ObServerZoneOpService::end_trans_and_on_server_change_(
ret = OB_SUCC(ret) ? tmp_ret : ret; ret = OB_SUCC(ret) ? tmp_ret : ret;
} }
} }
if (OB_TMP_FAIL(SVR_TRACER.refresh())) {
LOG_WARN("fail to refresh server tracer", KR(ret), KR(tmp_ret));
}
bool no_on_server_change = ALL_SERVER_LIST_ERROR ? true : false;
if (OB_ISNULL(server_change_callback_)) { if (OB_ISNULL(server_change_callback_)) {
tmp_ret = OB_ERR_UNEXPECTED; tmp_ret = OB_ERR_UNEXPECTED;
LOG_WARN("server_change_callback_ is null", KR(ret), KR(tmp_ret), KP(server_change_callback_)); LOG_WARN("server_change_callback_ is null", KR(ret), KR(tmp_ret), KP(server_change_callback_));
ret = OB_SUCC(ret) ? tmp_ret : ret; ret = OB_SUCC(ret) ? tmp_ret : ret;
} else if (no_on_server_change) {
} else if (OB_TMP_FAIL(server_change_callback_->on_server_change())) { } else if (OB_TMP_FAIL(server_change_callback_->on_server_change())) {
LOG_WARN("fail to callback on server change", KR(ret), KR(tmp_ret)); LOG_WARN("fail to callback on server change", KR(ret), KR(tmp_ret));
} }

View File

@ -701,6 +701,17 @@ int ObConfigStringItem::copy(char *buf, const int64_t buf_len)
return ret; return ret;
} }
int ObConfigStringItem::deep_copy_value_string(ObIAllocator &allocator, ObString &dst)
{
int ret = OB_SUCCESS;
ObLatchRGuard rd_guard(const_cast<ObLatch&>(lock_), ObLatchIds::CONFIG_LOCK);
ObString src = ObString::make_string(value_str_);
if (OB_FAIL(ob_write_string(allocator, src, dst))) {
OB_LOG(WARN, "fail to deep copy", KR(ret), K(src));
}
return ret;
}
ObConfigLogArchiveOptionsItem::ObConfigLogArchiveOptionsItem(ObConfigContainer *container, ObConfigLogArchiveOptionsItem::ObConfigLogArchiveOptionsItem(ObConfigContainer *container,
Scope::ScopeInfo scope_info, Scope::ScopeInfo scope_info,
const char *name, const char *name,

View File

@ -719,6 +719,7 @@ public:
return ObString::make_string(value_str_); return ObString::make_string(value_str_);
} }
int copy(char *buf, const int64_t buf_len); // '\0' will be added int copy(char *buf, const int64_t buf_len); // '\0' will be added
int deep_copy_value_string(ObIAllocator &allocator, ObString &dst);
virtual ObConfigItemType get_config_item_type() const { virtual ObConfigItemType get_config_item_type() const {
return ObConfigItemType::OB_CONF_ITEM_TYPE_STRING; return ObConfigItemType::OB_CONF_ITEM_TYPE_STRING;
} }

View File

@ -809,8 +809,8 @@ int ObLSLocationService::construct_rpc_dests_(
LOG_WARN("fail to check inner stat", KR(ret)); LOG_WARN("fail to check inner stat", KR(ret));
} else if (OB_FAIL(rs_mgr_->construct_initial_server_list(check_ls_service, rs_list))) { } else if (OB_FAIL(rs_mgr_->construct_initial_server_list(check_ls_service, rs_list))) {
LOG_WARN("fail to get rs list", KR(ret)); LOG_WARN("fail to get rs list", KR(ret));
} else if (OB_FAIL(rs_mgr_->construct_all_server_list(rs_list, all_server_list))) { } else if (OB_FAIL(ObShareUtil::parse_all_server_list(rs_list, all_server_list))) {
LOG_WARN("fail to get all server list", KR(ret)); LOG_WARN("fail to get all server list", KR(ret), K(rs_list));
} else if (OB_FAIL(dests.assign(rs_list))) { } else if (OB_FAIL(dests.assign(rs_list))) {
LOG_WARN("fail to assign rs_list", KR(ret)); LOG_WARN("fail to assign rs_list", KR(ret));
} else if (OB_FAIL(append(dests, all_server_list))) { } else if (OB_FAIL(append(dests, all_server_list))) {

View File

@ -144,8 +144,8 @@ int ObRpcLSTable::get_ls_info_(ObLSInfo &ls_info)
// case 4: try use all_server_list from local configure // case 4: try use all_server_list from local configure
if (need_retry) { // overwrite ret if (need_retry) { // overwrite ret
ObArray<ObAddr> server_list; ObArray<ObAddr> server_list;
if (OB_FAIL(rs_mgr_->construct_all_server_list(rs_list, server_list))) { if (OB_FAIL(ObShareUtil::parse_all_server_list(rs_list, server_list))) {
LOG_WARN("fail to construct all server list", KR(ret)); LOG_WARN("fail to construct all server list", KR(ret), K(rs_list));
} else if (server_list.empty()) { } else if (server_list.empty()) {
// server_list is empty, do nothing // server_list is empty, do nothing
LOG_INFO("server_list is empty, do nothing", KR(ret), K(server_list)); LOG_INFO("server_list is empty, do nothing", KR(ret), K(server_list));

View File

@ -573,7 +573,7 @@ int ObServerTraceMap::refresh()
LOG_WARN("fail to push back", K(server_info_i), KR(ret)); LOG_WARN("fail to push back", K(server_info_i), KR(ret));
} }
} }
if (OB_SUCC(ret)) { if (OB_SUCC(ret) && !has_build_) {
has_build_ = true; has_build_ = true;
} }
} }

View File

@ -450,48 +450,6 @@ int ObRsMgr::construct_initial_server_list(
return ret; return ret;
} }
// case 4: try use all_server_list from local configure
int ObRsMgr::construct_all_server_list(
const ObIArray<ObAddr> &rs_list,
ObIArray<ObAddr> &server_list)
{
int ret = OB_SUCCESS;
server_list.reset();
if (OB_FAIL(check_inner_stat())) {
LOG_WARN("fail to check inner stat", KR(ret));
} else {
bool split_end = false;
ObString sub_string;
ObString trimed_string;
ObString all_server_list(strlen(static_cast<common::ObServerConfig *>(config_)->all_server_list.str()),
static_cast<common::ObServerConfig *>(config_)->all_server_list.str());
char buf[OB_IP_PORT_STR_BUFF];
ObAddr addr;
while (!split_end && OB_SUCCESS == ret) {
sub_string = all_server_list.split_on(',');
if (sub_string.empty() && NULL == sub_string.ptr()) {
split_end = true;
sub_string = all_server_list;
}
trimed_string = sub_string.trim();
if (trimed_string.empty()) {
//nothing todo
} else if (0 > snprintf(buf, OB_IP_PORT_STR_BUFF, "%.*s", trimed_string.length(), trimed_string.ptr())) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("fail to snprintf", KR(ret), K(trimed_string));
} else if (OB_FAIL(addr.parse_from_cstring(buf))) {
LOG_WARN("fail to parser addr from cstring", KR(ret));
} else if (has_exist_in_array(rs_list, addr)) {
//nothing todo
} else if (OB_FAIL(server_list.push_back(addr))) {
LOG_WARN("fail to push back", KR(ret), K(addr));
}
} // end while
} //end else
return ret;
}
int ObRsMgr::renew_remote_master_rootserver() int ObRsMgr::renew_remote_master_rootserver()
{ {
return OB_NOT_SUPPORTED; return OB_NOT_SUPPORTED;

View File

@ -133,12 +133,6 @@ public:
int construct_initial_server_list( int construct_initial_server_list(
const bool check_ls_service, const bool check_ls_service,
common::ObIArray<common::ObAddr> &server_list); common::ObIArray<common::ObAddr> &server_list);
// build a broader list to ask informations
// @param [in] rs_list, servers belongs to rs
// @param [out] server_list, all servers except rs_list
int construct_all_server_list(
const common::ObIArray<common::ObAddr> &rs_list,
common::ObIArray<common::ObAddr> &server_list);
private: private:
class ObRemoteClusterIdGetter class ObRemoteClusterIdGetter

View File

@ -216,5 +216,47 @@ int ObShareUtil::fetch_current_data_version(
} // end SMART_VAR } // end SMART_VAR
return ret; return ret;
} }
int ObShareUtil::parse_all_server_list(
const ObArray<ObAddr> &excluded_server_list,
ObArray<ObAddr> &config_all_server_list)
{
int ret = OB_SUCCESS;
config_all_server_list.reset();
common::ObArenaAllocator allocator(lib::ObLabel("AllSvrList"));
ObString all_server_list;
LOG_TRACE("get all_server_list from GCONF", K(GCONF.all_server_list));
if (OB_FAIL(GCONF.all_server_list.deep_copy_value_string(allocator, all_server_list))) {
LOG_WARN("fail to deep copy GCONF.all_server_list", KR(ret), K(GCONF.all_server_list));
} else {
bool split_end = false;
ObAddr addr;
ObString sub_string;
ObString trimed_string;
while (!split_end && OB_SUCCESS == ret) {
sub_string.reset();
trimed_string.reset();
addr.reset();
sub_string = all_server_list.split_on(',');
if (sub_string.empty() && NULL == sub_string.ptr()) {
split_end = true;
sub_string = all_server_list;
}
trimed_string = sub_string.trim();
if (trimed_string.empty()) {
//nothing todo
} else if (OB_FAIL(addr.parse_from_string(trimed_string))) {
LOG_WARN("fail to parser addr from string", KR(ret), K(trimed_string));
} else if (has_exist_in_array(excluded_server_list, addr)) {
// nothing todo
} else if (has_exist_in_array(config_all_server_list, addr)) {
//nothing todo
} else if (OB_FAIL(config_all_server_list.push_back(addr))) {
LOG_WARN("fail to push back", KR(ret), K(addr));
}
} // end while
}
return ret;
}
} //end namespace share } //end namespace share
} //end namespace oceanbase } //end namespace oceanbase

View File

@ -59,6 +59,12 @@ public:
common::ObISQLClient &client, common::ObISQLClient &client,
const uint64_t tenant_id, const uint64_t tenant_id,
uint64_t &data_version); uint64_t &data_version);
// parse GCONF.all_server_list
// @params[in] excluded_server_list, servers which will not be included in the output
// @params[out] config_all_server_list, servers in (GCONF.all_server_list - excluded_server_list)
static int parse_all_server_list(
const ObArray<ObAddr> &excluded_server_list,
ObArray<ObAddr> &config_all_server_list);
}; };
}//end namespace share }//end namespace share
}//end namespace oceanbase }//end namespace oceanbase