diff options
| author | Vijay Bellur <vijay@gluster.com> | 2010-09-02 04:02:52 +0000 | 
|---|---|---|
| committer | Vijay Bellur <vijay@dev.gluster.com> | 2010-09-02 03:28:42 -0700 | 
| commit | fabe6417986dedd92adc2ac5d8d71cfd4dd918da (patch) | |
| tree | 4c515d2c449fc6f5535033ac18047f0c66d7ff49 | |
| parent | ea86a09143c5c59349ca82ddcbc2178a84cccde7 (diff) | |
mgmt/glusterd: support for GET_NEXT volume info
Signed-off-by: Vijay Bellur <vijay@gluster.com>
Signed-off-by: Vijay Bellur <vijay@dev.gluster.com>
BUG: 1255 ()
URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1255
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-handler.c | 45 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-op-sm.c | 13 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-store.c | 6 | 
3 files changed, 54 insertions, 10 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-handler.c b/xlators/mgmt/glusterd/src/glusterd-handler.c index 1c0d1ee6fb6..c55de40b101 100644 --- a/xlators/mgmt/glusterd/src/glusterd-handler.c +++ b/xlators/mgmt/glusterd/src/glusterd-handler.c @@ -2832,6 +2832,7 @@ glusterd_get_volumes (rpcsvc_request_t *req, dict_t *dict, int32_t flags)          int32_t                 count = 0;          dict_t                  *volumes = NULL;          gf1_cli_get_vol_rsp     rsp = {0,}; +        char                    *volname = NULL;          priv = THIS->private;          GF_ASSERT (priv); @@ -2848,21 +2849,53 @@ glusterd_get_volumes (rpcsvc_request_t *req, dict_t *dict, int32_t flags)          }          if (flags == GF_CLI_GET_VOLUME_ALL) { -                        list_for_each_entry (entry, &priv->volumes, vol_list) { -                                count++; -                                ret = glusterd_add_volume_detail_to_dict (entry, -                                                                volumes, count); -                                if (ret) -                                        goto out; +                list_for_each_entry (entry, &priv->volumes, vol_list) { +                        count++; +                        ret = glusterd_add_volume_detail_to_dict (entry, +                                                        volumes, count); +                        if (ret) +                                goto out; + +                } + +                ret = dict_set_int32 (volumes, "count", count); + +                if (ret) +                        goto out; +        } else if (flags == GF_CLI_GET_NEXT_VOLUME) { +                ret = dict_get_str (dict, "volname", &volname); +                if (ret) { +                        if (priv->volumes.next) { +                                entry = list_entry (priv->volumes.next, +                                                    typeof (*entry), +                                                    vol_list);                          } +                } else { +                        ret = glusterd_volinfo_find (volname, &entry); +                        if (ret) +                                goto out; +                        entry = list_entry (entry->vol_list.next, typeof (*entry), +                                            vol_list); +                } +                if (&entry->vol_list == &priv->volumes) {                          ret = dict_set_int32 (volumes, "count", count); +                } else { +                        count++; +                        ret = glusterd_add_volume_detail_to_dict (entry, +                                                         volumes, count); +                        if (ret) +                                goto out; +                        ret = dict_set_int32 (volumes, "count", count);                          if (ret)                                  goto out; + +                }          } +          ret = dict_allocate_and_serialize (volumes, &rsp.volumes.volumes_val,                                             (size_t *)&rsp.volumes.volumes_len); diff --git a/xlators/mgmt/glusterd/src/glusterd-op-sm.c b/xlators/mgmt/glusterd/src/glusterd-op-sm.c index 59dae198c6a..b5cd26b8f6e 100644 --- a/xlators/mgmt/glusterd/src/glusterd-op-sm.c +++ b/xlators/mgmt/glusterd/src/glusterd-op-sm.c @@ -2936,6 +2936,10 @@ glusterd_op_txn_complete ()          int32_t                 ret = -1;          glusterd_conf_t         *priv = NULL;          int32_t                 op = -1; +        int32_t                 op_ret = 0; +        int32_t                 op_errno = 0; +        int32_t                 cli_op = 0; +        rpcsvc_request_t        *req = NULL;          priv = THIS->private;          GF_ASSERT (priv); @@ -2950,8 +2954,11 @@ glusterd_op_txn_complete ()          gf_log ("glusterd", GF_LOG_NORMAL, "Cleared local lock"); -        ret = glusterd_op_send_cli_response (opinfo.cli_op, opinfo.op_ret, -                                             opinfo.op_errno, opinfo.req); +        op_ret = opinfo.op_ret; +        op_errno = opinfo.op_errno; +        cli_op = opinfo.cli_op; +        req = opinfo.req; +          opinfo.op_ret = 0;          opinfo.op_errno = 0; @@ -2968,6 +2975,8 @@ glusterd_op_txn_complete ()  out:          pthread_mutex_unlock (&opinfo.lock); +        ret = glusterd_op_send_cli_response (cli_op, op_ret, +                                             op_errno, req);          gf_log ("glusterd", GF_LOG_NORMAL, "Returning %d", ret);          return ret;  } diff --git a/xlators/mgmt/glusterd/src/glusterd-store.c b/xlators/mgmt/glusterd/src/glusterd-store.c index 5f65cf1cfa2..f3ef79cea85 100644 --- a/xlators/mgmt/glusterd/src/glusterd-store.c +++ b/xlators/mgmt/glusterd/src/glusterd-store.c @@ -716,8 +716,8 @@ glusterd_store_iter_new (glusterd_store_handle_t  *shandle,          fd = open (shandle->path, O_RDWR);          if (fd < 0) { -                gf_log ("", GF_LOG_ERROR, "Unable to open %s", -                        shandle->path); +                gf_log ("", GF_LOG_ERROR, "Unable to open %s, errno: %d", +                        shandle->path, errno);                  goto out;          } @@ -885,6 +885,8 @@ glusterd_store_retrieve_bricks (glusterd_volinfo_t *volinfo)          }  out: +        if (dir) +                closedir (dir);          gf_log ("", GF_LOG_DEBUG, "Returning with %d", ret);          return ret;  | 
