diff options
Diffstat (limited to 'xlators')
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-utils.c | 16 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd.h | 4 |
2 files changed, 19 insertions, 1 deletions
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 diff --git a/xlators/mgmt/glusterd/src/glusterd.h b/xlators/mgmt/glusterd/src/glusterd.h index ceb472284b2..3b7c82faab2 100644 --- a/xlators/mgmt/glusterd/src/glusterd.h +++ b/xlators/mgmt/glusterd/src/glusterd.h @@ -1170,4 +1170,8 @@ glusterd_handle_snap_limit (dict_t *dict, dict_t *rsp_dict); gf_boolean_t glusterd_should_i_stop_bitd (); +int +glusterd_remove_brick_migrate_cbk (glusterd_volinfo_t *volinfo, + gf_defrag_status_t status); + #endif |