diff options
Diffstat (limited to 'xlators/mgmt/glusterd/src/glusterd.c')
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd.c | 45 | 
1 files changed, 24 insertions, 21 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd.c b/xlators/mgmt/glusterd/src/glusterd.c index 2b55149ffd6..cb5daf4bb3d 100644 --- a/xlators/mgmt/glusterd/src/glusterd.c +++ b/xlators/mgmt/glusterd/src/glusterd.c @@ -869,27 +869,28 @@ _install_mount_spec (dict_t *opts, char *key, data_t *value, void *data)          return -1;  } +  static int -glusterd_default_synctask_cbk (int ret, call_frame_t *frame, void *opaque) +gd_default_synctask_cbk (int ret, call_frame_t *frame, void *opaque)  { -    return ret; +        return ret;  } -static int -glusterd_launch_synctask (xlator_t *this, synctask_fn_t fn) +static void +glusterd_launch_synctask (synctask_fn_t fn, void *opaque)  { -    glusterd_conf_t *priv = NULL; -    int              ret  = -1; - -    priv = this->private; +        xlator_t        *this = NULL; +        glusterd_conf_t *priv = NULL; +        int             ret   = -1; -    ret = synctask_new (this->ctx->env, fn, -                        glusterd_default_synctask_cbk, NULL, priv); +        this = THIS; +        priv = this->private; -    if (ret) -            gf_log (this->name, GF_LOG_CRITICAL, "Failed to create synctask" -                    "for starting process"); -    return ret; +        ret = synctask_new (this->ctx->env, fn, gd_default_synctask_cbk, NULL, +                            opaque); +        if (ret) +                gf_log (this->name, GF_LOG_CRITICAL, "Failed to spawn bricks" +                        " and other volume related services");  }  /* @@ -1082,6 +1083,7 @@ init (xlator_t *this)          conf->gfs_mgmt = &gd_brick_prog;          strncpy (conf->workdir, workdir, PATH_MAX); +        synclock_init (&conf->big_lock);          pthread_mutex_init (&conf->xprt_lock, NULL);          INIT_LIST_HEAD (&conf->xprt_list); @@ -1144,6 +1146,14 @@ init (xlator_t *this)          if (ret < 0)                  goto out; +        /* If there are no 'friends', this would be the best time to +         * spawn process/bricks that may need (re)starting since last +         * time (this) glusterd was up.*/ + +        if (list_empty (&conf->peers)) { +                glusterd_launch_synctask (glusterd_spawn_daemons, +                                          (void*) _gf_true); +        }          ret = glusterd_options_init (this);          if (ret < 0)                  goto out; @@ -1152,13 +1162,6 @@ init (xlator_t *this)          if (ret)                  goto out; -        glusterd_launch_synctask (this, -                                  (synctask_fn_t) glusterd_restart_bricks); -        glusterd_launch_synctask (this, -                                  (synctask_fn_t) glusterd_restart_gsyncds); -        glusterd_launch_synctask (this, -                                  (synctask_fn_t) glusterd_restart_rebalance); -          ret = glusterd_hooks_spawn_worker (this);          if (ret)                  goto out;  | 
