summaryrefslogtreecommitdiffstats
path: root/geo-replication/syncdaemon
diff options
context:
space:
mode:
Diffstat (limited to 'geo-replication/syncdaemon')
-rw-r--r--geo-replication/syncdaemon/gsyncd.py1
-rw-r--r--geo-replication/syncdaemon/monitor.py9
-rw-r--r--geo-replication/syncdaemon/resource.py8
3 files changed, 16 insertions, 2 deletions
diff --git a/geo-replication/syncdaemon/gsyncd.py b/geo-replication/syncdaemon/gsyncd.py
index 7d463ad23f3..7ddd51267a6 100644
--- a/geo-replication/syncdaemon/gsyncd.py
+++ b/geo-replication/syncdaemon/gsyncd.py
@@ -227,6 +227,7 @@ def main_i():
op.add_option('--ignore-deletes', default=False, action='store_true')
op.add_option('--isolated-slave', default=False, action='store_true')
op.add_option('--use-rsync-xattrs', default=False, action='store_true')
+ op.add_option('--pause-on-start', default=False, action='store_true')
op.add_option('-L', '--log-level', metavar='LVL')
op.add_option('-r', '--remote-gsyncd', metavar='CMD',
default=os.path.abspath(sys.argv[0]))
diff --git a/geo-replication/syncdaemon/monitor.py b/geo-replication/syncdaemon/monitor.py
index f485fe18605..f3700c1a390 100644
--- a/geo-replication/syncdaemon/monitor.py
+++ b/geo-replication/syncdaemon/monitor.py
@@ -73,10 +73,11 @@ 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_FAULTY, ST_INCON]
+ _ST_ORD = [ST_STABLE, ST_INIT, ST_INIT_PAUSE, ST_FAULTY, ST_INCON]
def __init__(self):
self.lock = Lock()
@@ -128,7 +129,11 @@ class Monitor(object):
due to the keep-alive thread)
"""
- self.set_state(self.ST_INIT, w)
+ if gconf.pause_on_start:
+ self.set_state(self.ST_INIT_PAUSE, w)
+ else:
+ self.set_state(self.ST_INIT, w)
+
ret = 0
def nwait(p, o=0):
diff --git a/geo-replication/syncdaemon/resource.py b/geo-replication/syncdaemon/resource.py
index dadfc965336..8192a54b0d4 100644
--- a/geo-replication/syncdaemon/resource.py
+++ b/geo-replication/syncdaemon/resource.py
@@ -13,6 +13,7 @@ import os
import sys
import stat
import time
+import signal
import fcntl
import errno
import types
@@ -1290,6 +1291,13 @@ 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