fix active_trx_count leak when add memtable fail
This commit is contained in:
@ -260,17 +260,20 @@ int ObMemtableCtx::set_host_(ObMemtable* host, const bool for_replay)
|
|||||||
ret = OB_NOT_MASTER;
|
ret = OB_NOT_MASTER;
|
||||||
} else if (host == get_active_mt()) {
|
} else if (host == get_active_mt()) {
|
||||||
// do nothing
|
// do nothing
|
||||||
|
} else if (memtable_arr_wrap_.is_contain_this_memtable(host)) {
|
||||||
|
ret = OB_ERR_UNEXPECTED;
|
||||||
|
TRANS_LOG(ERROR, "memstore already exist", K(ret), K(*this), KP(host));
|
||||||
} else if (memtable_arr_wrap_.is_reach_max_memtable_cnt()) {
|
} else if (memtable_arr_wrap_.is_reach_max_memtable_cnt()) {
|
||||||
ret = OB_ERR_UNEXPECTED;
|
ret = OB_ERR_UNEXPECTED;
|
||||||
TRANS_LOG(ERROR, "reach max memstore in storage", K(ret), K(*this), KP(host));
|
TRANS_LOG(ERROR, "reach max memstore in storage", K(ret), K(*this), KP(host));
|
||||||
} else {
|
} else if (OB_FAIL(host->inc_active_trx_count())) {
|
||||||
if (memtable_arr_wrap_.is_contain_this_memtable(host)) {
|
TRANS_LOG(ERROR, "increase active_trx_count error", K(ret), K(*this), KP(host));
|
||||||
ret = OB_ERR_UNEXPECTED;
|
} else if (OB_FAIL(memtable_arr_wrap_.add_memtable(host))) {
|
||||||
TRANS_LOG(ERROR, "memstore already exist", K(ret), K(*this), KP(host));
|
int tmp_ret = OB_SUCCESS;
|
||||||
} else if (OB_FAIL(host->inc_active_trx_count())) {
|
if (OB_SUCCESS != (tmp_ret = host->dec_active_trx_count())) {
|
||||||
TRANS_LOG(ERROR, "increase active_trx_count error", K(ret), K(*this), KP(host));
|
TRANS_LOG(ERROR, "decrease active_trx_count error when add memtable fail", K(tmp_ret), K(ret), K(*this), KP(host));
|
||||||
} else {
|
} else {
|
||||||
memtable_arr_wrap_.add_memtable(host);
|
TRANS_LOG(WARN, "decrease active_trx_count success when add memtable fail", K(ret), K(*this), KP(host));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
|
|||||||
Reference in New Issue
Block a user