summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKotresh H R <khiremat@redhat.com>2014-06-18 13:30:26 +0530
committerVenky Shankar <vshankar@redhat.com>2014-06-20 01:17:22 -0700
commit124ba991069099258e4e69ccf3eefae1c88ebb8c (patch)
tree7a4ff3ec03cf8aa6c5ee25288237184a53809aa3
parent3fe1a14a82f3894e6b9e9d3004a185c48ea4bf6b (diff)
feature/geo-rep: Fix to retain pause state of gsyncd on restart
On soft reboot, geo-rep monitor is writing 'faulty' into status file. It should not do it if previous state is paused as glusterd depend on the state file on node restart. Change-Id: Idd45abf13350b087371935f1b4f6e1a346433d27 BUG: 1101410 Signed-off-by: Kotresh H R <khiremat@redhat.com> Reviewed-on: http://review.gluster.org/8097 Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Venky Shankar <vshankar@redhat.com> Tested-by: Venky Shankar <vshankar@redhat.com>
-rw-r--r--geo-replication/syncdaemon/monitor.py25
-rw-r--r--geo-replication/syncdaemon/resource.py7
2 files changed, 18 insertions, 14 deletions
diff --git a/geo-replication/syncdaemon/monitor.py b/geo-replication/syncdaemon/monitor.py
index 0bde216d761..5f4745501ec 100644
--- a/geo-replication/syncdaemon/monitor.py
+++ b/geo-replication/syncdaemon/monitor.py
@@ -73,11 +73,10 @@ class Monitor(object):
"""class which spawns and manages gsyncd workers"""
ST_INIT = 'Initializing...'
- ST_INIT_PAUSE = 'Initializing...(Paused)'
ST_STABLE = 'Stable'
ST_FAULTY = 'faulty'
ST_INCON = 'inconsistent'
- _ST_ORD = [ST_STABLE, ST_INIT, ST_INIT_PAUSE, ST_FAULTY, ST_INCON]
+ _ST_ORD = [ST_STABLE, ST_INIT, ST_FAULTY, ST_INCON]
def __init__(self):
self.lock = Lock()
@@ -97,8 +96,17 @@ class Monitor(object):
if state != old_state:
self.set_state(state)
else:
- logging.info('new state: %s' % state)
if getattr(gconf, 'state_file', None):
+ # If previous state is paused, suffix the
+ # new state with '(Paused)'
+ try:
+ with open(gconf.state_file, "r") as f:
+ content = f.read()
+ if "paused" in content.lower():
+ state = state + '(Paused)'
+ except IOError:
+ pass
+ logging.info('new state: %s' % state)
update_file(gconf.state_file, lambda f: f.write(state + '\n'))
@staticmethod
@@ -129,10 +137,7 @@ class Monitor(object):
due to the keep-alive thread)
"""
- if gconf.pause_on_start:
- self.set_state(self.ST_INIT_PAUSE, w)
- else:
- self.set_state(self.ST_INIT, w)
+ self.set_state(self.ST_INIT, w)
ret = 0
@@ -310,5 +315,11 @@ def distribute(*resources):
def monitor(*resources):
+ # Check if gsyncd restarted in pause state. If
+ # yes, send SIGSTOP to negative of monitor pid
+ # to go back to pause state.
+ if gconf.pause_on_start:
+ os.kill(-os.getpid(), signal.SIGSTOP)
+
"""oh yeah, actually Monitor is used as singleton, too"""
return Monitor().multiplex(*distribute(*resources))
diff --git a/geo-replication/syncdaemon/resource.py b/geo-replication/syncdaemon/resource.py
index eb6c87b102b..b537ff65003 100644
--- a/geo-replication/syncdaemon/resource.py
+++ b/geo-replication/syncdaemon/resource.py
@@ -1294,13 +1294,6 @@ class GLUSTER(AbstractUrl, SlaveLocal, SlaveRemote):
logging.debug("Changelog register failed: %s - %s" %
(e.errno, e.strerror))
- # Check if gsyncd restarted in pause state. If
- # yes, send SIGSTOP to negative of monitor pid
- # to go back to pause state.
- if gconf.pause_on_start:
- os.kill(-os.getppid(), signal.SIGSTOP)
- gconf.pause_on_start = False
-
# oneshot: Try to use changelog history api, if not
# available switch to FS crawl
# Note: if config.change_detector is xsync then