From c757315893fdf5d951d4cad12775ee60a2de141f Mon Sep 17 00:00:00 2001 From: Loic Guegan Date: Fri, 14 May 2021 10:25:51 +0200 Subject: Debug network model --- src/simulator.cc | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) (limited to 'src/simulator.cc') diff --git a/src/simulator.cc b/src/simulator.cc index d27de1b..9322a2b 100644 --- a/src/simulator.cc +++ b/src/simulator.cc @@ -24,7 +24,14 @@ uptimeTrack=CLOCK-uptimeTrack; \ uptime-=uptimeTrack; \ uptime=uptime > 0 ? uptime : 0; \ - } + } +/// @brief Note that we need to simulate latency our self since we need to send instantaneous messages +#define SEND(instruction) \ + { \ + simgrid::s4u::this_actor::sleep_for(i.latency); \ + instruction; \ + } + /// @brief Required by SimGrid XBT_LOG_NEW_DEFAULT_CATEGORY(simulator, "[DAO] Loosely Coupled DSS"); @@ -123,25 +130,26 @@ static void obs_node(std::vector args) { p->duration=i.GetNextDuration(); p->hint=i.GetNextTS(); } - MODE_ON(); try { // First we send and instantaneous message // This allow first to detect if their is a receiver // (to not cause deadlock for the extended mode) and second // to inform the receiver if he should get a hint first + MODE_TX(); TRACK_UPTIME(m->put(p,0,uptime)); simgrid::s4u::Mailbox *m_ded= simgrid::s4u::Mailbox::by_name(p->DedicatedMailbox); // First send hint if it is required - MODE_TX(); if(p->HasHint){ - TRACK_UPTIME(m_ded->put(p,i.hint_size,uptime)); + TRACK_UPTIME(SEND(m_ded->put(p,i.hint_size,uptime))); XBT_INFO("%s sent a hint successfully",CNAME); } // Then try sending the data - if(i.extended) - m_ded->put(p,i.data_size); - else - m_ded->put(p,i.data_size,uptime); + if(i.extended){ + SEND(m_ded->put(p,i.data_size)); + } + else{ + SEND(m_ded->put(p,i.data_size,uptime)); + } // If we reach here, data has been sent successfully XBT_INFO("%s sent data successfully",CNAME); nSend++; @@ -157,7 +165,6 @@ static void obs_node(std::vector args) { Payload *p; // Received data Payload *hint; // To Save the received hint bool hintReceived=false; // In case of error during data rx this will be use to check if we could use the *hint Payload object - MODE_ON(); try { // Get the instantaneous message TRACK_UPTIME(p=m->get(uptime)); -- cgit v1.2.3