Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
move content from MSG_VM to s4u::VM
authorMartin Quinson <martin.quinson@loria.fr>
Mon, 19 Dec 2016 11:15:36 +0000 (12:15 +0100)
committerMartin Quinson <martin.quinson@loria.fr>
Mon, 19 Dec 2016 11:15:36 +0000 (12:15 +0100)
include/simgrid/s4u/VirtualMachine.hpp
src/msg/msg_vm.cpp
src/plugins/vm/VirtualMachineImpl.cpp
src/plugins/vm/s4u_VirtualMachine.cpp

index de3ecc0..7ee8659 100644 (file)
@@ -53,6 +53,7 @@ public:
   void parameters(vm_params_t params);
   void setParameters(vm_params_t params);
   double getRamsize();
   void parameters(vm_params_t params);
   void setParameters(vm_params_t params);
   double getRamsize();
+  simgrid::s4u::Host* pm();
 
   /* FIXME: protect me */
   simgrid::vm::VirtualMachineImpl* pimpl_vm_ = nullptr;
 
   /* FIXME: protect me */
   simgrid::vm::VirtualMachineImpl* pimpl_vm_ = nullptr;
index 86c8380..426cf86 100644 (file)
@@ -901,21 +901,7 @@ void MSG_vm_save(msg_vm_t vm)
 void MSG_vm_restore(msg_vm_t vm)
 {
   simgrid::simix::kernelImmediate([vm]() {
 void MSG_vm_restore(msg_vm_t vm)
 {
   simgrid::simix::kernelImmediate([vm]() {
-    simgrid::s4u::VirtualMachine* typedVm = static_cast<simgrid::s4u::VirtualMachine*>(vm);
-
-    if (typedVm->pimpl_vm_->getState() != SURF_VM_STATE_SAVED)
-      THROWF(vm_error, 0, "VM(%s) was not saved", vm->cname());
-
-    XBT_DEBUG("restore VM(%s), where %d processes exist", vm->cname(), xbt_swag_size(sg_host_simix(vm)->process_list));
-
-    /* jump to vm_ws_restore() */
-    typedVm->pimpl_vm_->restore();
-
-    smx_actor_t smx_process, smx_process_safe;
-    xbt_swag_foreach_safe(smx_process, smx_process_safe, sg_host_simix(vm)->process_list) {
-      XBT_DEBUG("resume %s", smx_process->name.c_str());
-      SIMIX_process_resume(smx_process);
-    }
+    static_cast<simgrid::s4u::VirtualMachine*>(vm)->pimpl_vm_->restore();
   });
 
   if (TRACE_msg_vm_is_enabled()) {
   });
 
   if (TRACE_msg_vm_is_enabled()) {
@@ -930,7 +916,7 @@ void MSG_vm_restore(msg_vm_t vm)
  */
 msg_host_t MSG_vm_get_pm(msg_vm_t vm)
 {
  */
 msg_host_t MSG_vm_get_pm(msg_vm_t vm)
 {
-  return static_cast<simgrid::s4u::VirtualMachine*>(vm)->pimpl_vm_->getPm();
+  return static_cast<simgrid::s4u::VirtualMachine*>(vm)->pm();
 }
 
 /** @brief Set a CPU bound for a given VM.
 }
 
 /** @brief Set a CPU bound for a given VM.
index a34c8a3..66e0ce6 100644 (file)
@@ -6,6 +6,8 @@
 
 #include "src/plugins/vm/VirtualMachineImpl.hpp"
 #include "simgrid/s4u/VirtualMachine.hpp"
 
 #include "src/plugins/vm/VirtualMachineImpl.hpp"
 #include "simgrid/s4u/VirtualMachine.hpp"
+#include "src/simix/ActorImpl.hpp"
+#include "src/simix/smx_host_private.h"
 
 #include <xbt/signal.hpp>
 
 
 #include <xbt/signal.hpp>
 
@@ -173,9 +175,21 @@ void VirtualMachineImpl::save()
 
 void VirtualMachineImpl::restore()
 {
 
 void VirtualMachineImpl::restore()
 {
+  if (getState() != SURF_VM_STATE_SAVED)
+    THROWF(vm_error, 0, "Cannot restore VM %s: it was not saved", piface_->cname());
+
+  xbt_swag_t process_list = piface_->extension<simgrid::simix::Host>()->process_list;
+  XBT_DEBUG("Restore VM %s, where %d processes exist", piface_->cname(), xbt_swag_size(process_list));
+
   vmState_ = SURF_VM_STATE_RESTORING;
   action_->resume();
   vmState_ = SURF_VM_STATE_RUNNING;
   vmState_ = SURF_VM_STATE_RESTORING;
   action_->resume();
   vmState_ = SURF_VM_STATE_RUNNING;
+
+  smx_actor_t smx_process, smx_process_safe;
+  xbt_swag_foreach_safe(smx_process, smx_process_safe, process_list) {
+    XBT_DEBUG("resume %s", smx_process->cname());
+    SIMIX_process_resume(smx_process);
+  }
 }
 
 /** @brief returns the physical machine on which the VM is running **/
 }
 
 /** @brief returns the physical machine on which the VM is running **/
index 86a184f..05d21f9 100644 (file)
@@ -68,6 +68,10 @@ double VirtualMachine::getRamsize()
 {
   return pimpl_vm_->params_.ramsize;
 }
 {
   return pimpl_vm_->params_.ramsize;
 }
+simgrid::s4u::Host* VirtualMachine::pm()
+{
+  return pimpl_vm_->getPm();
+}
 
 /** @brief Retrieve a copy of the parameters of that VM/PM
  *  @details The ramsize and overcommit fields are used on the PM too */
 
 /** @brief Retrieve a copy of the parameters of that VM/PM
  *  @details The ramsize and overcommit fields are used on the PM too */