X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/dc9b8feaddd53842f6204f4f24409b2382393fa9..6d50895ca70f5e7bfe97c5dbaad4d506207e20fd:/src/plugins/file_system/s4u_FileSystem.cpp diff --git a/src/plugins/file_system/s4u_FileSystem.cpp b/src/plugins/file_system/s4u_FileSystem.cpp index 74227e3c83..1c3d3c0372 100644 --- a/src/plugins/file_system/s4u_FileSystem.cpp +++ b/src/plugins/file_system/s4u_FileSystem.cpp @@ -53,7 +53,7 @@ File::File(const std::string& fullpath, sg_host_t host, void* userdata) : fullpa // assign a file descriptor id to the newly opened File FileDescriptorHostExt* ext = host->extension(); if (ext->file_descriptor_table == nullptr) { - ext->file_descriptor_table = new std::vector(sg_storage_max_file_descriptors); + ext->file_descriptor_table.reset(new std::vector(sg_storage_max_file_descriptors)); std::iota(ext->file_descriptor_table->rbegin(), ext->file_descriptor_table->rend(), 0); // Fill with ..., 1, 0. } xbt_assert(not ext->file_descriptor_table->empty(), "Too much files are opened! Some have to be closed."); @@ -102,7 +102,7 @@ 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}; @@ -120,7 +120,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; @@ -138,18 +138,20 @@ sg_size_t File::write(sg_size_t size) this_actor::parallel_execute(m_host_list, flops_amount, bytes_amount); } - XBT_DEBUG("WRITE %s on disk '%s'. size '%llu/%llu'", get_path(), local_storage_->get_cname(), size, 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; + 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(write_inside==0){ + local_storage_->extension()->decr_used_size(size_ - current_position_); + local_storage_->extension()->incr_used_size(write_size); + size_ = current_position_; + }else if(current_position_>size_){ + size_ = current_position_; + } std::map* content = local_storage_->extension()->get_content(); content->erase(path_); @@ -193,7 +195,7 @@ sg_size_t File::tell() void File::move(const std::string& fullpath) { /* Check if the new full path is on the same mount point */ - if (not strncmp(mount_point_.c_str(), fullpath.c_str(), mount_point_.length())) { + if (fullpath.compare(0, mount_point_.length(), mount_point_) == 0) { std::map* content = local_storage_->extension()->get_content(); auto sz = content->find(path_); if (sz != content->end()) { // src file exists @@ -288,15 +290,10 @@ int File::remote_move(sg_host_t host, const char* fullpath) FileSystemStorageExt::FileSystemStorageExt(simgrid::s4u::Storage* ptr) { - content_ = parse_content(ptr->get_impl()->content_name); + content_.reset(parse_content(ptr->get_impl()->content_name)); size_ = ptr->get_impl()->size_; } -FileSystemStorageExt::~FileSystemStorageExt() -{ - delete content_; -} - std::map* FileSystemStorageExt::parse_content(const std::string& filename) { if (filename.empty())