diff options
Diffstat (limited to 'xlators/mgmt/glusterd/src/glusterd3_1-mops.c')
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd3_1-mops.c | 95 | 
1 files changed, 88 insertions, 7 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd3_1-mops.c b/xlators/mgmt/glusterd/src/glusterd3_1-mops.c index 8e0a958d873..81cdad65e4b 100644 --- a/xlators/mgmt/glusterd/src/glusterd3_1-mops.c +++ b/xlators/mgmt/glusterd/src/glusterd3_1-mops.c @@ -302,6 +302,40 @@ respond:  }  int32_t +glusterd3_1_friend_update_cbk (struct rpc_req *req, struct iovec *iov, +                              int count, void *myframe) +{ +        gd1_mgmt_cluster_lock_rsp     rsp   = {{0},}; +        int                           ret   = -1; +        int32_t                       op_ret = -1; +        char                          str[50] = {0,}; + +        GF_ASSERT (req); + +        if (-1 == req->rpc_status) { +                rsp.op_ret   = -1; +                rsp.op_errno = EINVAL; +        } + +/*        ret = gd_xdr_to_mgmt_friend_update_rsp (*iov, &rsp); +        if (ret < 0) { +                gf_log ("", GF_LOG_ERROR, "error"); +                rsp.op_ret   = -1; +                rsp.op_errno = EINVAL; +                goto out; +        } +        uuid_unparse (rsp.uuid, str); + +        op_ret = rsp.op_ret; +*/ +        gf_log ("glusterd", GF_LOG_NORMAL, +                "Received %s from uuid: %s", +                (op_ret)?"RJT":"ACC", str); + +//out: +        return ret; +} +int32_t  glusterd3_1_cluster_lock_cbk (struct rpc_req *req, struct iovec *iov,                                int count, void *myframe)  { @@ -714,29 +748,71 @@ glusterd3_1_friend_update (call_frame_t *frame, xlator_t *this,          glusterd_conf_t                 *priv = NULL;          glusterd_friend_sm_event_t      *event = NULL;          glusterd_friend_update_ctx_t     *ctx = NULL; +        dict_t                          *friends = NULL; +        char                            key[100] = {0,}; +        char                            uuid_buf[50] = {0,}; +        char                            *dup_buf = NULL; +        int32_t                         count = 0; +        char                            *dict_buf = NULL; +        size_t                         len = -1; +        call_frame_t                    *dummy_frame = NULL; -        if (!frame || !this || !data) { +        if ( !this || !data) {                  ret = -1;                  goto out;          } +        friends = dict_new (); +        if (!friends) +                goto out; +          event = data;          priv = this->private;          GF_ASSERT (priv); +        list_for_each_entry (peerinfo, &priv->peers, uuid_list) { +                count++; +                uuid_unparse (peerinfo->uuid, uuid_buf); +                snprintf (key, sizeof (key), "friend%d.uuid", count); +                dup_buf = gf_strdup (uuid_buf); +                ret = dict_set_str (friends, key, dup_buf); +                if (ret) +                        goto out; +                snprintf (key, sizeof (key), "friend%d.hostname", count); +                ret = dict_set_str (friends, key, peerinfo->hostname); +                if (ret) +                        goto out; +                gf_log ("", GF_LOG_NORMAL, "Added uuid: %s, host: %s", +                        dup_buf, peerinfo->hostname); +        } + +        ret = dict_set_int32 (friends, "count", count); +        if (ret) +                goto out; +          ctx = event->ctx; +        ret = dict_allocate_and_serialize (friends, &dict_buf, (size_t *)&len); + +        if (ret) +                goto out; + +        req.friends.friends_val = dict_buf; +        req.friends.friends_len = len; +          peerinfo = event->peerinfo;          uuid_copy (req.uuid, priv->uuid); -        uuid_copy (req.friend_uuid, ctx->uuid); -        req.hostname = ctx->hostname; -        ret = glusterd_submit_request (peerinfo, &req, frame, priv->mgmt, -                                       GD_MGMT_FRIEND_UPDATE, -                                       NULL, gd_xdr_from_mgmt_friend_update, -                                       this, NULL); +        list_for_each_entry (peerinfo, &priv->peers, uuid_list) { +                dummy_frame = create_frame (this, this->ctx->pool); +                ret = glusterd_submit_request (peerinfo, &req, dummy_frame, +                                               priv->mgmt, +                                               GD_MGMT_FRIEND_UPDATE, +                                               NULL, gd_xdr_from_mgmt_friend_update, +                                               this, glusterd3_1_friend_update_cbk); +        }  out:          gf_log ("glusterd", GF_LOG_DEBUG, "Returning %d", ret); @@ -1101,6 +1177,10 @@ glusterd_handle_rpc_msg (rpcsvc_request_t *req)                          ret = glusterd_handle_defrag_volume (req);                          break; +                case GD_MGMT_CLI_ADD_BRICK: +                        ret = glusterd_handle_add_brick (req); +                        break; +                  default:                          GF_ASSERT (0);          } @@ -1133,6 +1213,7 @@ rpcsvc_actor_t glusterd1_mgmt_actors[] = {          [GD_MGMT_CLI_STOP_VOLUME] = { "STOP_VOLUME", GD_MGMT_CLI_STOP_VOLUME, glusterd_handle_rpc_msg, NULL, NULL},          [GD_MGMT_CLI_DELETE_VOLUME] = { "DELETE_VOLUME", GD_MGMT_CLI_DELETE_VOLUME, glusterd_handle_rpc_msg, NULL, NULL},          [GD_MGMT_CLI_GET_VOLUME] = { "GET_VOLUME", GD_MGMT_CLI_GET_VOLUME, glusterd_handle_rpc_msg, NULL, NULL}, +        [GD_MGMT_CLI_ADD_BRICK] = { "GET_VOLUME", GD_MGMT_CLI_ADD_BRICK, glusterd_handle_rpc_msg, NULL, NULL},  };  /*rpcsvc_actor_t glusterd1_mgmt_actors[] = {  | 
