Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
make all VM signals private
authorSUTER Frederic <frederic.suter@cc.in2p3.fr>
Wed, 12 Jan 2022 08:22:02 +0000 (09:22 +0100)
committerSUTER Frederic <frederic.suter@cc.in2p3.fr>
Wed, 12 Jan 2022 08:22:02 +0000 (09:22 +0100)
include/simgrid/s4u/VirtualMachine.hpp
src/kernel/resource/VirtualMachineImpl.cpp
src/plugins/vm/VmLiveMigration.cpp
src/s4u/s4u_VirtualMachine.cpp

index 41be4d1..8a7a33c 100644 (file)
@@ -34,9 +34,19 @@ public:
 class XBT_PUBLIC VirtualMachine : public s4u::Host {
   kernel::resource::VirtualMachineImpl* const pimpl_vm_;
 
+  /* Signals about the life cycle of the VM */
+  static xbt::signal<void(VirtualMachine&)> on_creation;
+  static xbt::signal<void(VirtualMachine const&)> on_start;
+  static xbt::signal<void(VirtualMachine const&)> on_started;
+  static xbt::signal<void(VirtualMachine const&)> on_shutdown;
+  static xbt::signal<void(VirtualMachine const&)> on_suspend;
+  static xbt::signal<void(VirtualMachine const&)> on_resume;
+  static xbt::signal<void(VirtualMachine const&)> on_migration_start;
+  static xbt::signal<void(VirtualMachine const&)> on_migration_end;
+  static xbt::signal<void(VirtualMachine const&)> on_destruction;
+
 public:
-  explicit VirtualMachine(const std::string& name, Host* physical_host, int core_amount);
-  explicit VirtualMachine(const std::string& name, Host* physical_host, int core_amount, size_t ramsize);
+  explicit VirtualMachine(const std::string& name, Host* physical_host, int core_amount, size_t ramsize = 1024);
 
 #ifndef DOXYGEN
   // No copy/move
@@ -67,8 +77,12 @@ public:
   size_t get_ramsize() const;
   VirtualMachine* set_ramsize(size_t ramsize);
   VirtualMachine* set_bound(double bound);
+  void start_migration() const;
+  void end_migration() const;
 
   State get_state() const;
+
+  /* Callbacks on signals */
   static void on_creation_cb(const std::function<void(VirtualMachine&)>& cb) { on_creation.connect(cb); }
   static void on_start_cb(const std::function<void(VirtualMachine const&)>& cb) { on_start.connect(cb); }
   static void on_started_cb(const std::function<void(VirtualMachine const&)>& cb) { on_started.connect(cb); }
@@ -84,20 +98,6 @@ public:
   {
     on_migration_end.connect(cb);
   }
-#ifndef DOXYGEN
-  /* FIXME the signals should be private */
-  static xbt::signal<void(VirtualMachine const&)> on_migration_start;
-  static xbt::signal<void(VirtualMachine const&)> on_migration_end;
-  static xbt::signal<void(VirtualMachine const&)> on_destruction;
-#endif
-
-private:
-  static xbt::signal<void(VirtualMachine&)> on_creation;
-  static xbt::signal<void(VirtualMachine const&)> on_start;
-  static xbt::signal<void(VirtualMachine const&)> on_started;
-  static xbt::signal<void(VirtualMachine const&)> on_shutdown;
-  static xbt::signal<void(VirtualMachine const&)> on_suspend;
-  static xbt::signal<void(VirtualMachine const&)> on_resume;
 };
 } // namespace s4u
 } // namespace simgrid
index 2415f08..16607a0 100644 (file)
@@ -195,7 +195,6 @@ VirtualMachineImpl::VirtualMachineImpl(const std::string& name, s4u::VirtualMach
 /** @brief A physical host does not disappear in the current SimGrid code, but a VM may disappear during a simulation */
 void VirtualMachineImpl::vm_destroy()
 {
-  s4u::VirtualMachine::on_destruction(*piface_);
   /* I was already removed from the allVms set if the VM was destroyed cleanly */
   auto iter = find(allVms_.begin(), allVms_.end(), piface_);
   if (iter != allVms_.end())
index 6eae98e..607f75b 100644 (file)
@@ -336,8 +336,7 @@ void sg_vm_migrate(simgrid::s4u::VirtualMachine* vm, simgrid::s4u::Host* dst_pm)
         XBT_THROW_POINT,
         simgrid::xbt::string_printf("Cannot migrate VM '%s' that is already migrating.", vm->get_cname()));
 
-  vm->get_vm_impl()->start_migration();
-  simgrid::s4u::VirtualMachine::on_migration_start(*vm);
+  vm->start_migration();
 
   std::string rx_name =
       std::string("__pr_mig_rx:") + vm->get_cname() + "(" + src_pm->get_cname() + "-" + dst_pm->get_cname() + ")";
@@ -359,6 +358,5 @@ void sg_vm_migrate(simgrid::s4u::VirtualMachine* vm, simgrid::s4u::Host* dst_pm)
   tx->join();
   rx->join();
 
-  vm->get_vm_impl()->end_migration();
-  simgrid::s4u::VirtualMachine::on_migration_end(*vm);
+  vm->end_migration();
 }
index 4148c08..a8b7037 100644 (file)
@@ -32,11 +32,6 @@ void VmHostExt::ensureVmExtInstalled()
     EXTENSION_ID = Host::extension_create<VmHostExt>();
 }
 
-VirtualMachine::VirtualMachine(const std::string& name, s4u::Host* physical_host, int core_amount)
-    : VirtualMachine(name, physical_host, core_amount, 1024)
-{
-}
-
 VirtualMachine::VirtualMachine(const std::string& name, s4u::Host* physical_host, int core_amount, size_t ramsize)
     : Host(new kernel::resource::VirtualMachineImpl(name, this, physical_host, core_amount, ramsize))
     , pimpl_vm_(dynamic_cast<kernel::resource::VirtualMachineImpl*>(Host::get_impl()))
@@ -125,7 +120,7 @@ void VirtualMachine::destroy()
     shutdown();
 
     XBT_DEBUG("destroy %s", get_cname());
-
+    on_destruction(*this);
     /* Then, destroy the VM object */
     kernel::actor::simcall([this]() {
       get_vm_impl()->vm_destroy();
@@ -206,6 +201,18 @@ VirtualMachine* VirtualMachine::set_bound(double bound)
   return this;
 }
 
+void VirtualMachine::start_migration() const
+{
+  pimpl_vm_->start_migration();
+  on_migration_start(*this);
+}
+
+void VirtualMachine::end_migration() const
+{
+  pimpl_vm_->end_migration();
+  on_migration_end(*this);
+}
+
 } // namespace s4u
 } // namespace simgrid