From 567c254430a96af16846fd14c2b84af8af36a056 Mon Sep 17 00:00:00 2001 From: dimitrov Date: Wed, 12 Jul 2006 16:22:25 +0000 Subject: [PATCH] catching exceptions if some during amok_bw_request and saturate_start and rethrowing them with a value indicating which host died git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@2546 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- src/amok/Bandwidth/bandwidth.c | 22 +++++++++++++++++----- src/amok/Bandwidth/saturate.c | 27 ++++++++++++++++++++++++--- 2 files changed, 41 insertions(+), 8 deletions(-) diff --git a/src/amok/Bandwidth/bandwidth.c b/src/amok/Bandwidth/bandwidth.c index b2774aa1d8..4b05ce428d 100644 --- a/src/amok/Bandwidth/bandwidth.c +++ b/src/amok/Bandwidth/bandwidth.c @@ -375,21 +375,29 @@ void amok_bw_request(const char* from_name,unsigned int from_port, /* The request */ bw_request_t request; bw_res_t result; - +xbt_ex_t e; request=xbt_new0(s_bw_request_t,1); request->buf_size=buf_size; request->exp_size=exp_size; request->msg_size=msg_size; request->min_duration = min_duration; + request->peer.name = (char*)to_name; request->peer.port = to_port; + sock = gras_socket_client(from_name,from_port); + + + DEBUG4("Ask for a BW test between %s:%d and %s:%d", from_name,from_port, to_name,to_port); - + TRY{ gras_msg_rpccall(sock,20*60,gras_msgtype_by_name("BW request"), &request, &result); - + }CATCH(e){ + if (e.value==1) THROW1(0,1,"%s",to_name); + THROW1(0,0,"%s",from_name); + } if (sec) *sec=result->sec; if (bw) @@ -411,19 +419,23 @@ int amok_bw_cb_bw_request(gras_msg_cb_ctx_t ctx, bw_request_t request = *(bw_request_t*)payload; bw_res_t result = xbt_new0(s_bw_res_t,1); gras_socket_t peer,asker; + xbt_ex_t e; asker=gras_msg_cb_ctx_from(ctx); VERB4("Asked by %s:%d to conduct a bw XP with %s:%d", gras_socket_peer_name(asker),gras_socket_peer_port(asker), + request->peer.name,request->peer.port); peer = gras_socket_client(request->peer.name,request->peer.port); +TRY{ amok_bw_test(peer, request->buf_size,request->exp_size,request->msg_size, request->min_duration, &(result->sec),&(result->bw)); - + gras_msg_rpcreturn(240,ctx,&result); - + }CATCH(e){THROW1(0,1,"%s",request->host.name); + } gras_os_sleep(1); gras_socket_close(peer); /* FIXME: it should be blocking in RL until everything is sent */ free(request->peer.name); diff --git a/src/amok/Bandwidth/saturate.c b/src/amok/Bandwidth/saturate.c index 7631d539eb..78b4464445 100644 --- a/src/amok/Bandwidth/saturate.c +++ b/src/amok/Bandwidth/saturate.c @@ -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"); @@ -70,9 +71,10 @@ 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->peer.name = (char*)to_name; @@ -81,9 +83,14 @@ void amok_bw_saturate_start(const char* from_name,unsigned int from_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->peer.name,request->peer.port); gras_msg_rpcreturn(60,ctx, NULL); + +TRY{ amok_bw_saturate_begin(request->peer.name,request->peer.port, + request->msg_size, request->duration, NULL,NULL); + + }CATCH(e){ + THROW1(0,1," can not connect %s ",((request)->peer.name)); + } + free(request->peer.name); + free(request); return 1; } @@ -124,7 +142,7 @@ void amok_bw_saturate_begin(const char* to_name,unsigned int to_port, xbt_ex_t e; - gras_socket_t peer_cmd = gras_socket_client(to_name, to_port); + gras_socket_t peer_cmd; //= gras_socket_client(to_name, to_port); gras_msg_cb_ctx_t ctx; gras_socket_t meas; @@ -148,6 +166,7 @@ void amok_bw_saturate_begin(const char* to_name,unsigned int to_port, request->peer.name = NULL; request->peer.port = 0; + /* Size autodetection on need */ if (!msg_size) { double bw; @@ -161,6 +180,7 @@ 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); @@ -169,6 +189,7 @@ void amok_bw_saturate_begin(const char* to_name,unsigned int to_port, meas=gras_socket_client_ext( to_name, request->peer.port, 0 /*bufsize: auto*/, 1 /*meas: true*/); + free(request); gras_socket_close(peer_cmd); -- 2.20.1