From 894f91c1deb8d497010f2e00926ee4f54c73b1e0 Mon Sep 17 00:00:00 2001 From: wuweikang Date: Wed, 19 May 2021 14:26:35 +0800 Subject: [PATCH] fix return error through callback twice --- ge/graph/manager/graph_manager.cc | 6 +- .../graph/manager/graph_manager_unittest.cc | 78 +++++++++++++++++++ 2 files changed, 80 insertions(+), 4 deletions(-) diff --git a/ge/graph/manager/graph_manager.cc b/ge/graph/manager/graph_manager.cc index dc1142d0..f9d24ac4 100755 --- a/ge/graph/manager/graph_manager.cc +++ b/ge/graph/manager/graph_manager.cc @@ -3072,7 +3072,6 @@ Status GraphManager::CheckIncreBuildAndPreRun(GraphManager *graph_manager, const "The graph " + std::to_string(graph_node->GetGraphId()) + " need to re-build, you should remove it" " from GE first, then AddGraph again and rebuild it."); - graph_node->Unlock(); return PARAM_INVALID; } // check need incre build. @@ -3177,12 +3176,11 @@ void GraphManager::PreRunThread(GraphManager *graph_manager) { if (ret != SUCCESS) { graph_node->SetRunFlag(false); if (!ge::Analyzer::GetInstance()->IsEnableNetAnalyzeDebug()) { - ReturnError(graph_manager, args.callback, ret, "CheckIncreBuildAndPreRun Failed, thread exit.."); + GELOGE(ret, "CheckIncreBuildAndPreRun Failed, thread exit.."); graph_node->Unlock(); return; } else { - ReturnError(graph_manager, graph_node, args.callback, ret, - "CheckIncreBuildAndPreRun Failed, keep geop continue!"); + GELOGE(ret, "CheckIncreBuildAndPreRun Failed, keep geop continue!"); graph_node->Unlock(); continue; } diff --git a/tests/ut/ge/graph/manager/graph_manager_unittest.cc b/tests/ut/ge/graph/manager/graph_manager_unittest.cc index 96a0fa64..f68b5080 100644 --- a/tests/ut/ge/graph/manager/graph_manager_unittest.cc +++ b/tests/ut/ge/graph/manager/graph_manager_unittest.cc @@ -16,6 +16,7 @@ #include #include +#include #define protected public #define private public #include "graph/manager/graph_manager.h" @@ -115,6 +116,7 @@ #include "common/formats/utils/formats_trans_utils.h" #include "register/custom_pass_helper.h" #include "graph/ops_stub.h" +#include "ge_attr_value.h" using namespace std; using namespace testing; @@ -458,6 +460,82 @@ TEST_F(UtestGraphManagerTest, ParseInputsDimsForData_success) { graph_manager.ParseInputsDimsForData(input_tensors); } +TEST_F(UtestGraphManagerTest, test_prerunthread_failed_1) { + GraphId graph_id = 1; + GraphManager graph_manager; + graph_manager.thread_run_flag_ = true; + ComputeGraphPtr compute_graph = MakeShared("test_graph"); + GeRootModelPtr ge_root_model = MakeShared(compute_graph); + GraphManager::PreRunArgs args; + error_message::Context error_ctx{1, "1st_stage", "2nd_stage", "log_header"}; + Status st = 0; + args.callback = [&st](Status st_return, std::vector &) { st = st_return; }; + args.graph_id = graph_id; + args.session_id = 1; + args.error_context = error_ctx; + args.context = GetThreadLocalContext(); + // create graph + Graph graph = GraphUtils::CreateGraphFromComputeGraph(compute_graph); + std::shared_ptr graph_ptr = MakeShared(graph); + GraphNodePtr graph_node = MakeShared(graph_id); + graph_node->SetGraph(graph_ptr); + + graph_manager.options_.local_fmk_op_flag = false; + // need build while buildflag is true, var format changed + graph_node->SetBuildFlag(true); + graph_manager.var_acc_ctrl_.graph_ids_need_rebuild_.insert(graph_id); + + graph_manager.graph_map_.insert({graph_id, graph_node}); + graph_manager.graph_count_.insert({graph_id, 1}); + graph_node->SetRunFlag(false); + // function return. + graph_manager.prerun_args_q_.Push(args); + auto t1 = std::thread(GraphManager::PreRunThread, &graph_manager); + if (t1.joinable()) { + t1.join(); + } + EXPECT_EQ(st, ge::PARAM_INVALID); +} + +TEST_F(UtestGraphManagerTest, test_prerunthread_failed_2) { + GraphId graph_id = 1; + GraphManager graph_manager; + graph_manager.thread_run_flag_ = true; + ComputeGraphPtr compute_graph = MakeShared("test_graph"); + GeRootModelPtr ge_root_model = MakeShared(compute_graph); + GraphManager::PreRunArgs args; + error_message::Context error_ctx{1, "1st_stage", "2nd_stage", "log_header"}; + Status st; + args.callback = [&st, &graph_manager](Status st_return, std::vector &) { st = st_return; + graph_manager.thread_run_flag_ = false;}; + args.graph_id = graph_id; + args.session_id = 1; + args.error_context = error_ctx; + args.context = GetThreadLocalContext(); + // create graph + Graph graph = GraphUtils::CreateGraphFromComputeGraph(compute_graph); + std::shared_ptr graph_ptr = MakeShared(graph); + GraphNodePtr graph_node = MakeShared(graph_id); + graph_node->SetGraph(graph_ptr); + + graph_manager.options_.local_fmk_op_flag = false; + // need build while buildflag is true, var format changed + graph_node->SetBuildFlag(true); + graph_manager.var_acc_ctrl_.graph_ids_need_rebuild_.insert(graph_id); + + graph_manager.graph_map_.insert({graph_id, graph_node}); + graph_manager.graph_count_.insert({graph_id, 1}); + graph_node->SetRunFlag(false); + // function continue + int ret = setenv("ENABLE_NETWORK_ANALYSIS_DEBUG", "1", 1); + EXPECT_EQ(ret, 0); + graph_manager.prerun_args_q_.Push(args); + auto t1 = std::thread(GraphManager::PreRunThread, &graph_manager); + if (t1.joinable()) { + t1.join(); + } + EXPECT_EQ(st, ge::PARAM_INVALID); +} // TEST_F(UtestGraphManagerTest, ParseInputsDimsForGetNexNosinkAndData_success) { // GraphManager graph_manager;