#include "simgrid/plugins/file_system.h"
#include "simgrid/s4u/Actor.hpp"
+#include "simgrid/s4u/Comm.hpp"
#include "simgrid/s4u/Engine.hpp"
#include "src/surf/HostImpl.hpp"
#include "src/surf/xml/platf_private.hpp"
simgrid::xbt::Extension<Disk, FileSystemDiskExt> FileSystemDiskExt::EXTENSION_ID;
simgrid::xbt::Extension<Host, FileDescriptorHostExt> FileDescriptorHostExt::EXTENSION_ID;
-Disk* File::find_local_disk_on(const Host* host)
+const Disk* File::find_local_disk_on(const Host* host)
{
- Disk* d = nullptr;
+ const Disk* d = nullptr;
size_t longest_prefix_length = 0;
for (auto const& disk : host->get_disks()) {
std::string current_mount;
longest_prefix_length = current_mount.length();
d = disk;
}
- if (longest_prefix_length > 0) { /* Mount point found, split fullpath_ into mount_name and path+filename*/
- mount_point_ = fullpath_.substr(0, longest_prefix_length);
- if (mount_point_ == std::string("/"))
- path_ = fullpath_;
- else
- path_ = fullpath_.substr(longest_prefix_length, fullpath_.length());
- XBT_DEBUG("%s + %s", mount_point_.c_str(), path_.c_str());
- } else
- xbt_die("Can't find mount point for '%s' on '%s'", fullpath_.c_str(), host->get_cname());
+ xbt_assert(longest_prefix_length > 0, "Can't find mount point for '%s' on '%s'", fullpath_.c_str(),
+ host->get_cname());
+ /* Mount point found, split fullpath_ into mount_name and path+filename*/
+ mount_point_ = fullpath_.substr(0, longest_prefix_length);
+ if (mount_point_ == std::string("/"))
+ path_ = fullpath_;
+ else
+ path_ = fullpath_.substr(longest_prefix_length, fullpath_.length());
+ XBT_DEBUG("%s + %s", mount_point_.c_str(), path_.c_str());
}
return d;
}
File::File(const std::string& fullpath, void* userdata) : File(fullpath, Host::current(), userdata) {}
-File::File(const std::string& fullpath, sg_host_t host, void* userdata) : fullpath_(fullpath)
+File::File(const std::string& fullpath, const_sg_host_t host, void* userdata) : fullpath_(fullpath)
{
kernel::actor::simcall([this, &host, userdata] {
this->set_data(userdata);
if (host && 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);
- host->sendto(Host::current(), read_size);
+ Comm::sendto(host, Host::current(), read_size);
}
return read_size;
* @ingroup plugin_filesystem
*
* @param size of the file to write
+ * @param write_inside
* @return the number of bytes successfully write or -1 if an error occurred
*/
sg_size_t File::write(sg_size_t size, bool write_inside)
if (host && 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);
- Host::current()->sendto(host, size);
+ Comm::sendto(Host::current(), host, size);
}
XBT_DEBUG("WRITE %s on disk '%s'. size '%llu/%llu' '%llu:%llu'", get_path(), local_disk_->get_cname(), size, size_,
sg_disk_get_size_used(local_disk_), sg_disk_get_size(local_disk_));
int File::unlink() const
{
/* Check if the file is on local storage */
- std::map<std::string, sg_size_t, std::less<>>* content = nullptr;
- const char* name = "";
- content = local_disk_->extension<FileSystemDiskExt>()->get_content();
- name = local_disk_->get_cname();
+ auto* content = local_disk_->extension<FileSystemDiskExt>()->get_content();
+ const char* name = local_disk_->get_cname();
if (not content || content->find(path_) == content->end()) {
XBT_WARN("File %s is not on disk %s. Impossible to unlink", path_.c_str(), name);
if (src_host) {
XBT_DEBUG("Initiate data transfer of %llu bytes between %s and %s.", read_size, src_host->get_cname(),
dst_host->get_cname());
- src_host->sendto(dst_host, read_size);
+ Comm::sendto(src_host, dst_host, read_size);
}
/* Create file on remote host, write it and close it */
const char* size_str = ptr->get_property("size");
std::string dummyfile;
if (size_str)
- size_ = surf_parse_get_size(dummyfile, -1, size_str, "disk size", ptr->get_name());
+ size_ = xbt_parse_get_size(dummyfile, -1, size_str, "disk size " + ptr->get_name());
const char* current_mount_str = ptr->get_property("mount");
if (current_mount_str)