fix px target monitor core because of concurrent access of set
This commit is contained in:
@ -300,11 +300,17 @@ int ObPxTargetMgr::get_version(uint64_t tenant_id, uint64_t &version)
|
|||||||
int ObPxTargetMgr::update_peer_target_used(uint64_t tenant_id, const ObAddr &server, int64_t peer_used)
|
int ObPxTargetMgr::update_peer_target_used(uint64_t tenant_id, const ObAddr &server, int64_t peer_used)
|
||||||
{
|
{
|
||||||
int ret = OB_SUCCESS;
|
int ret = OB_SUCCESS;
|
||||||
|
// return OB_HASH_EXIST instead of replacing the element.
|
||||||
|
int flag = 0;
|
||||||
GET_TARGET_MONITOR(tenant_id, {
|
GET_TARGET_MONITOR(tenant_id, {
|
||||||
if (OB_FAIL(target_monitor->update_peer_target_used(server, peer_used))) {
|
if (OB_FAIL(target_monitor->update_peer_target_used(server, peer_used))) {
|
||||||
LOG_WARN("update peer target_used failed", K(ret), K(tenant_id), K(peer_used));
|
LOG_WARN("update peer target_used failed", K(ret), K(tenant_id), K(peer_used));
|
||||||
} else if (server_ != server && OB_FAIL(alive_server_set_.set_refactored(server, 1))) {
|
} else if (server_ != server && OB_FAIL(alive_server_set_.set_refactored(server, flag))) {
|
||||||
LOG_WARN("alive_server_set_ push_back failed", K(ret), K(server));
|
if (OB_HASH_EXIST == ret) {
|
||||||
|
ret = OB_SUCCESS;
|
||||||
|
} else {
|
||||||
|
LOG_WARN("alive_server_set_ push_back failed", K(ret), K(server));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return ret;
|
return ret;
|
||||||
|
|||||||
Reference in New Issue
Block a user