int env_set(HASHTBL * task_tbl, oph_operator_struct * handle) { if (!handle) { pmesg(LOG_ERROR, __FILE__, __LINE__, "Null Handle\n"); return OPH_ANALYTICS_OPERATOR_NULL_OPERATOR_HANDLE; } if (!task_tbl) { pmesg(LOG_ERROR, __FILE__, __LINE__, "Null operator string\n"); return OPH_ANALYTICS_OPERATOR_BAD_PARAMETER; } if (handle->operator_handle) { pmesg(LOG_ERROR, __FILE__, __LINE__, "Operator handle already initialized\n"); return OPH_ANALYTICS_OPERATOR_NOT_NULL_OPERATOR_HANDLE; } if (!(handle->operator_handle = (OPH_SPLIT_operator_handle *) calloc(1, sizeof(OPH_SPLIT_operator_handle)))) { pmesg(LOG_ERROR, __FILE__, __LINE__, "Error allocating memory\n"); logging(LOG_ERROR, __FILE__, __LINE__, OPH_GENERIC_CONTAINER_ID, OPH_LOG_OPH_SPLIT_MEMORY_ERROR_HANDLE); return OPH_ANALYTICS_OPERATOR_MEMORY_ERR; } //1 - Set up struct to empty values ((OPH_SPLIT_operator_handle *) handle->operator_handle)->id_input_datacube = 0; ((OPH_SPLIT_operator_handle *) handle->operator_handle)->id_output_datacube = 0; ((OPH_SPLIT_operator_handle *) handle->operator_handle)->id_input_container = 0; ((OPH_SPLIT_operator_handle *) handle->operator_handle)->id_output_container = 0; ((OPH_SPLIT_operator_handle *) handle->operator_handle)->id_job = 0; ((OPH_SPLIT_operator_handle *) handle->operator_handle)->fragment_ids = NULL; ((OPH_SPLIT_operator_handle *) handle->operator_handle)->objkeys = NULL; ((OPH_SPLIT_operator_handle *) handle->operator_handle)->objkeys_num = -1; ((OPH_SPLIT_operator_handle *) handle->operator_handle)->server = NULL; ((OPH_SPLIT_operator_handle *) handle->operator_handle)->sessionid = NULL; ((OPH_SPLIT_operator_handle *) handle->operator_handle)->id_user = 0; ((OPH_SPLIT_operator_handle *) handle->operator_handle)->description = NULL; ((OPH_SPLIT_operator_handle *) handle->operator_handle)->execute_error = 0; char *datacube_in; char *value; // retrieve objkeys value = hashtbl_get(task_tbl, OPH_IN_PARAM_OBJKEY_FILTER); if (!value) { pmesg(LOG_ERROR, __FILE__, __LINE__, "Missing input parameter %s\n", OPH_IN_PARAM_OBJKEY_FILTER); logging(LOG_ERROR, __FILE__, __LINE__, OPH_GENERIC_CONTAINER_ID, OPH_LOG_FRAMEWORK_MISSING_INPUT_PARAMETER, OPH_IN_PARAM_OBJKEY_FILTER); return OPH_ANALYTICS_OPERATOR_INVALID_PARAM; } if (oph_tp_parse_multiple_value_param(value, &((OPH_SPLIT_operator_handle *) handle->operator_handle)->objkeys, &((OPH_SPLIT_operator_handle *) handle->operator_handle)->objkeys_num)) { pmesg(LOG_ERROR, __FILE__, __LINE__, "Operator string not valid\n"); logging(LOG_ERROR, __FILE__, __LINE__, OPH_GENERIC_CONTAINER_ID, "Operator string not valid\n"); oph_tp_free_multiple_value_param_list(((OPH_SPLIT_operator_handle *) handle->operator_handle)->objkeys, ((OPH_SPLIT_operator_handle *) handle->operator_handle)->objkeys_num); return OPH_ANALYTICS_OPERATOR_INVALID_PARAM; } // retrieve sessionid value = hashtbl_get(task_tbl, OPH_ARG_SESSIONID); if (!value) { pmesg(LOG_ERROR, __FILE__, __LINE__, "Missing input parameter %s\n", OPH_ARG_SESSIONID); logging(LOG_ERROR, __FILE__, __LINE__, OPH_GENERIC_CONTAINER_ID, OPH_LOG_FRAMEWORK_MISSING_INPUT_PARAMETER, OPH_ARG_SESSIONID); return OPH_ANALYTICS_OPERATOR_INVALID_PARAM; } if (!(((OPH_SPLIT_operator_handle *) handle->operator_handle)->sessionid = (char *) strndup(value, OPH_TP_TASKLEN))) { pmesg(LOG_ERROR, __FILE__, __LINE__, "Error allocating memory\n"); logging(LOG_ERROR, __FILE__, __LINE__, OPH_GENERIC_CONTAINER_ID, OPH_LOG_GENERIC_MEMORY_ERROR_INPUT, "sessionid"); return OPH_ANALYTICS_OPERATOR_MEMORY_ERR; } //3 - Fill struct with the correct data value = hashtbl_get(task_tbl, OPH_IN_PARAM_DATACUBE_INPUT); datacube_in = value; if (!value) { pmesg(LOG_ERROR, __FILE__, __LINE__, "Missing input parameter %s\n", OPH_IN_PARAM_DATACUBE_INPUT); logging(LOG_ERROR, __FILE__, __LINE__, OPH_GENERIC_CONTAINER_ID, OPH_LOG_OPH_SPLIT_MISSING_INPUT_PARAMETER, OPH_IN_PARAM_DATACUBE_INPUT); return OPH_ANALYTICS_OPERATOR_INVALID_PARAM; } //For error checking int id_datacube_in[3] = { 0, 0, 0 }; value = hashtbl_get(task_tbl, OPH_ARG_USERNAME); if (!value) { pmesg(LOG_ERROR, __FILE__, __LINE__, "Missing input parameter %s\n", OPH_ARG_USERNAME); logging(LOG_ERROR, __FILE__, __LINE__, OPH_GENERIC_CONTAINER_ID, OPH_LOG_OPH_SPLIT_MISSING_INPUT_PARAMETER, OPH_ARG_USERNAME); return OPH_ANALYTICS_OPERATOR_INVALID_PARAM; } char *username = value; if (handle->proc_rank == 0) { //Only master process has to initialize and open connection to management OphidiaDB ophidiadb *oDB = &((OPH_SPLIT_operator_handle *) handle->operator_handle)->oDB; oph_odb_init_ophidiadb(oDB); if (oph_odb_read_ophidiadb_config_file(oDB)) { pmesg(LOG_ERROR, __FILE__, __LINE__, "Unable to read OphidiaDB configuration\n"); logging(LOG_ERROR, __FILE__, __LINE__, OPH_GENERIC_CONTAINER_ID, OPH_LOG_OPH_SPLIT_OPHIDIADB_CONFIGURATION_FILE); return OPH_ANALYTICS_OPERATOR_UTILITY_ERROR; } if (oph_odb_connect_to_ophidiadb(oDB)) { pmesg(LOG_ERROR, __FILE__, __LINE__, "Unable to connect to OphidiaDB. Check access parameters.\n"); logging(LOG_ERROR, __FILE__, __LINE__, OPH_GENERIC_CONTAINER_ID, OPH_LOG_OPH_SPLIT_OPHIDIADB_CONNECTION_ERROR); return OPH_ANALYTICS_OPERATOR_MYSQL_ERROR; } //Check if datacube exists (by ID container and datacube) int exists = 0; int status = 0; char *uri = NULL; int folder_id = 0; int permission = 0; if (oph_pid_parse_pid(datacube_in, &id_datacube_in[1], &id_datacube_in[0], &uri)) { pmesg(LOG_ERROR, __FILE__, __LINE__, "Unable to parse the PID string\n"); logging(LOG_ERROR, __FILE__, __LINE__, id_datacube_in[1], OPH_LOG_OPH_SPLIT_PID_ERROR, datacube_in); id_datacube_in[0] = 0; id_datacube_in[1] = 0; } else if ((oph_odb_cube_check_if_datacube_not_present_by_pid(oDB, uri, id_datacube_in[1], id_datacube_in[0], &exists)) || !exists) { pmesg(LOG_ERROR, __FILE__, __LINE__, "Unknown input container - datacube combination\n"); logging(LOG_ERROR, __FILE__, __LINE__, id_datacube_in[1], OPH_LOG_OPH_SPLIT_NO_INPUT_DATACUBE, datacube_in); id_datacube_in[0] = 0; id_datacube_in[1] = 0; } else if ((oph_odb_cube_check_datacube_availability(oDB, id_datacube_in[0], 0, &status)) || !status) { pmesg(LOG_ERROR, __FILE__, __LINE__, "I/O nodes storing datacube aren't available\n"); logging(LOG_ERROR, __FILE__, __LINE__, id_datacube_in[1], OPH_LOG_OPH_SPLIT_DATACUBE_AVAILABILITY_ERROR, datacube_in); id_datacube_in[0] = 0; id_datacube_in[1] = 0; } else if ((oph_odb_fs_retrive_container_folder_id(oDB, id_datacube_in[1], 1, &folder_id))) { pmesg(LOG_ERROR, __FILE__, __LINE__, "Unable to retrieve folder of specified datacube or container is hidden\n"); logging(LOG_ERROR, __FILE__, __LINE__, id_datacube_in[1], OPH_LOG_OPH_SPLIT_DATACUBE_FOLDER_ERROR, datacube_in); id_datacube_in[0] = 0; id_datacube_in[1] = 0; } else if ((oph_odb_fs_check_folder_session(folder_id, ((OPH_SPLIT_operator_handle *) handle->operator_handle)->sessionid, oDB, &permission)) || !permission) { //Check if user can work on datacube pmesg(LOG_ERROR, __FILE__, __LINE__, "User %s is not allowed to work on this datacube\n", username); logging(LOG_ERROR, __FILE__, __LINE__, id_datacube_in[1], OPH_LOG_OPH_SPLIT_DATACUBE_PERMISSION_ERROR, username); id_datacube_in[0] = 0; id_datacube_in[1] = 0; } if (uri) free(uri); uri = NULL; if (oph_odb_user_retrieve_user_id(oDB, username, &(((OPH_SPLIT_operator_handle *) handle->operator_handle)->id_user))) { pmesg(LOG_ERROR, __FILE__, __LINE__, "Unable to extract userid.\n"); logging(LOG_ERROR, __FILE__, __LINE__, ((OPH_SPLIT_operator_handle *) handle->operator_handle)->id_input_container, OPH_LOG_GENERIC_USER_ID_ERROR); return OPH_ANALYTICS_OPERATOR_INVALID_PARAM; } id_datacube_in[2] = id_datacube_in[1]; if (id_datacube_in[1]) { value = hashtbl_get(task_tbl, OPH_IN_PARAM_CONTAINER_INPUT); if (!value) { pmesg(LOG_ERROR, __FILE__, __LINE__, "Missing input parameter %s\n", OPH_IN_PARAM_CONTAINER_INPUT); logging(LOG_ERROR, __FILE__, __LINE__, id_datacube_in[1], OPH_LOG_FRAMEWORK_MISSING_INPUT_PARAMETER, OPH_IN_PARAM_CONTAINER_INPUT); return OPH_ANALYTICS_OPERATOR_INVALID_PARAM; } if (strncmp(value, OPH_COMMON_DEFAULT_EMPTY_VALUE, OPH_TP_TASKLEN)) { if (oph_odb_fs_retrieve_container_id_from_container_name(oDB, folder_id, value, 0, &id_datacube_in[2])) { pmesg(LOG_ERROR, __FILE__, __LINE__, "Unable to retrieve folder of specified container or it is hidden\n"); logging(LOG_ERROR, __FILE__, __LINE__, id_datacube_in[1], OPH_LOG_GENERIC_DATACUBE_FOLDER_ERROR, value); id_datacube_in[0] = 0; id_datacube_in[1] = 0; } } } } //Broadcast to all other processes the fragment relative index MPI_Bcast(id_datacube_in, 3, MPI_INT, 0, MPI_COMM_WORLD); //Check if sequential part has been completed if (id_datacube_in[0] == 0) { pmesg(LOG_ERROR, __FILE__, __LINE__, "Master procedure or broadcasting has failed\n"); logging(LOG_ERROR, __FILE__, __LINE__, id_datacube_in[1], OPH_LOG_OPH_SPLIT_NO_INPUT_DATACUBE, datacube_in); return OPH_ANALYTICS_OPERATOR_UTILITY_ERROR; } ((OPH_SPLIT_operator_handle *) handle->operator_handle)->id_input_datacube = id_datacube_in[0]; if (id_datacube_in[1] == 0) { pmesg(LOG_ERROR, __FILE__, __LINE__, "Master procedure or broadcasting has failed\n"); logging(LOG_ERROR, __FILE__, __LINE__, id_datacube_in[1], OPH_LOG_OPH_SPLIT_NO_INPUT_CONTAINER, datacube_in); return OPH_ANALYTICS_OPERATOR_UTILITY_ERROR; } ((OPH_SPLIT_operator_handle *) handle->operator_handle)->id_input_container = id_datacube_in[1]; ((OPH_SPLIT_operator_handle *) handle->operator_handle)->id_output_container = id_datacube_in[2]; value = hashtbl_get(task_tbl, OPH_IN_PARAM_SCHEDULE_ALGORITHM); if (!value) { pmesg(LOG_ERROR, __FILE__, __LINE__, "Missing input parameter %s\n", OPH_IN_PARAM_SCHEDULE_ALGORITHM); logging(LOG_ERROR, __FILE__, __LINE__, id_datacube_in[1], OPH_LOG_OPH_SPLIT_MISSING_INPUT_PARAMETER, OPH_IN_PARAM_SCHEDULE_ALGORITHM); return OPH_ANALYTICS_OPERATOR_INVALID_PARAM; } ((OPH_SPLIT_operator_handle *) handle->operator_handle)->schedule_algo = (int) strtol(value, NULL, 10); value = hashtbl_get(task_tbl, OPH_IN_PARAM_SPLIT_IN_FRAGMENTS); if (!value) { pmesg(LOG_ERROR, __FILE__, __LINE__, "Missing input parameter %s\n", OPH_IN_PARAM_SPLIT_IN_FRAGMENTS); logging(LOG_ERROR, __FILE__, __LINE__, id_datacube_in[1], OPH_LOG_OPH_SPLIT_MISSING_INPUT_PARAMETER, OPH_IN_PARAM_SPLIT_IN_FRAGMENTS); return OPH_ANALYTICS_OPERATOR_INVALID_PARAM; } ((OPH_SPLIT_operator_handle *) handle->operator_handle)->split_number = (int) strtol(value, NULL, 10); value = hashtbl_get(task_tbl, OPH_ARG_IDJOB); if (!value) ((OPH_SPLIT_operator_handle *) handle->operator_handle)->id_job = 0; else ((OPH_SPLIT_operator_handle *) handle->operator_handle)->id_job = (int) strtol(value, NULL, 10); value = hashtbl_get(task_tbl, OPH_IN_PARAM_DESCRIPTION); if (!value) { pmesg(LOG_ERROR, __FILE__, __LINE__, "Missing input parameter %s\n", OPH_IN_PARAM_DESCRIPTION); logging(LOG_ERROR, __FILE__, __LINE__, id_datacube_in[1], OPH_LOG_FRAMEWORK_MISSING_INPUT_PARAMETER, OPH_IN_PARAM_DESCRIPTION); return OPH_ANALYTICS_OPERATOR_INVALID_PARAM; } if (strncmp(value, OPH_COMMON_DEFAULT_EMPTY_VALUE, OPH_TP_TASKLEN)) { if (!(((OPH_SPLIT_operator_handle *) handle->operator_handle)->description = (char *) strndup(value, OPH_TP_TASKLEN))) { logging(LOG_ERROR, __FILE__, __LINE__, id_datacube_in[1], OPH_LOG_OPH_SPLIT_MEMORY_ERROR_INPUT, "description"); pmesg(LOG_ERROR, __FILE__, __LINE__, "Error allocating memory\n"); return OPH_ANALYTICS_OPERATOR_MEMORY_ERR; } } return OPH_ANALYTICS_OPERATOR_SUCCESS; }
int oph_metadata_crud(OPH_METADATA_operator_handle *handle, MYSQL_RES **read_result) { *read_result = NULL; ophidiadb *oDB = &((OPH_METADATA_operator_handle*)handle)->oDB; //Fill and execute the appropriate query switch (handle->mode) { case OPH_METADATA_MODE_INSERT_VALUE: { if (!IS_OPH_ROLE_PRESENT(handle->userrole,OPH_ROLE_WRITE_POS)) { pmesg(LOG_ERROR, __FILE__, __LINE__, "At least \"%s\" permission is needed for this particular operation\n",OPH_ROLE_WRITE_STR); logging(LOG_ERROR,__FILE__,__LINE__, OPH_GENERIC_CONTAINER_ID,OPH_LOG_GENERIC_INVALID_USERROLE_ERROR,OPH_ROLE_WRITE_STR); return OPH_ANALYTICS_OPERATOR_BAD_PARAMETER; } int idkey,idtype,iduser,idmetadatainstance; if( !handle->metadata_keys || !handle->metadata_value){ pmesg(LOG_ERROR, __FILE__, __LINE__, OPH_LOG_OPH_METADATA_INSERT_INSTANCE_ERROR); logging(LOG_ERROR, __FILE__, __LINE__, OPH_GENERIC_CONTAINER_ID, OPH_LOG_OPH_METADATA_INSERT_INSTANCE_ERROR); return OPH_ANALYTICS_OPERATOR_MEMORY_ERR; } //retrieve type id if(oph_odb_meta_retrieve_metadatatype_id(oDB, handle->metadata_type, &idtype)){ pmesg(LOG_ERROR, __FILE__, __LINE__, OPH_LOG_OPH_METADATA_RETRIEVE_TYPE_ID_ERROR,handle->metadata_type); logging(LOG_ERROR, __FILE__, __LINE__, OPH_GENERIC_CONTAINER_ID, OPH_LOG_OPH_METADATA_RETRIEVE_TYPE_ID_ERROR,handle->metadata_type); return OPH_ANALYTICS_OPERATOR_BAD_PARAMETER; } //Retrieve user id if(oph_odb_user_retrieve_user_id(oDB, handle->user, &iduser)){ pmesg(LOG_ERROR, __FILE__, __LINE__, OPH_LOG_OPH_METADATA_RETRIEVE_USER_ID_ERROR,handle->user); logging(LOG_ERROR, __FILE__, __LINE__, OPH_GENERIC_CONTAINER_ID, OPH_LOG_OPH_METADATA_RETRIEVE_USER_ID_ERROR,handle->user); return OPH_ANALYTICS_OPERATOR_BAD_PARAMETER; } char** metadata_values = NULL; int i, metadata_values_num = 0; if (handle->metadata_keys_num>1) { if(oph_tp_parse_multiple_value_param(handle->metadata_value, &metadata_values, &metadata_values_num)) { pmesg(LOG_ERROR, __FILE__, __LINE__, OPH_LOG_OPH_METADATA_RETRIEVE_VALUE_ERROR, handle->metadata_value); logging(LOG_ERROR, __FILE__, __LINE__, OPH_GENERIC_CONTAINER_ID, OPH_LOG_OPH_METADATA_RETRIEVE_VALUE_ERROR, handle->metadata_value); oph_tp_free_multiple_value_param_list(metadata_values, metadata_values_num); return OPH_ANALYTICS_OPERATOR_BAD_PARAMETER; } if (handle->metadata_keys_num != metadata_values_num) { pmesg(LOG_ERROR, __FILE__, __LINE__, OPH_LOG_OPH_METADATA_RETRIEVE_VALUE_ERROR, handle->metadata_value); logging(LOG_ERROR, __FILE__, __LINE__, OPH_GENERIC_CONTAINER_ID, OPH_LOG_OPH_METADATA_RETRIEVE_VALUE_ERROR, handle->metadata_value); oph_tp_free_multiple_value_param_list(metadata_values, metadata_values_num); return OPH_ANALYTICS_OPERATOR_BAD_PARAMETER; } } for (i=0;i<handle->metadata_keys_num;++i) { //retrieve key id if(oph_odb_meta_retrieve_metadatakey_id(oDB, handle->metadata_keys[i], handle->variable, handle->id_container_input, 1, &idkey)){ pmesg(LOG_ERROR, __FILE__, __LINE__, OPH_LOG_OPH_METADATA_RETRIEVE_KEY_ID_ERROR,handle->metadata_keys[i]); logging(LOG_ERROR, __FILE__, __LINE__, OPH_GENERIC_CONTAINER_ID, OPH_LOG_OPH_METADATA_RETRIEVE_KEY_ID_ERROR,handle->metadata_keys[i]); if (handle->metadata_keys_num>1) oph_tp_free_multiple_value_param_list(metadata_values, metadata_values_num); return OPH_ANALYTICS_OPERATOR_BAD_PARAMETER; } //insert into medatainstance table if(oph_odb_meta_insert_into_metadatainstance_table(oDB, handle->id_datacube_input, idkey, idtype, handle->metadata_keys_num>1 ? metadata_values[i] : handle->metadata_value, &idmetadatainstance)){ pmesg(LOG_ERROR, __FILE__, __LINE__, OPH_LOG_OPH_METADATA_INSERT_INSTANCE_ERROR); logging(LOG_ERROR, __FILE__, __LINE__, OPH_GENERIC_CONTAINER_ID, OPH_LOG_OPH_METADATA_INSERT_INSTANCE_ERROR); if (handle->metadata_keys_num>1) oph_tp_free_multiple_value_param_list(metadata_values, metadata_values_num); return OPH_ANALYTICS_OPERATOR_MEMORY_ERR; } //insert into manage table if(oph_odb_meta_insert_into_manage_table(oDB, idmetadatainstance, iduser)){ pmesg(LOG_ERROR, __FILE__, __LINE__, OPH_LOG_OPH_METADATA_INSERT_MANAGE_ERROR); logging(LOG_ERROR, __FILE__, __LINE__, OPH_GENERIC_CONTAINER_ID, OPH_LOG_OPH_METADATA_INSERT_MANAGE_ERROR); if (handle->metadata_keys_num>1) oph_tp_free_multiple_value_param_list(metadata_values, metadata_values_num); return OPH_ANALYTICS_OPERATOR_MEMORY_ERR; } } if (handle->metadata_keys_num>1) oph_tp_free_multiple_value_param_list(metadata_values, metadata_values_num); break; } case OPH_METADATA_MODE_READ_VALUE: { char *id_metadatainstance = NULL; if (handle->metadata_id >0 ) { //read one or more metadata with filters id_metadatainstance = handle->metadata_id_str; } if(oph_odb_meta_find_complete_metadata_list(oDB, handle->id_datacube_input, (const char **)handle->metadata_keys, handle->metadata_keys_num, id_metadatainstance, handle->metadata_type_filter, handle->metadata_value_filter, read_result)){ pmesg(LOG_ERROR, __FILE__, __LINE__, OPH_LOG_OPH_METADATA_READ_METADATA_ERROR); logging(LOG_ERROR, __FILE__, __LINE__, OPH_GENERIC_CONTAINER_ID, OPH_LOG_OPH_METADATA_READ_METADATA_ERROR); return OPH_ANALYTICS_OPERATOR_MYSQL_ERROR; } break; } case OPH_METADATA_MODE_UPDATE_VALUE: { if (!IS_OPH_ROLE_PRESENT(handle->userrole,OPH_ROLE_WRITE_POS)) { pmesg(LOG_ERROR, __FILE__, __LINE__, "At least \"%s\" permission is needed for this particular operation\n",OPH_ROLE_WRITE_STR); logging(LOG_ERROR,__FILE__,__LINE__, OPH_GENERIC_CONTAINER_ID,OPH_LOG_GENERIC_INVALID_USERROLE_ERROR,OPH_ROLE_WRITE_STR); return OPH_ANALYTICS_OPERATOR_BAD_PARAMETER; } int iduser = 0, exists = 0; if( !handle->metadata_id || !handle->metadata_value){ pmesg(LOG_ERROR, __FILE__, __LINE__, OPH_LOG_OPH_METADATA_UPDATE_INSTANCE_ERROR); logging(LOG_ERROR, __FILE__, __LINE__, OPH_GENERIC_CONTAINER_ID, OPH_LOG_OPH_METADATA_UPDATE_INSTANCE_ERROR); return OPH_ANALYTICS_OPERATOR_MEMORY_ERR; } //Check metadata instance id if(oph_odb_meta_check_metadatainstance_existance(oDB, handle->metadata_id, handle->id_datacube_input, &exists) || !exists){ pmesg(LOG_ERROR, __FILE__, __LINE__, OPH_LOG_OPH_METADATA_RETRIEVE_METADATAINSTANCE_FORCE_ERROR,handle->metadata_id); logging(LOG_ERROR, __FILE__, __LINE__, OPH_GENERIC_CONTAINER_ID, OPH_LOG_OPH_METADATA_RETRIEVE_METADATAINSTANCE_FORCE_ERROR,handle->metadata_id); return OPH_ANALYTICS_OPERATOR_BAD_PARAMETER; } //Retrieve user id if(oph_odb_user_retrieve_user_id(oDB, handle->user, &iduser)){ pmesg(LOG_ERROR, __FILE__, __LINE__, OPH_LOG_OPH_METADATA_RETRIEVE_USER_ID_ERROR,handle->user); logging(LOG_ERROR, __FILE__, __LINE__, OPH_GENERIC_CONTAINER_ID, OPH_LOG_OPH_METADATA_RETRIEVE_USER_ID_ERROR,handle->user); return OPH_ANALYTICS_OPERATOR_BAD_PARAMETER; } //update medatainstance table if(oph_odb_meta_update_metadatainstance_table(oDB, handle->metadata_id, handle->id_datacube_input, handle->metadata_value, handle->force)){ pmesg(LOG_ERROR, __FILE__, __LINE__, OPH_LOG_OPH_METADATA_UPDATE_INSTANCE_ERROR); logging(LOG_ERROR, __FILE__, __LINE__, OPH_GENERIC_CONTAINER_ID, OPH_LOG_OPH_METADATA_UPDATE_INSTANCE_ERROR); return OPH_ANALYTICS_OPERATOR_MEMORY_ERR; } //insert into manage table if(oph_odb_meta_insert_into_manage_table(oDB, handle->metadata_id, iduser)){ pmesg(LOG_ERROR, __FILE__, __LINE__, OPH_LOG_OPH_METADATA_INSERT_MANAGE_ERROR); logging(LOG_ERROR, __FILE__, __LINE__, OPH_GENERIC_CONTAINER_ID, OPH_LOG_OPH_METADATA_INSERT_MANAGE_ERROR); return OPH_ANALYTICS_OPERATOR_MEMORY_ERR; } break; } case OPH_METADATA_MODE_DELETE_VALUE: { if (!IS_OPH_ROLE_PRESENT(handle->userrole,OPH_ROLE_WRITE_POS)) { pmesg(LOG_ERROR, __FILE__, __LINE__, "At least \"%s\" permission is needed for this particular operation\n",OPH_ROLE_WRITE_STR); logging(LOG_ERROR,__FILE__,__LINE__, OPH_GENERIC_CONTAINER_ID,OPH_LOG_GENERIC_INVALID_USERROLE_ERROR,OPH_ROLE_WRITE_STR); return OPH_ANALYTICS_OPERATOR_BAD_PARAMETER; } if(oph_odb_meta_delete_from_metadatainstance_table(oDB, handle->id_datacube_input, (const char **)handle->metadata_keys, handle->metadata_keys_num, handle->metadata_id, handle->force)){ pmesg(LOG_ERROR, __FILE__, __LINE__, OPH_LOG_OPH_METADATA_DELETE_INSTANCE_ERROR); logging(LOG_ERROR, __FILE__, __LINE__, OPH_GENERIC_CONTAINER_ID, OPH_LOG_OPH_METADATA_DELETE_INSTANCE_ERROR); return OPH_ANALYTICS_OPERATOR_MYSQL_ERROR; } break; } default: pmesg(LOG_ERROR, __FILE__, __LINE__,OPH_LOG_OPH_METADATA_MODE_ERROR, handle->mode); logging(LOG_ERROR, __FILE__, __LINE__, OPH_GENERIC_CONTAINER_ID, OPH_LOG_OPH_METADATA_MODE_ERROR, handle->mode); return OPH_ANALYTICS_OPERATOR_BAD_PARAMETER; } //End of query processing return OPH_ANALYTICS_OPERATOR_SUCCESS; }