Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branches 'master' and 'master' of scm.gforge.inria.fr:/gitroot/simgrid/simgrid
[simgrid.git] / src / surf / HostImpl.cpp
index c425691..3fd06eb 100644 (file)
@@ -10,8 +10,8 @@
 #include "src/surf/HostImpl.hpp"
 #include "simgrid/sg_config.h"
 
+#include "VirtualMachineImpl.hpp"
 #include "network_interface.hpp"
-#include "virtual_machine.hpp"
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_host, surf, "Logging specific to the SURF host module");
 
@@ -24,19 +24,9 @@ simgrid::surf::HostModel *surf_host_model = nullptr;
 namespace simgrid {
 namespace surf {
 
-simgrid::xbt::Extension<simgrid::s4u::Host, HostImpl> HostImpl::EXTENSION_ID;
-
 /*********
  * Model *
  *********/
-HostImpl* HostModel::createHost(const char* name, Cpu* cpu, kernel::routing::NetCard* netcard, xbt_dynar_t storageList)
-{
-  HostImpl *host = new simgrid::surf::HostImpl(surf_host_model, name, storageList, cpu);
-  xbt_lib_set(storage_lib, name, ROUTING_STORAGE_HOST_LEVEL, (void*)storageList);
-
-  XBT_DEBUG("Create host %s with %ld mounted disks", name, xbt_dynar_length(host->storage_));
-  return host;
-}
 
 /* Each VM has a dummy CPU action on the PM layer. This CPU action works as the
  * constraint (capacity) of the VM in the PM layer. If the VM does not have any
@@ -45,9 +35,9 @@ HostImpl* HostModel::createHost(const char* name, Cpu* cpu, kernel::routing::Net
 void HostModel::adjustWeightOfDummyCpuActions()
 {
   /* iterate for all virtual machines */
-  for (VirtualMachine *ws_vm : VirtualMachine::allVms_) {
+  for (VirtualMachineImpl* ws_vm : VirtualMachineImpl::allVms_) {
 
-    Cpu *cpu = ws_vm->cpu_;
+    Cpu* cpu = ws_vm->piface_->pimpl_cpu;
 
     int is_active = lmm_constraint_used(cpu->getModel()->getMaxminSystem(), cpu->getConstraint());
 
@@ -108,56 +98,14 @@ Action* HostModel::executeParallelTask(int host_nb, simgrid::s4u::Host** host_li
 /************
  * Resource *
  ************/
-HostImpl::HostImpl(simgrid::surf::HostModel *model, const char *name, xbt_dynar_t storage, Cpu *cpu)
- : Resource(model, name)
- , PropertyHolder(nullptr)
- , storage_(storage), cpu_(cpu)
-{
-  if (!EXTENSION_ID.valid())
-    EXTENSION_ID = simgrid::s4u::Host::extension_create<simgrid::surf::HostImpl>();
-  params_.ramsize = 0;
-}
-
-HostImpl::HostImpl(simgrid::surf::HostModel *model, const char *name, lmm_constraint_t constraint,
-                 xbt_dynar_t storage, Cpu *cpu)
- : Resource(model, name, constraint)
- , PropertyHolder(nullptr)
- , storage_(storage), cpu_(cpu)
+HostImpl::HostImpl(s4u::Host* host, xbt_dynar_t storage) : PropertyHolder(nullptr), storage_(storage), piface_(host)
 {
+  piface_->pimpl_ = this;
   params_.ramsize = 0;
 }
 
 /** @brief use destroy() instead of this destructor */
-HostImpl::~HostImpl()
-{
-}
-
-void HostImpl::attach(simgrid::s4u::Host* host)
-{
-  if (piface_ != nullptr)
-    xbt_die("Already attached to host %s", host->name().c_str());
-  host->extension_set(this);
-  piface_ = host;
-}
-
-bool HostImpl::isOn() const {
-  return cpu_->isOn();
-}
-bool HostImpl::isOff() const {
-  return cpu_->isOff();
-}
-void HostImpl::turnOn(){
-  if (isOff()) {
-    cpu_->turnOn();
-    simgrid::s4u::Host::onStateChange(*this->piface_);
-  }
-}
-void HostImpl::turnOff(){
-  if (isOn()) {
-    cpu_->turnOff();
-    simgrid::s4u::Host::onStateChange(*this->piface_);
-  }
-}
+HostImpl::~HostImpl() = default;
 
 simgrid::surf::Storage *HostImpl::findStorageOnMountList(const char* mount)
 {
@@ -165,7 +113,7 @@ simgrid::surf::Storage *HostImpl::findStorageOnMountList(const char* mount)
   s_mount_t mnt;
   unsigned int cursor;
 
-  XBT_DEBUG("Search for storage name '%s' on '%s'", mount, getName());
+  XBT_DEBUG("Search for storage name '%s' on '%s'", mount, piface_->name().c_str());
   xbt_dynar_foreach(storage_,cursor,mnt){
     XBT_DEBUG("See '%s'",mnt.name);
     if(!strcmp(mount,mnt.name)){
@@ -174,7 +122,7 @@ simgrid::surf::Storage *HostImpl::findStorageOnMountList(const char* mount)
     }
   }
   if(!st)
-    xbt_die("Can't find mount '%s' for '%s'", mount, getName());
+    xbt_die("Can't find mount '%s' for '%s'", mount, piface_->name().c_str());
   return st;
 }
 
@@ -199,11 +147,12 @@ xbt_dynar_t HostImpl::getAttachedStorageList()
   void **data;
   xbt_dynar_t result = xbt_dynar_new(sizeof(void*), nullptr);
   xbt_lib_foreach(storage_lib, cursor, key, data) {
-    if(xbt_lib_get_level(xbt_lib_get_elm_or_null(storage_lib, key), SURF_STORAGE_LEVEL) != nullptr) {
-    simgrid::surf::Storage *storage = static_cast<simgrid::surf::Storage*>(xbt_lib_get_level(xbt_lib_get_elm_or_null(storage_lib, key), SURF_STORAGE_LEVEL));
-    if(!strcmp((const char*)storage->attach_,this->getName())){
-      xbt_dynar_push_as(result, void *, (void*)storage->getName());
-    }
+    if (xbt_lib_get_level(xbt_lib_get_elm_or_null(storage_lib, key), SURF_STORAGE_LEVEL) != nullptr) {
+      simgrid::surf::Storage* storage = static_cast<simgrid::surf::Storage*>(
+          xbt_lib_get_level(xbt_lib_get_elm_or_null(storage_lib, key), SURF_STORAGE_LEVEL));
+      if (!strcmp((const char*)storage->attach_, piface_->name().c_str())) {
+        xbt_dynar_push_as(result, void*, (void*)storage->getName());
+      }
   }
   }
   return result;
@@ -219,7 +168,7 @@ Action *HostImpl::open(const char* fullpath) {
   char *file_mount_name = nullptr;
   char *mount_name = nullptr;
 
-  XBT_DEBUG("Search for storage name for '%s' on '%s'", fullpath, getName());
+  XBT_DEBUG("Search for storage name for '%s' on '%s'", fullpath, piface_->name().c_str());
   xbt_dynar_foreach(storage_,cursor,mnt)
   {
     XBT_DEBUG("See '%s'",mnt.name);
@@ -244,7 +193,7 @@ Action *HostImpl::open(const char* fullpath) {
   mount_name[longest_prefix_length] = '\0';
   }
   else
-    xbt_die("Can't find mount point for '%s' on '%s'", fullpath, getName());
+    xbt_die("Can't find mount point for '%s' on '%s'", fullpath, piface_->name().c_str());
 
   XBT_DEBUG("OPEN %s on disk '%s'",path, st->getName());
   Action *action = st->open((const char*)mount_name, (const char*)path);
@@ -370,10 +319,10 @@ int HostImpl::fileMove(surf_file_t fd, const char* fullpath){
 
 xbt_dynar_t HostImpl::getVms()
 {
-  xbt_dynar_t dyn = xbt_dynar_new(sizeof(simgrid::surf::VirtualMachine*), nullptr);
+  xbt_dynar_t dyn = xbt_dynar_new(sizeof(simgrid::surf::VirtualMachineImpl*), nullptr);
 
-  for (VirtualMachine *ws_vm : VirtualMachine::allVms_) {
-    if (this == ws_vm->getPm()->extension<simgrid::surf::HostImpl>())
+  for (VirtualMachineImpl* ws_vm : VirtualMachineImpl::allVms_) {
+    if (this == ws_vm->getPm()->pimpl_)
       xbt_dynar_push(dyn, &ws_vm);
   }