Browse Source

fix return error through callback twice

tags/v1.3.0
wuweikang 3 years ago
parent
commit
894f91c1de
2 changed files with 80 additions and 4 deletions
  1. +2
    -4
      ge/graph/manager/graph_manager.cc
  2. +78
    -0
      tests/ut/ge/graph/manager/graph_manager_unittest.cc

+ 2
- 4
ge/graph/manager/graph_manager.cc View File

@@ -3072,7 +3072,6 @@ Status GraphManager::CheckIncreBuildAndPreRun(GraphManager *graph_manager, const
"The graph " + std::to_string(graph_node->GetGraphId()) + "The graph " + std::to_string(graph_node->GetGraphId()) +
" need to re-build, you should remove it" " need to re-build, you should remove it"
" from GE first, then AddGraph again and rebuild it."); " from GE first, then AddGraph again and rebuild it.");
graph_node->Unlock();
return PARAM_INVALID; return PARAM_INVALID;
} }
// check need incre build. // check need incre build.
@@ -3177,12 +3176,11 @@ void GraphManager::PreRunThread(GraphManager *graph_manager) {
if (ret != SUCCESS) { if (ret != SUCCESS) {
graph_node->SetRunFlag(false); graph_node->SetRunFlag(false);
if (!ge::Analyzer::GetInstance()->IsEnableNetAnalyzeDebug()) { if (!ge::Analyzer::GetInstance()->IsEnableNetAnalyzeDebug()) {
ReturnError(graph_manager, args.callback, ret, "CheckIncreBuildAndPreRun Failed, thread exit..");
GELOGE(ret, "CheckIncreBuildAndPreRun Failed, thread exit..");
graph_node->Unlock(); graph_node->Unlock();
return; return;
} else { } else {
ReturnError(graph_manager, graph_node, args.callback, ret,
"CheckIncreBuildAndPreRun Failed, keep geop continue!");
GELOGE(ret, "CheckIncreBuildAndPreRun Failed, keep geop continue!");
graph_node->Unlock(); graph_node->Unlock();
continue; continue;
} }


+ 78
- 0
tests/ut/ge/graph/manager/graph_manager_unittest.cc View File

@@ -16,6 +16,7 @@


#include <gtest/gtest.h> #include <gtest/gtest.h>
#include <memory> #include <memory>
#include <stdlib.h>
#define protected public #define protected public
#define private public #define private public
#include "graph/manager/graph_manager.h" #include "graph/manager/graph_manager.h"
@@ -115,6 +116,7 @@
#include "common/formats/utils/formats_trans_utils.h" #include "common/formats/utils/formats_trans_utils.h"
#include "register/custom_pass_helper.h" #include "register/custom_pass_helper.h"
#include "graph/ops_stub.h" #include "graph/ops_stub.h"
#include "ge_attr_value.h"


using namespace std; using namespace std;
using namespace testing; using namespace testing;
@@ -458,6 +460,82 @@ TEST_F(UtestGraphManagerTest, ParseInputsDimsForData_success) {
graph_manager.ParseInputsDimsForData(input_tensors); 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<ComputeGraph>("test_graph");
GeRootModelPtr ge_root_model = MakeShared<GeRootModel>(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<ge::Tensor> &) { 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> graph_ptr = MakeShared<ge::Graph>(graph);
GraphNodePtr graph_node = MakeShared<ge::GraphNode>(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<ComputeGraph>("test_graph");
GeRootModelPtr ge_root_model = MakeShared<GeRootModel>(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<ge::Tensor> &) { 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> graph_ptr = MakeShared<ge::Graph>(graph);
GraphNodePtr graph_node = MakeShared<ge::GraphNode>(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) { // TEST_F(UtestGraphManagerTest, ParseInputsDimsForGetNexNosinkAndData_success) {
// GraphManager graph_manager; // GraphManager graph_manager;




Loading…
Cancel
Save