~FileSystemStorageExt();
std::map<std::string, sg_size_t>* parseContent(std::string filename);
std::map<std::string, sg_size_t>* getContent() { return content_; }
+ sg_size_t getSize() { return size_; }
sg_size_t getUsedSize() { return usedSize_; }
void decrUsedSize(sg_size_t size) { usedSize_ -= size; }
void incrUsedSize(sg_size_t size) { usedSize_ += size; }
private:
std::map<std::string, sg_size_t>* content_;
sg_size_t usedSize_ = 0;
+ sg_size_t size_ = 0;
};
}
} // namespace simgrid::s4u
std::map<std::string, std::string>* getProperties();
const char* getProperty(std::string key);
void setProperty(std::string, std::string value);
- std::map<std::string, sg_size_t>* getContent();
void setUserdata(void* data) { userdata_ = data; }
void* getUserdata() { return userdata_; }
*/
xbt_dict_t MSG_storage_get_content(msg_storage_t storage)
{
- std::map<std::string, sg_size_t>* content = storage->getContent();
+ std::map<std::string, sg_size_t>* content = storage->extension<simgrid::s4u::FileSystemStorageExt>()->getContent();
// Note: ::operator delete is ok here (no destructor called) since the dict elements are of POD type sg_size_t.
xbt_dict_t content_as_dict = xbt_dict_new_homogeneous(::operator delete);
localStorage = st;
XBT_DEBUG("\tOpen file '%s'", path_.c_str());
- std::map<std::string, sg_size_t>* content = localStorage->getContent();
+ std::map<std::string, sg_size_t>* content = localStorage->extension<FileSystemStorageExt>()->getContent();
// if file does not exist create an empty file
auto sz = content->find(path_);
if (sz != content->end()) {
current_position_ += write_size;
size_ = current_position_;
+ std::map<std::string, sg_size_t>* content = localStorage->extension<FileSystemStorageExt>()->getContent();
- localStorage->getContent()->erase(path_);
- localStorage->getContent()->insert({path_, size_});
+ content->erase(path_);
+ content->insert({path_, size_});
return write_size;
}
{
/* 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<std::string, sg_size_t>* content = localStorage->getContent();
+ std::map<std::string, sg_size_t>* content = localStorage->extension<FileSystemStorageExt>()->getContent();
auto sz = content->find(path_);
if (sz != content->end()) { // src file exists
sg_size_t new_size = sz->second;
int File::unlink()
{
/* Check if the file is on local storage */
- if (localStorage->getContent()->find(path_) == localStorage->getContent()->end()) {
+ std::map<std::string, sg_size_t>* content = localStorage->extension<FileSystemStorageExt>()->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 {
localStorage->extension<FileSystemStorageExt>()->decrUsedSize(size_);
// Remove the file from storage
- localStorage->getContent()->erase(fullpath_);
+ content->erase(fullpath_);
return 0;
}
FileSystemStorageExt::FileSystemStorageExt(simgrid::s4u::Storage* ptr)
{
content_ = parseContent(ptr->getImpl()->content_name);
+ size_ = ptr->getImpl()->size_;
}
FileSystemStorageExt::~FileSystemStorageExt()
sg_size_t sg_storage_get_size_free(sg_storage_t st)
{
- return st->getImpl()->getSize() - st->extension<FileSystemStorageExt>()->getUsedSize();
+ return st->extension<FileSystemStorageExt>()->getSize() - st->extension<FileSystemStorageExt>()->getUsedSize();
}
sg_size_t sg_storage_get_size_used(sg_storage_t st)
sg_size_t sg_storage_get_size(sg_storage_t st)
{
- return st->getImpl()->getSize();
+ return st->extension<FileSystemStorageExt>()->getSize();
}
SG_END_DECL()
simgrid::simix::kernelImmediate([this, key, value] { this->pimpl_->setProperty(key, value); });
}
-std::map<std::string, sg_size_t>* Storage::getContent()
-{
- FileSystemStorageExt* file_system = extension<FileSystemStorageExt>();
- return file_system->getContent();
-}
-
sg_size_t Storage::read(sg_size_t size)
{
return simcall_storage_read(pimpl_, size);
* @return The StorageAction corresponding to the writing
*/
virtual StorageAction* write(sg_size_t size) = 0;
- virtual sg_size_t getSize() { return size_; }
virtual std::string getHost() { return attach_; }
static std::unordered_map<std::string, StorageImpl*>* storagesMap() { return StorageImpl::storages; }
lmm_constraint_t constraintRead_; /* Constraint for maximum write bandwidth*/
std::string typeId_;
- sg_size_t usedSize_ = 0;
- std::string content_name;
+ std::string content_name; // Only used at parsing time then goes to the FileSystemExtension
+ sg_size_t size_; // Only used at parsing time then goes to the FileSystemExtension
private:
- sg_size_t size_;
static std::unordered_map<std::string, StorageImpl*>* storages;
// Name of the host to which this storage is attached. Only used at platform parsing time, then the interface stores
// the Host directly.
static void display_storage_content(simgrid::s4u::Storage* storage)
{
XBT_INFO("Print the content of the storage element: %s", storage->getCname());
- std::map<std::string, sg_size_t>* content = storage->getContent();
+ std::map<std::string, sg_size_t>* content = storage->extension<simgrid::s4u::FileSystemStorageExt>()->getContent();
if (not content->empty()) {
for (auto const& entry : *content)
XBT_INFO("\t%s size: %llu bytes", entry.first.c_str(), entry.second);