diff options
author | Kaushal M <kaushal@redhat.com> | 2013-09-04 11:50:40 +0530 |
---|---|---|
committer | Vijay Bellur <vbellur@redhat.com> | 2013-09-13 03:38:04 -0700 |
commit | 91cd0eae2cc1d96cbafa6457835f146503355238 (patch) | |
tree | 46666ae7e351bdb95d07adc8862c5b68a2c85a88 /xlators/mgmt/glusterd/src/glusterd-brick-ops.c | |
parent | 0b608508743baa63220a92361f443af8557a2b9b (diff) |
cli,glusterd: Task parameters in xml output
This patch introduces task parameters for the asynchronus task shown in
volume status. The parameters are only given for xml output. The
parameters shown currently are,
- source and destination bricks for replace-brick tasks
......
<tasks>
<task>
<type>Replace brick</type>
<id>3d1a1005-9d2e-4ae0-bd62-577bc1d333a3</id>
<status>1</status>
<params>
<srcBrick>archm:/export/test4</srcBrick>
<dstBrick>archm:/export/test-replace1</dstBrick>
</params>
</task>
</tasks>
......
- list of bricks being removed for remove-brick tasks
......
<tasks>
<task>
<type>Remove brick</type>
<id>901c20ca-0da2-41de-8669-5f0caca6b846</id>
<status>1</status>
<params>
<brick>archm:/export/test2</brick>
<brick>archm:/export/test3</brick>
</params>
</task>
</tasks>
......
The changes for non-xml output will be done in a subsequent patch.
Change-Id: I322afe2f83ed8adeddb99f7962c25911204dc204
BUG: 916577
Signed-off-by: Kaushal M <kaushal@redhat.com>
Reviewed-on: http://review.gluster.org/5771
Reviewed-by: Vijay Bellur <vbellur@redhat.com>
Tested-by: Vijay Bellur <vbellur@redhat.com>
Diffstat (limited to 'xlators/mgmt/glusterd/src/glusterd-brick-ops.c')
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-brick-ops.c | 43 |
1 files changed, 41 insertions, 2 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-brick-ops.c b/xlators/mgmt/glusterd/src/glusterd-brick-ops.c index 81ba31bfeec..3088f21949d 100644 --- a/xlators/mgmt/glusterd/src/glusterd-brick-ops.c +++ b/xlators/mgmt/glusterd/src/glusterd-brick-ops.c @@ -1684,6 +1684,8 @@ glusterd_op_remove_brick (dict_t *dict, char **op_errstr) glusterd_brickinfo_t *tmp = NULL; char *task_id_str = NULL; xlator_t *this = NULL; + dict_t *bricks_dict = NULL; + char *brick_tmpstr = NULL; this = THIS; GF_ASSERT (this); @@ -1724,10 +1726,13 @@ glusterd_op_remove_brick (dict_t *dict, char **op_errstr) } } - /* Clear task-id & rebal.op on commmitting/stopping remove-brick */ + /* Clear task-id, rebal.op and stored bricks on commmitting/stopping + * remove-brick */ if ((cmd != GF_OP_CMD_START) || (cmd != GF_OP_CMD_STATUS)) { uuid_clear (volinfo->rebal.rebalance_id); volinfo->rebal.op = GD_OP_NONE; + dict_unref (volinfo->rebal.dict); + volinfo->rebal.dict = NULL; } ret = -1; @@ -1812,7 +1817,20 @@ glusterd_op_remove_brick (dict_t *dict, char **op_errstr) goto out; } - + /* Save the list of bricks for later usage. Right now this is required + * for displaying the task parameters with task status in volume status. + */ + bricks_dict = dict_new (); + if (!bricks_dict) { + ret = -1; + goto out; + } + ret = dict_set_int32 (bricks_dict, "count", count); + if (ret) { + gf_log (this->name, GF_LOG_ERROR, + "Failed to save remove-brick count"); + goto out; + } while ( i <= count) { snprintf (key, 256, "brick%d", i); ret = dict_get_str (dict, key, &brick); @@ -1822,6 +1840,21 @@ glusterd_op_remove_brick (dict_t *dict, char **op_errstr) goto out; } + brick_tmpstr = gf_strdup (brick); + if (!brick_tmpstr) { + ret = -1; + gf_log (this->name, GF_LOG_ERROR, + "Failed to duplicate brick name"); + goto out; + } + ret = dict_set_dynstr (bricks_dict, key, brick_tmpstr); + if (ret) { + gf_log (this->name, GF_LOG_ERROR, + "Failed to add brick to dict"); + goto out; + } + brick_tmpstr = NULL; + ret = glusterd_op_perform_remove_brick (volinfo, brick, force, &need_rebalance); if (ret) @@ -1852,6 +1885,8 @@ glusterd_op_remove_brick (dict_t *dict, char **op_errstr) } } } + volinfo->rebal.dict = bricks_dict; + bricks_dict = NULL; ret = glusterd_create_volfiles_and_notify_services (volinfo); if (ret) { @@ -1896,5 +1931,9 @@ out: if (ret && err_str[0] && op_errstr) *op_errstr = gf_strdup (err_str); + GF_FREE (brick_tmpstr); + if (bricks_dict) + dict_unref (bricks_dict); + return ret; } |