int uploader(int argc, char* argv[]){ /** @type simgrid process Uploads output file to another host. Simgrid process parameters -------------------------- UploadData* data -- pointer to object which contains inforamation about how to replicate output file. (destination host, filename, etc.) */ std::string host_name = MSG_host_get_name(MSG_host_self()); std::string curFilePath; std::string pathAtDest; std::string destHostName; std::string stor_type; msg_file_t file = NULL; UploadData* data = (UploadData*) MSG_process_get_data(MSG_process_self()); destHostName = data->dest; destHostName.erase(destHostName.length()-5); stor_type = data->dest.back(); if (destHostName.compare(host_name)) { curFilePath = "/" + host_name + "-DISK" + data->filename; pathAtDest = "/" + data->dest + data->filename; file = MSG_file_open(curFilePath.c_str(), NULL); msg_host_t dest = MSG_host_by_name(destHostName.c_str()); //plusLinkCounter(MSG_host_get_name(MSG_host_self()), destHostName); msg_error_t a = MSG_file_rcopy(file, dest, pathAtDest.c_str()); //if (!atoi(stor_type.c_str())) create_file_label(pathAtDest); //trace number of datasets and output traffic from site dataset_number_change(data->dest, 1); cumulative_output_per_site(host_name, (double) MSG_file_get_size(file)); if (a == MSG_OK) { tracer_traffic(host_name, destHostName, (double) MSG_file_get_size(file)); minusLinkCounter(host_name, destHostName); MSG_file_close(file); //XBT_INFO("Creating replica completed at %s", MSG_host_get_name(dest)); } else { minusLinkCounter(host_name, destHostName); MSG_file_close(file); XBT_INFO("Transfer fail occurred"); } } delete data; return 0; }
int host(int argc, char *argv[]){ msg_file_t file = NULL; const char* filename; sg_size_t read, write; file = MSG_file_open(argv[1], NULL); filename = MSG_file_get_name(file); XBT_INFO("Opened file '%s'",filename); MSG_file_dump(file); XBT_INFO("Try to read %llu from '%s'",MSG_file_get_size(file),filename); read = MSG_file_read(file, MSG_file_get_size(file)); XBT_INFO("Have read %llu from '%s'. Offset is now at: %llu",read,filename, MSG_file_tell(file)); XBT_INFO("Seek back to the begining of the stream..."); MSG_file_seek(file, 0, SEEK_SET); XBT_INFO("Offset is now at: %llu", MSG_file_tell(file)); MSG_file_close(file); if (argc > 5){ file = MSG_file_open(argv[2], NULL); filename = MSG_file_get_name(file); XBT_INFO("Opened file '%s'",filename); XBT_INFO("Try to write %llu MiB to '%s'", MSG_file_get_size(file)/1024, filename); write = MSG_file_write(file, MSG_file_get_size(file)*1024); XBT_INFO("Have written %llu bytes to '%s'.",write,filename); msg_host_t src, dest; src= MSG_host_self(); dest = MSG_get_host_by_name(argv[3]); if (atoi(argv[5])){ XBT_INFO("Move '%s' (of size %llu) from '%s' to '%s'", filename, MSG_file_get_size(file), MSG_host_get_name(src), argv[3]); MSG_file_rmove(file, dest, argv[4]); } else { XBT_INFO("Copy '%s' (of size %llu) from '%s' to '%s'", filename, MSG_file_get_size(file), MSG_host_get_name(src), argv[3]); MSG_file_rcopy(file, dest, argv[4]); MSG_file_close(file); } } return 0; }