int env_unset(oph_operator_struct *handle) { //If NULL return success; it's already free if (!handle || !handle->operator_handle) return OPH_ANALYTICS_OPERATOR_SUCCESS; oph_odb_disconnect_from_ophidiadb(&((OPH_DELETECONTAINER_operator_handle*)handle->operator_handle)->oDB); oph_odb_free_ophidiadb(&((OPH_DELETECONTAINER_operator_handle*)handle->operator_handle)->oDB); if(((OPH_DELETECONTAINER_operator_handle*)handle->operator_handle)->container_input){ free((char *)((OPH_DELETECONTAINER_operator_handle*)handle->operator_handle)->container_input); ((OPH_DELETECONTAINER_operator_handle*)handle->operator_handle)->container_input = NULL; } if(((OPH_DELETECONTAINER_operator_handle*)handle->operator_handle)->cwd){ free((char *)((OPH_DELETECONTAINER_operator_handle*)handle->operator_handle)->cwd); ((OPH_DELETECONTAINER_operator_handle*)handle->operator_handle)->cwd = NULL; } if(((OPH_DELETECONTAINER_operator_handle*)handle->operator_handle)->user){ free((char *)((OPH_DELETECONTAINER_operator_handle*)handle->operator_handle)->user); ((OPH_DELETECONTAINER_operator_handle*)handle->operator_handle)->user = NULL; } if(((OPH_DELETECONTAINER_operator_handle*)handle->operator_handle)->objkeys){ oph_tp_free_multiple_value_param_list(((OPH_DELETECONTAINER_operator_handle*)handle->operator_handle)->objkeys, ((OPH_DELETECONTAINER_operator_handle*)handle->operator_handle)->objkeys_num); ((OPH_DELETECONTAINER_operator_handle*)handle->operator_handle)->objkeys = NULL; } if(((OPH_DELETECONTAINER_operator_handle*)handle->operator_handle)->sessionid){ free((char *)((OPH_DELETECONTAINER_operator_handle*)handle->operator_handle)->sessionid); ((OPH_DELETECONTAINER_operator_handle*)handle->operator_handle)->sessionid = NULL; } free((OPH_DELETECONTAINER_operator_handle*)handle->operator_handle); handle->operator_handle = NULL; return OPH_ANALYTICS_OPERATOR_SUCCESS; }
int env_unset(oph_operator_struct * handle) { //If NULL return success; it's already free if (!handle || !handle->operator_handle) return OPH_ANALYTICS_OPERATOR_SUCCESS; oph_odb_free_ophidiadb(&((OPH_PRIMITIVES_LIST_operator_handle *) handle->operator_handle)->oDB); if (((OPH_PRIMITIVES_LIST_operator_handle *) handle->operator_handle)->func_ret) { free((char *) ((OPH_PRIMITIVES_LIST_operator_handle *) handle->operator_handle)->func_ret); ((OPH_PRIMITIVES_LIST_operator_handle *) handle->operator_handle)->func_ret = NULL; } if (((OPH_PRIMITIVES_LIST_operator_handle *) handle->operator_handle)->func_type) { free((char *) ((OPH_PRIMITIVES_LIST_operator_handle *) handle->operator_handle)->func_type); ((OPH_PRIMITIVES_LIST_operator_handle *) handle->operator_handle)->func_type = NULL; } if (((OPH_PRIMITIVES_LIST_operator_handle *) handle->operator_handle)->name_filter) { free((char *) ((OPH_PRIMITIVES_LIST_operator_handle *) handle->operator_handle)->name_filter); ((OPH_PRIMITIVES_LIST_operator_handle *) handle->operator_handle)->name_filter = NULL; } if (((OPH_PRIMITIVES_LIST_operator_handle *) handle->operator_handle)->objkeys) { oph_tp_free_multiple_value_param_list(((OPH_PRIMITIVES_LIST_operator_handle *) handle->operator_handle)->objkeys, ((OPH_PRIMITIVES_LIST_operator_handle *) handle->operator_handle)->objkeys_num); ((OPH_PRIMITIVES_LIST_operator_handle *) handle->operator_handle)->objkeys = NULL; } free((OPH_PRIMITIVES_LIST_operator_handle *) handle->operator_handle); handle->operator_handle = NULL; return OPH_ANALYTICS_OPERATOR_SUCCESS; }
int env_unset(oph_operator_struct * handle) { //If NULL return success; it's already free if (!handle || !handle->operator_handle) return OPH_ANALYTICS_OPERATOR_SUCCESS; oph_odb_disconnect_from_ophidiadb(&((OPH_UNPUBLISH_operator_handle *) handle->operator_handle)->oDB); oph_odb_free_ophidiadb(&((OPH_UNPUBLISH_operator_handle *) handle->operator_handle)->oDB); if (((OPH_UNPUBLISH_operator_handle *) handle->operator_handle)->datacube_path) { free((char *) ((OPH_UNPUBLISH_operator_handle *) handle->operator_handle)->datacube_path); ((OPH_UNPUBLISH_operator_handle *) handle->operator_handle)->datacube_path = NULL; } if (((OPH_UNPUBLISH_operator_handle *) handle->operator_handle)->objkeys) { oph_tp_free_multiple_value_param_list(((OPH_UNPUBLISH_operator_handle *) handle->operator_handle)->objkeys, ((OPH_UNPUBLISH_operator_handle *) handle->operator_handle)->objkeys_num); ((OPH_UNPUBLISH_operator_handle *) handle->operator_handle)->objkeys = NULL; } if (((OPH_UNPUBLISH_operator_handle *) handle->operator_handle)->sessionid) { free((char *) ((OPH_UNPUBLISH_operator_handle *) handle->operator_handle)->sessionid); ((OPH_UNPUBLISH_operator_handle *) handle->operator_handle)->sessionid = NULL; } free((OPH_UNPUBLISH_operator_handle *) handle->operator_handle); handle->operator_handle = NULL; return OPH_ANALYTICS_OPERATOR_SUCCESS; }
int env_unset(oph_operator_struct * handle) { //If NULL return success; it's already free if (!handle || !handle->operator_handle) return OPH_ANALYTICS_OPERATOR_SUCCESS; //Only master process has to close and release connection to management OphidiaDB if (handle->proc_rank == 0) { oph_odb_disconnect_from_ophidiadb(&((OPH_SPLIT_operator_handle *) handle->operator_handle)->oDB); oph_odb_free_ophidiadb(&((OPH_SPLIT_operator_handle *) handle->operator_handle)->oDB); } if (((OPH_SPLIT_operator_handle *) handle->operator_handle)->fragment_ids) { free((char *) ((OPH_SPLIT_operator_handle *) handle->operator_handle)->fragment_ids); ((OPH_SPLIT_operator_handle *) handle->operator_handle)->fragment_ids = NULL; } if (((OPH_SPLIT_operator_handle *) handle->operator_handle)->objkeys) { oph_tp_free_multiple_value_param_list(((OPH_SPLIT_operator_handle *) handle->operator_handle)->objkeys, ((OPH_SPLIT_operator_handle *) handle->operator_handle)->objkeys_num); ((OPH_SPLIT_operator_handle *) handle->operator_handle)->objkeys = NULL; } if (((OPH_SPLIT_operator_handle *) handle->operator_handle)->sessionid) { free((char *) ((OPH_SPLIT_operator_handle *) handle->operator_handle)->sessionid); ((OPH_SPLIT_operator_handle *) handle->operator_handle)->sessionid = NULL; } if (((OPH_SPLIT_operator_handle *) handle->operator_handle)->description) { free((char *) ((OPH_SPLIT_operator_handle *) handle->operator_handle)->description); ((OPH_SPLIT_operator_handle *) handle->operator_handle)->description = NULL; } free((OPH_SPLIT_operator_handle *) handle->operator_handle); handle->operator_handle = NULL; return OPH_ANALYTICS_OPERATOR_SUCCESS; }
void cleanup() { pmesg(LOG_INFO, __FILE__, __LINE__, "Server shutdown\n"); oph_server_is_running = 0; sleep(1); mysql_library_end(); soap_destroy(psoap); soap_end(psoap); soap_done(psoap); CRYPTO_thread_cleanup(); if (logfile) { fclose(logfile); fclose(stdout); fclose(stderr); } if (oph_server_params) hashtbl_destroy(oph_server_params); #ifdef OPH_SERVER_LOCATION if (oph_server_location) free(oph_server_location); #endif if (orm) free_oph_rmanager(orm); if (ophDB) oph_odb_free_ophidiadb(ophDB); #if defined(_POSIX_THREADS) || defined(_SC_THREADS) pthread_mutex_destroy(&global_flag); pthread_mutex_destroy(&libssh2_flag); pthread_cond_destroy(&termination_flag); #endif oph_tp_end_xml_parser(); }
int env_unset(oph_operator_struct *handle) { //If NULL return success; it's already free if (!handle || !handle->operator_handle) return OPH_ANALYTICS_OPERATOR_SUCCESS; oph_odb_disconnect_from_ophidiadb(&((OPH_METADATA_operator_handle*)handle->operator_handle)->oDB); oph_odb_free_ophidiadb(&((OPH_METADATA_operator_handle*)handle->operator_handle)->oDB); if(((OPH_METADATA_operator_handle*)handle->operator_handle)->metadata_id_str){ free((char *)((OPH_METADATA_operator_handle*)handle->operator_handle)->metadata_id_str); ((OPH_METADATA_operator_handle*)handle->operator_handle)->metadata_id_str = NULL; } if(((OPH_METADATA_operator_handle*)handle->operator_handle)->metadata_keys){ oph_tp_free_multiple_value_param_list(((OPH_METADATA_operator_handle*)handle->operator_handle)->metadata_keys, ((OPH_METADATA_operator_handle*)handle->operator_handle)->metadata_keys_num); ((OPH_METADATA_operator_handle*)handle->operator_handle)->metadata_keys = NULL; } if(((OPH_METADATA_operator_handle*)handle->operator_handle)->variable){ free((char *)((OPH_METADATA_operator_handle*)handle->operator_handle)->variable); ((OPH_METADATA_operator_handle*)handle->operator_handle)->variable = NULL; } if(((OPH_METADATA_operator_handle*)handle->operator_handle)->metadata_type){ free((char *)((OPH_METADATA_operator_handle*)handle->operator_handle)->metadata_type); ((OPH_METADATA_operator_handle*)handle->operator_handle)->metadata_type = NULL; } if(((OPH_METADATA_operator_handle*)handle->operator_handle)->metadata_type_filter){ free((char *)((OPH_METADATA_operator_handle*)handle->operator_handle)->metadata_type_filter); ((OPH_METADATA_operator_handle*)handle->operator_handle)->metadata_type_filter = NULL; } if(((OPH_METADATA_operator_handle*)handle->operator_handle)->metadata_value){ free((char *)((OPH_METADATA_operator_handle*)handle->operator_handle)->metadata_value); ((OPH_METADATA_operator_handle*)handle->operator_handle)->metadata_value = NULL; } if(((OPH_METADATA_operator_handle*)handle->operator_handle)->metadata_value_filter){ free((char *)((OPH_METADATA_operator_handle*)handle->operator_handle)->metadata_value_filter); ((OPH_METADATA_operator_handle*)handle->operator_handle)->metadata_value_filter = NULL; } if(((OPH_METADATA_operator_handle*)handle->operator_handle)->user){ free((char *)((OPH_METADATA_operator_handle*)handle->operator_handle)->user); ((OPH_METADATA_operator_handle*)handle->operator_handle)->user = NULL; } if(((OPH_METADATA_operator_handle*)handle->operator_handle)->objkeys){ oph_tp_free_multiple_value_param_list(((OPH_METADATA_operator_handle*)handle->operator_handle)->objkeys, ((OPH_METADATA_operator_handle*)handle->operator_handle)->objkeys_num); ((OPH_METADATA_operator_handle*)handle->operator_handle)->objkeys = NULL; } if(((OPH_METADATA_operator_handle*)handle->operator_handle)->sessionid){ free((char *)((OPH_METADATA_operator_handle*)handle->operator_handle)->sessionid); ((OPH_METADATA_operator_handle*)handle->operator_handle)->sessionid = NULL; } free((OPH_METADATA_operator_handle*)handle->operator_handle); handle->operator_handle = NULL; return OPH_ANALYTICS_OPERATOR_SUCCESS; }
int env_unset(oph_operator_struct * handle) { //If NULL return success; it's already free if (!handle || !handle->operator_handle) return OPH_ANALYTICS_OPERATOR_SUCCESS; oph_odb_free_ophidiadb(&((OPH_SEARCH_operator_handle *) handle->operator_handle)->oDB); if (((OPH_SEARCH_operator_handle *) handle->operator_handle)->cwd) { free((char *) ((OPH_SEARCH_operator_handle *) handle->operator_handle)->cwd); ((OPH_SEARCH_operator_handle *) handle->operator_handle)->cwd = NULL; } if (((OPH_SEARCH_operator_handle *) handle->operator_handle)->path) { free((char *) ((OPH_SEARCH_operator_handle *) handle->operator_handle)->path); ((OPH_SEARCH_operator_handle *) handle->operator_handle)->path = NULL; } if (((OPH_SEARCH_operator_handle *) handle->operator_handle)->user) { free((char *) ((OPH_SEARCH_operator_handle *) handle->operator_handle)->user); ((OPH_SEARCH_operator_handle *) handle->operator_handle)->user = NULL; } if (((OPH_SEARCH_operator_handle *) handle->operator_handle)->container_filter) { oph_tp_free_multiple_value_param_list(((OPH_SEARCH_operator_handle *) handle->operator_handle)->container_filter, ((OPH_SEARCH_operator_handle *) handle->operator_handle)->container_filter_num); ((OPH_SEARCH_operator_handle *) handle->operator_handle)->container_filter = NULL; } if (((OPH_SEARCH_operator_handle *) handle->operator_handle)->metadata_key_filter) { oph_tp_free_multiple_value_param_list(((OPH_SEARCH_operator_handle *) handle->operator_handle)->metadata_key_filter, ((OPH_SEARCH_operator_handle *) handle->operator_handle)->metadata_key_filter_num); ((OPH_SEARCH_operator_handle *) handle->operator_handle)->metadata_key_filter = NULL; } if (((OPH_SEARCH_operator_handle *) handle->operator_handle)->metadata_value_filter) { oph_tp_free_multiple_value_param_list(((OPH_SEARCH_operator_handle *) handle->operator_handle)->metadata_value_filter, ((OPH_SEARCH_operator_handle *) handle->operator_handle)->metadata_value_filter_num); ((OPH_SEARCH_operator_handle *) handle->operator_handle)->metadata_value_filter = NULL; } if (((OPH_SEARCH_operator_handle *) handle->operator_handle)->objkeys) { oph_tp_free_multiple_value_param_list(((OPH_SEARCH_operator_handle *) handle->operator_handle)->objkeys, ((OPH_SEARCH_operator_handle *) handle->operator_handle)->objkeys_num); ((OPH_SEARCH_operator_handle *) handle->operator_handle)->objkeys = NULL; } if (((OPH_SEARCH_operator_handle *) handle->operator_handle)->sessionid) { free((char *) ((OPH_SEARCH_operator_handle *) handle->operator_handle)->sessionid); ((OPH_SEARCH_operator_handle *) handle->operator_handle)->sessionid = NULL; } free((OPH_SEARCH_operator_handle *) handle->operator_handle); handle->operator_handle = NULL; return OPH_ANALYTICS_OPERATOR_SUCCESS; }
int task_execute(oph_operator_struct * handle) { if (!handle || !handle->operator_handle) { pmesg(LOG_ERROR, __FILE__, __LINE__, "Null Handle\n"); logging(LOG_ERROR, __FILE__, __LINE__, ((OPH_SPLIT_operator_handle *) handle->operator_handle)->id_input_container, OPH_LOG_OPH_SPLIT_NULL_OPERATOR_HANDLE); return OPH_ANALYTICS_OPERATOR_NULL_OPERATOR_HANDLE; } if (((OPH_SPLIT_operator_handle *) handle->operator_handle)->fragment_id_start_position < 0 && handle->proc_rank != 0) return OPH_ANALYTICS_OPERATOR_SUCCESS; ((OPH_SPLIT_operator_handle *) handle->operator_handle)->execute_error = 1; int i, j, k, l; int id_datacube_out = ((OPH_SPLIT_operator_handle *) handle->operator_handle)->id_output_datacube; int id_datacube_in = ((OPH_SPLIT_operator_handle *) handle->operator_handle)->id_input_datacube; oph_odb_fragment_list frags; oph_odb_db_instance_list dbs; oph_odb_dbms_instance_list dbmss; //Each process has to be connected to a slave ophidiadb ophidiadb oDB_slave; oph_odb_init_ophidiadb(&oDB_slave); if (oph_odb_read_ophidiadb_config_file(&oDB_slave)) { pmesg(LOG_ERROR, __FILE__, __LINE__, "Unable to read OphidiaDB configuration\n"); logging(LOG_ERROR, __FILE__, __LINE__, ((OPH_SPLIT_operator_handle *) handle->operator_handle)->id_input_container, OPH_LOG_OPH_SPLIT_OPHIDIADB_CONFIGURATION_FILE); return OPH_ANALYTICS_OPERATOR_UTILITY_ERROR; } if (oph_odb_connect_to_ophidiadb(&oDB_slave)) { pmesg(LOG_ERROR, __FILE__, __LINE__, "Unable to connect to OphidiaDB. Check access parameters.\n"); logging(LOG_ERROR, __FILE__, __LINE__, ((OPH_SPLIT_operator_handle *) handle->operator_handle)->id_input_container, OPH_LOG_OPH_SPLIT_OPHIDIADB_CONNECTION_ERROR); oph_odb_free_ophidiadb(&oDB_slave); return OPH_ANALYTICS_OPERATOR_MYSQL_ERROR; } //retrieve connection string if (oph_odb_stge_fetch_fragment_connection_string(&oDB_slave, id_datacube_in, ((OPH_SPLIT_operator_handle *) handle->operator_handle)->fragment_ids, &frags, &dbs, &dbmss)) { pmesg(LOG_ERROR, __FILE__, __LINE__, "Unable to retreive connection strings\n"); logging(LOG_ERROR, __FILE__, __LINE__, ((OPH_SPLIT_operator_handle *) handle->operator_handle)->id_input_container, OPH_LOG_OPH_SPLIT_CONNECTION_STRINGS_NOT_FOUND); oph_odb_free_ophidiadb(&oDB_slave); return OPH_ANALYTICS_OPERATOR_UTILITY_ERROR; } //char insertQuery[OPH_COMMON_BUFFER_LEN]; char frag_name_in[1 + OPH_ODB_STGE_FRAG_NAME_SIZE], frag_name_out[OPH_ODB_STGE_FRAG_NAME_SIZE]; char myquery[OPH_COMMON_BUFFER_LEN]; int n, txfrag; int frag_count = 0; int tuple_count = 0; int start_index, key_start, tuplexfragment, new_tuplexfragment, new_remainder; int result = OPH_ANALYTICS_OPERATOR_SUCCESS; if (oph_dc_setup_dbms(&(((OPH_SPLIT_operator_handle *) handle->operator_handle)->server), (dbmss.value[0]).io_server_type)) { pmesg(LOG_ERROR, __FILE__, __LINE__, "Unable to initialize IO server.\n"); logging(LOG_ERROR, __FILE__, __LINE__, ((OPH_SPLIT_operator_handle *) handle->operator_handle)->id_input_container, OPH_LOG_OPH_SPLIT_IOPLUGIN_SETUP_ERROR, (dbmss.value[0]).id_dbms); result = OPH_ANALYTICS_OPERATOR_MYSQL_ERROR; } //For each DBMS for (i = 0; (i < dbmss.size) && (result == OPH_ANALYTICS_OPERATOR_SUCCESS); i++) { if (oph_dc_connect_to_dbms(((OPH_SPLIT_operator_handle *) handle->operator_handle)->server, &(dbmss.value[i]), 0)) { pmesg(LOG_ERROR, __FILE__, __LINE__, "Unable to connect to DBMS. Check access parameters.\n"); logging(LOG_ERROR, __FILE__, __LINE__, ((OPH_SPLIT_operator_handle *) handle->operator_handle)->id_input_container, OPH_LOG_OPH_SPLIT_DBMS_CONNECTION_ERROR, "output", (dbmss.value[i]).id_dbms); result = OPH_ANALYTICS_OPERATOR_MYSQL_ERROR; } //For each DB for (j = 0; (j < dbs.size) && (result == OPH_ANALYTICS_OPERATOR_SUCCESS); j++) { //Check DB - DBMS Association if (dbs.value[j].dbms_instance != &(dbmss.value[i])) continue; if (oph_dc_use_db_of_dbms(((OPH_SPLIT_operator_handle *) handle->operator_handle)->server, &(dbmss.value[i]), &(dbs.value[j]))) { pmesg(LOG_ERROR, __FILE__, __LINE__, "Unable to use the DB. Check access parameters.\n"); logging(LOG_ERROR, __FILE__, __LINE__, ((OPH_SPLIT_operator_handle *) handle->operator_handle)->id_input_container, OPH_LOG_OPH_SPLIT_DB_SELECTION_ERROR, "output", (dbs.value[j]).db_name); result = OPH_ANALYTICS_OPERATOR_MYSQL_ERROR; break; } //For each fragment for (k = 0; (k < frags.size) && (result == OPH_ANALYTICS_OPERATOR_SUCCESS); k++) { //Check Fragment - DB Association if (frags.value[k].db_instance != &(dbs.value[j])) continue; //Store the name of fragment I'm going to split strncpy(frag_name_in, frags.value[k].fragment_name, OPH_ODB_STGE_FRAG_NAME_SIZE); frag_name_in[OPH_ODB_STGE_FRAG_NAME_SIZE] = 0; tuple_count = 0; start_index = frags.value[k].frag_relative_index; key_start = frags.value[k].key_start; if (key_start) { tuplexfragment = frags.value[k].key_end - key_start + 1; new_tuplexfragment = tuplexfragment / ((OPH_SPLIT_operator_handle *) handle->operator_handle)->split_number; new_remainder = tuplexfragment % ((OPH_SPLIT_operator_handle *) handle->operator_handle)->split_number; } else new_tuplexfragment = new_remainder = 0; for (l = 0; (l < ((OPH_SPLIT_operator_handle *) handle->operator_handle)->split_number) && (result == OPH_ANALYTICS_OPERATOR_SUCCESS); l++) { if (oph_dc_generate_fragment_name(NULL, id_datacube_out, handle->proc_rank, (frag_count + 1), &frag_name_out)) { pmesg(LOG_ERROR, __FILE__, __LINE__, "Size of frag name exceed limit.\n"); logging(LOG_ERROR, __FILE__, __LINE__, ((OPH_SPLIT_operator_handle *) handle->operator_handle)->id_input_container, OPH_LOG_OPH_SPLIT_STRING_BUFFER_OVERFLOW, "fragment name", frag_name_out); result = OPH_ANALYTICS_OPERATOR_UTILITY_ERROR; break; } //Write new fragment //Check if I have to add one more tuple in fragment if ((((OPH_SPLIT_operator_handle *) handle->operator_handle)->split_number - new_remainder) <= l) txfrag = new_tuplexfragment + 1; else txfrag = new_tuplexfragment; #ifdef OPH_DEBUG_MYSQL printf("ORIGINAL QUERY: " OPH_SPLIT_QUERY_MYSQL "\n", frag_name_out, MYSQL_FRAG_ID, MYSQL_FRAG_MEASURE, MYSQL_FRAG_ID, MYSQL_FRAG_MEASURE, frag_name_in, MYSQL_FRAG_ID, tuple_count, txfrag); #endif n = snprintf(myquery, OPH_COMMON_BUFFER_LEN, OPH_SPLIT_QUERY, frag_name_out, MYSQL_FRAG_ID, MYSQL_FRAG_MEASURE, frag_name_in, MYSQL_FRAG_ID, tuple_count, txfrag); if (n >= OPH_COMMON_BUFFER_LEN) { pmesg(LOG_ERROR, __FILE__, __LINE__, "Size of frag name exceed limit.\n"); logging(LOG_ERROR, __FILE__, __LINE__, ((OPH_SPLIT_operator_handle *) handle->operator_handle)->id_input_container, OPH_LOG_OPH_SPLIT_STRING_BUFFER_OVERFLOW, "MySQL operation name", myquery); result = OPH_ANALYTICS_OPERATOR_UTILITY_ERROR; break; } if (oph_dc_create_fragment_from_query(((OPH_SPLIT_operator_handle *) handle->operator_handle)->server, &(frags.value[k]), NULL, myquery, 0, 0, 0)) { pmesg(LOG_ERROR, __FILE__, __LINE__, "Unable to insert new fragment.\n"); logging(LOG_ERROR, __FILE__, __LINE__, ((OPH_SPLIT_operator_handle *) handle->operator_handle)->id_input_container, OPH_LOG_OPH_SPLIT_NEW_FRAG_ERROR, frag_name_out); result = OPH_ANALYTICS_OPERATOR_UTILITY_ERROR; break; } //Change fragment fields frags.value[k].id_datacube = id_datacube_out; strncpy(frags.value[k].fragment_name, frag_name_out, OPH_ODB_STGE_FRAG_NAME_SIZE); frags.value[k].fragment_name[OPH_ODB_STGE_FRAG_NAME_SIZE] = 0; frags.value[k].frag_relative_index = (start_index - 1) * ((OPH_SPLIT_operator_handle *) handle->operator_handle)->split_number + l + 1; if (key_start) { if (l) frags.value[k].key_start = key_start + tuple_count; frags.value[k].key_end = key_start + tuple_count + txfrag - 1; } //Insert new fragment if (oph_odb_stge_insert_into_fragment_table(&oDB_slave, &(frags.value[k]))) { pmesg(LOG_ERROR, __FILE__, __LINE__, "Unable to update fragment table.\n"); logging(LOG_ERROR, __FILE__, __LINE__, ((OPH_SPLIT_operator_handle *) handle->operator_handle)->id_input_container, OPH_LOG_OPH_SPLIT_FRAGMENT_INSERT_ERROR, frag_name_out); result = OPH_ANALYTICS_OPERATOR_UTILITY_ERROR; break; } frag_count++; tuple_count += txfrag; } } } oph_dc_disconnect_from_dbms(((OPH_SPLIT_operator_handle *) handle->operator_handle)->server, &(dbmss.value[i])); } if (oph_dc_cleanup_dbms(((OPH_SPLIT_operator_handle *) handle->operator_handle)->server)) { pmesg(LOG_ERROR, __FILE__, __LINE__, "Unable to finalize IO server.\n"); logging(LOG_ERROR, __FILE__, __LINE__, ((OPH_SPLIT_operator_handle *) handle->operator_handle)->id_input_container, OPH_LOG_OPH_SPLIT_IOPLUGIN_CLEANUP_ERROR, (dbmss.value[0]).id_dbms); result = OPH_ANALYTICS_OPERATOR_MYSQL_ERROR; } oph_odb_free_ophidiadb(&oDB_slave); oph_odb_stge_free_fragment_list(&frags); oph_odb_stge_free_db_list(&dbs); oph_odb_stge_free_dbms_list(&dbmss); if (handle->proc_rank == 0 && (result == OPH_ANALYTICS_OPERATOR_SUCCESS)) { //Master process print output datacube PID char *tmp_uri = NULL; if (oph_pid_get_uri(&tmp_uri)) { pmesg(LOG_ERROR, __FILE__, __LINE__, "Unable to retrieve web server URI.\n"); logging(LOG_WARNING, __FILE__, __LINE__, ((OPH_SPLIT_operator_handle *) handle->operator_handle)->id_input_container, OPH_LOG_OPH_SPLIT_PID_URI_ERROR); return OPH_ANALYTICS_OPERATOR_UTILITY_ERROR; } if (oph_pid_show_pid (((OPH_SPLIT_operator_handle *) handle->operator_handle)->id_output_container, ((OPH_SPLIT_operator_handle *) handle->operator_handle)->id_output_datacube, tmp_uri)) { pmesg(LOG_ERROR, __FILE__, __LINE__, "Unable to print PID string\n"); logging(LOG_WARNING, __FILE__, __LINE__, ((OPH_SPLIT_operator_handle *) handle->operator_handle)->id_input_container, OPH_LOG_OPH_SPLIT_PID_SHOW_ERROR); free(tmp_uri); return OPH_ANALYTICS_OPERATOR_UTILITY_ERROR; } char jsonbuf[OPH_COMMON_BUFFER_LEN]; memset(jsonbuf, 0, OPH_COMMON_BUFFER_LEN); snprintf(jsonbuf, OPH_COMMON_BUFFER_LEN, OPH_PID_FORMAT, tmp_uri, ((OPH_SPLIT_operator_handle *) handle->operator_handle)->id_output_container, ((OPH_SPLIT_operator_handle *) handle->operator_handle)->id_output_datacube); // ADD OUTPUT PID TO JSON AS TEXT if (oph_json_is_objkey_printable (((OPH_SPLIT_operator_handle *) handle->operator_handle)->objkeys, ((OPH_SPLIT_operator_handle *) handle->operator_handle)->objkeys_num, OPH_JSON_OBJKEY_SPLIT)) { if (oph_json_add_text(handle->operator_json, OPH_JSON_OBJKEY_SPLIT, "Output Cube", jsonbuf)) { pmesg(LOG_ERROR, __FILE__, __LINE__, "ADD TEXT error\n"); logging(LOG_WARNING, __FILE__, __LINE__, OPH_GENERIC_CONTAINER_ID, "ADD TEXT error\n"); free(tmp_uri); return OPH_ANALYTICS_OPERATOR_UTILITY_ERROR; } } // ADD OUTPUT PID TO NOTIFICATION STRING char tmp_string[OPH_COMMON_BUFFER_LEN]; snprintf(tmp_string, OPH_COMMON_BUFFER_LEN, "%s=%s;", OPH_IN_PARAM_DATACUBE_INPUT, jsonbuf); if (handle->output_string) { strncat(tmp_string, handle->output_string, OPH_COMMON_BUFFER_LEN - strlen(tmp_string)); free(handle->output_string); } handle->output_string = strdup(tmp_string); free(tmp_uri); } if (result == OPH_ANALYTICS_OPERATOR_SUCCESS) ((OPH_SPLIT_operator_handle *) handle->operator_handle)->execute_error = 0; return result; }
int task_execute(oph_operator_struct *handle) { if (!handle || !handle->operator_handle){ pmesg(LOG_ERROR, __FILE__, __LINE__, "Null Handle\n"); logging(LOG_ERROR, __FILE__, __LINE__, ((OPH_DELETE_operator_handle*)handle->operator_handle)->id_input_container, OPH_LOG_OPH_DELETE_NULL_OPERATOR_HANDLE); return OPH_ANALYTICS_OPERATOR_NULL_OPERATOR_HANDLE; } if(((OPH_DELETE_operator_handle*)handle->operator_handle)->fragment_id_start_position < 0 && handle->proc_rank!= 0) return OPH_ANALYTICS_OPERATOR_SUCCESS; int i, j, k; int id_datacube = ((OPH_DELETE_operator_handle*)handle->operator_handle)->id_input_datacube; oph_odb_fragment_list frags; oph_odb_db_instance_list dbs; oph_odb_dbms_instance_list dbmss; int datacubexdb_number = 0; //Each process has to be connected to a slave ophidiadb ophidiadb oDB_slave; oph_odb_init_ophidiadb(&oDB_slave); if(oph_odb_read_ophidiadb_config_file(&oDB_slave)){ pmesg(LOG_ERROR, __FILE__, __LINE__, "Unable to read OphidiaDB configuration\n"); logging(LOG_ERROR, __FILE__, __LINE__, ((OPH_DELETE_operator_handle*)handle->operator_handle)->id_input_container, OPH_LOG_OPH_DELETE_OPHIDIADB_CONFIGURATION_FILE); return OPH_ANALYTICS_OPERATOR_UTILITY_ERROR; } if( oph_odb_connect_to_ophidiadb(&oDB_slave)){ pmesg(LOG_ERROR, __FILE__, __LINE__, "Unable to connect to OphidiaDB. Check access parameters.\n"); logging(LOG_ERROR, __FILE__, __LINE__, ((OPH_DELETE_operator_handle*)handle->operator_handle)->id_input_container, OPH_LOG_OPH_DELETE_OPHIDIADB_CONNECTION_ERROR); oph_odb_free_ophidiadb(&oDB_slave); return OPH_ANALYTICS_OPERATOR_MYSQL_ERROR; } //retrieve connection string if(oph_odb_stge_fetch_fragment_connection_string_for_deletion(&oDB_slave, id_datacube, ((OPH_DELETE_operator_handle*)handle->operator_handle)->fragment_ids, &frags, &dbs, &dbmss)){ pmesg(LOG_ERROR, __FILE__, __LINE__, "Unable to retreive connection strings\n"); logging(LOG_ERROR, __FILE__, __LINE__, ((OPH_DELETE_operator_handle*)handle->operator_handle)->id_input_container, OPH_LOG_OPH_DELETE_CONNECTION_STRINGS_NOT_FOUND); oph_odb_free_ophidiadb(&oDB_slave); return OPH_ANALYTICS_OPERATOR_UTILITY_ERROR; } if (!frags.size) { oph_odb_stge_free_fragment_list(&frags); oph_odb_stge_free_db_list(&dbs); oph_odb_stge_free_dbms_list(&dbmss); oph_odb_free_ophidiadb(&oDB_slave); return OPH_ANALYTICS_OPERATOR_SUCCESS; } int result = OPH_ANALYTICS_OPERATOR_SUCCESS; if(oph_dc2_setup_dbms(&(((OPH_DELETE_operator_handle*)handle->operator_handle)->server), (dbmss.value[0]).io_server_type)) { pmesg(LOG_ERROR, __FILE__, __LINE__, "Unable to initialize IO server.\n"); logging(LOG_ERROR, __FILE__, __LINE__, ((OPH_DELETE_operator_handle*)handle->operator_handle)->id_input_container, OPH_LOG_OPH_DELETE_IOPLUGIN_SETUP_ERROR, (dbmss.value[0]).id_dbms); result = OPH_ANALYTICS_OPERATOR_MYSQL_ERROR; } //For each DBMS for(i = 0; (i < dbmss.size) && (result == OPH_ANALYTICS_OPERATOR_SUCCESS); i++){ if(oph_dc2_connect_to_dbms(((OPH_DELETE_operator_handle*)handle->operator_handle)->server, &(dbmss.value[i]), 0)) { pmesg(LOG_ERROR, __FILE__, __LINE__, "Unable to connect to DBMS. Check access parameters.\n"); logging(LOG_ERROR, __FILE__, __LINE__, ((OPH_DELETE_operator_handle*)handle->operator_handle)->id_input_container, OPH_LOG_OPH_DELETE_DBMS_CONNECTION_ERROR, (dbmss.value[i]).id_dbms); result = OPH_ANALYTICS_OPERATOR_MYSQL_ERROR; } //For each DB for(j = 0; (j < dbs.size) && (result == OPH_ANALYTICS_OPERATOR_SUCCESS); j++){ //Check DB - DBMS Association if(dbs.value[j].dbms_instance != &(dbmss.value[i])) continue; //For each dbinstance count the number of stored datacubes if(oph_odb_stge_get_number_of_datacube_for_db(&oDB_slave, dbs.value[j].id_db, &datacubexdb_number)) { pmesg(LOG_ERROR, __FILE__, __LINE__, "Unable to retrieve database instance information.\n"); logging(LOG_ERROR, __FILE__, __LINE__, ((OPH_DELETE_operator_handle*)handle->operator_handle)->id_input_container, OPH_LOG_OPH_DELETE_DB_DATACUBE_COUNT_ERROR, (dbs.value[j]).db_name); result = OPH_ANALYTICS_OPERATOR_MYSQL_ERROR; break; } //If the db stores just one datacube then directly drop the dbinstance if(datacubexdb_number == 1){ //Databse drop if(oph_dc2_delete_db(((OPH_DELETE_operator_handle*)handle->operator_handle)->server, &(dbs.value[j]))) { pmesg(LOG_ERROR, __FILE__, __LINE__, "Error while dropping database.\n"); logging(LOG_ERROR, __FILE__, __LINE__, ((OPH_DELETE_operator_handle*)handle->operator_handle)->id_input_container, OPH_LOG_OPH_DELETE_DROP_DB_ERROR, (dbs.value[j]).db_name); result = OPH_ANALYTICS_OPERATOR_MYSQL_ERROR; break; } continue; } //In this case the dbinstance may be already been deleted before else if(datacubexdb_number == 0) continue; if(oph_dc2_use_db_of_dbms(((OPH_DELETE_operator_handle*)handle->operator_handle)->server, &(dbmss.value[i]), &(dbs.value[j]))) { pmesg(LOG_ERROR, __FILE__, __LINE__, "Unable to use the DB. Check access parameters.\n"); logging(LOG_ERROR, __FILE__, __LINE__, ((OPH_DELETE_operator_handle*)handle->operator_handle)->id_input_container, OPH_LOG_OPH_DELETE_DB_SELECTION_ERROR, (dbs.value[j]).db_name); result = OPH_ANALYTICS_OPERATOR_MYSQL_ERROR; break; } //For each fragment for(k = 0; k < frags.size; k++){ //Check Fragment - DB Association if(frags.value[k].db_instance != &(dbs.value[j])) continue; //Delete fragment if(oph_dc2_delete_fragment(((OPH_DELETE_operator_handle*)handle->operator_handle)->server, &(frags.value[k]))){ pmesg(LOG_ERROR, __FILE__, __LINE__, "Error while dropping table.\n"); logging(LOG_ERROR, __FILE__, __LINE__, ((OPH_DELETE_operator_handle*)handle->operator_handle)->id_input_container, OPH_LOG_OPH_DELETE_DROP_FRAGMENT_ERROR, (frags.value[j]).fragment_name); result = OPH_ANALYTICS_OPERATOR_MYSQL_ERROR; break; } } } oph_dc2_disconnect_from_dbms(((OPH_DELETE_operator_handle*)handle->operator_handle)->server, &(dbmss.value[i])); } if(oph_dc2_cleanup_dbms(((OPH_DELETE_operator_handle*)handle->operator_handle)->server)) { pmesg(LOG_ERROR, __FILE__, __LINE__, "Unable to finalize IO server.\n"); logging(LOG_ERROR, __FILE__, __LINE__, ((OPH_DELETE_operator_handle*)handle->operator_handle)->id_input_container, OPH_LOG_OPH_DELETE_IOPLUGIN_CLEANUP_ERROR, (dbmss.value[0]).id_dbms); result = OPH_ANALYTICS_OPERATOR_MYSQL_ERROR; } oph_odb_stge_free_fragment_list(&frags); oph_odb_stge_free_db_list(&dbs); oph_odb_stge_free_dbms_list(&dbmss); oph_odb_free_ophidiadb(&oDB_slave); return result; }