From c0b3ba9b3b65de88628a36cc51d2864ec72de0d0 Mon Sep 17 00:00:00 2001 From: Krishnan Parthasarathi Date: Wed, 14 Mar 2012 14:16:08 +0530 Subject: glusterd: Checked if peer is connected and 'handshaked' before sending updates Change-Id: Ia57378d5c81b263d6fcbc9d54ccc7fb138d83d8e BUG: 801731 Signed-off-by: Krishnan Parthasarathi Reviewed-on: http://review.gluster.com/2941 Tested-by: Gluster Build System Reviewed-by: Vijay Bellur --- xlators/mgmt/glusterd/src/glusterd-rpc-ops.c | 1 + xlators/mgmt/glusterd/src/glusterd-sm.c | 19 +++++++++---------- 2 files changed, 10 insertions(+), 10 deletions(-) (limited to 'xlators') diff --git a/xlators/mgmt/glusterd/src/glusterd-rpc-ops.c b/xlators/mgmt/glusterd/src/glusterd-rpc-ops.c index ef7a6a648..1a10666c2 100644 --- a/xlators/mgmt/glusterd/src/glusterd-rpc-ops.c +++ b/xlators/mgmt/glusterd/src/glusterd-rpc-ops.c @@ -508,6 +508,7 @@ glusterd3_1_friend_update_cbk (struct rpc_req *req, struct iovec *iov, goto out; } + ret = 0; out: gf_log (this->name, GF_LOG_INFO, "Received %s from uuid: %s", (ret)?"RJT":"ACC", uuid_utoa (rsp.uuid)); diff --git a/xlators/mgmt/glusterd/src/glusterd-sm.c b/xlators/mgmt/glusterd/src/glusterd-sm.c index 5376c5b6b..72af8c05b 100644 --- a/xlators/mgmt/glusterd/src/glusterd-sm.c +++ b/xlators/mgmt/glusterd/src/glusterd-sm.c @@ -445,19 +445,15 @@ out: } static gf_boolean_t -glusterd_is_valid_recipient_peer (glusterd_peerinfo_t *peerinfo, - glusterd_peerinfo_t *cur_peerinfo) +glusterd_should_update_peer (glusterd_peerinfo_t *peerinfo, + glusterd_peerinfo_t *cur_peerinfo) { gf_boolean_t is_valid = _gf_false; - if (peerinfo == cur_peerinfo) + if ((peerinfo == cur_peerinfo) || + (peerinfo->state.state == GD_FRIEND_STATE_BEFRIENDED)) is_valid = _gf_true; - else if (peerinfo->connected && peerinfo->peer && - peerinfo->state.state == GD_FRIEND_STATE_BEFRIENDED) - is_valid = _gf_true; - - return is_valid; } @@ -496,7 +492,7 @@ glusterd_ac_send_friend_update (glusterd_friend_sm_event_t *event, void *ctx) goto out; list_for_each_entry (peerinfo, &priv->peers, uuid_list) { - if (!glusterd_is_valid_recipient_peer (peerinfo, cur_peerinfo)) + if (!glusterd_should_update_peer (peerinfo, cur_peerinfo)) continue; count++; @@ -518,7 +514,10 @@ glusterd_ac_send_friend_update (glusterd_friend_sm_event_t *event, void *ctx) goto out; list_for_each_entry (peerinfo, &priv->peers, uuid_list) { - if (!glusterd_is_valid_recipient_peer (peerinfo, cur_peerinfo)) + if (!peerinfo->connected || !peerinfo->peer) + continue; + + if (!glusterd_should_update_peer (peerinfo, cur_peerinfo)) continue; ret = dict_set_static_ptr (friends, "peerinfo", peerinfo); -- cgit