yiguolei commented on code in PR #29460: URL: https://github.com/apache/doris/pull/29460#discussion_r1440341022
########## be/src/runtime/fragment_mgr.cpp: ########## @@ -574,27 +574,29 @@ Status FragmentMgr::start_query_execution(const PExecPlanFragmentStartRequest* r void FragmentMgr::remove_pipeline_context( std::shared_ptr<pipeline::PipelineFragmentContext> f_context) { - std::lock_guard<std::mutex> lock(_lock); - auto query_id = f_context->get_query_id(); auto* q_context = f_context->get_query_ctx(); - std::vector<TUniqueId> ins_ids; - f_context->instance_ids(ins_ids); - bool all_done = q_context->countdown(ins_ids.size()); - for (const auto& ins_id : ins_ids) { - { - std::lock_guard<std::mutex> plock(q_context->pipeline_lock); - if (q_context->fragment_id_to_pipeline_ctx.contains(f_context->get_fragment_id())) { - q_context->fragment_id_to_pipeline_ctx.erase(f_context->get_fragment_id()); - } + { + std::lock_guard<std::mutex> lock(_lock); + auto query_id = f_context->get_query_id(); + std::vector<TUniqueId> ins_ids; + f_context->instance_ids(ins_ids); + bool all_done = q_context->countdown(ins_ids.size()); + for (const auto& ins_id : ins_ids) { + LOG_INFO("Removing query {} instance {}, all done? {}", print_id(query_id), + print_id(ins_id), all_done); + _pipeline_map.erase(ins_id); + g_pipeline_fragment_instances_count << -1; + } + if (all_done) { + LOG_INFO("Query {} finished", print_id(query_id)); + _query_ctx_map.erase(query_id); } - LOG_INFO("Removing query {} instance {}, all done? {}", print_id(query_id), - print_id(ins_id), all_done); - _pipeline_map.erase(ins_id); - g_pipeline_fragment_instances_count << -1; } - if (all_done) { - LOG_INFO("Query {} finished", print_id(query_id)); - _query_ctx_map.erase(query_id); + { + std::lock_guard<std::mutex> plock(q_context->pipeline_lock); Review Comment: 这里,拿着context 的lock,然后访问context 内部的map,感觉把这堆代码,在query context 中单独封装一个函数做更合理。 -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org