From c46b978282757ea313e3d517e4f5e54a62f65f26 Mon Sep 17 00:00:00 2001
From: Luca Bigliardi <shammash@google.com>
Date: Mon, 28 Jun 2010 16:47:40 +0100
Subject: [PATCH] Add drbd_helper rpc call

Signed-off-by: Luca Bigliardi <shammash@google.com>
Reviewed-by: Iustin Pop <iustin@google.com>
---
 daemons/ganeti-noded |  7 +++++++
 lib/backend.py       | 10 ++++++++++
 lib/rpc.py           |  9 +++++++++
 3 files changed, 26 insertions(+)

diff --git a/daemons/ganeti-noded b/daemons/ganeti-noded
index 21227facf..881e4dd2b 100755
--- a/daemons/ganeti-noded
+++ b/daemons/ganeti-noded
@@ -361,6 +361,13 @@ class NodeHttpServer(http.server.HttpServer):
     disks = [objects.Disk.FromDict(cf) for cf in disks]
     return backend.DrbdWaitSync(nodes_ip, disks)
 
+  @staticmethod
+  def perspective_drbd_helper(params):
+    """Query drbd helper.
+
+    """
+    return backend.GetDrbdUsermodeHelper()
+
   # export/import  --------------------------
 
   @staticmethod
diff --git a/lib/backend.py b/lib/backend.py
index c6e5c30c4..9584ef9ad 100644
--- a/lib/backend.py
+++ b/lib/backend.py
@@ -3055,6 +3055,16 @@ def DrbdWaitSync(nodes_ip, disks):
   return (alldone, min_resync)
 
 
+def GetDrbdUsermodeHelper():
+  """Returns DRBD usermode helper currently configured.
+
+  """
+  try:
+    return bdev.BaseDRBD.GetUsermodeHelper()
+  except errors.BlockDeviceError, err:
+    _Fail(str(err))
+
+
 def PowercycleNode(hypervisor_type):
   """Hard-powercycle the node.
 
diff --git a/lib/rpc.py b/lib/rpc.py
index 57dd960e4..83a88cdf1 100644
--- a/lib/rpc.py
+++ b/lib/rpc.py
@@ -993,6 +993,15 @@ class RpcRunner(object):
     return self._MultiNodeCall(node_list, "drbd_wait_sync",
                                [nodes_ip, [cf.ToDict() for cf in disks]])
 
+  @_RpcTimeout(_TMO_URGENT)
+  def call_drbd_helper(self, node_list):
+    """Gets drbd helper.
+
+    This is a multi-node call.
+
+    """
+    return self._MultiNodeCall(node_list, "drbd_helper", [])
+
   @classmethod
   @_RpcTimeout(_TMO_NORMAL)
   def call_upload_file(cls, node_list, file_name, address_list=None):
-- 
GitLab