task_manager: add rule for unique node name 11/312711/3
authorVibhav Aggarwal <v.aggarwal@samsung.com>
Thu, 13 Jun 2024 08:33:42 +0000 (17:33 +0900)
committerInki Dae <inki.dae@samsung.com>
Mon, 17 Jun 2024 02:27:08 +0000 (11:27 +0900)
[issue type] code refactoring

Add rule for unique node names in the task manager.
This will be useful in future for referring to nodes
in the branch node callback.

Change-Id: Ic08134dc225c6b5e6cd5cbafc699608447d346bf
Signed-off-by: Vibhav Aggarwal <v.aggarwal@samsung.com>
services/auto_zoom/src/AutoZoom.cpp
services/task_manager/include/BridgeNode.h
services/task_manager/include/EndpointNode.h
services/task_manager/include/InferenceNode.h
services/task_manager/include/TrainingNode.h
services/task_manager/src/TaskManager.cpp
test/services/test_task_manager.cpp

index ae5f9c0246ef37e352ff2e42078f4fc612fa67fb..b0321c824a2da4fdcf76148379eba1818a0b2e25 100644 (file)
@@ -112,7 +112,7 @@ AutoZoom::AutoZoom()
        face_recognition_node->addDependency(bridge_node);
        _taskManager->addNode(face_recognition_node);
 
-       auto endpoint_node = make_shared<EndpointNode>();
+       auto endpoint_node = make_shared<EndpointNode>("endpoint");
 
        endpoint_node->addDependency(face_detection_node);
        endpoint_node->addDependency(face_recognition_node);
index b1f877a0a9765454236b6cd20263975403811466..078762a973059b5ceb68829b47caee65bfd7e44f 100644 (file)
@@ -30,7 +30,7 @@ private:
        bool _enabled { false };
 
 public:
