[CodeClean] unnecessary dbus signal accepted/tizen/unified/20240408.160657 accepted/tizen/unified/x/20240409.070645 accepted/tizen/unified/x/asan/20240415.123305
authorJaeyun Jung <jy1210.jung@samsung.com>
Fri, 5 Apr 2024 11:40:43 +0000 (20:40 +0900)
committerjaeyun-jung <39614140+jaeyun-jung@users.noreply.github.com>
Mon, 8 Apr 2024 06:24:40 +0000 (15:24 +0900)
Code clean, remove unnecessary dbus sig and update interface param.

Signed-off-by: Jaeyun Jung <jy1210.jung@samsung.com>
daemon/dbus-interface.h
daemon/include/mlops-agent-interface.h
daemon/mlops-agent-interface.c
daemon/model-dbus-impl.cc
daemon/service-db-util.h
daemon/service-db.cc
daemon/service-db.hh
dbus/model-dbus.xml
plugin-parser/mlops-plugin-parser.cc
tests/daemon/unittest_mlops_agent.cc
tests/daemon/unittest_service_db.cc

index e0015f2c60bfe9e304c963689716858b935ebd47..b381c905724582cead23b4c95ecdeea5818352d4 100644 (file)
@@ -47,7 +47,6 @@
 #define DBUS_MODEL_I_HANDLER_GET_ACTIVATED      "handle-get-activated"
 #define DBUS_MODEL_I_HANDLER_GET_ALL            "handle-get-all"
 #define DBUS_MODEL_I_HANDLER_DELETE             "handle-delete"
-#define DBUS_MODEL_I_HANDLER_DELETE_FORCE       "handle-delete-force"
 
 /* Resource Interface */
 #define DBUS_RESOURCE_INTERFACE         "org.tizen.machinelearning.service.resource"
index a9b1d6ec261c1ac755c2e0e4ac4e954f5bc5fb95..de1923b20a5747ee4c2f14e1815099497182dc1d 100644 (file)
@@ -139,22 +139,13 @@ int ml_agent_model_get_all (const char *name, char **model_info);
 /**
  * @brief An interface exported for removing the model of @a name and @a version.
  * @details If version is 0, this function removes all registered model of @a name.
- * @param[in] name A name indicating the model that would be removed.
- * @param[in] version A version for identifying a specific model.
- * @return 0 on success, a negative error value if failed.
- */
-int ml_agent_model_delete (const char *name, const uint32_t version);
-
-/**
- * @brief An interface exported for removing the model of @a name and @a version.
- * @details If version is 0, this function removes all registered model of @a name.
+ * @details If @a force is true, this will delete the model even if it is activated.
  * @param[in] name A name indicating the model that would be removed.
  * @param[in] version A version for identifying a specific model.
  * @param[in] force A force to forcibly delete a specific model.
  * @return 0 on success, a negative error value if failed.
  */
-int ml_agent_model_delete_force (
-    const char *name, const uint32_t version, const gboolean force);
+int ml_agent_model_delete (const char *name, const uint32_t version, const int force);
 
 /**
  * @brief An interface exported for adding the resource.
index 864a50e4380361fb99b5cfdf9eef1f5a12961f1a..85d76fc8320fdaa094669878c94cc9eb55acf7a8 100644 (file)
@@ -464,9 +464,11 @@ ml_agent_model_get_all (const char *name, char **model_info)
 
 /**
  * @brief An interface exported for removing the model of @a name and @a version.
+ * @details If @a force is true, this will delete the model even if it is activated.
  */
 int
