void storage_info(msg_host_t host) { const char* host_name = MSG_host_get_name(host); XBT_INFO("*** Storage info on %s ***", host_name); xbt_dict_cursor_t cursor = NULL; char* mount_name; char* storage_name; msg_storage_t storage; xbt_dict_t storage_list = MSG_host_get_mounted_storage_list(MSG_host_self()); xbt_dict_foreach(storage_list,cursor,mount_name,storage_name) { XBT_INFO("\tStorage name: %s, mount name: %s", storage_name, mount_name); storage = MSG_storage_get_by_name(storage_name); sg_size_t free_size = MSG_storage_get_free_size(storage); sg_size_t used_size = MSG_storage_get_used_size(storage); XBT_INFO("\t\tFree size: %llu bytes", free_size); XBT_INFO("\t\tUsed size: %llu bytes", used_size); display_storage_properties(storage); dump_storage_by_name(storage_name); }
long dataset_number(std::string& host_name, std::string storage_type){ /** Returns a number of dataset on a given storage. Parameters: ---------- @host_name -- name of host @storage_type -- DISK or TAPE */ std::string storage_name = host_name + storage_type; msg_storage_t st = MSG_storage_get_by_name(storage_name.c_str()); xbt_dict_cursor_t cursor = NULL; char *key; double data; long amount = 0; xbt_dict_t storage_content = MSG_storage_get_content(st); xbt_dict_foreach(storage_content, cursor, key, data){ amount++; } xbt_dict_free(&storage_content); xbt_dict_cursor_free(&cursor); return amount; }
static int host(int argc, char *argv[]){ const char* host_name = MSG_host_get_name(MSG_host_self()); /* - Display information on the disks mounted by the current host */ XBT_INFO("*** Storage info on %s ***", host_name); xbt_dict_cursor_t cursor = NULL; char* mount_name; char* storage_name; msg_storage_t storage = NULL; /* - Retrieve all mount points of current host */ xbt_dict_t storage_list = MSG_host_get_mounted_storage_list(MSG_host_self()); xbt_dict_foreach(storage_list,cursor,mount_name,storage_name) { /* - For each disk mounted on host: - Retrieve disk's information */ XBT_INFO("Storage name: %s, mount name: %s", storage_name, mount_name); storage = MSG_storage_get_by_name(storage_name); sg_size_t free_size = MSG_storage_get_free_size(storage); sg_size_t used_size = MSG_storage_get_used_size(storage); sg_size_t size = MSG_storage_get_size(storage); XBT_INFO("Total size: %llu bytes", size); XBT_INFO("Free size: %llu bytes", free_size); XBT_INFO("Used size: %llu bytes", used_size); }
static void get_set_storage_data(const char *storage_name){ XBT_INFO("*** GET/SET DATA for storage element: %s ***",storage_name); msg_storage_t storage = MSG_storage_get_by_name(storage_name); char *data = MSG_storage_get_data(storage); XBT_INFO("Get data: '%s'", data); MSG_storage_set_data(storage, xbt_strdup("Some data")); data = MSG_storage_get_data(storage); XBT_INFO("\tSet and get data: '%s'", data); xbt_free(data); }
static void dump_storage_by_name(char *name){ XBT_INFO("*** Dump a storage element ***"); msg_storage_t storage = MSG_storage_get_by_name(name); if(storage){ display_storage_content(storage); } else{ XBT_INFO("Unable to retrieve storage element by its name: %s.", name); } }
JNIEXPORT jobject JNICALL Java_org_simgrid_msg_Storage_getByName(JNIEnv * env, jclass cls, jstring jname) { msg_storage_t storage; jobject jstorage; /* get the C string from the java string */ if (jname == NULL) { jxbt_throw_null(env,bprintf("No host can have a null name")); return NULL; } const char *name = (*env)->GetStringUTFChars(env, jname, 0); storage = MSG_storage_get_by_name(name); if (!storage) { /* invalid name */ jxbt_throw_storage_not_found(env, name); (*env)->ReleaseStringUTFChars(env, jname, name); return NULL; } (*env)->ReleaseStringUTFChars(env, jname, name); if (!xbt_lib_get_level(storage, JAVA_STORAGE_LEVEL)) { /* native host not associated yet with java host */ /* Instantiate a new java storage */ jstorage = jstorage_new_instance(env); if (!jstorage) { jxbt_throw_jni(env, "java storage instantiation failed"); return NULL; } /* get a global reference to the newly created storage */ jstorage = jstorage_ref(env, jstorage); if (!jstorage) { jxbt_throw_jni(env, "new global ref allocation failed"); return NULL; } /* Sets the java storage name */ (*env)->SetObjectField(env, jstorage, jstorage_field_Storage_name, jname); /* bind the java storage and the native storage */ jstorage_bind(jstorage, storage, env); /* the native storage data field is set with the global reference to the * java storage returned by this function */ xbt_lib_set(storage_lib, storage->key, JAVA_STORAGE_LEVEL, (void *) jstorage); } /* return the global reference to the java storage instance */ return (jobject) xbt_lib_get_level(storage, JAVA_STORAGE_LEVEL); }
int tracer_storage(std::string& hostname, std::string& storage_type){ /** Adds used size of @storage_name to trace file. Parameters: ----------- @hostname -- host name @storage_type -- TAPE or DISK */ std::string storage_name = hostname + storage_type; msg_storage_t st = MSG_storage_get_by_name(storage_name.c_str()); TRACE_host_variable_set("CERN", storage_name.c_str(), MSG_storage_get_used_size(st)); return 0; }
XBT_INFO("Free size: %llu bytes", MSG_storage_get_free_size(storage)); XBT_INFO("Used size: %llu bytes", MSG_storage_get_used_size(storage)); /* - Retrieve the size of created file and read it completely */ file_size = MSG_file_get_size(file); MSG_file_seek(file, 0, SEEK_SET); read = MSG_file_read(file, file_size); XBT_INFO("Read %llu bytes on %s", read, file_name); /* - Then write 100,000 bytes in tmp/data.txt */ write = MSG_file_write(file, 100000); // Write 100,000 bytes XBT_INFO("Write %llu bytes on %s", write, file_name); MSG_file_dump(file); storage_name = xbt_strdup("Disk4"); storage = MSG_storage_get_by_name(storage_name); /* - Move file from ./tmp/data.txt to ./tmp/simgrid.readme */ XBT_INFO("*** Move '/tmp/data.txt' into '/tmp/simgrid.readme'"); MSG_file_move(file, "/home/tmp/simgrid.readme"); /* - Attach some user data to the file */ MSG_file_set_data(file, xbt_strdup("777")); /* - Then retrieve this data */ char *data = MSG_file_get_data(file); XBT_INFO("User data attached to the file: %s", data); MSG_file_close(file); free(file_name); /* - Attach some user data to disk1 */
int host(int argc, char *argv[]) { msg_file_t file = NULL; sg_size_t read,write; msg_storage_t st; const char* st_name; if(!strcmp(MSG_process_get_name(MSG_process_self()),"0")){ file = MSG_file_open(FILENAME1, NULL); MSG_file_dump(file); st_name = "Disk4"; } else if(!strcmp(MSG_process_get_name(MSG_process_self()),"1")) { file = MSG_file_open(FILENAME2, NULL); st_name = "Disk2"; } else if(!strcmp(MSG_process_get_name(MSG_process_self()),"2")){ file = MSG_file_open(FILENAME3, NULL); st_name = "Disk3"; } else if(!strcmp(MSG_process_get_name(MSG_process_self()),"3")){ file = MSG_file_open(FILENAME4, NULL); st_name = "Disk1"; } else xbt_die("FILENAME NOT DEFINED %s",MSG_process_get_name(MSG_process_self())); const char* filename = MSG_file_get_name(file); XBT_INFO("\tOpen file '%s'",filename); st = MSG_storage_get_by_name(st_name); XBT_INFO("\tCapacity of the storage element '%s' is stored on: %llu / %llu", filename, MSG_storage_get_used_size(st), MSG_storage_get_size(st)); /* Try to read for 10MB */ read = MSG_file_read(file, 10000000); XBT_INFO("\tHave read %llu from '%s'",read,filename); /* Write 100KB in file from the current position, i.e, end of file or 10MB */ write = MSG_file_write(file, 100000); XBT_INFO("\tHave written %llu in '%s'. Size now is: %llu",write,filename, MSG_file_get_size(file)); XBT_INFO("\tCapacity of the storage element '%s' is stored on: %llu / %llu", filename, MSG_storage_get_used_size(st), MSG_storage_get_size(st)); /* rewind to the beginning of the file */ XBT_INFO("\tComing back to the beginning of the stream for file '%s'", filename); MSG_file_seek(file, 0, SEEK_SET); /* Try to read 110KB */ read = MSG_file_read(file, 110000); XBT_INFO("\tHave read %llu from '%s' (of size %llu)",read,filename, MSG_file_get_size(file)); /* rewind once again to the beginning of the file */ XBT_INFO("\tComing back to the beginning of the stream for file '%s'", filename); MSG_file_seek(file, 0, SEEK_SET); /* Write 110KB in file from the current position, i.e, end of file or 10MB */ write = MSG_file_write(file, 110000); XBT_INFO("\tHave written %llu in '%s'. Size now is: %llu", write,filename, MSG_file_get_size(file)); XBT_INFO("\tCapacity of the storage element '%s' is stored on: %llu / %llu", filename, MSG_storage_get_used_size(st), MSG_storage_get_size(st)); XBT_INFO("\tClose file '%s'",filename); MSG_file_close(file); return 0; }