Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Fix compilation with tracing and new network_element_t
[simgrid.git] / examples / gras / p2p / chord / chord.c
index debf98f..528db0c 100644 (file)
@@ -23,7 +23,7 @@ typedef enum msg_typus {
   STD,
 } msg_typus;
 
-/*GRAS_DEFINE_TYPE(s_pbio,
+/*XBT_DEFINE_TYPE(s_pbio,
   struct s_pbio{
     msg_typus type;
     int dest;
@@ -32,14 +32,14 @@ typedef enum msg_typus {
 );
 typedef struct s_pbio pbio_t;*/
 
-/*GRAS_DEFINE_TYPE(s_ping,*/
+/*XBT_DEFINE_TYPE(s_ping,*/
 struct s_ping {
   int id;
 };
 /*);*/
 typedef struct s_ping ping_t;
 
-/*GRAS_DEFINE_TYPE(s_pong,*/
+/*XBT_DEFINE_TYPE(s_pong,*/
 struct s_pong {
   int id;
   int failed;
@@ -47,17 +47,17 @@ struct s_pong {
 /*);*/
 typedef struct s_pong pong_t;
 
-GRAS_DEFINE_TYPE(s_notify, struct s_notify {
+XBT_DEFINE_TYPE(s_notify, struct s_notify {
                  int id; char host[1024]; int port;};);
 
 typedef struct s_notify notify_t;
 
-GRAS_DEFINE_TYPE(s_get_suc, struct s_get_suc {
+XBT_DEFINE_TYPE(s_get_suc, struct s_get_suc {
                  int id;};);
 
 typedef struct s_get_suc get_suc_t;
 
-GRAS_DEFINE_TYPE(s_rep_suc, struct s_rep_suc {
+XBT_DEFINE_TYPE(s_rep_suc, struct s_rep_suc {
                  int id; char host[1024]; int port;};);
 
 typedef struct s_rep_suc rep_suc_t;
@@ -72,17 +72,17 @@ typedef struct finger_elem {
 
 static void register_messages()
 {
-/*  gras_msgtype_declare("chord",gras_datadesc_by_symbol(s_pbio));*/
+/*  gras_msgtype_declare("chord",xbt_datadesc_by_symbol(s_pbio));*/
   gras_msgtype_declare("chord_get_suc",
-                       gras_datadesc_by_symbol(s_get_suc));
+                       xbt_datadesc_by_symbol(s_get_suc));
   gras_msgtype_declare("chord_rep_suc",
-                       gras_datadesc_by_symbol(s_rep_suc));
-  gras_msgtype_declare("chord_notify", gras_datadesc_by_symbol(s_notify));
+                       xbt_datadesc_by_symbol(s_rep_suc));
+  gras_msgtype_declare("chord_notify", xbt_datadesc_by_symbol(s_notify));
 }
 
 /* Global private data */
 typedef struct {
-  gras_socket_t sock;           /* server socket on which I'm listening */
+  xbt_socket_t sock;           /* server socket on which I'm listening */
   int id;                       /* my id number */
   char host[1024];              /* my host name */
   int port;                     /* port on which I'm listening FIXME */
@@ -97,13 +97,13 @@ typedef struct {
 
 int node(int argc, char **argv);
 
-/*static int node_cb_chord_handler(gras_socket_t expeditor,void *payload_data){
+/*static int node_cb_chord_handler(xbt_socket_t expeditor,void *payload_data){
   xbt_ex_t e;
   pbio_t pbio_i=*(pbio_t*)payload_data;
 
   node_data_t *globals=(node_data_t*)gras_userdata_get();
 
-  INFO4(">>> %d : received %d message from %s to %d <<<",globals->id,pbio_i.type,gras_socket_peer_name(expeditor),pbio_i.dest);
+  XBT_INFO(">>> %d : received %d message from %s to %d <<<",globals->id,pbio_i.type,xbt_socket_peer_name(expeditor),pbio_i.dest);
 
 
 
@@ -112,28 +112,27 @@ int node(int argc, char **argv);
 static int node_cb_get_suc_handler(gras_msg_cb_ctx_t ctx,
                                    void *payload_data)
 {
-  gras_socket_t expeditor = gras_msg_cb_ctx_from(ctx);
-  xbt_ex_t e;
+  xbt_socket_t expeditor = gras_msg_cb_ctx_from(ctx);
   get_suc_t incoming = *(get_suc_t *) payload_data;
   rep_suc_t outgoing;
   node_data_t *globals = (node_data_t *) gras_userdata_get();
-  INFO2("Received a get_successor message from %s for %d",
-        gras_socket_peer_name(expeditor), incoming.id);
+  XBT_INFO("Received a get_successor message from %s for %d",
+        xbt_socket_peer_name(expeditor), incoming.id);
   if ((globals->id == globals->finger[0].id) ||
       (incoming.id > globals->id
        && incoming.id <= globals->finger[0].id)) {
     outgoing.id = globals->finger[0].id;
     snprintf(outgoing.host, 1024, globals->finger[0].host);
     outgoing.port = globals->finger[0].port;
-    INFO0("My successor is his successor!");
+    XBT_INFO("My successor is his successor!");
   } else {
-    gras_socket_t temp_sock;
+    xbt_socket_t temp_sock;
     int contact = closest_preceding_node(incoming.id);
     if (contact == -1) {
       outgoing.id = globals->finger[0].id;
       snprintf(outgoing.host, 1024, globals->finger[0].host);
       outgoing.port = globals->finger[0].port;
-      INFO0("My successor is his successor!");
+      XBT_INFO("My successor is his successor!");
     } else {
       get_suc_t asking;
       asking.id = incoming.id;
@@ -141,14 +140,14 @@ static int node_cb_get_suc_handler(gras_msg_cb_ctx_t ctx,
         temp_sock = gras_socket_client(globals->finger[contact].host,
                                        globals->finger[contact].port);
       }
-      CATCH(e) {
-        RETHROW0("Unable to connect!: %s");
+      CATCH_ANONYMOUS {
+        RETHROWF("Unable to connect!: %s");
       }
       TRY {
         gras_msg_send(temp_sock, "chord_get_suc", &asking);
       }
-      CATCH(e) {
-        RETHROW0("Unable to ask!: %s");
+      CATCH_ANONYMOUS {
+        RETHROWF("Unable to ask!: %s");
       }
       gras_msg_wait(10., "chord_rep_suc", &temp_sock, &outgoing);
     }
@@ -156,11 +155,11 @@ static int node_cb_get_suc_handler(gras_msg_cb_ctx_t ctx,
 
   TRY {
     gras_msg_send(expeditor, "chord_rep_suc", &outgoing);
-    INFO0("Successor information sent!");
+    XBT_INFO("Successor information sent!");
   }
-  CATCH(e) {
-    RETHROW2("%s:Timeout sending successor information to %s: %s",
-             globals->host, gras_socket_peer_name(expeditor));
+  CATCH_ANONYMOUS {
+    RETHROWF("%s:Timeout sending successor information to %s: %s",
+             globals->host, xbt_socket_peer_name(expeditor));
   }
   gras_socket_close(expeditor);
   return 0;
@@ -182,18 +181,18 @@ static int closest_preceding_node(int id)
 static int node_cb_notify_handler(gras_msg_cb_ctx_t ctx,
                                   void *payload_data)
 {
-  gras_socket_t expeditor = gras_msg_cb_ctx_from(ctx);
+  xbt_socket_t expeditor = gras_msg_cb_ctx_from(ctx);
   /*xbt_ex_t e; */
   notify_t incoming = *(notify_t *) payload_data;
   node_data_t *globals = (node_data_t *) gras_userdata_get();
-  INFO2("Received a notifying message from %s as %d",
-        gras_socket_peer_name(expeditor), incoming.id);
+  XBT_INFO("Received a notifying message from %s as %d",
+        xbt_socket_peer_name(expeditor), incoming.id);
   if (globals->pre_id == -1 ||
       (incoming.id > globals->pre_id && incoming.id < globals->id)) {
     globals->pre_id = incoming.id;
     snprintf(globals->pre_host, 1024, incoming.host);
     globals->pre_port = incoming.port;
-    INFO0("Set as my new predecessor!");
+    XBT_INFO("Set as my new predecessor!");
   }
   return 0;
 }
@@ -201,36 +200,38 @@ static int node_cb_notify_handler(gras_msg_cb_ctx_t ctx,
 static void fix_fingers()
 {
   get_suc_t get_suc_msg;
-  xbt_ex_t e;
-  gras_socket_t temp_sock = NULL;
-  gras_socket_t temp_sock2 = NULL;
+  xbt_socket_t temp_sock = NULL;
+  xbt_socket_t temp_sock2 = NULL;
   rep_suc_t rep_suc_msg;
   node_data_t *globals = (node_data_t *) gras_userdata_get();
 
   TRY {
     temp_sock = gras_socket_client(globals->host, globals->port);
-  } CATCH(e) {
-    RETHROW0("Unable to contact known host: %s");
+  }
+  CATCH_ANONYMOUS {
+    RETHROWF("Unable to contact known host: %s");
   }
 
   get_suc_msg.id = globals->id;
   TRY {
     gras_msg_send(temp_sock, "chord_get_suc", &get_suc_msg);
-  } CATCH(e) {
+  }
+  CATCH_ANONYMOUS {
     gras_socket_close(temp_sock);
-    RETHROW0("Unable to contact known host to get successor!: %s");
+    RETHROWF("Unable to contact known host to get successor!: %s");
   }
 
   TRY {
-    INFO0("Waiting for reply!");
+    XBT_INFO("Waiting for reply!");
     gras_msg_wait(6000, "chord_rep_suc", &temp_sock2, &rep_suc_msg);
-  } CATCH(e) {
-    RETHROW1("%s: Error waiting for successor:%s", globals->host);
+  }
+  CATCH_ANONYMOUS {
+    RETHROWF("%s: Error waiting for successor:%s", globals->host);
   }
   globals->finger[0].id = rep_suc_msg.id;
   snprintf(globals->finger[0].host, 1024, rep_suc_msg.host);
   globals->finger[0].port = rep_suc_msg.port;
-  INFO1("→ Finger %d fixed!", globals->next_to_fix);
+  XBT_INFO("→ Finger %d fixed!", globals->next_to_fix);
   gras_socket_close(temp_sock);
 
   globals->next_to_fix = (++globals->next_to_fix == globals->fingers) ?
@@ -240,7 +241,7 @@ static void fix_fingers()
 static void check_predecessor()
 {
   node_data_t *globals = (node_data_t *) gras_userdata_get();
-  gras_socket_t temp_sock;
+  xbt_socket_t temp_sock;
   ping_t ping;
   pong_t pong;
   xbt_ex_t e;
@@ -254,6 +255,7 @@ static void check_predecessor()
     globals->pre_id = -1;
     globals->pre_host[0] = 0;
     globals->pre_port = 0;
+    xbt_ex_free(e);
   }
 
   ping.id = 0;
@@ -264,6 +266,7 @@ static void check_predecessor()
     globals->pre_id = -1;
     globals->pre_host[0] = 0;
     globals->pre_port = 0;
+    xbt_ex_free(e);
   }
   TRY {
     gras_msg_wait(60, "chord_pong", &temp_sock, &pong);
@@ -272,6 +275,7 @@ static void check_predecessor()
     globals->pre_id = -1;
     globals->pre_host[0] = 0;
     globals->pre_port = 0;
+    xbt_ex_free(e);
   }
   gras_socket_close(temp_sock);
 }
@@ -279,8 +283,8 @@ static void check_predecessor()
 int node(int argc, char **argv)
 {
   node_data_t *globals = NULL;
-  gras_socket_t temp_sock = NULL;
-  gras_socket_t temp_sock2 = NULL;
+  xbt_socket_t temp_sock = NULL;
+  xbt_socket_t temp_sock2 = NULL;
   get_suc_t get_suc_msg;
   rep_suc_t rep_suc_msg;
 
@@ -312,7 +316,7 @@ int node(int argc, char **argv)
   if (argc == 3) {
     create = 1;
   } else {
-    asprintf(&other_host, "%s", argv[3]);
+    other_host = xbt_strdup(argv[3]);
     other_port = atoi(argv[4]);
   }
 
@@ -322,50 +326,50 @@ int node(int argc, char **argv)
   register_messages();
 
   globals->finger = (finger_elem *) calloc(1, sizeof(finger_elem));
-  INFO2("Launching node %s:%d", globals->host, globals->port);
+  XBT_INFO("Launching node %s:%d", globals->host, globals->port);
   if (create) {
-    INFO0("→Creating ring");
+    XBT_INFO("→Creating ring");
     globals->finger[0].id = globals->id;
     snprintf(globals->finger[0].host, 1024, globals->host);
     globals->finger[0].port = globals->port;
   } else {
-    INFO2("→Known node %s:%d", other_host, other_port);
-    INFO0("→Contacting to determine successor");
+    XBT_INFO("→Known node %s:%d", other_host, other_port);
+    XBT_INFO("→Contacting to determine successor");
     TRY {
       temp_sock = gras_socket_client(other_host, other_port);
     }
-    CATCH(e) {
-      RETHROW0("Unable to contact known host: %s");
+    CATCH_ANONYMOUS {
+      RETHROWF("Unable to contact known host: %s");
     }
 
     get_suc_msg.id = globals->id;
     TRY {
       gras_msg_send(temp_sock, "chord_get_suc", &get_suc_msg);
     }
-    CATCH(e) {
+    CATCH_ANONYMOUS {
       gras_socket_close(temp_sock);
-      RETHROW0("Unable to contact known host to get successor!: %s");
+      RETHROWF("Unable to contact known host to get successor!: %s");
     }
 
     TRY {
-      INFO0("Waiting for reply!");
+      XBT_INFO("Waiting for reply!");
       gras_msg_wait(10., "chord_rep_suc", &temp_sock2, &rep_suc_msg);
     }
-    CATCH(e) {
-      RETHROW1("%s: Error waiting for successor:%s", globals->host);
+    CATCH_ANONYMOUS {
+      RETHROWF("%s: Error waiting for successor:%s", globals->host);
     }
     globals->finger[0].id = rep_suc_msg.id;
     snprintf(globals->finger[0].host, 1024, rep_suc_msg.host);
     globals->finger[0].port = rep_suc_msg.port;
-    INFO3("→Got successor : %d-%s:%d", globals->finger[0].id,
+    XBT_INFO("→Got successor : %d-%s:%d", globals->finger[0].id,
           globals->finger[0].host, globals->finger[0].port);
     gras_socket_close(temp_sock);
     TRY {
       temp_sock = gras_socket_client(globals->finger[0].host,
                                      globals->finger[0].port);
     }
-    CATCH(e) {
-      RETHROW0("Unable to contact successor: %s");
+    CATCH_ANONYMOUS {
+      RETHROWF("Unable to contact successor: %s");
     }
 
     notify_msg.id = globals->id;
@@ -374,8 +378,8 @@ int node(int argc, char **argv)
     TRY {
       gras_msg_send(temp_sock, "chord_notify", &notify_msg);
     }
-    CATCH(e) {
-      RETHROW0("Unable to notify successor! %s");
+    CATCH_ANONYMOUS {
+      RETHROWF("Unable to notify successor! %s");
     }
   }
 
@@ -390,6 +394,7 @@ int node(int argc, char **argv)
       gras_msg_handle(6000000.0);
     }
     CATCH(e) {
+      xbt_ex_free(e);
     }
   }
   /*} */
@@ -397,6 +402,6 @@ int node(int argc, char **argv)
   gras_socket_close(globals->sock);
   free(globals);
   gras_exit();
-  INFO0("Done");
+  XBT_INFO("Done");
   return (0);
 }