[CP] [RS][Bugfix] Fix bug blocking deleting offline server.
This commit is contained in:
@ -122,7 +122,9 @@ int ObEmptyServerChecker::try_delete_server_()
|
|||||||
const ObAddr &addr= server_info->get_server();
|
const ObAddr &addr= server_info->get_server();
|
||||||
if (OB_FAIL(unit_mgr_->check_server_empty(addr, server_empty))) {
|
if (OB_FAIL(unit_mgr_->check_server_empty(addr, server_empty))) {
|
||||||
LOG_WARN("check_server_empty failed", "server", addr, KR(ret));
|
LOG_WARN("check_server_empty failed", "server", addr, KR(ret));
|
||||||
} else if (server_empty && OB_FAIL(empty_servers_.push_back(addr))) {
|
} else if (!server_empty) {
|
||||||
|
LOG_INFO("server not empty and has units on it", "server", addr, KR(ret));
|
||||||
|
} else if (OB_FAIL(empty_servers_.push_back(addr))) {
|
||||||
LOG_WARN("failed to push back empty server", KR(ret), KPC(server_info));
|
LOG_WARN("failed to push back empty server", KR(ret), KPC(server_info));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -59,16 +59,20 @@ int ObUnitStatManager::gather_stat()
|
|||||||
{
|
{
|
||||||
int ret = OB_SUCCESS;
|
int ret = OB_SUCCESS;
|
||||||
ObArray<share::ObUnitStat> unit_stats;
|
ObArray<share::ObUnitStat> unit_stats;
|
||||||
|
ObArray<share::ObUnit> units;
|
||||||
|
unit_stat_map_.reuse();
|
||||||
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_FAIL(ut_operator_.get_unit_stats(unit_stats))) {
|
} else if (OB_FAIL(ut_operator_.get_unit_stats(unit_stats))) {
|
||||||
LOG_WARN("get unit_stats failed", KR(ret));
|
LOG_WARN("get unit_stats failed", KR(ret));
|
||||||
|
} else if (OB_FAIL(ut_operator_.get_units(units))) {
|
||||||
|
LOG_WARN("get units failed", KR(ret));
|
||||||
} else {
|
} else {
|
||||||
ObUnitStatMap::Item *item;
|
ObUnitStatMap::Item *item = NULL;
|
||||||
FOREACH_CNT_X(unit_stat, unit_stats, OB_SUCC(ret)) {
|
FOREACH_CNT_X(unit_stat, unit_stats, OB_SUCC(ret)) {
|
||||||
if (OB_FAIL(unit_stat_map_.locate(unit_stat->get_unit_id(), item))) {
|
if (OB_FAIL(unit_stat_map_.locate(unit_stat->get_unit_id(), item))) {
|
||||||
LOG_WARN("fail to init stat for unit", KR(ret), K(unit_stat->get_unit_id()));
|
LOG_WARN("fail to locate unit_stat", KR(ret), K(unit_stat->get_unit_id()));
|
||||||
} else if (OB_FAIL(ERRSIM_UNIT_DISK_ASSIGN)) {
|
} else if (OB_FAIL(ERRSIM_UNIT_DISK_ASSIGN)) {
|
||||||
if (OB_FAIL(item->v_.init(unit_stat->get_unit_id(),
|
if (OB_FAIL(item->v_.init(unit_stat->get_unit_id(),
|
||||||
1024 * 1024 * 1024, // assign 1 GB for test use only
|
1024 * 1024 * 1024, // assign 1 GB for test use only
|
||||||
@ -82,6 +86,34 @@ int ObUnitStatManager::gather_stat()
|
|||||||
item->v_.deep_copy(*unit_stat);
|
item->v_.deep_copy(*unit_stat);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// FIXME: (cangming.zl) temp workaround for problem of units on offline servers.
|
||||||
|
FOREACH_CNT_X(unit, units, OB_SUCC(ret)) {
|
||||||
|
share::ObUnitStat tmp_unit_stat;
|
||||||
|
if (OB_SUCC(unit_stat_map_.get(unit->unit_id_, tmp_unit_stat))) {
|
||||||
|
// do nothing, unit_stat of this unit is already set
|
||||||
|
} else {
|
||||||
|
if (OB_HASH_NOT_EXIST != ret) {
|
||||||
|
LOG_WARN("fail to try to get from unit_stat_map", KR(ret), K(unit->unit_id_));
|
||||||
|
} else { /*OB_HASH_NOT_EXIST*/
|
||||||
|
// Let required_size of unit_stat unable to get from __all_virtual_unit be 0
|
||||||
|
ret = OB_SUCCESS;
|
||||||
|
if (OB_FAIL(unit_stat_map_.locate(unit->unit_id_, item))) {
|
||||||
|
LOG_WARN("fail to locate unit_stat", KR(ret), K(unit->unit_id_));
|
||||||
|
} else {
|
||||||
|
if (OB_ISNULL(item)) {
|
||||||
|
ret = OB_ERR_UNEXPECTED;
|
||||||
|
LOG_WARN("item is nullptr", KR(ret));
|
||||||
|
} else if (OB_FAIL(item->v_.init(unit->unit_id_,
|
||||||
|
0 /*required_size*/,
|
||||||
|
unit->migrate_from_server_.is_valid()/*is_migrating*/))) {
|
||||||
|
LOG_WARN("fail to init unit_stat", KR(ret), K(unit->unit_id_));
|
||||||
|
} else {
|
||||||
|
LOG_INFO("unit not in unit_stat_map, set required_size as 0", KR(ret), K(unit->unit_id_));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (OB_SUCC(ret)) {
|
if (OB_SUCC(ret)) {
|
||||||
loaded_stats_ = true;
|
loaded_stats_ = true;
|
||||||
|
Reference in New Issue
Block a user