-ml_agent_model_delete (const char *name, const uint32_t version)
+ml_agent_model_delete (const char *name, const uint32_t version,
+    const int force)
 {
   MachinelearningServiceModel *mlsm;
   gboolean result;
@@ -482,34 +484,7 @@ ml_agent_model_delete (const char *name, const uint32_t version)
   }
 
   result = machinelearning_service_model_call_delete_sync (mlsm,
-      name, version, &ret, NULL, NULL);
-  g_object_unref (mlsm);
-
-  g_return_val_if_fail (ret == 0 && result, ret);
-  return 0;
-}
-
-/**
- * @brief An interface exported for forcibly removing the model of @a name and @a version if @a force is true.
- */
-int
-ml_agent_model_delete_force (const char *name, const uint32_t version, const gboolean force)
-{
-  MachinelearningServiceModel *mlsm;
-  gboolean result;
-  gint ret;
-
-  if (!STR_IS_VALID (name)) {
-    g_return_val_if_reached (-EINVAL);
-  }
-
-  mlsm = _get_proxy_new_for_bus_sync (ML_AGENT_SERVICE_MODEL);
-  if (!mlsm) {
-    g_return_val_if_reached (-EIO);
-  }
-
-  result = machinelearning_service_model_call_delete_force_sync (
-      mlsm, name, version, force, &ret, NULL, NULL);
+      name, version, force, &ret, NULL, NULL);
   g_object_unref (mlsm);
 
   g_return_val_if_fail (ret == 0 && result, ret);
index 3545260581bd383a10ffb96e88caddb2a326c008..b83c49f5c5aa8a91cbb6e6a6cb1e35542d4c7280 100644 (file)
@@ -173,27 +173,6 @@ gdbus_cb_model_get_all (MachinelearningServiceModel *obj,
   return TRUE;
 }
 
-/**
- * @brief The callback function of delete method
- *
- * @param obj Proxy instance.
- * @param invoc Method invocation handle.
- * @param name The name of target model.
- * @param version The version of target model.
- * @return @c TRUE if the request is handled. FALSE if the service is not available.
- */
-static gboolean
-gdbus_cb_model_delete (MachinelearningServiceModel *obj,
-    GDBusMethodInvocation *invoc, const gchar *name, const guint version)
-{
-  gint ret = 0;
-
-  ret = svcdb_model_delete (name, version);
-  machinelearning_service_model_complete_delete (obj, invoc, ret);
-
-  return TRUE;
-}
-
 /**
  * @brief The callback function of delete method
  *
@@ -205,13 +184,13 @@ gdbus_cb_model_delete (MachinelearningServiceModel *obj,
  * @return @c TRUE if the request is handled. FALSE if the service is not available.
  */
 static gboolean
-gdbus_cb_model_delete_force (MachinelearningServiceModel *obj,
+gdbus_cb_model_delete (MachinelearningServiceModel *obj,
     GDBusMethodInvocation *invoc, const gchar *name, const guint version, const gboolean force)
 {
   gint ret = 0;
 
-  ret = svcdb_model_delete_force (name, version, force);
-  machinelearning_service_model_complete_delete_force (obj, invoc, ret);
+  ret = svcdb_model_delete (name, version, force);
+  machinelearning_service_model_complete_delete (obj, invoc, ret);
 
   return TRUE;
 }
@@ -262,12 +241,6 @@ static struct gdbus_signal_info handler_infos[] = {
       .cb_data = NULL,
       .handler_id = 0,
   },
-  {
-      .signal_name = DBUS_MODEL_I_HANDLER_DELETE_FORCE,
-      .cb = G_CALLBACK (gdbus_cb_model_delete_force),
-      .cb_data = NULL,
-      .handler_id = 0,
-  },
 };
 
 /**
index e98bac088ae66f6c88ec1c6cb3aa73cc3f330175..756547863f078451d2042a8409020ff5edbf48ed 100644 (file)
@@ -28,8 +28,7 @@ gint svcdb_model_activate (const gchar *name, const guint version);
 gint svcdb_model_get (const gchar *name, const guint version, gchar **model_info);
 gint svcdb_model_get_activated (const gchar *name, gchar **model_info);
 gint svcdb_model_get_all (const gchar *name, gchar **model_info);
-gint svcdb_model_delete (const gchar *name, const guint version);
-gint svcdb_model_delete_force (const gchar *name, const guint version, const gboolean force);
+gint svcdb_model_delete (const gchar *name, const guint version, const gboolean force);
 gint svcdb_resource_add (const gchar *name, const gchar *path, const gchar *description, const gchar *app_info);
 gint svcdb_resource_get (const gchar *name, gchar **res_info);
 gint svcdb_resource_delete (const gchar *name);
index a82a21149edf51680674c0b2d9b002b5b3008474..f53469426b4f4ab920b85ac3bd9ae5ac532e613f 100644 (file)
@@ -675,7 +675,7 @@ MLServiceDB::get_model (const std::string name, const gint version, gchar **mode
  * @brief Delete the model.
  * @param[in] name The unique name to delete.
  * @param[in] version The version of the model to delete.
- * @param[in] force The model to delete by force (default is false). 
+ * @param[in] force The model to delete by force (default is false).
  */
 void
 MLServiceDB::delete_model (const std::string name, const guint version, const gboolean force)
