Generate unique node names in AddEmptyNode by appending a suffix instead of crashing.

PiperOrigin-RevId: 322469383
Change-Id: I8062711c8d2bfb6e8c1afec44b28e7d3625a54cb
This commit is contained in:
A. Unique TensorFlower 2020-07-21 16:42:01 -07:00 committed by TensorFlower Gardener
parent a344ee9bc6
commit 07b58e0820
2 changed files with 11 additions and 4 deletions

View File

@ -84,11 +84,14 @@ NodeDef* AddCopyNode(const GraphOptimizerContext& ctx, const string& name,
}
NodeDef* AddEmptyNode(const GraphOptimizerContext& ctx, const string& name) {
CHECK(!ctx.node_map->NodeExists(name))
<< "Node " << name << " already exists in a graph";
std::string new_name = name;
for (int count = 0; ctx.node_map->NodeExists(new_name); ++count) {
LOG(WARNING) << name << " already exists in the graph.";
new_name = absl::StrCat(name, "_", count);
}
NodeDef* new_node = ctx.optimized_graph->add_node();
new_node->set_name(name);
ctx.node_map->AddNode(name, new_node);
new_node->set_name(new_name);
ctx.node_map->AddNode(new_name, new_node);
return new_node;
}

View File

@ -228,6 +228,10 @@ TEST_F(GraphOptimizerStageTest, AddNodes) {
NodeDef* empty_node_by_name;
TF_CHECK_OK(stage.GetInputNode("Add_2", &empty_node_by_name));
EXPECT_EQ(empty_node, empty_node_by_name);
// Check that AddEmptyNode adds a unique suffix if the node already exists.
NodeDef* unique_empty_node = stage.AddEmptyNode("Add_2");
EXPECT_EQ(unique_empty_node->name(), "Add_2_0");
}
} // namespace