From 28c2798d5e1f36e3f57192b693758fa8a9f26743 Mon Sep 17 00:00:00 2001 From: Atin Mukherjee Date: Sat, 30 Jan 2016 08:47:35 +0530 Subject: glusterd: set decommission_is_in_progress flag for inprogress remove-brick op on glusterd restart Backport of http://review.gluster.org/13323 While remove brick is in progress, if glusterd is restarted since decommission flag is not persisted in the store the same value is not retained back resulting in glusterd not blocking remove brick commit when rebalance is already in progress. Change-Id: Ibbf12f3792d65ab1293fad1e368568be141a1cd6 BUG: 1310972 Signed-off-by: Atin Mukherjee Reviewed-on: http://review.gluster.org/13323 Smoke: Gluster Build System NetBSD-regression: NetBSD Build System CentOS-regression: Gluster Build System Reviewed-by: Gaurav Kumar Garg Reviewed-by: mohammed rafi kc Reviewed-on: http://review.gluster.org/13489 --- xlators/mgmt/glusterd/src/glusterd-utils.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'xlators/mgmt/glusterd/src/glusterd-utils.c') diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c index 0639a910217..5db5d0a58eb 100644 --- a/xlators/mgmt/glusterd/src/glusterd-utils.c +++ b/xlators/mgmt/glusterd/src/glusterd-utils.c @@ -7213,6 +7213,7 @@ glusterd_restart_rebalance_for_volume (glusterd_volinfo_t *volinfo) if (!volinfo->rebal.defrag_cmd) return -1; + if (!gd_should_i_start_rebalance (volinfo)) { /* Store the rebalance-id and rebalance command even if @@ -7229,7 +7230,20 @@ glusterd_restart_rebalance_for_volume (glusterd_volinfo_t *volinfo) return 0; } ret = glusterd_volume_defrag_restart (volinfo, op_errstr, PATH_MAX, - volinfo->rebal.defrag_cmd, NULL); + volinfo->rebal.defrag_cmd, + volinfo->rebal.op == GD_OP_REMOVE_BRICK ? + glusterd_remove_brick_migrate_cbk : NULL); + if (!ret) { + /* If remove brick is started then ensure that on a glusterd + * restart decommission_is_in_progress is set to avoid remove + * brick commit to happen when rebalance is not completed. + */ + if (volinfo->rebal.op == GD_OP_REMOVE_BRICK && + volinfo->rebal.defrag_status == GF_DEFRAG_STATUS_STARTED) { + volinfo->decommission_in_progress = 1; + } + } + return ret; } int -- cgit