summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAravinda VK <avishwan@redhat.com>2016-11-16 16:50:50 +0530
committerAravinda VK <avishwan@redhat.com>2016-12-02 02:16:32 -0800
commit91e72a0f2e4e51ce20550946578a6d50cbb88e26 (patch)
treeedad99ce569aaaa1293bfd12c6e3356ebb490714
parentfb95eb4da6f4fc0b9c69e3b159a2214fe47e6d1d (diff)
geo-rep/eventsapi: Add Master node information in Geo-rep Events
Added Master node information to GEOREP_ACTIVE, GEOREP_PASSIVE, GEOREP_FAULTY and GEOREP_CHECKPOINT_COMPLETED events. EVENT_GEOREP_ACTIVE(master_node and master_node_id are new fields) { "nodeid": NODEID, "ts": TIMESTAMP, "event": "GEOREP_ACTIVE", "message": { "master_volume": MASTER_VOLUME_NAME, "master_node": MASTER_NODE, "master_node_id": MASTER_NODE_ID, "slave_host": SLAVE_HOST, "slave_volume": SLAVE_VOLUME, "brick_path": BRICK_PATH } } EVENT_GEOREP_PASSIVE(master_node and master_node_id are new fields) { "nodeid": NODEID, "ts": TIMESTAMP, "event": "GEOREP_PASSIVE", "message": { "master_volume": MASTER_VOLUME_NAME, "master_node": MASTER_NODE, "master_node_id": MASTER_NODE_ID, "slave_host": SLAVE_HOST, "slave_volume": SLAVE_VOLUME, "brick_path": BRICK_PATH } } EVENT_GEOREP_FAULTY(master_node and master_node_id are new fields) { "nodeid": NODEID, "ts": TIMESTAMP, "event": "GEOREP_FAULTY", "message": { "master_volume": MASTER_VOLUME_NAME, "master_node": MASTER_NODE, "master_node_id": MASTER_NODE_ID, "current_slave_host": CURRENT_SLAVE_HOST, "slave_host": SLAVE_HOST, "slave_volume": SLAVE_VOLUME, "brick_path": BRICK_PATH } } EVENT_GEOREP_CHECKPOINT_COMPLETED(master_node and master_node_id are new fields) { "nodeid": NODEID, "ts": TIMESTAMP, "event": "GEOREP_CHECKPOINT_COMPLETED", "message": { "master_volume": MASTER_VOLUME_NAME, "master_node": MASTER_NODE, "master_node_id": MASTER_NODE_ID, "slave_host": SLAVE_HOST, "slave_volume": SLAVE_VOLUME, "brick_path": BRICK_PATH, "checkpoint_time": CHECKPOINT_TIME, "checkpoint_completion_time": CHECKPOINT_COMPLETION_TIME } } BUG: 1395660 Change-Id: Ic91af52fa248c8e982e93a06be861dfd69689f34 Signed-off-by: Aravinda VK <avishwan@redhat.com> Reviewed-on: http://review.gluster.org/15858 NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org> Smoke: Gluster Build System <jenkins@build.gluster.org> CentOS-regression: Gluster Build System <jenkins@build.gluster.org> Reviewed-by: Kotresh HR <khiremat@redhat.com>
-rw-r--r--geo-replication/syncdaemon/gsyncd.py9
-rw-r--r--geo-replication/syncdaemon/gsyncdstatus.py38
-rw-r--r--geo-replication/syncdaemon/monitor.py13
-rw-r--r--geo-replication/syncdaemon/resource.py4
4 files changed, 41 insertions, 23 deletions
diff --git a/geo-replication/syncdaemon/gsyncd.py b/geo-replication/syncdaemon/gsyncd.py
index 97b218e84d0..1cc303526be 100644
--- a/geo-replication/syncdaemon/gsyncd.py
+++ b/geo-replication/syncdaemon/gsyncd.py
@@ -286,6 +286,10 @@ def main_i():
op.add_option('--session-owner', metavar='ID')
op.add_option('--local-id', metavar='ID', help=SUPPRESS_HELP, default='')
op.add_option(
+ '--local-node', metavar='NODE', help=SUPPRESS_HELP, default='')
+ op.add_option(
+ '--local-node-id', metavar='NODEID', help=SUPPRESS_HELP, default='')
+ op.add_option(
'--local-path', metavar='PATH', help=SUPPRESS_HELP, default='')
op.add_option('-s', '--ssh-command', metavar='CMD', default='ssh')
op.add_option('--ssh-port', metavar='PORT', type=int, default=22)
@@ -725,7 +729,10 @@ def main_i():
if status_get:
master_name, slave_data = get_master_and_slave_data_from_args(args)
for brick in gconf.path:
- brick_status = GeorepStatus(gconf.state_file, brick,
+ brick_status = GeorepStatus(gconf.state_file,
+ gconf.local_node,
+ brick,
+ gconf.local_node_id,
master_name,
slave_data,
getattr(gconf, "pid_file", None))
diff --git a/geo-replication/syncdaemon/gsyncdstatus.py b/geo-replication/syncdaemon/gsyncdstatus.py
index c9938b5116f..dd363baf181 100644
--- a/geo-replication/syncdaemon/gsyncdstatus.py
+++ b/geo-replication/syncdaemon/gsyncdstatus.py
@@ -119,8 +119,8 @@ def set_monitor_status(status_file, status):
class GeorepStatus(object):
- def __init__(self, monitor_status_file, brick, master, slave,
- monitor_pid_file=None):
+ def __init__(self, monitor_status_file, master_node, brick, master_node_id,
+ master, slave, monitor_pid_file=None):
self.master = master
slv_data = slave.split("::")
self.slave_host = slv_data[0]
@@ -135,10 +135,22 @@ class GeorepStatus(object):
os.close(fd)
fd = os.open(self.monitor_status_file, os.O_CREAT | os.O_RDWR)
os.close(fd)
+ self.master_node = master_node
+ self.master_node_id = master_node_id
self.brick = brick
self.default_values = get_default_values()
self.monitor_pid_file = monitor_pid_file
+ def send_event(self, event_type, **kwargs):
+ gf_event(event_type,
+ master_volume=self.master,
+ master_node=self.master_node,
+ master_node_id=self.master_node_id,
+ slave_host=self.slave_host,
+ slave_volume=self.slave_volume,
+ brick_path=self.brick,
+ **kwargs)
+
def _update(self, mergerfunc):
with LockedOpen(self.filename, 'r+') as f:
try:
@@ -189,13 +201,9 @@ class GeorepStatus(object):
def trigger_gf_event_checkpoint_completion(self, checkpoint_time,
checkpoint_completion_time):
- gf_event(EVENT_GEOREP_CHECKPOINT_COMPLETED,
- master_volume=self.master,
- slave_host=self.slave_host,
- slave_volume=self.slave_volume,
- brick_path=self.brick,
- checkpoint_time=checkpoint_time,
- checkpoint_completion_time=checkpoint_completion_time)
+ self.send_event(EVENT_GEOREP_CHECKPOINT_COMPLETED,
+ checkpoint_time=checkpoint_time,
+ checkpoint_completion_time=checkpoint_completion_time)
def set_last_synced(self, value, checkpoint_time):
def merger(data):
@@ -262,20 +270,12 @@ class GeorepStatus(object):
def set_active(self):
if self.set_field("worker_status", "Active"):
logging.info("Worker Status: Active")
- gf_event(EVENT_GEOREP_ACTIVE,
- master_volume=self.master,
- slave_host=self.slave_host,
- slave_volume=self.slave_volume,
- brick_path=self.brick)
+ self.send_event(EVENT_GEOREP_ACTIVE)
def set_passive(self):
if self.set_field("worker_status", "Passive"):
logging.info("Worker Status: Passive")
- gf_event(EVENT_GEOREP_PASSIVE,
- master_volume=self.master,
- slave_host=self.slave_host,
- slave_volume=self.slave_volume,
- brick_path=self.brick)
+ self.send_event(EVENT_GEOREP_PASSIVE)
def get_monitor_status(self):
data = ""
diff --git a/geo-replication/syncdaemon/monitor.py b/geo-replication/syncdaemon/monitor.py
index f13e5e79eab..d9a9c338579 100644
--- a/geo-replication/syncdaemon/monitor.py
+++ b/geo-replication/syncdaemon/monitor.py
@@ -123,8 +123,8 @@ class Volinfo(object):
@memoize
def bricks(self):
def bparse(b):
- host, dirp = b.text.split(':', 2)
- return {'host': host, 'dir': dirp}
+ host, dirp = b.find("name").text.split(':', 2)
+ return {'host': host, 'dir': dirp, 'uuid': b.find("hostUuid").text}
return [bparse(b) for b in self.get('brick')]
@property
@@ -212,7 +212,9 @@ class Monitor(object):
"""
if not self.status.get(w[0]['dir'], None):
self.status[w[0]['dir']] = GeorepStatus(gconf.state_file,
+ w[0]['host'],
w[0]['dir'],
+ w[0]['uuid'],
master,
"%s::%s" % (slave_host,
slave_vol))
@@ -286,6 +288,9 @@ class Monitor(object):
os.close(rw)
os.close(ww)
os.execv(sys.executable, argv + ['--local-path', w[0]['dir'],
+ '--local-node', w[0]['host'],
+ '--local-node-id',
+ w[0]['uuid'],
'--agent',
'--rpc-fd',
','.join([str(ra), str(wa),
@@ -298,6 +303,9 @@ class Monitor(object):
os.close(wa)
os.execv(sys.executable, argv + ['--feedback-fd', str(pw),
'--local-path', w[0]['dir'],
+ '--local-node', w[0]['host'],
+ '--local-node-id',
+ w[0]['uuid'],
'--local-id',
'.' + escape(w[0]['dir']),
'--rpc-fd',
@@ -381,6 +389,7 @@ class Monitor(object):
gf_event(EVENT_GEOREP_FAULTY,
master_volume=master.volume,
master_node=w[0]['host'],
+ master_node_id=w[0]['uuid'],
slave_host=slave_host,
slave_volume=slave_vol,
current_slave_host=current_slave_host,
diff --git a/geo-replication/syncdaemon/resource.py b/geo-replication/syncdaemon/resource.py
index 8c490591849..2e97117c495 100644
--- a/geo-replication/syncdaemon/resource.py
+++ b/geo-replication/syncdaemon/resource.py
@@ -1545,7 +1545,9 @@ class GLUSTER(AbstractUrl, SlaveLocal, SlaveRemote):
changelog_agent = RepceClient(int(inf), int(ouf))
master_name, slave_data = get_master_and_slave_data_from_args(
sys.argv)
- status = GeorepStatus(gconf.state_file, gconf.local_path,
+ status = GeorepStatus(gconf.state_file, gconf.local_node,
+ gconf.local_path,
+ gconf.local_node_id,
master_name, slave_data)
status.reset_on_worker_start()
rv = changelog_agent.version()