diff options
Diffstat (limited to 'xlators')
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-rebalance.c | 34 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-utils.c | 11 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd.h | 3 | 
3 files changed, 47 insertions, 1 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-rebalance.c b/xlators/mgmt/glusterd/src/glusterd-rebalance.c index 5faa6b4a1b3..815b0aa6ae6 100644 --- a/xlators/mgmt/glusterd/src/glusterd-rebalance.c +++ b/xlators/mgmt/glusterd/src/glusterd-rebalance.c @@ -326,6 +326,40 @@ out:          return ret;  } +int +glusterd_rebalance_defrag_init (glusterd_volinfo_t *volinfo, +                                defrag_cbk_fn_t cbk) + +{ +        glusterd_defrag_info_t  *defrag         = NULL; +        int                      ret            = -1; + +        if (!volinfo->rebal.defrag) { +                volinfo->rebal.defrag = +                        GF_CALLOC (1, sizeof (*volinfo->rebal.defrag), +                                   gf_gld_mt_defrag_info); +        } else { +                /* +                 * if defrag variable is already initialized, +                 * we skip the initialization. +                 */ +                ret = 0; +                goto out; +        } + +        if (!volinfo->rebal.defrag) +                goto out; +        defrag = volinfo->rebal.defrag; + +        defrag->cmd = volinfo->rebal.defrag_cmd; +        LOCK_INIT (&defrag->lock); +        if (cbk) +                defrag->cbk_fn = cbk; +        ret = 0; +out: +        return ret; + +}  int  glusterd_rebalance_rpc_create (glusterd_volinfo_t *volinfo, diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c index 49b88ed4b13..f1b1a3c0c59 100644 --- a/xlators/mgmt/glusterd/src/glusterd-utils.c +++ b/xlators/mgmt/glusterd/src/glusterd-utils.c @@ -7136,6 +7136,15 @@ glusterd_volume_defrag_restart (glusterd_volinfo_t *volinfo, char *op_errstr,          case GF_DEFRAG_STATUS_STARTED:                  GLUSTERD_GET_DEFRAG_PID_FILE(pidfile, volinfo, priv);                  if (gf_is_service_running (pidfile, &pid)) { +                        ret = glusterd_rebalance_defrag_init (volinfo, cbk); +                        if (ret) { +                                gf_msg (this->name, GF_LOG_ERROR, 0, +                                        GD_MSG_REBALANCE_START_FAIL, +                                        "Failed to initialize  defrag." +                                        "Not starting rebalance process for " +                                        "%s.", volinfo->volname); +                                goto out; +                        }                          ret = glusterd_rebalance_rpc_create (volinfo, _gf_true);                          break;                  } @@ -7151,7 +7160,7 @@ glusterd_volume_defrag_restart (glusterd_volinfo_t *volinfo, char *op_errstr,                          volinfo->rebal.defrag_status, volinfo->volname);                  break;          } - +out:          return ret;  } diff --git a/xlators/mgmt/glusterd/src/glusterd.h b/xlators/mgmt/glusterd/src/glusterd.h index 0a313918856..a710a08954a 100644 --- a/xlators/mgmt/glusterd/src/glusterd.h +++ b/xlators/mgmt/glusterd/src/glusterd.h @@ -999,6 +999,9 @@ int  glusterd_rebalance_rpc_create (glusterd_volinfo_t *volinfo,                                 gf_boolean_t reconnect); +int glusterd_rebalance_defrag_init (glusterd_volinfo_t *volinfo, +                                    defrag_cbk_fn_t cbk); +  int glusterd_handle_cli_heal_volume (rpcsvc_request_t *req);  int glusterd_handle_cli_list_volume (rpcsvc_request_t *req);  | 
