fix dag_scheduler destroy when running may print ERROR log
This commit is contained in:
parent
8329d02967
commit
eeb7bf454d
2
deps/oblib/src/lib/profile/ob_trace_id.h
vendored
2
deps/oblib/src/lib/profile/ob_trace_id.h
vendored
@ -43,6 +43,8 @@ struct ObCurTraceId
|
||||
OB_UNIS_VERSION(1);
|
||||
public:
|
||||
inline TraceId() { uval_[0] = 0; uval_[1] = 0; uval_[2] = 0; uval_[3] = 0; }
|
||||
|
||||
inline bool is_valid() const { return id_.seq_ != 0; }
|
||||
inline bool is_invalid() const { return id_.seq_ == 0 ? true : false; }
|
||||
inline void init(const ObAddr &ip_port)
|
||||
{
|
||||
|
@ -1632,23 +1632,26 @@ void ObTenantDagScheduler::destroy()
|
||||
int tmp_ret = OB_SUCCESS;
|
||||
for (int64_t j = 0; j < DAG_LIST_MAX; ++j) {
|
||||
for (int64_t i = 0; i < PriorityDagList::PRIO_CNT; ++i) {
|
||||
const ObIDag *head = dag_list_[j].get_head(i);
|
||||
const ObIDag *cur_dag = head->get_next();
|
||||
const ObIDag *next = NULL;
|
||||
ObIDag *head = dag_list_[j].get_head(i);
|
||||
ObIDag *cur_dag = head->get_next();
|
||||
ObIDag *next = NULL;
|
||||
ObIDagNet *tmp_dag_net = nullptr;
|
||||
while (NULL != cur_dag && head != cur_dag) {
|
||||
if (OB_TMP_FAIL(ObSysTaskStatMgr::get_instance().del_task(cur_dag->get_dag_id()))) {
|
||||
next = cur_dag->get_next();
|
||||
if (cur_dag->get_dag_id().is_valid()
|
||||
&& OB_TMP_FAIL(ObSysTaskStatMgr::get_instance().del_task(cur_dag->get_dag_id()))) {
|
||||
if (OB_ENTRY_NOT_EXIST != tmp_ret) {
|
||||
STORAGE_LOG_RET(WARN, tmp_ret, "failed to del sys task", K(tmp_ret), K(cur_dag->get_dag_id()));
|
||||
}
|
||||
}
|
||||
next = cur_dag->get_next();
|
||||
cur_dag->~ObIDag();
|
||||
allocator_.free((void*)cur_dag);
|
||||
if (OB_TMP_FAIL(finish_dag_(ObIDag::DAG_STATUS_ABORT, *cur_dag, tmp_dag_net))) {
|
||||
STORAGE_LOG_RET(WARN, tmp_ret, "failed to abort dag", K(tmp_ret), KPC(cur_dag));
|
||||
}
|
||||
cur_dag = next;
|
||||
}
|
||||
} // end of while
|
||||
}
|
||||
dag_list_[j].reset();
|
||||
}
|
||||
} // end of for
|
||||
blocking_dag_net_list_.reset();
|
||||
|
||||
if (dag_map_.created()) {
|
||||
|
@ -1542,6 +1542,23 @@ TEST_F(TestDagScheduler, test_cancel_dag_net_func)
|
||||
}
|
||||
|
||||
|
||||
TEST_F(TestDagScheduler, test_destroy_when_running)
|
||||
{
|
||||
ObTenantDagScheduler *scheduler = MTL(ObTenantDagScheduler*);
|
||||
ASSERT_TRUE(nullptr != scheduler);
|
||||
|
||||
#ifndef BUILD_COVERAGE
|
||||
// not participate in coverage compilation to fix hang problem
|
||||
ObCancelDagNet *dag_net = nullptr;
|
||||
EXPECT_EQ(OB_SUCCESS, scheduler->create_and_add_dag_net(nullptr, dag_net));
|
||||
|
||||
while (scheduler->get_cur_dag_cnt() < 3) {
|
||||
usleep(100);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user