patch 4.0
This commit is contained in:
@ -17,17 +17,25 @@
|
||||
#include "share/config/ob_server_config.h"
|
||||
#include "rootserver/ob_server_manager.h"
|
||||
|
||||
namespace oceanbase {
|
||||
namespace oceanbase
|
||||
{
|
||||
using namespace common;
|
||||
using namespace share;
|
||||
namespace rootserver {
|
||||
ObAllServerChecker::ObAllServerChecker() : inited_(false), server_manager_(NULL), rs_addr_()
|
||||
{}
|
||||
namespace rootserver
|
||||
{
|
||||
ObAllServerChecker::ObAllServerChecker()
|
||||
: inited_(false),
|
||||
server_manager_(NULL),
|
||||
rs_addr_()
|
||||
{
|
||||
}
|
||||
|
||||
ObAllServerChecker::~ObAllServerChecker()
|
||||
{}
|
||||
{
|
||||
}
|
||||
|
||||
int ObAllServerChecker::init(ObServerManager& server_manager, const ObAddr& rs_addr)
|
||||
int ObAllServerChecker::init(ObServerManager &server_manager,
|
||||
const ObAddr &rs_addr)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
if (inited_) {
|
||||
@ -57,13 +65,13 @@ int ObAllServerChecker::check_all_server()
|
||||
} else {
|
||||
ObArray<ObServerStatus> inmem_statuses;
|
||||
ObArray<ObServerStatus> persist_statuses;
|
||||
ObZone zone; // empty zone means get all server statuses
|
||||
ObZone zone; // empty zone means get all server statuses
|
||||
if (OB_FAIL(server_manager_->get_server_statuses(zone, inmem_statuses))) {
|
||||
LOG_WARN("get server statuses from server manager failed", K(ret));
|
||||
} else if (OB_FAIL(server_manager_->get_persist_server_statuses(persist_statuses))) {
|
||||
LOG_WARN("read server statuses form all server table failed", K(ret));
|
||||
} else {
|
||||
ObIStatusChangeCallback& cb = server_manager_->get_status_change_callback();
|
||||
ObIStatusChangeCallback &cb = server_manager_->get_status_change_callback();
|
||||
for (int64_t i = 0; i < inmem_statuses.count(); ++i) {
|
||||
int64_t j = 0;
|
||||
for (j = 0; j < persist_statuses.count(); ++j) {
|
||||
@ -72,21 +80,14 @@ int ObAllServerChecker::check_all_server()
|
||||
}
|
||||
}
|
||||
if (j < persist_statuses.count()) {
|
||||
// find in persist_statuses
|
||||
//find in persist_statuses
|
||||
bool same = false;
|
||||
if (OB_FAIL(check_status_same(inmem_statuses[i], persist_statuses[j], same))) {
|
||||
LOG_WARN("check_status_same failed",
|
||||
"inmem_status",
|
||||
inmem_statuses[i],
|
||||
"persist_status",
|
||||
persist_statuses[j],
|
||||
K(ret));
|
||||
LOG_WARN("check_status_same failed", "inmem_status", inmem_statuses[i],
|
||||
"persist_status", persist_statuses[j], K(ret));
|
||||
} else if (!same) {
|
||||
LOG_INFO("find server status not same",
|
||||
"inmem_status",
|
||||
inmem_statuses[i],
|
||||
"persist_status",
|
||||
persist_statuses[j]);
|
||||
LOG_INFO("find server status not same", "inmem_status", inmem_statuses[i],
|
||||
"persist_status", persist_statuses[j]);
|
||||
if (OB_FAIL(cb.on_server_status_change(inmem_statuses[i].server_))) {
|
||||
LOG_WARN("commit task failed", "server status", inmem_statuses[i], K(ret));
|
||||
}
|
||||
@ -95,7 +96,8 @@ int ObAllServerChecker::check_all_server()
|
||||
}
|
||||
} else {
|
||||
// not find in persist_statues
|
||||
LOG_INFO("find server not exist in all_server table", "inmem_status", inmem_statuses[i]);
|
||||
LOG_INFO("find server not exist in all_server table",
|
||||
"inmem_status", inmem_statuses[i]);
|
||||
if (OB_FAIL(cb.on_server_status_change(inmem_statuses[i].server_))) {
|
||||
LOG_WARN("commit task failed", "server status", inmem_statuses[i], K(ret));
|
||||
}
|
||||
@ -107,7 +109,9 @@ int ObAllServerChecker::check_all_server()
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ObAllServerChecker::check_status_same(const ObServerStatus& left, const ObServerStatus& right, bool& same) const
|
||||
int ObAllServerChecker::check_status_same(const ObServerStatus &left,
|
||||
const ObServerStatus &right,
|
||||
bool &same) const
|
||||
{
|
||||
// don't compare last_hb_time here, because we don't update all_server
|
||||
// when only last_hb_time change
|
||||
@ -120,18 +124,24 @@ int ObAllServerChecker::check_status_same(const ObServerStatus& left, const ObSe
|
||||
ret = OB_INVALID_ARGUMENT;
|
||||
LOG_WARN("invalid argument", K(left), K(right), K(ret));
|
||||
} else {
|
||||
same = left.server_ == right.server_ && left.zone_ == right.zone_ && left.sql_port_ == right.sql_port_ &&
|
||||
0 == STRCMP(left.build_version_, right.build_version_) &&
|
||||
left.get_display_status() == right.get_display_status() && left.with_rootserver_ == right.with_rootserver_ &&
|
||||
left.block_migrate_in_time_ == right.block_migrate_in_time_ && left.stop_time_ == right.stop_time_ &&
|
||||
left.start_service_time_ == right.start_service_time_ && left.with_rootserver_ == right.with_rootserver_ &&
|
||||
left.with_partition_ == right.with_partition_;
|
||||
same = left.server_ == right.server_ && left.zone_ == right.zone_
|
||||
&& left.sql_port_ == right.sql_port_
|
||||
&& 0 == STRCMP(left.build_version_, right.build_version_)
|
||||
&& left.get_display_status() == right.get_display_status()
|
||||
&& left.with_rootserver_ == right.with_rootserver_
|
||||
&& left.block_migrate_in_time_ == right.block_migrate_in_time_
|
||||
&& left.stop_time_ == right.stop_time_
|
||||
&& left.start_service_time_ == right.start_service_time_
|
||||
&& left.with_rootserver_ == right.with_rootserver_
|
||||
&& left.with_partition_ == right.with_partition_;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
ObCheckServerTask::ObCheckServerTask(common::ObWorkQueue& work_queue, ObAllServerChecker& checker)
|
||||
: ObAsyncTimerTask(work_queue), checker_(checker)
|
||||
ObCheckServerTask::ObCheckServerTask(common::ObWorkQueue &work_queue,
|
||||
ObAllServerChecker &checker)
|
||||
:ObAsyncTimerTask(work_queue),
|
||||
checker_(checker)
|
||||
{
|
||||
set_retry_times(0); // don't retry when process failed
|
||||
}
|
||||
@ -145,16 +155,16 @@ int ObCheckServerTask::process()
|
||||
return ret;
|
||||
}
|
||||
|
||||
ObAsyncTask* ObCheckServerTask::deep_copy(char* buf, const int64_t buf_size) const
|
||||
ObAsyncTask *ObCheckServerTask::deep_copy(char *buf, const int64_t buf_size) const
|
||||
{
|
||||
ObCheckServerTask* task = NULL;
|
||||
ObCheckServerTask *task = NULL;
|
||||
if (NULL == buf || buf_size < static_cast<int64_t>(sizeof(*this))) {
|
||||
LOG_WARN("buffer not large enough", K(buf_size));
|
||||
} else {
|
||||
task = new (buf) ObCheckServerTask(work_queue_, checker_);
|
||||
task = new(buf) ObCheckServerTask(work_queue_, checker_);
|
||||
}
|
||||
return task;
|
||||
}
|
||||
|
||||
} // end namespace rootserver
|
||||
} // end namespace oceanbase
|
||||
}//end namespace rootserver
|
||||
}//end namespace oceanbase
|
||||
|
||||
Reference in New Issue
Block a user