From: Fred Suter Date: Tue, 23 May 2023 14:17:54 +0000 (-0400) Subject: move handling of remote disks to platform parsing. X-Git-Tag: v3.34~98 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/e5597052ce7ec4027dc2e32067338bfe5217395e?ds=inline move handling of remote disks to platform parsing. they should be accessible without having to load the filesystem plugin. only the notion of mounting point really pertains to the plugin --- diff --git a/examples/cpp/dag-comm/s4u-dag-comm.cpp b/examples/cpp/dag-comm/s4u-dag-comm.cpp index 690f3f06d1..184e416f9a 100644 --- a/examples/cpp/dag-comm/s4u-dag-comm.cpp +++ b/examples/cpp/dag-comm/s4u-dag-comm.cpp @@ -13,7 +13,6 @@ namespace sg4 = simgrid::s4u; int main(int argc, char* argv[]) { sg4::Engine e(&argc, argv); - sg_storage_file_system_init(); e.load_platform(argv[1]); auto tremblay = e.host_by_name("Tremblay"); diff --git a/examples/cpp/dag-io/s4u-dag-io.cpp b/examples/cpp/dag-io/s4u-dag-io.cpp index e86e3a8e52..0ca2de24c5 100644 --- a/examples/cpp/dag-io/s4u-dag-io.cpp +++ b/examples/cpp/dag-io/s4u-dag-io.cpp @@ -13,7 +13,6 @@ namespace sg4 = simgrid::s4u; int main(int argc, char* argv[]) { sg4::Engine e(&argc, argv); - sg_storage_file_system_init(); e.load_platform(argv[1]); auto bob = e.host_by_name("bob"); diff --git a/examples/cpp/io-dependent/s4u-io-dependent.cpp b/examples/cpp/io-dependent/s4u-io-dependent.cpp index 8788e10753..c86a78c2c3 100644 --- a/examples/cpp/io-dependent/s4u-io-dependent.cpp +++ b/examples/cpp/io-dependent/s4u-io-dependent.cpp @@ -54,7 +54,6 @@ static void test() int main(int argc, char* argv[]) { sg4::Engine e(&argc, argv); - sg_storage_file_system_init(); e.load_platform(argv[1]); sg4::Actor::create("bob", e.host_by_name("bob"), test); diff --git a/examples/cpp/operation-io/s4u-operation-io.cpp b/examples/cpp/operation-io/s4u-operation-io.cpp index 34912466c1..f12687402c 100644 --- a/examples/cpp/operation-io/s4u-operation-io.cpp +++ b/examples/cpp/operation-io/s4u-operation-io.cpp @@ -22,7 +22,6 @@ XBT_LOG_NEW_DEFAULT_CATEGORY(operation_simple, "Messages specific for this opera int main(int argc, char* argv[]) { simgrid::s4u::Engine e(&argc, argv); - sg_storage_file_system_init(); e.load_platform(argv[1]); simgrid::plugins::Operation::init(); diff --git a/src/kernel/xml/platf_sax_cb.cpp b/src/kernel/xml/platf_sax_cb.cpp index 82f8bcefc2..2a2abe87c9 100644 --- a/src/kernel/xml/platf_sax_cb.cpp +++ b/src/kernel/xml/platf_sax_cb.cpp @@ -5,6 +5,7 @@ #include #include +#include #include #include #include @@ -259,10 +260,57 @@ void STag_simgrid_parse_platform() "The most recent formalism that this version of SimGrid understands is v4.1.\n" "Please update your code, or use another, more adapted, file."); } + +static void add_remote_disks() +{ + for (auto const& host : simgrid::s4u::Engine::get_instance()->get_all_hosts()) { + const char* remote_disk_str = host->get_property("remote_disk"); + if (not remote_disk_str) + continue; + std::vector tokens; + boost::split(tokens, remote_disk_str, boost::is_any_of(":")); + simgrid::s4u::Host* remote_host = simgrid::s4u::Host::by_name_or_null(tokens[2]); + xbt_assert(remote_host, "You're trying to access a host that does not exist. Please check your platform file"); + + const simgrid::s4u::Disk* disk = nullptr; + for (auto const& d : remote_host->get_disks()) + if (d->get_name() == tokens[1]) { + disk = d; + break; + } + + xbt_assert(disk, "You're trying to mount a disk that does not exist. Please check your platform file"); + host->add_disk(disk); + + XBT_DEBUG("Host '%s' wants to access a remote disk: %s of %s", host->get_cname(), disk->get_cname(), + remote_host->get_cname()); + XBT_DEBUG("Host '%s' now has %zu disks", host->get_cname(), host->get_disks().size()); + } +} + +static void remove_remote_disks() +{ + XBT_DEBUG("Simulation is over, time to unregister remote disks if any"); + for (auto const& host : simgrid::s4u::Engine::get_instance()->get_all_hosts()) { + const char* remote_disk_str = host->get_property("remote_disk"); + if (remote_disk_str) { + std::vector tokens; + boost::split(tokens, remote_disk_str, boost::is_any_of(":")); + XBT_DEBUG("Host '%s' wants to unmount a remote disk: %s of %s", host->get_cname(), + tokens[1].c_str(), tokens[2].c_str()); + host->remove_disk(tokens[1]); + XBT_DEBUG("Host '%s' now has %zu disks", host->get_cname(), host->get_disks().size()); + } + } +} + void ETag_simgrid_parse_platform() { + simgrid::s4u::Engine::on_platform_created_cb(&add_remote_disks); + simgrid::s4u::Engine::on_simulation_end_cb(&remove_remote_disks); if (fire_on_platform_created_callback) simgrid::s4u::Engine::on_platform_created(); + } void STag_simgrid_parse_prop() diff --git a/src/plugins/file_system/s4u_FileSystem.cpp b/src/plugins/file_system/s4u_FileSystem.cpp index 15f1871d4b..31b7fff93b 100644 --- a/src/plugins/file_system/s4u_FileSystem.cpp +++ b/src/plugins/file_system/s4u_FileSystem.cpp @@ -412,49 +412,28 @@ static void on_host_creation(simgrid::s4u::Host& host) host.extension_set(new FileDescriptorHostExt()); } -static void on_platform_created() -{ - for (auto const& host : simgrid::s4u::Engine::get_instance()->get_all_hosts()) { - const char* remote_disk_str = host->get_property("remote_disk"); - if (not remote_disk_str) - continue; - std::vector tokens; - boost::split(tokens, remote_disk_str, boost::is_any_of(":")); - std::string mount_point = tokens[0]; - simgrid::s4u::Host* remote_host = simgrid::s4u::Host::by_name_or_null(tokens[2]); - xbt_assert(remote_host, "You're trying to access a host that does not exist. Please check your platform file"); - - const simgrid::s4u::Disk* disk = nullptr; - for (auto const& d : remote_host->get_disks()) - if (d->get_name() == tokens[1]) { - disk = d; - break; - } - - xbt_assert(disk, "You're trying to mount a disk that does not exist. Please check your platform file"); - disk->extension()->add_remote_mount(remote_host, mount_point); - host->add_disk(disk); - - XBT_DEBUG("Host '%s' wants to mount a remote disk: %s of %s mounted on %s", host->get_cname(), disk->get_cname(), - remote_host->get_cname(), mount_point.c_str()); - XBT_DEBUG("Host '%s' now has %zu disks", host->get_cname(), host->get_disks().size()); - } -} - -static void on_simulation_end() -{ - XBT_DEBUG("Simulation is over, time to unregister remote disks if any"); - for (auto const& host : simgrid::s4u::Engine::get_instance()->get_all_hosts()) { - const char* remote_disk_str = host->get_property("remote_disk"); - if (remote_disk_str) { - std::vector tokens; - boost::split(tokens, remote_disk_str, boost::is_any_of(":")); - XBT_DEBUG("Host '%s' wants to unmount a remote disk: %s of %s mounted on %s", host->get_cname(), - tokens[1].c_str(), tokens[2].c_str(), tokens[0].c_str()); - host->remove_disk(tokens[1]); - XBT_DEBUG("Host '%s' now has %zu disks", host->get_cname(), host->get_disks().size()); - } - } + static void on_platform_created() + { + for (auto const& host : simgrid::s4u::Engine::get_instance()->get_all_hosts()) { + const char* remote_disk_str = host->get_property("remote_disk"); + if (not remote_disk_str) + continue; + std::vector tokens; + boost::split(tokens, remote_disk_str, boost::is_any_of(":")); + std::string mount_point = tokens[0]; + simgrid::s4u::Host* remote_host = simgrid::s4u::Host::by_name_or_null(tokens[2]); + xbt_assert(remote_host, "You're trying to access a host that does not exist. Please check your platform file"); + + const simgrid::s4u::Disk* disk = nullptr; + for (auto const& d : remote_host->get_disks()) + if (d->get_name() == tokens[1]) { + disk = d; + break; + } + + xbt_assert(disk, "You're trying to mount a disk that does not exist. Please check your platform file"); + disk->extension()->add_remote_mount(remote_host, mount_point); + } } /* **************************** Public interface *************************** */ @@ -481,7 +460,6 @@ void sg_storage_file_system_init() simgrid::s4u::Host::on_creation_cb(&on_host_creation); } simgrid::s4u::Engine::on_platform_created_cb(&on_platform_created); - simgrid::s4u::Engine::on_simulation_end_cb(&on_simulation_end); } sg_file_t sg_file_open(const char* fullpath, void* data)