...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
