X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/ecd5f7562caf1d443bf22788fa5f4fac408776ec..5cb2cfc8e7e651bb5f96ceb0b4ccc40683c16126:/src/s4u/s4u_file.cpp diff --git a/src/s4u/s4u_file.cpp b/src/s4u/s4u_file.cpp index a78e0f93b1..f66b6812d7 100644 --- a/src/s4u/s4u_file.cpp +++ b/src/s4u/s4u_file.cpp @@ -51,7 +51,7 @@ File::File(std::string fullpath, sg_host_t host, void* userdata) : fullpath_(ful localStorage = st; XBT_DEBUG("\tOpen file '%s'", path_.c_str()); - std::map* content = localStorage->getContent(); + std::map* content = localStorage->extension()->getContent(); // if file does not exist create an empty file auto sz = content->find(path_); if (sz != content->end()) { @@ -76,19 +76,20 @@ sg_size_t File::write(sg_size_t size) { XBT_DEBUG("WRITE %s on disk '%s'. size '%llu/%llu'", getPath(), localStorage->getCname(), size, size_); // If the storage is full before even starting to write - if (localStorage->getSizeUsed() >= localStorage->getSize()) + if (sg_storage_get_size_used(localStorage) >= sg_storage_get_size(localStorage)) return 0; /* Substract the part of the file that might disappear from the used sized on the storage element */ - localStorage->decrUsedSize(size_ - current_position_); + localStorage->extension()->decrUsedSize(size_ - current_position_); sg_size_t write_size = localStorage->write(size); - localStorage->incrUsedSize(write_size); + localStorage->extension()->incrUsedSize(write_size); current_position_ += write_size; size_ = current_position_; + std::map* content = localStorage->extension()->getContent(); - localStorage->getContent()->erase(path_); - localStorage->getContent()->insert({path_, size_}); + content->erase(path_); + content->insert({path_, size_}); return write_size; } @@ -129,7 +130,7 @@ void File::move(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())) { - std::map* content = localStorage->getContent(); + std::map* content = localStorage->extension()->getContent(); auto sz = content->find(path_); if (sz != content->end()) { // src file exists sg_size_t new_size = sz->second; @@ -148,15 +149,17 @@ void File::move(std::string fullpath) int File::unlink() { /* Check if the file is on local storage */ - if (localStorage->getContent()->find(path_) == localStorage->getContent()->end()) { + std::map* content = localStorage->extension()->getContent(); + + if (content->find(path_) == content->end()) { XBT_WARN("File %s is not on disk %s. Impossible to unlink", path_.c_str(), localStorage->getCname()); return -1; } else { XBT_DEBUG("UNLINK %s on disk '%s'", path_.c_str(), localStorage->getCname()); - localStorage->decrUsedSize(size_); + localStorage->extension()->decrUsedSize(size_); // Remove the file from storage - localStorage->getContent()->erase(fullpath_); + content->erase(fullpath_); return 0; } @@ -165,6 +168,7 @@ int File::unlink() FileSystemStorageExt::FileSystemStorageExt(simgrid::s4u::Storage* ptr) { content_ = parseContent(ptr->getImpl()->content_name); + size_ = ptr->getImpl()->size_; } FileSystemStorageExt::~FileSystemStorageExt() @@ -228,4 +232,19 @@ void sg_storage_file_system_init() simgrid::s4u::Storage::onDestruction.connect(&onStorageDestruction); } +sg_size_t sg_storage_get_size_free(sg_storage_t st) +{ + return st->extension()->getSize() - st->extension()->getUsedSize(); +} + +sg_size_t sg_storage_get_size_used(sg_storage_t st) +{ + return st->extension()->getUsedSize(); +} + +sg_size_t sg_storage_get_size(sg_storage_t st) +{ + return st->extension()->getSize(); +} + SG_END_DECL()