@@ -877,6 +877,7 @@ svcdb_initialize (const gchar *path)
   }
 
   g_svcdb_instance = new MLServiceDB (path);
+  g_assert (g_svcdb_instance);
   g_svcdb_instance->connectDB ();
 }
 
@@ -1127,31 +1128,6 @@ svcdb_model_get_all (const gchar *name, gchar **model_info)
   return ret;
 }
 
-/**
- * @brief Delete the model.
- * @param[in] name The unique name to delete.
- * @param[in] version The version of the model to delete.
- * @return @c 0 on success. Otherwise a negative error value.
- */
-gint
-svcdb_model_delete (const gchar *name, const guint version)
-{
-  gint ret = 0;
-  MLServiceDB *db = svcdb_get ();
-
-  try {
-    db->delete_model (name, version);
-  } catch (const std::invalid_argument &e) {
-    ml_loge ("%s", e.what ());
-    ret = -EINVAL;
-  } catch (const std::exception &e) {
-    ml_loge ("%s", e.what ());
-    ret = -EIO;
-  }
-
-  return ret;
-}
-
 /**
  * @brief Delete the model.
  * @param[in] name The unique name to delete.
@@ -1160,7 +1136,7 @@ svcdb_model_delete (const gchar *name, const guint version)
  * @return @c 0 on success. Otherwise a negative error value.
  */
 gint
