During cluster destruction, WConfD will need to take the
BGL. Therefore, it has to have a livelock file as well.

Signed-off-by: Klaus Aehlig <[email protected]>
---
 src/Ganeti/WConfd/Monad.hs  | 8 +++++++-
 src/Ganeti/WConfd/Server.hs | 5 ++++-
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/src/Ganeti/WConfd/Monad.hs b/src/Ganeti/WConfd/Monad.hs
index 444cf18..b7b7ec5 100644
--- a/src/Ganeti/WConfd/Monad.hs
+++ b/src/Ganeti/WConfd/Monad.hs
@@ -46,6 +46,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 module Ganeti.WConfd.Monad
   ( DaemonHandle
   , dhConfigPath
+  , dhLivelock
   , mkDaemonHandle
   , WConfdMonadInt
   , runWConfdMonadInt
@@ -92,6 +93,7 @@ import Ganeti.Logging.WriterLog
 import Ganeti.Objects (ConfigData)
 import Ganeti.Utils.AsyncWorker
 import Ganeti.Utils.IORef
+import Ganeti.Utils.Livelock (Livelock)
 import Ganeti.WConfd.ConfigState
 import Ganeti.WConfd.TempRes
 
@@ -116,6 +118,7 @@ data DaemonHandle = DaemonHandle
   , dhSaveConfigWorker :: AsyncWorker Any ()
   , dhSaveLocksWorker :: AsyncWorker () ()
   , dhSaveTempResWorker :: AsyncWorker () ()
+  , dhLivelock :: Livelock
   }
 
 mkDaemonHandle :: FilePath
@@ -138,10 +141,12 @@ mkDaemonHandle :: FilePath
                -> (IO TempResState -> ResultG (AsyncWorker () ()))
                   -- ^ A function that creates a worker that asynchronously
                   -- saves the temporary reservations state.
+               -> Livelock
                -> ResultG DaemonHandle
 mkDaemonHandle cpath cstat lstat trstat
                saveWorkerFn distMCsWorkerFn distSSConfWorkerFn
-               saveLockWorkerFn saveTempResWorkerFn = do
+               saveLockWorkerFn saveTempResWorkerFn
+               livelock = do
   ds <- newIORef $ DaemonState cstat lstat trstat
   let readConfigIO = dsConfigState `liftM` readIORef ds :: IO ConfigState
 
@@ -155,6 +160,7 @@ mkDaemonHandle cpath cstat lstat trstat
   saveTempResWorker <- saveTempResWorkerFn $ dsTempRes `liftM` readIORef ds
 
   return $ DaemonHandle ds cpath saveWorker saveLockWorker saveTempResWorker
+                        livelock
 
 -- * The monad and its instances
 
diff --git a/src/Ganeti/WConfd/Server.hs b/src/Ganeti/WConfd/Server.hs
index 6379f60..17a658b 100644
--- a/src/Ganeti/WConfd/Server.hs
+++ b/src/Ganeti/WConfd/Server.hs
@@ -46,15 +46,16 @@ import Control.Monad
 import Control.Monad.Error
 
 import Ganeti.BasicTypes
+import qualified Ganeti.Constants as C
 import Ganeti.Daemon
 import Ganeti.Daemon.Utils (handleMasterVerificationOptions)
 import Ganeti.Logging (logDebug)
 import qualified Ganeti.Path as Path
 import Ganeti.THH.RPC
 import Ganeti.UDSServer
-
 import Ganeti.Errors (formatError)
 import Ganeti.Runtime
+import Ganeti.Utils.Livelock (mkLivelockFile)
 import Ganeti.WConfd.ConfigState
 import Ganeti.WConfd.ConfigVerify
 import Ganeti.WConfd.ConfigWriter
@@ -93,6 +94,7 @@ prepMain _ _ = do
     verifyConfigErr cdata
     lock <- readPersistent persistentLocks
     tempres <- readPersistent persistentTempRes
+    (_, livelock) <- mkLivelockFile C.wconfdLivelockPrefix
     mkDaemonHandle conf_file
                    (mkConfigState cdata)
                    lock
@@ -102,6 +104,7 @@ prepMain _ _ = do
                    distSSConfAsyncTask
                    (writePersistentAsyncTask persistentLocks)
                    (writePersistentAsyncTask persistentTempRes)
+                   livelock
 
   return (s, dh)
 
-- 
2.2.0.rc0.207.ga3a616c

Reply via email to