Fix table load multiple heap table compact concurrency issues

This commit is contained in:
obdev
2023-03-02 19:16:03 +00:00
committed by ob-robot
parent 1ce10fdb94
commit 42778d1356

View File

@ -262,14 +262,11 @@ public:
} }
void callback(int ret_code, ObTableLoadTask *task) override void callback(int ret_code, ObTableLoadTask *task) override
{ {
int ret = ret_code; int ret = OB_SUCCESS;
if (OB_SUCC(ret)) { if (OB_FAIL(compactor_->handle_compact_task_finish(ret_code))) {
if (OB_FAIL(compactor_->handle_compact_task_finish(ret_code))) { LOG_WARN("fail to handle compact task finish", KR(ret));
LOG_WARN("fail to handle_compact_task_finish", KR(ret));
}
} }
if (OB_FAIL(ret)) { if (OB_FAIL(ret)) {
compactor_->set_has_error();
ctx_->store_ctx_->set_status_error(ret); ctx_->store_ctx_->set_status_error(ret);
} }
ctx_->free_task(task); ctx_->free_task(task);
@ -467,9 +464,10 @@ int ObTableLoadMultipleHeapTableCompactor::handle_compact_task_finish(int ret_co
{ {
int ret = OB_SUCCESS; int ret = OB_SUCCESS;
if (OB_FAIL(ret_code)) { if (OB_FAIL(ret_code)) {
set_has_error();
} else { } else {
const int64_t task_to_wait = param_->session_count_;
const int64_t finish_task_count = ATOMIC_AAF(&finish_task_count_, 1); const int64_t finish_task_count = ATOMIC_AAF(&finish_task_count_, 1);
int64_t task_to_wait = param_->session_count_;
if (task_to_wait == finish_task_count) { if (task_to_wait == finish_task_count) {
if (OB_LIKELY(!(mem_ctx_.has_error_)) && OB_FAIL(finish())) { if (OB_LIKELY(!(mem_ctx_.has_error_)) && OB_FAIL(finish())) {
LOG_WARN("fail to start finish", KR(ret)); LOG_WARN("fail to start finish", KR(ret));