-       BridgeNode(std::string name = "bridge")
+       explicit BridgeNode(const std::string &name)
        {
                _name = name;
                _type = NodeType::BRIDGE;
index 3ef78cb1f4e24a2c7fc5794faba4885360714206..771b1e284ccfa359ff5a23514e9b62f8dc9a508f 100644 (file)
@@ -26,7 +26,7 @@ namespace services
 class EndpointNode : public CallbackNode
 {
 public:
-       EndpointNode(std::string name = "endpoint")
+       explicit EndpointNode(const std::string &name)
        {
                _name = name;
                _type = NodeType::ENDPOINT;
index 82fb707b56161db2bfb5a41d7862da368a3aac76..dc6f7793984afe55dfe9974eceede7792ca8ae70 100644 (file)
@@ -36,7 +36,7 @@ private:
        std::vector<std::shared_ptr<BaseResultType> > _results;
 
 public:
-       InferenceNode(std::string name = "inference")
+       explicit InferenceNode(const std::string &name)
        {
                _name = name;
                _type = NodeType::INFERENCE;
index 97ed21c1f03e48fce0b624b4529120b7147896ca..16ddaa06eb6d3820231eba9dfdc253add0aa19bb 100644 (file)
@@ -34,7 +34,7 @@ private:
        // TODO. define ITrainingTaskInterface here.
 
 public:
-       TrainingNode(std::string name = "training")
+       explicit TrainingNode(const std::string &name)
        {
                _name = name;
                _type = NodeType::TRAINING;
index a2b5b1f37fc7aee54243e076eefaedb0c9eae15f..73b1d6a07a16e3339bb7b5a5210cbbc7d138325c 100644 (file)
@@ -148,6 +148,17 @@ void TaskManager::verifyGraph()
                throw InvalidOperation("The last node should be a EndpointNode.");
        }
 
+       // Check if node names are unique
+       unordered_set<string> node_names;
+       for (auto &n : _nodes) {
+               if (node_names.find(n->getName()) != node_names.end()) {
+                       SINGLEO_LOGE("Node names must be unique.");
+                       throw InvalidOperation("Node names must be unique.");
+               }
+               node_names.insert(n->getName());
+       }
+       node_names.clear();
+
        map<shared_ptr<INode>, unsigned int> degreeMap;
 
        // Verify graph rule.
index 4d8432c6271000d9218b7340a387d5f1995b3e4d..cba9d13edb2471eab8856051c888b1f07c35fd43 100644 (file)
@@ -93,7 +93,7 @@ TEST(SingloTaskManager, MultipleNodesBasedGraphAShouldWork)
                face_detection_node->setInferenceTask(factory->createFaceDetection());
                taskManager->addNode(face_detection_node);
 
-               auto bridge_node = make_shared<BridgeNode>();
+               auto bridge_node = make_shared<BridgeNode>("bridge");
                bridge_node->setCb(BridgeNodeCallback);
                bridge_node->addDependency(face_detection_node);
                taskManager->addNode(bridge_node);
@@ -103,7 +103,7 @@ TEST(SingloTaskManager, MultipleNodesBasedGraphAShouldWork)
                face_landmark_node->addDependency(bridge_node);
                taskManager->addNode(face_landmark_node);
 
-               auto endpoint_node = make_shared<EndpointNode>();
+               auto endpoint_node = make_shared<EndpointNode>("endpoint");
                endpoint_node->addDependency(face_landmark_node);
                taskManager->addNode(endpoint_node);
 
@@ -159,7 +159,7 @@ TEST(SingloTaskManager, MultipleNodesBasedGraphBShouldWork)
                face_detection_node_b->setInferenceTask(factory->createFaceDetection());
                taskManager->addNode(face_detection_node_b);
 
-               auto bridge_node = make_shared<BridgeNode>();
+               auto bridge_node = make_shared<BridgeNode>("bridge");
                bridge_node->setCb(BridgeNodeCallback);
                bridge_node->addDependency(face_detection_node_a);
                bridge_node->addDependency(face_detection_node_b);
@@ -170,7 +170,7 @@ TEST(SingloTaskManager, MultipleNodesBasedGraphBShouldWork)
                face_landmark_node->addDependency(bridge_node);
                taskManager->addNode(face_landmark_node);
 
-               auto endpoint_node = make_shared<EndpointNode>();
+               auto endpoint_node = make_shared<EndpointNode>("endpoint");
                endpoint_node->addDependency(face_landmark_node);
                taskManager->addNode(endpoint_node);
 
@@ -234,7 +234,7 @@ TEST(SingloTaskManager, MultipleNodesBasedGraphCShouldWork)
                face_detection_node->setInferenceTask(factory->createFaceDetection());
                taskManager->addNode(face_detection_node);
 
-               auto bridge_node = make_shared<BridgeNode>();
+               auto bridge_node = make_shared<BridgeNode>("bridge");
                bridge_node->setCb(BridgeNodeCallback);
                bridge_node->addDependency(face_detection_node);
                taskManager->addNode(bridge_node);
@@ -244,7 +244,7 @@ TEST(SingloTaskManager, MultipleNodesBasedGraphCShouldWork)
                face_landmark_node->addDependency(bridge_node);
                taskManager->addNode(face_landmark_node);
 
-               auto endpoint_node = make_shared<EndpointNode>();
+               auto endpoint_node = make_shared<EndpointNode>("endpoint");
                endpoint_node->setCb(LastNodeCallback);
                endpoint_node->addDependency(face_detection_node);
                endpoint_node->addDependency(face_landmark_node);
@@ -311,7 +311,7 @@ TEST(SingloTaskManager, MultipleNodesBasedGraphDShouldWork)
                face_detection_node_a->setInferenceTask(factory->createFaceDetection());
                taskManager->addNode(face_detection_node_a);
 
-               auto bridge_node = make_shared<BridgeNode>();
+               auto bridge_node = make_shared<BridgeNode>("bridge");
                bridge_node->setCb(BridgeNodeCallback);
                bridge_node->addDependency(face_detection_node_a);
                taskManager->addNode(bridge_node);
@@ -326,7 +326,7 @@ TEST(SingloTaskManager, MultipleNodesBasedGraphDShouldWork)
                face_detection_node_b->addDependency(bridge_node);
                taskManager->addNode(face_detection_node_b);
 
-               auto endpoint_node = make_shared<EndpointNode>();
+               auto endpoint_node = make_shared<EndpointNode>("endpoint");
                endpoint_node->setCb(LastNodeCallback);
                endpoint_node->addDependency(face_detection_node_b);
                endpoint_node->addDependency(face_landmark_node);