diff options
author | Jeff Darcy <jdarcy@redhat.com> | 2013-05-30 17:21:05 -0400 |
---|---|---|
committer | Vijay Bellur <vbellur@redhat.com> | 2013-05-30 23:46:38 -0700 |
commit | 1afbd1e8998a949695f008fd1403ea228eb42bd1 (patch) | |
tree | 000cd8d81e4f06a454f2027c8491b5c8e619ac3d | |
parent | 83e4a149bd69d13fdd6fd4c80e603e04d15ff8e3 (diff) |
cli: set min-op-version and max-op-version for getspec
Change-Id: I2185df5d6b560d9367ae404c91812048e1655180
BUG: 969193
Signed-off-by: Jeff Darcy <jdarcy@redhat.com>
Reviewed-on: http://review.gluster.org/5119
Reviewed-by: Kaushal M <kaushal@redhat.com>
Tested-by: Gluster Build System <jenkins@build.gluster.com>
-rw-r--r-- | cli/src/cli-rpc-ops.c | 34 | ||||
-rwxr-xr-x | tests/bugs/bug-969193.t | 13 |
2 files changed, 47 insertions, 0 deletions
diff --git a/cli/src/cli-rpc-ops.c b/cli/src/cli-rpc-ops.c index 8f69fa0ef54..d2c934a4305 100644 --- a/cli/src/cli-rpc-ops.c +++ b/cli/src/cli-rpc-ops.c @@ -3529,6 +3529,7 @@ gf_cli_getspec (call_frame_t *frame, xlator_t *this, gf_getspec_req req = {0,}; int ret = 0; dict_t *dict = NULL; + dict_t *op_dict = NULL; if (!frame || !this || !data) { ret = -1; @@ -3541,12 +3542,45 @@ gf_cli_getspec (call_frame_t *frame, xlator_t *this, if (ret) goto out; + op_dict = dict_new (); + if (!dict) { + ret = -1; + goto out; + } + + // Set the supported min and max op-versions, so glusterd can make a + // decision + ret = dict_set_int32 (op_dict, "min-op-version", GD_OP_VERSION_MIN); + if (ret) { + gf_log (THIS->name, GF_LOG_ERROR, "Failed to set min-op-version" + " in request dict"); + goto out; + } + + ret = dict_set_int32 (op_dict, "max-op-version", GD_OP_VERSION_MAX); + if (ret) { + gf_log (THIS->name, GF_LOG_ERROR, "Failed to set max-op-version" + " in request dict"); + goto out; + } + + ret = dict_allocate_and_serialize (op_dict, &req.xdata.xdata_val, + &req.xdata.xdata_len); + if (ret < 0) { + gf_log (THIS->name, GF_LOG_ERROR, + "Failed to serialize dictionary"); + goto out; + } + ret = cli_cmd_submit (&req, frame, &cli_handshake_prog, GF_HNDSK_GETSPEC, NULL, this, gf_cli_getspec_cbk, (xdrproc_t) xdr_gf_getspec_req); out: + if (op_dict) { + dict_unref(op_dict); + } gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); return ret; diff --git a/tests/bugs/bug-969193.t b/tests/bugs/bug-969193.t new file mode 100755 index 00000000000..e78a2980e6e --- /dev/null +++ b/tests/bugs/bug-969193.t @@ -0,0 +1,13 @@ +#!/bin/bash + +# Test that "system getspec" works without op_version problems. + +. $(dirname $0)/../include.rc +cleanup; + +TEST glusterd +TEST pidof glusterd +TEST $CLI volume info +TEST $CLI volume create $V0 $H0:$B0/brick1 +TEST $CLI system getspec $V0 +cleanup; |