From bb93e8008a8974e43d68482ba41e12c7979e5ca6 Mon Sep 17 00:00:00 2001 From: Atin Mukherjee Date: Thu, 3 Jan 2019 21:22:56 +0530 Subject: [PATCH] restart glustershd on volume start/stop operation glustershd process needs to be restarted for every volume start/stop operations to ensure that glustershd can run with the latest volfiles. Currently due to the lack of client graph switch issue, a reconfigure isn't possible for such case with out a restart. volume set operation is still a TODO item and this PR doesn't cover this. Fixes: #1459 Signed-off-by: Atin Mukherjee --- plugins/glustershd/actor.go | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/plugins/glustershd/actor.go b/plugins/glustershd/actor.go index b62447fd1..eb7c7bd28 100644 --- a/plugins/glustershd/actor.go +++ b/plugins/glustershd/actor.go @@ -37,6 +37,7 @@ func (actor *shdActor) Do(v *volume.Volinfo, key string, value string, volOp xla return err } + err := daemon.Stop(glustershDaemon, true, logger) err = daemon.Start(glustershDaemon, true, logger) if err != nil && err != gderrors.ErrProcessAlreadyRunning { return err @@ -53,10 +54,23 @@ func (actor *shdActor) Do(v *volume.Volinfo, key string, value string, volOp xla if err != nil && err != gderrors.ErrPidFileNotFound { return err } + } else { + err = volgen.ClusterVolfileToFile(v, glustershDaemon.VolfileID, "glustershd") + if err != nil { + return err + } + err := daemon.Stop(glustershDaemon, true, logger) + err = daemon.Start(glustershDaemon, true, logger) + if err != nil && err != gderrors.ErrProcessAlreadyRunning { + return err + } } case xlator.VolumeSet: - fallthrough + fallthrough // TODO : In case there's any option which changes + // the topology of the shd volfile, shd needs to be + // restarted, refer glusterd_shdsvc_reconfigure() + // from GD1 code case xlator.VolumeReset: if key != selfHealKey && key != granularEntryHealKey { return nil