From 481665515e0dbe450d5c7014a01750485eb10ba7 Mon Sep 17 00:00:00 2001 From: Guido Trotter <ultrotter@google.com> Date: Mon, 31 Aug 2009 15:54:20 +0100 Subject: [PATCH] confd: add cluster master query Signed-off-by: Guido Trotter <ultrotter@google.com> Reviewed-by: Michael Hanselmann <hansmi@google.com> --- lib/confd/querylib.py | 19 +++++++++++++++++++ lib/confd/server.py | 1 + lib/constants.py | 2 ++ 3 files changed, 22 insertions(+) diff --git a/lib/confd/querylib.py b/lib/confd/querylib.py index af0c32d9b..b299034a1 100644 --- a/lib/confd/querylib.py +++ b/lib/confd/querylib.py @@ -82,6 +82,25 @@ class PingQuery(ConfdQuery): return status, answer +class ClusterMasterQuery(ConfdQuery): + """Cluster master query. + + It accepts no arguments, and returns the current cluster master. + + """ + def Exec(self, query): + """ClusterMasterQuery main execution + + """ + if query is None: + status = constants.CONFD_REPL_STATUS_OK + answer = self.reader.GetMasterNode() + else: + status = constants.CONFD_REPL_STATUS_ERROR + answer = 'master query accepts no query argument' + + return status, answer + class NodeRoleQuery(ConfdQuery): """A query for the role of a node. diff --git a/lib/confd/server.py b/lib/confd/server.py index 601b95759..f27b225bc 100644 --- a/lib/confd/server.py +++ b/lib/confd/server.py @@ -51,6 +51,7 @@ class ConfdProcessor(object): constants.CONFD_REQ_NODE_ROLE_BYNAME: querylib.NodeRoleQuery, constants.CONFD_REQ_NODE_PIP_BY_INSTANCE_IP: querylib.InstanceIpToNodePrimaryIpQuery, + constants.CONFD_REQ_CLUSTER_MASTER: querylib.ClusterMasterQuery, } def __init__(self): diff --git a/lib/constants.py b/lib/constants.py index 538476596..80a663a69 100644 --- a/lib/constants.py +++ b/lib/constants.py @@ -638,11 +638,13 @@ CONFD_PROTOCOL_VERSION = 1 CONFD_REQ_PING = 0 CONFD_REQ_NODE_ROLE_BYNAME = 1 CONFD_REQ_NODE_PIP_BY_INSTANCE_IP = 2 +CONFD_REQ_CLUSTER_MASTER = 3 CONFD_REQS = frozenset([ CONFD_REQ_PING, CONFD_REQ_NODE_ROLE_BYNAME, CONFD_REQ_NODE_PIP_BY_INSTANCE_IP, + CONFD_REQ_CLUSTER_MASTER, ]) CONFD_REPL_STATUS_OK = 0 -- GitLab