X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/ec53f56800087e5f383314bf6955ffab3a0e5c35..2438e2b51884fd93b9a429b4302b1edb4fd0161c:/src/plugins/file_system/s4u_FileSystem.cpp?ds=inline diff --git a/src/plugins/file_system/s4u_FileSystem.cpp b/src/plugins/file_system/s4u_FileSystem.cpp index f570a6dcbd..b32fd5137e 100644 --- a/src/plugins/file_system/s4u_FileSystem.cpp +++ b/src/plugins/file_system/s4u_FileSystem.cpp @@ -102,14 +102,10 @@ sg_size_t File::read(sg_size_t size) sg_size_t read_size = local_storage_->read(std::min(size, size_ - current_position_)); current_position_ += read_size; - if (host->get_name() != Host::current()->get_name()) { + if (host->get_name() != Host::current()->get_name() && read_size > 0) { /* the file is hosted on a remote host, initiate a communication between src and dest hosts for data transfer */ XBT_DEBUG("File is on %s remote host, initiate data transfer of %llu bytes.", host->get_cname(), read_size); - std::vector m_host_list = {Host::current(), host}; - std::vector flops_amount = {0., 0.}; - std::vector bytes_amount = {0., 0., static_cast(read_size), 0.}; - - this_actor::parallel_execute(m_host_list, flops_amount, bytes_amount); + host->send_to(Host::current(), read_size); } return read_size; @@ -120,7 +116,7 @@ sg_size_t File::read(sg_size_t size) * @param size of the file to write * @return the number of bytes successfully write or -1 if an error occurred */ -sg_size_t File::write(sg_size_t size) +sg_size_t File::write(sg_size_t size, int write_inside) { if (size == 0) /* Nothing to write, return */ return 0; @@ -131,25 +127,27 @@ sg_size_t File::write(sg_size_t size) if (host->get_name() != Host::current()->get_name()) { /* the file is hosted on a remote host, initiate a communication between src and dest hosts for data transfer */ XBT_DEBUG("File is on %s remote host, initiate data transfer of %llu bytes.", host->get_cname(), size); - std::vector m_host_list = {Host::current(), host}; - std::vector flops_amount = {0, 0}; - std::vector bytes_amount = {0, static_cast(size), 0, 0}; - - this_actor::parallel_execute(m_host_list, flops_amount, bytes_amount); + Host::current()->send_to(host, size); } XBT_DEBUG("WRITE %s on disk '%s'. size '%llu/%llu' '%llu:%llu'", get_path(), local_storage_->get_cname(), size, size_, sg_storage_get_size_used(local_storage_), sg_storage_get_size(local_storage_)); // If the storage is full before even starting to write - // if (sg_storage_get_size_used(local_storage_) >= sg_storage_get_size(local_storage_)) - // return 0; - /* Substract the part of the file that might disappear from the used sized on the storage element */ - local_storage_->extension()->decr_used_size(size_ - current_position_); - - sg_size_t write_size = local_storage_->write(size); - local_storage_->extension()->incr_used_size(write_size); - - current_position_ += write_size; - size_ = current_position_; + if (sg_storage_get_size_used(local_storage_) >= sg_storage_get_size(local_storage_)) + return 0; + sg_size_t write_size=0; + if(write_inside==0){ + /* Substract the part of the file that might disappear from the used sized on the storage element */ + local_storage_->extension()->decr_used_size(size_ - current_position_); + write_size = local_storage_->write(size); + local_storage_->extension()->incr_used_size(write_size); + current_position_ += write_size; + size_ = current_position_; + }else { + write_size = local_storage_->write(size); + current_position_ += write_size; + if(current_position_>size_) + size_ = current_position_; + } std::map* content = local_storage_->extension()->get_content(); content->erase(path_); @@ -264,11 +262,7 @@ int File::remote_copy(sg_host_t host, const char* fullpath) XBT_DEBUG("Initiate data transfer of %llu bytes between %s and %s.", read_size, src_host->get_cname(), storage_dest->get_host()->get_cname()); - std::vector m_host_list = {src_host, dst_host}; - std::vector flops_amount = {0, 0}; - std::vector bytes_amount = {0, static_cast(read_size), 0, 0}; - - this_actor::parallel_execute(m_host_list, flops_amount, bytes_amount); + src_host->send_to(dst_host, read_size); /* Create file on remote host, write it and close it */ File* fd = new File(fullpath, dst_host, nullptr); @@ -288,7 +282,7 @@ int File::remote_move(sg_host_t host, const char* fullpath) FileSystemStorageExt::FileSystemStorageExt(simgrid::s4u::Storage* ptr) { - content_.reset(parse_content(ptr->get_impl()->content_name)); + content_.reset(parse_content(ptr->get_impl()->content_name_)); size_ = ptr->get_impl()->size_; }