Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Prefer using "try_emplace" (sonar, c++17).
[simgrid.git] / src / surf / sg_platf.cpp
index a5a06d0..62b345e 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2006-2021. The SimGrid Team. All rights reserved.          */
+/* Copyright (c) 2006-2022. The SimGrid Team. All rights reserved.          */
 
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
@@ -56,7 +56,6 @@ void sg_platf_init()
 void sg_platf_exit()
 {
   simgrid::kernel::routing::on_cluster_creation.disconnect_slots();
-  // simgrid::s4u::Engine::on_platform_created.disconnect_slots();
 
   surf_parse_lex_destroy();
 }
@@ -114,16 +113,6 @@ simgrid::kernel::routing::NetPoint* sg_platf_new_router(const std::string& name,
   return netpoint;
 }
 
-static void sg_platf_set_link_properties(simgrid::s4u::Link* link,
-                                         const simgrid::kernel::routing::LinkCreationArgs* args)
-{
-  link->set_properties(args->properties)
-      ->set_state_profile(args->state_trace)
-      ->set_latency_profile(args->latency_trace)
-      ->set_bandwidth_profile(args->bandwidth_trace)
-      ->set_latency(args->latency);
-}
-
 void sg_platf_new_link(const simgrid::kernel::routing::LinkCreationArgs* args)
 {
   simgrid::s4u::Link* link;
@@ -133,7 +122,13 @@ void sg_platf_new_link(const simgrid::kernel::routing::LinkCreationArgs* args)
     link = current_routing->create_link(args->id, args->bandwidths);
     link->get_impl()->set_sharing_policy(args->policy, {});
   }
-  sg_platf_set_link_properties(link, args);
+
+  link->set_properties(args->properties)
+      ->set_state_profile(args->state_trace)
+      ->set_latency_profile(args->latency_trace)
+      ->set_bandwidth_profile(args->bandwidth_trace)
+      ->set_latency(args->latency);
+
   link->seal();
 }
 
@@ -482,39 +477,26 @@ void sg_platf_new_actor(simgrid::kernel::routing::ActorCreationArgs* actor)
   simgrid::kernel::actor::ActorCode code = factory(std::move(actor->args));
 
   auto* arg = new simgrid::kernel::actor::ProcessArg(actor_name, code, nullptr, host, kill_time, actor->properties,
-                                                     auto_restart);
+                                                     auto_restart, /*daemon=*/false, /*restart_count=*/0);
 
   host->get_impl()->add_actor_at_boot(arg);
 
   if (start_time > simgrid::s4u::Engine::get_clock()) {
     arg = new simgrid::kernel::actor::ProcessArg(actor_name, code, nullptr, host, kill_time, actor->properties,
-                                                 auto_restart);
-
-    XBT_DEBUG("Process %s@%s will be started at time %f", arg->name.c_str(), arg->host->get_cname(), start_time);
-    simgrid::kernel::timer::Timer::set(start_time, [arg, auto_restart]() {
-      simgrid::kernel::actor::ActorImplPtr new_actor =
-          simgrid::kernel::actor::ActorImpl::create(arg->name.c_str(), arg->code, arg->data, arg->host, nullptr);
-      new_actor->set_properties(arg->properties);
-      if (arg->kill_time >= 0)
-        new_actor->set_kill_time(arg->kill_time);
-      if (auto_restart)
-        new_actor->set_auto_restart(auto_restart);
+                                                 auto_restart, /*daemon=*/false, /*restart_count=*/0);
+
+    XBT_DEBUG("Actor %s@%s will be started at time %f", arg->name.c_str(), arg->host->get_cname(), start_time);
+    simgrid::kernel::timer::Timer::set(start_time, [arg]() {
+      simgrid::kernel::actor::ActorImplPtr new_actor = simgrid::kernel::actor::ActorImpl::create(arg);
       delete arg;
     });
   } else { // start_time <= simgrid::s4u::Engine::get_clock()
-    XBT_DEBUG("Starting Process %s(%s) right now", arg->name.c_str(), host->get_cname());
+    XBT_DEBUG("Starting actor %s(%s) right now", arg->name.c_str(), host->get_cname());
 
     try {
-      simgrid::kernel::actor::ActorImplPtr new_actor = nullptr;
-      new_actor = simgrid::kernel::actor::ActorImpl::create(arg->name.c_str(), code, nullptr, host, nullptr);
-      new_actor->set_properties(arg->properties);
-      /* The actor creation will fail if the host is currently dead, but that's fine */
-      if (arg->kill_time >= 0)
-        new_actor->set_kill_time(arg->kill_time);
-      if (auto_restart)
-        new_actor->set_auto_restart(auto_restart);
+      simgrid::kernel::actor::ActorImplPtr new_actor = simgrid::kernel::actor::ActorImpl::create(arg);
     } catch (simgrid::HostFailureException const&) {
-      XBT_WARN("Deployment includes some initially turned off Hosts ... nevermind.");
+      XBT_WARN("Starting actor %s(%s) failed because its host is turned off.", arg->name.c_str(), host->get_cname());
     }
   }
 }
@@ -613,11 +595,11 @@ void sg_platf_new_trace(simgrid::kernel::routing::ProfileCreationArgs* args)
 {
   simgrid::kernel::profile::Profile* profile;
   if (not args->file.empty()) {
-    profile = simgrid::kernel::profile::Profile::from_file(args->file);
+    profile = simgrid::kernel::profile::ProfileBuilder::from_file(args->file);
   } else {
     xbt_assert(not args->pc_data.empty(), "Trace '%s' must have either a content, or point to a file on disk.",
                args->id.c_str());
-    profile = simgrid::kernel::profile::Profile::from_string(args->id, args->pc_data, args->periodicity);
+    profile = simgrid::kernel::profile::ProfileBuilder::from_string(args->id, args->pc_data, args->periodicity);
   }
-  traces_set_list.insert({args->id, profile});
+  traces_set_list.try_emplace(args->id, profile);
 }