-svcdb_model_delete_force (const gchar *name, const guint version, const gboolean force)
+svcdb_model_delete (const gchar *name, const guint version, const gboolean force)
 {
   gint ret = 0;
   MLServiceDB *db = svcdb_get ();
@@ -1178,7 +1154,6 @@ svcdb_model_delete_force (const gchar *name, const guint version, const gboolean
   return ret;
 }
 
-
 /**
  * @brief Set the resource with given name.
  * @param[in] name Unique name of ml-resource.
index 221bbe03db8184618d015ccf8e8e4d425b7285a9..f46ed7afd3c4a87d70137657b7e2749fbb8a7adc 100644 (file)
@@ -39,8 +39,8 @@ class MLServiceDB
       const guint version, const std::string description);
   virtual void activate_model (const std::string name, const guint version);
   virtual void get_model (const std::string name, const gint version, gchar **model);
-  virtual void delete_model (
-      const std::string name, const guint version, const gboolean force = FALSE);
+  virtual void delete_model (const std::string name, const guint version,
+      const gboolean force = FALSE);
   virtual void set_resource (const std::string name, const std::string path,
       const std::string description, const std::string app_info);
   virtual void get_resource (const std::string name, gchar **resource);
index 62af5526e93be48fcfeb2a60721beee350b85633..711fc90bba1a572add808867b20010700b178758 100644 (file)
     </method>
     <!-- Delete model -->
     <method name="Delete">
-      <arg type="s" name="name" direction="in" />
-      <arg type="u" name="version" direction="in" />
-      <arg type="i" name="result" direction="out" />
-    </method>
-    <method name="DeleteForce">
       <arg type="s" name="name" direction="in" />
       <arg type="u" name="version" direction="in" />
       <arg type="b" name="force" direction="in" />
index 2b463674a76d85b230618a76fc1ea0ce4cac58d0..eaa739954d9d107f8438952a84aa4e295043fc93 100644 (file)
@@ -102,19 +102,17 @@ typedef enum {
  * @brief Internal function for uninstall models and pipelines.
  */
 static void
-_uninstall_rpk (const char *name, const char *_info, mlsvc_json_type_e json_type)
+_uninstall_rpk (const gchar *name, const gchar *_info, mlsvc_json_type_e json_type)
 {
-  g_autoptr (JsonParser) parser = NULL;
+  g_autoptr (JsonParser) parser = json_parser_new ();
   g_autoptr (GError) err = NULL;
   JsonNode *root;
   JsonObject *object;
   JsonArray *array = NULL;
-
-  parser = json_parser_new ();
   guint _info_len = 1U;
 
   if (!json_parser_load_from_data (parser, _info, -1, &err)) {
-    _E ("Failed to load '%s' info data.", name);
+    _E ("Failed to load '%s' info data (%s).", name, err ? err->message : "Unknown error");
     return;
   }
 
@@ -137,6 +135,7 @@ _uninstall_rpk (const char *name, const char *_info, mlsvc_json_type_e json_type
   /* Update ML service database. */
   for (guint i = 0; i < _info_len; ++i) {
     int ret = 0;
+
     if (array)
       object = json_array_get_object_element (array, i);
     else
@@ -175,7 +174,8 @@ _uninstall_rpk (const char *name, const char *_info, mlsvc_json_type_e json_type
       case MLSVC_JSON_MODEL:
         {
           const gchar *version = json_object_get_string_member (object, "version");
-          ret = ml_agent_model_delete_force (
+
+          ret = ml_agent_model_delete (
               name, (const uint32_t) g_ascii_strtoull (version, NULL, 10), TRUE);
 
           if (ret == 0) {
@@ -188,13 +188,12 @@ _uninstall_rpk (const char *name, const char *_info, mlsvc_json_type_e json_type
         break;
       case MLSVC_JSON_RESOURCE:
         {
-          /*TODO: Support delete resource installed by rpk*/
+          /** @todo Support delete resource installed by rpk */
         }
         break;
       default:
         _E ("Unknown json type '%d', internal error?", json_type);
         return;
-        break;
     }
   }
 
@@ -251,14 +250,15 @@ _parse_json (JsonNode *node, const gchar *app_info, mlsvc_json_type_e json_type,
             ret = ml_agent_model_register (name, model, active,
                 desc ? desc : "", app_info ? app_info : "", &version);
 
-            if (ret == 0)
+            if (ret == 0) {
               _I ("The model with name '%s' is registered as version '%u'.", name, version);
-            else {
+            else {
               _E ("Failed to register the model with name '%s'.", name);
               return FALSE;
             }
           } else if (event == MLSVC_PKGMGR_MDPARSER_PLUGIN_EVENT_TYPE_UNINSTALL) {
-            g_autofree char *model_info = NULL;
+            g_autofree gchar *model_info = NULL;
+
             ret = ml_agent_model_get_all (name, &model_info);
 
             if (ret == 0) {
@@ -285,19 +285,18 @@ _parse_json (JsonNode *node, const gchar *app_info, mlsvc_json_type_e json_type,
           if (event == MLSVC_PKGMGR_MDPARSER_PLUGIN_EVENT_TYPE_INSTALL) {
             ret = ml_agent_pipeline_set_description (name, pipe);
 
-            if (ret == 0)
+            if (ret == 0) {
               _I ("The pipeline description with name '%s' is registered.", name);
-            else {
+            else {
               _E ("Failed to register pipeline with name '%s'.", name);
               return FALSE;
             }
-
           } else if (event == MLSVC_PKGMGR_MDPARSER_PLUGIN_EVENT_TYPE_UNINSTALL) {
             ret = ml_agent_pipeline_delete (name);
 
-            if (ret == 0)
+            if (ret == 0) {
               _I ("The pipeline description with name '%s' is deleted.", name);
-            else {
+            else {
               _E ("Failed to delete pipeline with name '%s'.", name);
               return FALSE;
             }
@@ -349,9 +348,9 @@ _parse_json (JsonNode *node, const gchar *app_info, mlsvc_json_type_e json_type,
               ret = ml_agent_resource_add (
                   name, path, desc ? desc : "", app_info ? app_info : "");
 
-              if (ret == 0)
+              if (ret == 0) {
                 _I ("The resource at '%d'th of name '%s' is registered.", pidx, name);
-              else {
+              else {
                 _E ("Failed to register the resource with name '%s'.", name);
                 return FALSE;
               }
@@ -364,7 +363,6 @@ _parse_json (JsonNode *node, const gchar *app_info, mlsvc_json_type_e json_type,
             } else {
               _I ("The model with name '%s' is already deleted or not installed", name);
             }
-
           } else {
             _E ("Unknown event type '%d', internal error?", event);
             return FALSE;
@@ -374,7 +372,6 @@ _parse_json (JsonNode *node, const gchar *app_info, mlsvc_json_type_e json_type,
       default:
         _E ("Unknown data type '%d', internal error?", json_type);
         return FALSE;
-        break;
     }
   }
   return TRUE;
@@ -384,7 +381,7 @@ _parse_json (JsonNode *node, const gchar *app_info, mlsvc_json_type_e json_type,
  * @brief Internal function to get json configuration file.
  */
 static gboolean
-_get_json_config (const char *json_path, const gchar *app_info,
+_get_json_config (const gchar *json_path, const gchar *app_info,
     mlsvc_package_manager_event_type_e event)
 {
   g_autofree gchar *json_string = NULL;
@@ -428,31 +425,24 @@ _get_json_config (const char *json_path, const gchar *app_info,
 
   for (iter = members; iter != NULL; iter = iter->next) {
     const gchar *name = (const gchar *) iter->data;
-    JsonNode *node;
+    JsonNode *node = json_object_get_member (object, name);
+    mlsvc_json_type_e json_type;
 
     if (g_ascii_strcasecmp (name, "model") == 0 || g_ascii_strcasecmp (name, "models") == 0) {
-      node = json_object_get_member (object, name);
-      if (!_parse_json (node, app_info, MLSVC_JSON_MODEL, event)) {
-        _E ("Failed to parse the models");
-        return FALSE;
-      }
+      json_type = MLSVC_JSON_MODEL;
     } else if (g_ascii_strcasecmp (name, "pipeline") == 0
                || g_ascii_strcasecmp (name, "pipelines") == 0) {
-      node = json_object_get_member (object, name);
-      if (!_parse_json (node, app_info, MLSVC_JSON_PIPELINE, event)) {
-        _E ("Failed to parse the pipelines");
-        return FALSE;
-      }
+      json_type = MLSVC_JSON_PIPELINE;
     } else if (g_ascii_strcasecmp (name, "resource") == 0
                || g_ascii_strcasecmp (name, "resources") == 0) {
-      node = json_object_get_member (object, name);
-      if (!_parse_json (node, app_info, MLSVC_JSON_RESOURCE, event)) {
-        _E ("Failed to parse the resources.");
-        return FALSE;
-      }
+      json_type = MLSVC_JSON_RESOURCE;
     } else {
-      _E ("Failed to parse configuration file, %s cannot get the valid type from configuration.",
-          name);
+      _E ("Failed to parse '%s' from configuration file, unsupported type.", name);
+      return FALSE;
+    }
+
+    if (!_parse_json (node, app_info, json_type, event)) {
+      _E ("Failed to parse '%s' from configuration file.", name);
       return FALSE;
     }
   }
@@ -460,11 +450,11 @@ _get_json_config (const char *json_path, const gchar *app_info,
   return TRUE;
 }
 
-/** 
+/**
  * @brief Internal function to set pkg-mgr parser
  */
 static int
-_set_pkgmgr_plugin (const char *pkgid, const char *appid, GList *metadata,
+_set_pkgmgr_plugin (const gchar *pkgid, const gchar *appid, GList *metadata,
     mlsvc_package_manager_event_type_e event)
 {
   GList *list = NULL;
@@ -581,7 +571,7 @@ PKGMGR_MDPARSER_PLUGIN_UPGRADE (const char *pkgid, const char *appid, GList *met
   _I ("PKGMGR_MDPARSER_PLUGIN_UPGRADE called");
   PKGMGR_MDPARSER_PLUGIN_UNINSTALL (pkgid, appid, metadata);
   PKGMGR_MDPARSER_PLUGIN_INSTALL (pkgid, appid, metadata);
-  
+
   return 0;
 }
 
index 38652252742f3df20ae796b24cbf5e50952919ff..6281f4b23531ab58b580ce71a87b2b83e68643ae 100644 (file)
@@ -289,7 +289,7 @@ TEST_F (MLAgentTest, model)
   g_free (model_info);
   model_info = NULL;
 
-  ret = ml_agent_model_delete ("test-model", 0U);
+  ret = ml_agent_model_delete ("test-model", 0U, TRUE);
   EXPECT_EQ (ret, 0);
 }
 
@@ -340,7 +340,7 @@ TEST_F (MLAgentTest, model_update_description_01_n)
   ret = ml_agent_model_update_description ("test-model", (ver + 5U), "desc");
   EXPECT_NE (ret, 0);
 
-  ret = ml_agent_model_delete ("test-model", 0U);
+  ret = ml_agent_model_delete ("test-model", 0U, TRUE);
   EXPECT_EQ (ret, 0);
 
   /* no registered model */
@@ -371,7 +371,7 @@ TEST_F (MLAgentTest, model_activate_01_n)
   ret = ml_agent_model_activate ("test-model", (ver + 5U));
   EXPECT_NE (ret, 0);
 
-  ret = ml_agent_model_delete ("test-model", 0U);
+  ret = ml_agent_model_delete ("test-model", 0U, TRUE);
   EXPECT_EQ (ret, 0);
 
   /* no registered model */
@@ -405,7 +405,7 @@ TEST_F (MLAgentTest, model_get_01_n)
   ret = ml_agent_model_get ("test-model", (ver + 5U), &model_info);
   EXPECT_NE (ret, 0);
 
-  ret = ml_agent_model_delete ("test-model", 0U);
+  ret = ml_agent_model_delete ("test-model", 0U, TRUE);
   EXPECT_EQ (ret, 0);
 
   /* no registered model */
@@ -437,7 +437,7 @@ TEST_F (MLAgentTest, model_get_activated_01_n)
   ret = ml_agent_model_get_activated ("test-model", &model_info);
   EXPECT_NE (ret, 0);
 
-  ret = ml_agent_model_delete ("test-model", 0U);
+  ret = ml_agent_model_delete ("test-model", 0U, TRUE);
   EXPECT_EQ (ret, 0);
 
   /* no registered model */
@@ -477,20 +477,20 @@ TEST_F (MLAgentTest, model_delete_01_n)
       "test-model", "/path/model.tflite", FALSE, NULL, NULL, &ver);
   EXPECT_EQ (ret, 0);
 
-  ret = ml_agent_model_delete (NULL, ver);
+  ret = ml_agent_model_delete (NULL, ver, TRUE);
   EXPECT_NE (ret, 0);
-  ret = ml_agent_model_delete ("", ver);
+  ret = ml_agent_model_delete ("", ver, TRUE);
   EXPECT_NE (ret, 0);
 
   /* invalid version */
-  ret = ml_agent_model_delete ("test-model", (ver + 5U));
+  ret = ml_agent_model_delete ("test-model", (ver + 5U), TRUE);
   EXPECT_NE (ret, 0);
 
-  ret = ml_agent_model_delete ("test-model", 0U);
+  ret = ml_agent_model_delete ("test-model", 0U, TRUE);
   EXPECT_EQ (ret, 0);
 
   /* no registered model */
-  ret = ml_agent_model_delete ("test-model", 0U);
+  ret = ml_agent_model_delete ("test-model", 0U, TRUE);
   EXPECT_NE (ret, 0);
 }
 
index a78906eb642dc12ace7563e6b48e04b4d2a5ec15..4575f81b1ca32216b392d56000b3db5891d96a49 100644 (file)
@@ -868,9 +868,9 @@ TEST (serviceDBUtil, model_delete_n)
 
   svcdb_initialize (TEST_DB_PATH);
 
-  ret = svcdb_model_delete ("", 0U);
+  ret = svcdb_model_delete ("", 0U, TRUE);
   EXPECT_NE (ret, 0);
-  ret = svcdb_model_delete (NULL, 0U);
+  ret = svcdb_model_delete (NULL, 0U, TRUE);
   EXPECT_NE (ret, 0);
 
   svcdb_finalize ();