diff options
author | Aravinda VK <avishwan@redhat.com> | 2014-04-29 12:14:24 +0530 |
---|---|---|
committer | Venky Shankar <vshankar@redhat.com> | 2014-05-09 00:27:40 -0700 |
commit | c7b0396f680863528248e6f5a162de47184b6c88 (patch) | |
tree | ead2f295d041df1e258db4bf09fe10944b15f4d7 /geo-replication/syncdaemon/gsyncd.py | |
parent | 65757e0f57f93103d87fdf9534c5ca25b66d14b7 (diff) |
geo-rep: Pause and Resume feature for geo-replication
Changelog consumption/processing now happens in seperate process
group than monitor. When monitor process group gets SIGSTOP all
worker process, ssh, rsync will be paused except the changelog
processing. When it gets SIGCONT it resumes its operation.
Changelog agent runs as RepceServer, geo-rep worker communicates
with changelog agent using RepceClient.
Change-Id: I35c333e4d8b13d03a7808aed601960eef23cfa04
BUG: 1093602
Signed-off-by: Venky Shankar <vshankar@redhat.com>
Signed-off-by: Aravinda VK <avishwan@redhat.com>
Reviewed-on: http://review.gluster.org/7322
Diffstat (limited to 'geo-replication/syncdaemon/gsyncd.py')
-rw-r--r-- | geo-replication/syncdaemon/gsyncd.py | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/geo-replication/syncdaemon/gsyncd.py b/geo-replication/syncdaemon/gsyncd.py index 426d964de95..7d463ad23f3 100644 --- a/geo-replication/syncdaemon/gsyncd.py +++ b/geo-replication/syncdaemon/gsyncd.py @@ -32,6 +32,7 @@ from syncdutils import GsyncdError, select, set_term_handler from configinterface import GConffile, upgrade_config_file import resource from monitor import monitor +from changelogagent import agent, Changelog class GLogger(Logger): @@ -175,6 +176,7 @@ def main_i(): - query/manipulate configuration - format gsyncd urls using gsyncd's url parsing engine - start service in following modes, in given stages: + - agent: startup(), ChangelogAgent() - monitor: startup(), monitor() - master: startup(), connect_remote(), connect(), service_loop() - slave: startup(), connect(), service_loop() @@ -275,12 +277,15 @@ def main_i(): # duh. need to specify dest or value will be mapped to None :S op.add_option('--monitor', dest='monitor', action='callback', callback=store_local_curry(True)) + op.add_option('--agent', dest='agent', action='callback', + callback=store_local_curry(True)) op.add_option('--resource-local', dest='resource_local', type=str, action='callback', callback=store_local) op.add_option('--resource-remote', dest='resource_remote', type=str, action='callback', callback=store_local) op.add_option('--feedback-fd', dest='feedback_fd', type=int, help=SUPPRESS_HELP, action='callback', callback=store_local) + op.add_option('--rpc-fd', dest='rpc_fd', type=str, help=SUPPRESS_HELP) op.add_option('--listen', dest='listen', help=SUPPRESS_HELP, action='callback', callback=store_local_curry(True)) op.add_option('-N', '--no-daemon', dest="go_daemon", @@ -586,6 +591,7 @@ def main_i(): go_daemon = rconf['go_daemon'] be_monitor = rconf.get('monitor') + be_agent = rconf.get('agent') rscs, local, remote = makersc(args) if not be_monitor and isinstance(remote, resource.SSH) and \ @@ -596,6 +602,8 @@ def main_i(): log_file = gconf.log_file if be_monitor: label = 'monitor' + elif be_agent: + label = 'agent' elif remote: # master label = gconf.local_path @@ -604,6 +612,11 @@ def main_i(): startup(go_daemon=go_daemon, log_file=log_file, label=label) resource.Popen.init_errhandler() + if be_agent: + os.setsid() + logging.debug('rpc_fd: %s' % repr(gconf.rpc_fd)) + return agent(Changelog(), gconf.rpc_fd) + if be_monitor: return monitor(*rscs) |