s4u::Actor::on_this_suspend_cb() adds a callback for this specific actor only.
- Activity::on_suspended_cb() is renamed to Activity::on_suspend_cb(), and fired right before the suspend.
- Activity::on_resumed_cb() is renamed to Activity::on_resume_cb(), and fired right before the resume.
+ - Resource::on_state_change_cb() is renamed to Resource::on_onoff_cb() to distinguish from the
+ Activity::on_state_change_cb() that is related to the activity state machine, not on/off.
New S4U plugins:
- Operation: They are designed to represent workflows, i.e, graphs of repeatable Activities.
.. doxygenfunction:: simgrid::s4u::Disk::on_creation_cb
.. doxygenfunction:: simgrid::s4u::Disk::on_destruction_cb
.. doxygenfunction:: simgrid::s4u::Disk::on_this_destruction_cb
- .. doxygenfunction:: simgrid::s4u::Disk::on_state_change_cb
- .. doxygenfunction:: simgrid::s4u::Disk::on_this_state_change_cb
+ .. doxygenfunction:: simgrid::s4u::Disk::on_onoff_cb
+ .. doxygenfunction:: simgrid::s4u::Disk::on_this_onoff_cb
.. _API_s4u_Host:
.. doxygenfunction:: simgrid::s4u::Host::on_this_destruction_cb
.. doxygenfunction:: simgrid::s4u::Host::on_speed_change_cb
.. doxygenfunction:: simgrid::s4u::Host::on_this_speed_change_cb
- .. doxygenfunction:: simgrid::s4u::Host::on_state_change_cb
- .. doxygenfunction:: simgrid::s4u::Host::on_this_state_change_cb
+ .. doxygenfunction:: simgrid::s4u::Host::on_onoff_cb
+ .. doxygenfunction:: simgrid::s4u::Host::on_this_onoff_cb
+ .. doxygenfunction:: simgrid::s4u::Host::on_exec_state_change_cb
.. _API_s4u_Link:
.. doxygenfunction:: simgrid::s4u::Link::on_creation_cb
.. doxygenfunction:: simgrid::s4u::Link::on_destruction_cb
.. doxygenfunction:: simgrid::s4u::Link::on_this_destruction_cb
- .. doxygenfunction:: simgrid::s4u::Link::on_state_change_cb
- .. doxygenfunction:: simgrid::s4u::Link::on_this_state_change_cb
+ .. doxygenfunction:: simgrid::s4u::Link::on_onoff_cb
+ .. doxygenfunction:: simgrid::s4u::Link::on_this_onoff_cb
.. _API_s4u_NetZone:
static void on_destruction_cb(const std::function<void(Disk const&)>& cb) { on_destruction.connect(cb); }
/** @brief Add a callback fired when this specific Disk is destroyed */
void on_this_destruction_cb(const std::function<void(Disk const&)>& cb) { on_this_destruction.connect(cb); }
- /** @brief Add a callback fired when the state of any Disk changes */
- static void on_state_change_cb(const std::function<void(Disk const&)>& cb) { on_state_change.connect(cb); }
- /** @brief Add a callback fired when the state of this specific Disk changes */
- void on_this_state_change_cb(const std::function<void(Disk const&)>& cb) { on_this_state_change.connect(cb); }
+ /** @brief Add a callback fired when any Disk is turned on or off */
+ static void on_onoff_cb(const std::function<void(Disk const&)>& cb)
+ {
+ on_onoff.connect(cb);
+ }
+ /** @brief Add a callback fired when this specific Disk is turned on or off */
+ void on_this_onoff_cb(const std::function<void(Disk const&)>& cb)
+ {
+ on_this_onoff.connect(cb);
+ }
+
+ XBT_ATTRIB_DEPRECATED_v337("Please use on_onoff_cb() instead") static void on_state_change_cb(
+ const std::function<void(Disk const&)>& cb)
+ {
+ on_onoff.connect(cb);
+ }
private:
static xbt::signal<void(Disk&)> on_creation;
static xbt::signal<void(Disk const&)> on_destruction;
xbt::signal<void(Disk const&)> on_this_destruction;
- static xbt::signal<void(Disk const&)> on_state_change;
- xbt::signal<void(Disk const&)> on_this_state_change;
+ static xbt::signal<void(Disk const&)> on_onoff;
+ xbt::signal<void(Disk const&)> on_this_onoff;
};
} // namespace s4u
public:
static xbt::signal<void(Host const&)> on_speed_change;
xbt::signal<void(Host const&)> on_this_speed_change;
- static xbt::signal<void(Host const&)> on_state_change;
- xbt::signal<void(Host const&)> on_this_state_change;
+ static xbt::signal<void(Host const&)> on_onoff;
+ xbt::signal<void(Host const&)> on_this_onoff;
#endif
/** Add a callback fired on each newly created host */
static void on_creation_cb(const std::function<void(Host&)>& cb) { on_creation.connect(cb); }
/** Add a callback fired when any machine is turned on or off (called AFTER the change) */
- static void on_state_change_cb(const std::function<void(Host const&)>& cb) { on_state_change.connect(cb); }
+ static void on_onoff_cb(const std::function<void(Host const&)>& cb)
+ {
+ on_onoff.connect(cb);
+ }
+ XBT_ATTRIB_DEPRECATED_v337("Please use on_onoff_cb() instead") static void on_state_change_cb(
+ const std::function<void(Host const&)>& cb)
+ {
+ on_onoff.connect(cb);
+ }
/** Add a callback fired when this specific machine is turned on or off (called AFTER the change) */
- void on_this_state_change_cb(const std::function<void(Host const&)>& cb)
+ void on_this_onoff_cb(const std::function<void(Host const&)>& cb)
{
- on_this_state_change.connect(cb);
+ on_this_onoff.connect(cb);
}
/** Add a callback fired when the speed of any machine is changed (called AFTER the change)
* (either because of a pstate switch or because of an external load event coming from the profile) */
private:
#ifndef DOXYGEN
static xbt::signal<void(Link&)> on_creation;
- static xbt::signal<void(Link const&)> on_state_change;
- xbt::signal<void(Link const&)> on_this_state_change;
+ static xbt::signal<void(Link const&)> on_onoff;
+ xbt::signal<void(Link const&)> on_this_onoff;
static xbt::signal<void(Link const&)> on_bandwidth_change;
xbt::signal<void(Link const&)> on_this_bandwidth_change;
static xbt::signal<void(kernel::resource::NetworkAction&, kernel::resource::Action::State)>
/* The signals */
/** @brief Add a callback fired when a new Link is created */
static void on_creation_cb(const std::function<void(Link&)>& cb) { on_creation.connect(cb); }
- /** @brief Add a callback fired when the state of any Link changes (when it is turned on or off) */
- static void on_state_change_cb(const std::function<void(Link const&)>& cb) { on_state_change.connect(cb); }
- /** @brief Add a callback fired when the state of this specific Link changes (when it is turned on or off) */
- void on_this_state_change_cb(const std::function<void(Link const&)>& cb)
+ /** @brief Add a callback fired when any Link is turned on or off */
+ static void on_onoff_cb(const std::function<void(Link const&)>& cb)
{
- on_this_state_change.connect(cb);
+ on_onoff.connect(cb);
+ }
+ /** @brief Add a callback fired when this specific Link is turned on or off */
+ void on_this_onoff_cb(const std::function<void(Link const&)>& cb)
+ {
+ on_this_onoff.connect(cb);
}
/** @brief Add a callback fired when the bandwidth of any Link changes */
static void on_bandwidth_change_cb(const std::function<void(Link const&)>& cb) { on_bandwidth_change.connect(cb); }
{
on_this_destruction.connect(cb);
}
+
+ XBT_ATTRIB_DEPRECATED_v337("Please use on_onoff_cb() instead") static void on_state_change_cb(
+ const std::function<void(Link const&)>& cb)
+ {
+ on_onoff.connect(cb);
+ }
};
/**
{
if (not is_on()) {
Resource::turn_on();
- s4u::Disk::on_state_change(piface_);
- piface_.on_this_state_change(piface_);
+ s4u::Disk::on_onoff(piface_);
+ piface_.on_this_onoff(piface_);
}
}
void DiskImpl::turn_off()
{
if (is_on()) {
Resource::turn_off();
- s4u::Disk::on_state_change(piface_);
- piface_.on_this_state_change(piface_);
+ s4u::Disk::on_onoff(piface_);
+ piface_.on_this_onoff(piface_);
const kernel::lmm::Element* elem = nullptr;
double now = EngineImpl::get_clock();
{
if (not is_on()) {
Resource::turn_on();
- s4u::Link::on_state_change(piface_);
+ s4u::Link::on_onoff(piface_);
+ piface_.on_this_onoff(piface_);
}
}
{
if (is_on()) {
Resource::turn_off();
- s4u::Link::on_state_change(piface_);
+ s4u::Link::on_onoff(piface_);
+ piface_.on_this_onoff(piface_);
const kernel::lmm::Element* elem = nullptr;
double now = EngineImpl::get_clock();
*/
const double virt_overhead = 1; // 0.95
-static void host_state_change(s4u::Host const& host)
+static void host_onoff(s4u::Host const& host)
{
if (not host.is_on()) { // just turned off.
std::vector<s4u::VirtualMachine*> trash;
VMModel::VMModel(const std::string& name) : HostModel(name)
{
- s4u::Host::on_state_change_cb(host_state_change);
+ s4u::Host::on_onoff_cb(host_onoff);
s4u::Exec::on_start_cb(add_active_exec);
s4u::Exec::on_completion_cb(remove_active_exec);
s4u::Activity::on_resume_cb(add_active_activity);
HostEnergy::EXTENSION_ID = simgrid::s4u::Host::extension_create<HostEnergy>();
simgrid::s4u::Host::on_creation_cb(&on_creation);
- simgrid::s4u::Host::on_state_change_cb(&on_host_change);
+ simgrid::s4u::Host::on_onoff_cb(&on_host_change);
simgrid::s4u::Host::on_speed_change_cb(&on_host_change);
simgrid::s4u::Host::on_destruction_cb(&on_host_destruction);
simgrid::s4u::Host::on_exec_state_change_cb(&on_action_state_change);
- :cpp:func:`simgrid::s4u::Host::on_creation_cb`: Attach a new extension to the newly created host.
- :cpp:func:`simgrid::s4u::Exec::on_start_cb`: Make note that a new execution started, increasing the load.
- :cpp:func:`simgrid::s4u::Exec::on_completion_cb`: Make note that an execution completed, decreasing the load.
- - :cpp:func:`simgrid::s4u::Host::on_state_change_cb`: Do what is appropriate when the host gets suspended, turned off
- or similar.
+ - :cpp:func:`simgrid::s4u::Host::on_onoff_cb`: Do what is appropriate when the host gets turned off or on.
- :cpp:func:`simgrid::s4u::Host::on_speed_change_cb`: Do what is appropriate when the DVFS is modified.
Note that extensions are automatically destroyed when the host gets destroyed.
XBT_WARN("HostLoad plugin currently does not support executions on several hosts");
}
});
- simgrid::s4u::Host::on_state_change_cb(&on_host_change);
+ simgrid::s4u::Host::on_onoff_cb(&on_host_change);
simgrid::s4u::Host::on_speed_change_cb(&on_host_change);
}
}
});
- simgrid::s4u::Link::on_state_change_cb([](simgrid::s4u::Link const& link) {
+ simgrid::s4u::Link::on_onoff_cb([](simgrid::s4u::Link const& link) {
if (link.get_sharing_policy() != simgrid::s4u::Link::SharingPolicy::WIFI)
link.extension<LinkEnergy>()->update();
});
simgrid::kernel::activity::CommImpl::on_start.connect(&on_communication);
simgrid::kernel::activity::CommImpl::on_completion.connect(&on_communication);
- simgrid::s4u::Link::on_state_change_cb([](simgrid::s4u::Link const& link) {
+ simgrid::s4u::Link::on_onoff_cb([](simgrid::s4u::Link const& link) {
if (link.get_sharing_policy() != simgrid::s4u::Link::SharingPolicy::WIFI) {
auto link_load = link.extension<LinkLoad>();
if (link_load->is_tracked())
xbt::signal<void(Disk&)> Disk::on_creation;
xbt::signal<void(Disk const&)> Disk::on_destruction;
-xbt::signal<void(Disk const&)> Disk::on_state_change;
+xbt::signal<void(Disk const&)> Disk::on_onoff;
const std::string& Disk::get_name() const
{
#ifndef DOXYGEN
xbt::signal<void(Host&)> Host::on_creation;
xbt::signal<void(Host const&)> Host::on_destruction;
-xbt::signal<void(Host const&)> Host::on_state_change;
+xbt::signal<void(Host const&)> Host::on_onoff;
xbt::signal<void(Host const&)> Host::on_speed_change;
xbt::signal<void(kernel::resource::CpuAction&, kernel::resource::Action::State)> Host::on_exec_state_change;
#endif
kernel::actor::simcall_answered([this] {
this->pimpl_cpu_->turn_on();
this->pimpl_->turn_on();
- on_state_change(*this);
- on_this_state_change(*this);
+ on_onoff(*this);
+ on_this_onoff(*this);
});
}
}
this->pimpl_cpu_->turn_off();
this->pimpl_->turn_off(self);
- on_state_change(*this);
- on_this_state_change(*this);
+ on_onoff(*this);
+ on_this_onoff(*this);
});
}
}
xbt::signal<void(Link&)> Link::on_creation;
xbt::signal<void(Link const&)> Link::on_destruction;
-xbt::signal<void(Link const&)> Link::on_state_change;
+xbt::signal<void(Link const&)> Link::on_onoff;
xbt::signal<void(Link const&)> Link::on_bandwidth_change;
xbt::signal<void(kernel::resource::NetworkAction&, kernel::resource::Action::State)>
Link::on_communication_state_change;
void Link::turn_on()
{
- kernel::actor::simcall_answered([this]() {
- this->pimpl_->turn_on();
- on_state_change(*this);
- on_this_state_change(*this);
- });
+ kernel::actor::simcall_answered([this]() { this->pimpl_->turn_on(); });
}
void Link::turn_off()
{
- kernel::actor::simcall_answered([this]() {
- this->pimpl_->turn_off();
- on_state_change(*this);
- on_this_state_change(*this);
- });
+ kernel::actor::simcall_answered([this]() { this->pimpl_->turn_off(); });
}
Link* Link::seal()
{
{sg4::LinkInRoute{link}}, false);
zone->seal();
- sg4::Host::on_state_change_cb([mbox](sg4::Host const& host) {
+ sg4::Host::on_onoff_cb([mbox](sg4::Host const& host) {
XBT_DEBUG("Host %s is now %s", host.get_cname(), host.is_on() ? "ON " : "OFF");
if (not host.is_on()) {
mbox.eager->clear();
}
});
- sg4::Link::on_state_change_cb(
+ sg4::Link::on_onoff_cb(
[](sg4::Link const& lnk) { XBT_DEBUG("Link %s is now %s", lnk.get_cname(), lnk.is_on() ? "ON " : "OFF"); });
e.run_until(end_time);
{
simgrid::s4u::Host* other_host = simgrid::s4u::Host::by_name("Fafard");
unsigned int first =
- simgrid::s4u::Host::on_state_change.connect([](simgrid::s4u::Host const&) { XBT_INFO("First callback"); });
+ simgrid::s4u::Host::on_onoff.connect([](simgrid::s4u::Host const&) { XBT_INFO("First callback"); });
unsigned int second =
- simgrid::s4u::Host::on_state_change.connect([](simgrid::s4u::Host const&) { XBT_INFO("Second callback"); });
+ simgrid::s4u::Host::on_onoff.connect([](simgrid::s4u::Host const&) { XBT_INFO("Second callback"); });
unsigned int third =
- simgrid::s4u::Host::on_state_change.connect([](simgrid::s4u::Host const&) { XBT_INFO("Third callback"); });
+ simgrid::s4u::Host::on_onoff.connect([](simgrid::s4u::Host const&) { XBT_INFO("Third callback"); });
XBT_INFO("Turning off: Three callbacks should be triggered");
other_host->turn_off();
XBT_INFO("Disconnect the second callback");
- simgrid::s4u::Host::on_state_change.disconnect(second);
+ simgrid::s4u::Host::on_onoff.disconnect(second);
XBT_INFO("Turning on: Two callbacks should be triggered");
other_host->turn_on();
XBT_INFO("Disconnect the first callback");
- simgrid::s4u::Host::on_state_change.disconnect(first);
+ simgrid::s4u::Host::on_onoff.disconnect(first);
XBT_INFO("Turning off: One callback should be triggered");
other_host->turn_off();
XBT_INFO("Disconnect the third callback");
- simgrid::s4u::Host::on_state_change.disconnect(third);
+ simgrid::s4u::Host::on_onoff.disconnect(third);
XBT_INFO("Turning on: No more callbacks");
other_host->turn_on();
}