Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Revert last change so that it still work
[simgrid.git] / src / amok / Bandwidth / saturate.c
index 84d65e4..8c44f06 100644 (file)
@@ -9,6 +9,7 @@
 
 #include "amok/Bandwidth/bandwidth_private.h"
 #include "gras/Msg/msg_private.h" /* FIXME: This mucks with contextes to answer RPC directly */
+#include "xbt/ex.h"
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(amok_bw_sat,amok_bw,"Everything concerning the SATuration part of the amok_bw module");
 
@@ -22,7 +23,7 @@ void amok_bw_sat_init(void) {
   /* Build the saturation datatype descriptions */ 
   
   sat_request_desc = gras_datadesc_struct("s_sat_request_desc_t");
-  gras_datadesc_struct_append(sat_request_desc,"host",gras_datadesc_by_name("s_xbt_host_t"));
+  gras_datadesc_struct_append(sat_request_desc,"peer",gras_datadesc_by_name("s_xbt_peer_t"));
   gras_datadesc_struct_append(sat_request_desc,"msg_size",gras_datadesc_by_name("unsigned int"));
   gras_datadesc_struct_append(sat_request_desc,"duration",gras_datadesc_by_name("unsigned int"));
   gras_datadesc_struct_close(sat_request_desc);
@@ -54,11 +55,11 @@ void amok_bw_sat_leave(void) {
 /**
  * @brief Ask 'from_name:from_port' to stop saturating going to to_name:to_name.
  *
- * @param from_name: Name of the host we are asking to do a experiment with (to_name:to_port)
+ * @param from_name: Name of the peer we are asking to do a experiment with (to_name:to_port)
  * @param from_port: port on which the process we are asking for an experiment is listening
  * (for message, do not give a raw socket here. The needed raw socket will be negociated 
  * between the peers)
- * @param to_name: Name of the host with which we should conduct the experiment
+ * @param to_name: Name of the peer with which we should conduct the experiment
  * @param to_port: port on which the peer process is listening for message
  * @param msg_size: Size of each message sent.
  * @param duration: How long in maximum should be the saturation.
@@ -70,20 +71,26 @@ void amok_bw_saturate_start(const char* from_name,unsigned int from_port,
                            const char* to_name,unsigned int to_port,
                            unsigned int msg_size, double duration) {
   gras_socket_t sock;
-
+  xbt_ex_t e;
   sat_request_t request = xbt_new(s_sat_request_t,1);
 
+  INFO2("from_name %s // to_name %s \n",from_name,to_name); 
   sock = gras_socket_client(from_name,from_port);
 
-  request->host.name = (char*)to_name;
-  request->host.port = to_port;
+  request->peer.name = (char*)to_name;
+  request->peer.port = to_port;
   
   request->duration=duration;
   request->msg_size=msg_size;
 
-
+ TRY{
   gras_msg_rpccall(sock,60,gras_msgtype_by_name("amok_bw_sat start"),&request, NULL);
 
+  }CATCH(e){
+    if (e.value==1)
+      THROW1(0,1,"%s",to_name);
+    THROW1(0,0,"%s",from_name);
+  }
   free(request);
   gras_socket_close(sock);
 }
@@ -92,16 +99,27 @@ void amok_bw_saturate_start(const char* from_name,unsigned int from_port,
 static int amok_bw_cb_sat_start(gras_msg_cb_ctx_t ctx, void *payload){
   sat_request_t request = *(sat_request_t*)payload;
   gras_socket_t expeditor = gras_msg_cb_ctx_from(ctx);
+  xbt_ex_t e;
 
   VERB4("Asked by %s:%d to start a saturation to %s:%d",
        gras_socket_peer_name(expeditor),gras_socket_peer_port(expeditor),
-       request->host.name,request->host.port);
+       request->peer.name,request->peer.port);
        
   gras_msg_rpcreturn(60,ctx, NULL);
-  amok_bw_saturate_begin(request->host.name,request->host.port,
+
+TRY{
+  amok_bw_saturate_begin(request->peer.name,request->peer.port,
+
                         request->msg_size, request->duration,
                         NULL,NULL);
-  free(request->host.name);
+
+  }CATCH(e){
+     THROW1(0,1," can not connect %s ",((request)->peer.name));
+  }
+  free(request->peer.name);
+
   free(request);
   return 1;
 }
@@ -110,7 +128,7 @@ static int amok_bw_cb_sat_start(gras_msg_cb_ctx_t ctx, void *payload){
  * @brief Start saturating between the current process and the designated peer
  *
  * Note that the only way to break this function before the end of the timeout
- * is to have a remote host calling amok_bw_saturate_stop to this process.
+ * is to have a remote peer calling amok_bw_saturate_stop to this process.
  *
  * If duration=0, the experiment will never timeout (you then have to manually
  * stop it).
@@ -145,8 +163,9 @@ void amok_bw_saturate_begin(const char* to_name,unsigned int to_port,
 
   request->msg_size = msg_size;
   request->duration = duration;
-  request->host.name = NULL;
-  request->host.port = 0;
+  request->peer.name = NULL;
+  request->peer.port = 0;
+
 
   /* Size autodetection on need */
   if (!msg_size) {
@@ -161,14 +180,16 @@ void amok_bw_saturate_begin(const char* to_name,unsigned int to_port,
   }
    
   /* Launch the saturation */
+
   ctx = gras_msg_rpc_async_call(peer_cmd, 60, 
                                gras_msgtype_by_name("amok_bw_sat begin"),
                                                  &request);
   free(request);
   gras_msg_rpc_async_wait(ctx,&request);
-  meas=gras_socket_client_ext( to_name, request->host.port,
+  meas=gras_socket_client_ext( to_name, request->peer.port,
                               0 /*bufsize: auto*/,
                               1 /*meas: true*/);
+
   free(request);
 
   gras_socket_close(peer_cmd);
@@ -260,7 +281,7 @@ static int amok_bw_cb_sat_begin(gras_msg_cb_ctx_t ctx, void *payload){
     if (measMaster == NULL) 
       port++; /* prepare for a new loop */
   }
-  answer->host.port=port;
+  answer->peer.port=port;
 
   gras_msg_rpcreturn(60, ctx, &answer);
   free(answer);
@@ -296,7 +317,7 @@ static int amok_bw_cb_sat_begin(gras_msg_cb_ctx_t ctx, void *payload){
 
 /**
  * @brief Ask 'from_name:from_port' to stop any saturation experiments
- * @param from_name: Name of the host we are asking to do a experiment with (to_name:to_port)
+ * @param from_name: Name of the peer we are asking to do a experiment with (to_name:to_port)
  * @param from_port: port on which the process we are asking for an experiment is listening
  * @param time: the duration of the experiment
  * @param bw: the achieved bandwidth