diff options
| author | Kaushal M <kaushal@redhat.com> | 2012-04-19 14:10:44 +0530 | 
|---|---|---|
| committer | Anand Avati <avati@redhat.com> | 2012-04-23 18:54:55 -0700 | 
| commit | 7cc14db79d4579cfa50c30108fdf67ffa61cb94a (patch) | |
| tree | 5adb59586251f3337398a6e6e6e0b30baa2c54ed /xlators | |
| parent | 7c49e18bb58e91698630f95b67bd52e79ad391ca (diff) | |
glusterd,glusterfsd : Perform proper cleanup of connections and socket files
Perform proper disconnections and cleanup in glusterd on stopping nfs-server and
self-heal daemon processes to prevent glusterd from opening unneded unix domain
socket connections.
glusterfsd processes will cleanup the socket files properly in
cleanup_and_exit() to prevent junk socket files.
Also, fix rpcsvc_program_unregister() to preform the unregistering properly.
Change-Id: I1c7302c1166cf43feba1c7a813c3dc10169dc53a
BUG: 810089
Signed-off-by: Kaushal M <kaushal@redhat.com>
Reviewed-on: http://review.gluster.com/3168
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Krishnan Parthasarathi <kp@gluster.com>
Diffstat (limited to 'xlators')
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-utils.c | 72 | 
1 files changed, 63 insertions, 9 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c index ed7ba1d51e6..73770bb76a9 100644 --- a/xlators/mgmt/glusterd/src/glusterd-utils.c +++ b/xlators/mgmt/glusterd/src/glusterd-utils.c @@ -2783,20 +2783,41 @@ glusterd_nodesvc_connect (char *server, char *socketpath) {          dict_t                  *options = NULL;          struct rpc_clnt         *rpc = NULL; -        ret = rpc_clnt_transport_unix_options_build (&options, socketpath); -        if (ret) -                goto out; -        ret = glusterd_rpc_create (&rpc, options, -                                   glusterd_nodesvc_rpc_notify, -                                   server); -        if (ret) -                goto out; -        (void) glusterd_nodesvc_set_rpc (server, rpc); +        rpc = glusterd_nodesvc_get_rpc (server); + +        if (rpc == NULL) { +                ret = rpc_clnt_transport_unix_options_build (&options, +                                                             socketpath); +                if (ret) +                        goto out; +                ret = glusterd_rpc_create (&rpc, options, +                                           glusterd_nodesvc_rpc_notify, +                                           server); +                if (ret) +                        goto out; +                (void) glusterd_nodesvc_set_rpc (server, rpc); +        }  out:          return ret;  }  int32_t +glusterd_nodesvc_disconnect (char *server) +{ +        struct rpc_clnt         *rpc = NULL; + +        rpc = glusterd_nodesvc_get_rpc (server); + +        if (rpc) { +                rpc_clnt_connection_cleanup (&rpc->conn); +                rpc_clnt_unref (rpc); +                (void)glusterd_nodesvc_set_rpc (server, NULL); +        } + +        return 0; +} + +int32_t  glusterd_nodesvc_start (char *server)  {          int32_t                 ret                        = -1; @@ -2910,6 +2931,31 @@ glusterd_is_nodesvc_running (char *server)  }  int32_t +glusterd_nodesvc_unlink_socket_file (char *server) +{ +        int             ret = 0; +        char            sockfpath[PATH_MAX] = {0,}; +        char            rundir[PATH_MAX] = {0,}; +        glusterd_conf_t *priv = THIS->private; + +        glusterd_get_nodesvc_rundir (server, priv->workdir, +                                     rundir, sizeof (rundir)); + +        glusterd_nodesvc_set_socket_filepath (rundir, priv->uuid, +                                              sockfpath, sizeof (sockfpath)); + +        ret = unlink (sockfpath); +        if (ret && (ENOENT == errno)) { +                ret = 0; +        } else { +                gf_log (THIS->name, GF_LOG_ERROR, "Failed to remove %s" +                        " error: %s", sockfpath, strerror (errno)); +        } + +        return ret; +} + +int32_t  glusterd_nodesvc_stop (char *server, int sig)  {          char                    pidfile[PATH_MAX] = {0,}; @@ -2918,9 +2964,17 @@ glusterd_nodesvc_stop (char *server, int sig)          if (!glusterd_is_nodesvc_running (server))                  goto out; + +        (void)glusterd_nodesvc_disconnect (server); +          glusterd_get_nodesvc_pidfile (server, priv->workdir,                                              pidfile, sizeof (pidfile));          ret = glusterd_service_stop (server, pidfile, sig, _gf_true); + +        if (ret == 0) { +                glusterd_nodesvc_set_running (server, _gf_false); +                (void)glusterd_nodesvc_unlink_socket_file (server); +        }  out:          return ret;  }  | 
