summaryrefslogtreecommitdiffstats
path: root/xlators/mgmt/glusterd/src/glusterd-nfs-svc.c
diff options
context:
space:
mode:
authorAtin Mukherjee <amukherj@redhat.com>2015-07-01 14:47:48 +0530
committerKaushal M <kaushal@redhat.com>2015-07-27 07:31:30 -0700
commitc5a19652c80162e670d29a7bd8c910d0acdfacb9 (patch)
tree0c6295a5b62c39379ae8205728ced82541a2a53b /xlators/mgmt/glusterd/src/glusterd-nfs-svc.c
parent2ddb41874d94a925828bf3cd042b4f3f77897343 (diff)
glusterd: initialize the daemon services on demand
Backport of http://review.gluster.org/#/c/11488/ As of now all the daemon services are initialized at glusterD init path. Since socket file path of per node daemon demands the uuid of the node, MY_UUID macro is invoked as part of the initialization. The above flow breaks the usecases where a gluster image is built following a template could be Dockerfile, Vagrantfile or any kind of virtualization environment. This means bringing instances of this image would have same UUIDs for the node resulting in peer probe failure. Solution is to lazily initialize the services on demand. Change-Id: If7caa533026c83e98c7c7678bded67085d0bbc1e BUG: 1247012 Signed-off-by: Atin Mukherjee <amukherj@redhat.com> Reviewed-on: http://review.gluster.org/11488 Tested-by: Gluster Build System <jenkins@build.gluster.com> Tested-by: NetBSD Build System <jenkins@build.gluster.org> Reviewed-by: Gaurav Kumar Garg <ggarg@redhat.com> Reviewed-by: Kaushal M <kaushal@redhat.com> Reviewed-on: http://review.gluster.org/11766
Diffstat (limited to 'xlators/mgmt/glusterd/src/glusterd-nfs-svc.c')
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-nfs-svc.c26
1 files changed, 22 insertions, 4 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-nfs-svc.c b/xlators/mgmt/glusterd/src/glusterd-nfs-svc.c
index 0c4d3c1e903..b1d98146877 100644
--- a/xlators/mgmt/glusterd/src/glusterd-nfs-svc.c
+++ b/xlators/mgmt/glusterd/src/glusterd-nfs-svc.c
@@ -18,6 +18,14 @@
char *nfs_svc_name = "nfs";
+void
+glusterd_nfssvc_build (glusterd_svc_t *svc)
+{
+ svc->manager = glusterd_nfssvc_manager;
+ svc->start = glusterd_nfssvc_start;
+ svc->stop = glusterd_nfssvc_stop;
+}
+
static gf_boolean_t
glusterd_nfssvc_need_start ()
{
@@ -43,10 +51,7 @@ glusterd_nfssvc_need_start ()
int
glusterd_nfssvc_init (glusterd_svc_t *svc)
{
- return glusterd_svc_init (svc, nfs_svc_name,
- glusterd_nfssvc_manager,
- glusterd_nfssvc_start,
- glusterd_nfssvc_stop);
+ return glusterd_svc_init (svc, nfs_svc_name);
}
static int
@@ -167,6 +172,19 @@ glusterd_nfssvc_manager (glusterd_svc_t *svc, void *data, int flags)
{
int ret = -1;
+ if (!svc->inited) {
+ ret = glusterd_nfssvc_init (svc);
+ if (ret) {
+ gf_msg (THIS->name, GF_LOG_ERROR, 0,
+ GD_MSG_FAILED_INIT_NFSSVC, "Failed to init nfs "
+ "service");
+ goto out;
+ } else {
+ svc->inited = _gf_true;
+ gf_msg_debug (THIS->name, 0, "nfs service initialized");
+ }
+ }
+
ret = svc->stop (svc, SIGKILL);
if (ret)
goto out;