From 6e5213ae38cdc49babd47ecc15ea914564a7ceb2 Mon Sep 17 00:00:00 2001 From: Martin Quinson Date: Tue, 23 May 2023 23:56:46 +0200 Subject: [PATCH] Give the on_this_ variant to all VM signals --- docs/source/Plugins.rst | 6 ++++ docs/source/app_s4u.rst | 8 +++++ include/simgrid/s4u/VirtualMachine.hpp | 40 ++++++++++++++++++++++ src/kernel/resource/VirtualMachineImpl.cpp | 7 ++++ src/s4u/s4u_VirtualMachine.cpp | 1 + 5 files changed, 62 insertions(+) diff --git a/docs/source/Plugins.rst b/docs/source/Plugins.rst index 27247b22d8..bbba377bcc 100644 --- a/docs/source/Plugins.rst +++ b/docs/source/Plugins.rst @@ -118,11 +118,17 @@ Partial list of existing signals in s4u: - :cpp:func:`NetZone::on_creation ` :cpp:func:`NetZone::on_seal ` - :cpp:func:`VirtualMachine::on_start ` + :cpp:func:`VirtualMachine::on_this_start ` :cpp:func:`VirtualMachine::on_started ` + :cpp:func:`VirtualMachine::on_this_started ` :cpp:func:`VirtualMachine::on_suspend ` + :cpp:func:`VirtualMachine::on_this_suspend ` :cpp:func:`VirtualMachine::on_resume ` + :cpp:func:`VirtualMachine::on_this_resume ` :cpp:func:`VirtualMachine::on_migration_start ` + :cpp:func:`VirtualMachine::on_this_migration_start ` :cpp:func:`VirtualMachine::on_migration_end ` + :cpp:func:`VirtualMachine::on_this_migration_end ` - In activities: diff --git a/docs/source/app_s4u.rst b/docs/source/app_s4u.rst index 151d52a722..a9f6507eb1 100644 --- a/docs/source/app_s4u.rst +++ b/docs/source/app_s4u.rst @@ -2062,13 +2062,21 @@ Signals .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_creation_cb .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_destruction_cb + .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_this_destruction_cb .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_migration_end_cb + .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_this_migration_end_cb .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_migration_start_cb + .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_this_migration_start_cb .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_resume_cb + .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_this_resume_cb .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_shutdown_cb + .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_this_shutdown_cb .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_start_cb + .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_this_start_cb .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_started_cb + .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_this_started_cb .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_suspend_cb + .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_this_suspend_cb .. _API_s4u_Activity: diff --git a/include/simgrid/s4u/VirtualMachine.hpp b/include/simgrid/s4u/VirtualMachine.hpp index 6afde5be18..680bbf5582 100644 --- a/include/simgrid/s4u/VirtualMachine.hpp +++ b/include/simgrid/s4u/VirtualMachine.hpp @@ -36,13 +36,21 @@ class XBT_PUBLIC VirtualMachine : public s4u::Host { /* Signals about the life cycle of the VM */ static xbt::signal on_vm_creation; static xbt::signal on_start; + xbt::signal on_this_start; static xbt::signal on_started; + xbt::signal on_this_started; static xbt::signal on_shutdown; + xbt::signal on_this_shutdown; static xbt::signal on_suspend; + xbt::signal on_this_suspend; static xbt::signal on_resume; + xbt::signal on_this_resume; static xbt::signal on_migration_start; + xbt::signal on_this_migration_start; static xbt::signal on_migration_end; + xbt::signal on_this_migration_end; static xbt::signal on_vm_destruction; + xbt::signal on_this_vm_destruction; #ifndef DOXYGEN friend kernel::resource::VirtualMachineImpl; // calls signals from Impl @@ -90,19 +98,51 @@ public: /* Callbacks on signals */ static void on_creation_cb(const std::function& cb) { on_vm_creation.connect(cb); } static void on_start_cb(const std::function& cb) { on_start.connect(cb); } + void on_this_start_cb(const std::function& cb) + { + on_this_start.connect(cb); + } static void on_started_cb(const std::function& cb) { on_started.connect(cb); } + void on_this_started_cb(const std::function& cb) + { + on_this_started.connect(cb); + } static void on_shutdown_cb(const std::function& cb) { on_shutdown.connect(cb); } + void on_this_shutdown_cb(const std::function& cb) + { + on_this_shutdown.connect(cb); + } static void on_suspend_cb(const std::function& cb) { on_suspend.connect(cb); } + void on_this_suspend_cb(const std::function& cb) + { + on_this_suspend.connect(cb); + } static void on_resume_cb(const std::function& cb) { on_resume.connect(cb); } + void on_this_resume_cb(const std::function& cb) + { + on_this_resume.connect(cb); + } static void on_destruction_cb(const std::function& cb) { on_vm_destruction.connect(cb); } + void on_this_destruction_cb(const std::function& cb) + { + on_this_vm_destruction.connect(cb); + } static void on_migration_start_cb(const std::function& cb) { on_migration_start.connect(cb); } + void on_this_migration_start_cb(const std::function& cb) + { + on_this_migration_start.connect(cb); + } static void on_migration_end_cb(const std::function& cb) { on_migration_end.connect(cb); } + void on_this_migration_end_cb(const std::function& cb) + { + on_this_migration_end.connect(cb); + } }; } // namespace simgrid::s4u diff --git a/src/kernel/resource/VirtualMachineImpl.cpp b/src/kernel/resource/VirtualMachineImpl.cpp index 9603258ff3..1e6337ba1d 100644 --- a/src/kernel/resource/VirtualMachineImpl.cpp +++ b/src/kernel/resource/VirtualMachineImpl.cpp @@ -236,6 +236,7 @@ void VirtualMachineImpl::vm_destroy() void VirtualMachineImpl::start() { s4u::VirtualMachine::on_start(*get_iface()); + get_iface()->on_this_start(*get_iface()); s4u::VmHostExt::ensureVmExtInstalled(); if (physical_host_->extension() == nullptr) @@ -261,11 +262,13 @@ void VirtualMachineImpl::start() vm_state_ = s4u::VirtualMachine::State::RUNNING; s4u::VirtualMachine::on_started(*get_iface()); + get_iface()->on_this_started(*get_iface()); } void VirtualMachineImpl::suspend(const actor::ActorImpl* issuer) { s4u::VirtualMachine::on_suspend(*get_iface()); + get_iface()->on_this_suspend(*get_iface()); if (vm_state_ != s4u::VirtualMachine::State::RUNNING) throw VmFailureException(XBT_THROW_POINT, @@ -305,6 +308,7 @@ void VirtualMachineImpl::resume() vm_state_ = s4u::VirtualMachine::State::RUNNING; s4u::VirtualMachine::on_resume(*get_iface()); + get_iface()->on_this_resume(*get_iface()); } /** @brief Power off a VM. @@ -331,6 +335,7 @@ void VirtualMachineImpl::shutdown(actor::ActorImpl* issuer) set_state(s4u::VirtualMachine::State::DESTROYED); s4u::VirtualMachine::on_shutdown(*get_iface()); + get_iface()->on_this_shutdown(*get_iface()); } /** @brief Change the physical host on which the given VM is running @@ -399,12 +404,14 @@ void VirtualMachineImpl::start_migration() { is_migrating_ = true; s4u::VirtualMachine::on_migration_start(*get_iface()); + get_iface()->on_this_migration_start(*get_iface()); } void VirtualMachineImpl::end_migration() { is_migrating_ = false; s4u::VirtualMachine::on_migration_end(*get_iface()); + get_iface()->on_this_migration_end(*get_iface()); } void VirtualMachineImpl::seal() diff --git a/src/s4u/s4u_VirtualMachine.cpp b/src/s4u/s4u_VirtualMachine.cpp index 1c305bee47..9f6f7716ee 100644 --- a/src/s4u/s4u_VirtualMachine.cpp +++ b/src/s4u/s4u_VirtualMachine.cpp @@ -74,6 +74,7 @@ void VirtualMachine::destroy() XBT_DEBUG("destroy %s", get_cname()); on_vm_destruction(*this); + on_this_vm_destruction(*this); /* Then, destroy the VM object */ kernel::actor::simcall_answered( [this]() { get_vm_impl()->get_physical_host()->get_impl()->destroy_vm(get_name()); }); -- 2.20.1