Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Copy models from parent netzone
authorBruno Donassolo <bruno.donassolo@inria.fr>
Tue, 6 Apr 2021 08:01:21 +0000 (10:01 +0200)
committerBruno Donassolo <bruno.donassolo@inria.fr>
Tue, 6 Apr 2021 08:01:21 +0000 (10:01 +0200)
Allows user creating new netzones without explicitly setting models

src/kernel/routing/NetZoneImpl.cpp
src/s4u/s4u_Netzone.cpp
src/surf/sg_platf.cpp

index 6caa246..9ce2ab4 100644 (file)
@@ -487,6 +487,14 @@ void NetZoneImpl::set_parent(NetZoneImpl* parent)
   xbt_assert(not sealed_, "Impossible to set parent to an already sealed NetZone(%s)", this->get_cname());
   parent_ = parent;
   netpoint_->set_englobing_zone(parent_);
+  /* copying models from parent host, to be reviewed when we allow multi-models */
+  if (parent) {
+    set_network_model(parent->get_network_model());
+    set_cpu_pm_model(parent->get_cpu_pm_model());
+    set_cpu_vm_model(parent->get_cpu_vm_model());
+    set_disk_model(parent->get_disk_model());
+    set_host_model(parent->get_host_model());
+  }
 }
 
 void NetZoneImpl::set_network_model(std::shared_ptr<resource::NetworkModel> netmodel)
index 4111435..7645d5d 100644 (file)
@@ -75,7 +75,7 @@ NetZone* NetZone::get_parent() const
 
 NetZone* NetZone::set_parent(const NetZone* parent)
 {
-  pimpl_->set_parent(parent->get_impl());
+  kernel::actor::simcall([this, parent] { pimpl_->set_parent(parent->get_impl()); });
   return this;
 }
 
index 154b2b8..12cc56a 100644 (file)
@@ -479,12 +479,6 @@ sg_platf_create_zone(const simgrid::kernel::routing::ZoneCreationArgs* zone)
       current_routing->hierarchy_ = simgrid::kernel::routing::NetZoneImpl::RoutingMode::recursive;
     /* add to the sons dictionary */
     current_routing->add_child(new_zone);
-    /* set models from parent netzone */
-    new_zone->set_network_model(current_routing->get_network_model());
-    new_zone->set_cpu_pm_model(current_routing->get_cpu_pm_model());
-    new_zone->set_cpu_vm_model(current_routing->get_cpu_vm_model());
-    new_zone->set_disk_model(current_routing->get_disk_model());
-    new_zone->set_host_model(current_routing->get_host_model());
   }
   return new_zone;
 }