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