include teshsuite/msg/energy-ptask/energy-ptask.tesh
include teshsuite/msg/get_sender/get_sender.c
include teshsuite/msg/get_sender/get_sender.tesh
-include teshsuite/msg/host_on_off/host_on_off.c
-include teshsuite/msg/host_on_off/host_on_off.tesh
include teshsuite/msg/host_on_off_processes/host_on_off_processes.cpp
include teshsuite/msg/host_on_off_processes/host_on_off_processes.tesh
include teshsuite/msg/host_on_off_recv/host_on_off_recv.c
include teshsuite/s4u/comm-pt2pt/comm-pt2pt.cpp
include teshsuite/s4u/concurrent_rw/concurrent_rw.cpp
include teshsuite/s4u/concurrent_rw/concurrent_rw.tesh
+include teshsuite/s4u/host-on-off/host-on-off.cpp
+include teshsuite/s4u/host-on-off/host-on-off.tesh
include teshsuite/s4u/listen_async/listen_async.cpp
include teshsuite/s4u/listen_async/listen_async.tesh
include teshsuite/s4u/ns3-simultaneous-send-rcv/ns3-simultaneous-send-rcv.cpp
# C examples
foreach(x async-wait
cloud-two-tasks
- get_sender host_on_off host_on_off_recv
+ get_sender host_on_off_recv
process-lifetime
energy-ptask platform-properties
io-file
async-wait
app-bittorrent
cloud-two-tasks
- host_on_off host_on_off_processes host_on_off_recv
+ host_on_off_processes host_on_off_recv
get_sender
task_destroy_cancel task_listen_from task_progress
process-lifetime
+++ /dev/null
-/* Copyright (c) 2010-2020. 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. */
-
-#include "simgrid/msg.h"
-
-XBT_LOG_NEW_DEFAULT_CATEGORY(msg_test, "Messages specific for this msg example");
-
-static int slave(XBT_ATTRIB_UNUSED int argc, XBT_ATTRIB_UNUSED char* argv[])
-{
- msg_task_t task = NULL;
- XBT_ATTRIB_UNUSED int res;
- int id = -1;
- const char * mailbox = "jupi";
-
- while (1) {
- res = MSG_task_receive(&(task), mailbox);
- if (res == MSG_HOST_FAILURE) {
- XBT_DEBUG("The host has been turned off, this was expected");
- return 1;
- }
- xbt_assert(res == MSG_OK, "MSG_task_get failed");
-
- if (!strcmp(MSG_task_get_name(task), "finalize")) {
- MSG_task_destroy(task);
- break;
- }
- MSG_task_execute(task);
- XBT_INFO("Task \"%s\" done", MSG_task_get_name(task));
-
- MSG_task_destroy(task);
- task = NULL;
- id--;
- }
- XBT_INFO("I'm done. See you!");
- return 0;
-}
-
-static int master(XBT_ATTRIB_UNUSED int argc, XBT_ATTRIB_UNUSED char* argv[])
-{
- double task_comp_size = 5E7;
- double task_comm_size = 1E6;
-
- const char * mailbox = "jupi";
- msg_host_t jupiter = MSG_host_by_name("Jupiter");
-
- msg_task_t task = MSG_task_create("task on", task_comp_size, task_comm_size, NULL);
- XBT_INFO("Sending \"%s\"", MSG_task_get_name(task));
- if (MSG_task_send_with_timeout(task, mailbox, 1) != MSG_OK)
- MSG_task_destroy(task);
-
- MSG_process_sleep(1);
- MSG_host_off(jupiter);
-
- task = MSG_task_create("task off", task_comp_size, task_comm_size, NULL);
- XBT_INFO("Sending \"%s\"", MSG_task_get_name(task));
- if (MSG_task_send_with_timeout(task, mailbox, 1) != MSG_OK)
- MSG_task_destroy(task);
-
- MSG_host_on(jupiter);
-
- xbt_dynar_t jupi_processes = xbt_dynar_new(sizeof(msg_process_t), NULL);
- MSG_host_get_process_list(jupiter, jupi_processes);
- msg_process_t process = NULL;
- unsigned int cursor;
- xbt_dynar_foreach (jupi_processes, cursor, process) {
- MSG_process_kill(process);
- }
- xbt_dynar_free(&jupi_processes);
-
- task = MSG_task_create("task on without proc", task_comp_size, task_comm_size, NULL);
- XBT_INFO("Sending \"%s\"", MSG_task_get_name(task));
- if (MSG_task_send_with_timeout(task, mailbox, 1) != MSG_OK)
- MSG_task_destroy(task);
-
- char **argvF = xbt_new(char*, 2);
- argvF[0] = xbt_strdup("slave");
- MSG_process_create_with_arguments("slave", slave, NULL, MSG_host_by_name("Jupiter"), 1, argvF);
-
- task = MSG_task_create("task on with proc", task_comp_size, task_comm_size, NULL);
- XBT_INFO("Sending \"%s\"", MSG_task_get_name(task));
- if (MSG_task_send_with_timeout(task, mailbox, 1) != MSG_OK)
- MSG_task_destroy(task);
-
- task = MSG_task_create("finalize", 0, 0, 0);
- XBT_INFO("Sending \"%s\"", MSG_task_get_name(task));
- if (MSG_task_send_with_timeout(task, mailbox, 1) != MSG_OK)
- MSG_task_destroy(task);
-
- XBT_INFO("Goodbye now!");
- return 0;
-}
-
-int main(int argc, char *argv[])
-{
- msg_error_t res;
-
- MSG_init(&argc, argv);
- xbt_assert(argc == 2, "Usage: %s platform_file\n\tExample: %s msg_platform.xml\n", argv[0], argv[0]);
-
- MSG_create_environment(argv[1]);
-
- MSG_process_create("master", master, NULL, MSG_get_host_by_name("Tremblay"));
- MSG_process_create("slave", slave, NULL, MSG_get_host_by_name("Jupiter"));
-
- res = MSG_main();
-
- XBT_INFO("Simulation time %g", MSG_get_clock());
-
- return res != MSG_OK;
-}
+++ /dev/null
-
-$ ${bindir}/host_on_off ${platfdir}/small_platform.xml
-> [Tremblay:master:(1) 0.000000] [msg_test/INFO] Sending "task on"
-> [Jupiter:slave:(2) 0.824497] [msg_test/INFO] Task "task on" done
-> [Tremblay:master:(1) 1.169155] [msg_test/INFO] Sending "task off"
-> [Tremblay:master:(1) 2.169155] [msg_test/INFO] Sending "task on without proc"
-> [Tremblay:master:(1) 3.169155] [msg_test/INFO] Sending "task on with proc"
-> [Tremblay:master:(1) 3.338309] [msg_test/INFO] Sending "finalize"
-> [Jupiter:slave:(3) 3.993652] [msg_test/INFO] Task "task on with proc" done
-> [Tremblay:master:(1) 4.012666] [msg_test/INFO] Goodbye now!
-> [Jupiter:slave:(3) 4.012666] [msg_test/INFO] I'm done. See you!
-> [4.012666] [msg_test/INFO] Simulation time 4.01267
-
activity-lifecycle
comm-pt2pt wait-any-for
cloud-interrupt-migration cloud-sharing
- concurrent_rw storage_client_server listen_async pid )
+ concurrent_rw
+ host-on-off
+ storage_client_server listen_async pid )
add_executable (${x} EXCLUDE_FROM_ALL ${x}/${x}.cpp)
target_link_libraries(${x} simgrid)
set_target_properties(${x} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${x})
ADD_TESH_FACTORIES(tesh-s4u-${x} "thread;ucontext;raw;boost" --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/s4u/${x} --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/s4u/${x} --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --cd ${CMAKE_BINARY_DIR}/teshsuite/s4u/${x} ${CMAKE_HOME_DIRECTORY}/teshsuite/s4u/${x}/${x}.tesh)
endforeach()
-foreach(x listen_async pid storage_client_server cloud-sharing)
+foreach(x host-on-off listen_async pid storage_client_server cloud-sharing)
set(tesh_files ${tesh_files} ${CMAKE_CURRENT_SOURCE_DIR}/${x}/${x}.tesh)
ADD_TESH(tesh-s4u-${x} --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/s4u/${x} --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --cd ${CMAKE_BINARY_DIR}/teshsuite/s4u/${x} ${CMAKE_HOME_DIRECTORY}/teshsuite/s4u/${x}/${x}.tesh)
endforeach()
--- /dev/null
+/* Copyright (c) 2010-2020. 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. */
+
+#include "simgrid/s4u.hpp"
+
+XBT_LOG_NEW_DEFAULT_CATEGORY(s4u_test, "Messages specific for this s4u example");
+
+static void worker()
+{
+ std::string* payload;
+ simgrid::s4u::Mailbox* mailbox = simgrid::s4u::Mailbox::by_name("jupi");
+
+ while (1) {
+ try {
+ payload = static_cast<std::string*>(mailbox->get());
+ } catch (simgrid::HostFailureException&) {
+ XBT_DEBUG("The host has been turned off, this was expected");
+ return;
+ }
+
+ if (*payload == "finalize") {
+ delete payload;
+ break;
+ }
+ simgrid::s4u::this_actor::execute(5E7);
+
+ XBT_INFO("Task \"%s\" done", payload->c_str());
+ delete payload;
+ }
+ XBT_INFO("I'm done. See you!");
+}
+
+static void master()
+{
+ simgrid::s4u::Mailbox* mailbox = simgrid::s4u::Mailbox::by_name("jupi");
+ simgrid::s4u::Host* jupiter = simgrid::s4u::Host::by_name("Jupiter");
+
+ std::string* payload = new std::string("task on");
+
+ XBT_INFO("Sending \"task on\"");
+ mailbox->put_async(payload, 1E6)->wait_for(1);
+
+ simgrid::s4u::this_actor::sleep_for(1);
+ jupiter->turn_off();
+
+ XBT_INFO("Sending \"task off\"");
+ payload = new std::string("task off");
+ try {
+ mailbox->put_async(payload, 1E6)->wait_for(1);
+ } catch (simgrid::TimeoutException&) {
+ delete payload;
+ }
+
+ jupiter->turn_on();
+
+ std::vector<simgrid::s4u::ActorPtr> jupi_actors = jupiter->get_all_actors();
+ for (const auto& actor : jupi_actors)
+ actor->kill();
+
+ XBT_INFO("Sending \"task on without actor\"");
+ payload = new std::string("task on without actor");
+ try {
+ mailbox->put_async(payload, 1E6)->wait_for(1);
+ } catch (simgrid::TimeoutException&) {
+ delete payload;
+ }
+
+ simgrid::s4u::Actor::create("worker", simgrid::s4u::Host::by_name("Jupiter"), worker);
+
+ XBT_INFO("Sending \"task on with actor\"");
+ payload = new std::string("task on with actor");
+ try {
+ mailbox->put_async(payload, 1E6)->wait_for(1);
+ } catch (simgrid::TimeoutException&) {
+ delete payload;
+ }
+
+ XBT_INFO("Sending \"finalize\"");
+ payload = new std::string("finalize");
+ try {
+ mailbox->put_async(payload, 0)->wait_for(1);
+ } catch (simgrid::TimeoutException&) {
+ delete payload;
+ }
+
+ XBT_INFO("Goodbye now!");
+}
+
+int main(int argc, char* argv[])
+{
+ simgrid::s4u::Engine e(&argc, argv);
+ xbt_assert(argc == 2, "Usage: %s platform_file\n\tExample: %s msg_platform.xml\n", argv[0], argv[0]);
+
+ e.load_platform(argv[1]);
+
+ simgrid::s4u::Actor::create("master", simgrid::s4u::Host::by_name("Tremblay"), master);
+ simgrid::s4u::Actor::create("worker", simgrid::s4u::Host::by_name("Jupiter"), worker);
+
+ e.run();
+
+ XBT_INFO("Simulation time %g", e.get_clock());
+
+ return 0;
+}
--- /dev/null
+
+$ ./host-on-off ${platfdir}/small_platform.xml
+> [Tremblay:master:(1) 0.000000] [s4u_test/INFO] Sending "task on"
+> [Jupiter:worker:(2) 0.824497] [s4u_test/INFO] Task "task on" done
+> [Tremblay:master:(1) 1.169155] [s4u_test/INFO] Sending "task off"
+> [Tremblay:master:(1) 2.169155] [s4u_test/INFO] Sending "task on without actor"
+> [Tremblay:master:(1) 3.169155] [s4u_test/INFO] Sending "task on with actor"
+> [Tremblay:master:(1) 3.338309] [s4u_test/INFO] Sending "finalize"
+> [Jupiter:worker:(3) 3.993652] [s4u_test/INFO] Task "task on with actor" done
+> [Tremblay:master:(1) 4.012666] [s4u_test/INFO] Goodbye now!
+> [Jupiter:worker:(3) 4.012666] [s4u_test/INFO] I'm done. See you!
+> [4.012666] [s4u_test/INFO] Simulation time 4.01267
+