Code clean, remove unnecessary dbus sig and update interface param.
Signed-off-by: Jaeyun Jung <jy1210.jung@samsung.com>
#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"
/**
* @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.
/**
* @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;
}
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);
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
*
* @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;
}
.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,
- },
};
/**
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);
* @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)
}
g_svcdb_instance = new MLServiceDB (path);
+ g_assert (g_svcdb_instance);
g_svcdb_instance->connectDB ();
}
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.
* @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 ();
return ret;
}
-
/**
* @brief Set the resource with given name.
* @param[in] name Unique name of ml-resource.
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);
</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" />
* @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;
}
/* 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
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) {
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;
}
}
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) {
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;
}
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;
}
} 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;
default:
_E ("Unknown data type '%d', internal error?", json_type);
return FALSE;
- break;
}
}
return TRUE;
* @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;
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;
}
}
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;
_I ("PKGMGR_MDPARSER_PLUGIN_UPGRADE called");
PKGMGR_MDPARSER_PLUGIN_UNINSTALL (pkgid, appid, metadata);
PKGMGR_MDPARSER_PLUGIN_INSTALL (pkgid, appid, metadata);
-
+
return 0;
}
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);
}
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 */
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 */
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 */
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 */
"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);
}
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 ();