...so that the user can modify it. As usual, we do so with
only a temporary lock acquired by WConfD.

Signed-off-by: Klaus Aehlig <[email protected]>
---
 lib/config/__init__.py                   |  5 +++++
 src/Ganeti/WConfd/ConfigModifications.hs | 16 ++++++++++++++--
 2 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/lib/config/__init__.py b/lib/config/__init__.py
index 7b6187f..618a8f6 100644
--- a/lib/config/__init__.py
+++ b/lib/config/__init__.py
@@ -3383,6 +3383,11 @@ class ConfigWriter(object):
       if disk_uuid in inst_info.disks:
         return inst_uuid
 
+  def SetMaintdRoundDelay(self, delay):
+    """Set the minimal time the maintenance daemon should wait between 
rounds"""
+    utils.SimpleRetry(True, self._wconfd.SetMaintdRoundDelay, 0.1, 30,
+                      args=[delay])
+
 
 class DetachedConfig(ConfigWriter):
   """Read-only snapshot of the config."""
diff --git a/src/Ganeti/WConfd/ConfigModifications.hs 
b/src/Ganeti/WConfd/ConfigModifications.hs
index f724c2e..f643fc3 100644
--- a/src/Ganeti/WConfd/ConfigModifications.hs
+++ b/src/Ganeti/WConfd/ConfigModifications.hs
@@ -42,9 +42,9 @@ module Ganeti.WConfd.ConfigModifications where
 import Control.Applicative ((<$>))
 import Control.Lens (_2)
 import Control.Lens.Getter ((^.))
-import Control.Lens.Setter ((.~), (%~))
+import Control.Lens.Setter ((.~), (%~), (+~), over)
 import Control.Lens.Traversal (mapMOf)
-import Control.Monad (unless, when, forM_, foldM, liftM2)
+import Control.Monad (unless, when, forM_, foldM, liftM, liftM2)
 import Control.Monad.Error (throwError, MonadError)
 import Control.Monad.IO.Class (liftIO)
 import Control.Monad.Trans.State (StateT, get, put, modify,
@@ -653,6 +653,17 @@ updateDisk disk = do
     . T.releaseDRBDMinors $ uuidOf disk
   return . MaybeForJSON $ fmap (_2 %~ TimeAsDoubleJSON) r
 
+-- | Set the maintenance intervall.
+setMaintdRoundDelay :: Int -> WConfdMonad Bool
+setMaintdRoundDelay delay = do
+  now <- liftIO getClockTime
+  let setDelay = over (csConfigDataL . configMaintenanceL)
+                   $ (serialL +~ 1) . (mTimeL .~ now)
+                     . (maintRoundDelayL .~ delay)
+  liftM isJust $ modifyConfigWithLock
+    (\_ cs -> return . setDelay $ cs)
+    (return ())
+
 -- * The list of functions exported to RPC.
 
 exportedFunctions :: [Name]
@@ -672,4 +683,5 @@ exportedFunctions = [ 'addInstance
                     , 'updateNetwork
                     , 'updateNode
                     , 'updateNodeGroup
+                    , 'setMaintdRoundDelay
                     ]
-- 
2.4.3.573.g4eafbef

Reply via email to