Do not add a new Inotify watchers on timer
authorKlaus Aehlig <aehlig@google.com>
Thu, 28 Jan 2016 18:13:00 +0000 (19:13 +0100)
committerKlaus Aehlig <aehlig@google.com>
Fri, 29 Jan 2016 10:00:38 +0000 (11:00 +0100)
Ganeti updates its in-memory copy of the configuration in several ways.
One of them is by using an inotify, the other is by periodically, in the
order of seconds, polling the file. On the latter, the inotify does not
have to be reinstantiated; in fact, doing so will result in actions taken
several times, once the inotify actually fires. Fix the fact, it was
reinstantiated.

Signed-off-by: Klaus Aehlig <aehlig@google.com>
Reviewed-by: Helga Velroyen <helgav@google.com>

src/Ganeti/ConfigReader.hs

index d5e9b81..4b034ad 100644 (file)
@@ -172,14 +172,13 @@ safeUpdateConfig path oldfstat save_fn =
 -- | Long-interval reload watcher.
 --
 -- This is on top of the inotify-based triggered reload.
 -- | Long-interval reload watcher.
 --
 -- This is on top of the inotify-based triggered reload.
-onWatcherTimer :: IO Bool -> FilePath -> (Result ConfigData -> IO ())
+onWatcherTimer :: FilePath -> (Result ConfigData -> IO ())
                -> MVar ServerState -> IO ()
                -> MVar ServerState -> IO ()
-onWatcherTimer inotiaction path save_fn state = do
+onWatcherTimer path save_fn state = do
   threadDelay watchInterval
   logDebug "Config-reader watcher timer fired"
   modifyMVar_ state (onWatcherInner path save_fn)
   threadDelay watchInterval
   logDebug "Config-reader watcher timer fired"
   modifyMVar_ state (onWatcherInner path save_fn)
-  _ <- inotiaction
-  onWatcherTimer inotiaction path save_fn state
+  onWatcherTimer path save_fn state
 
 -- | Inner onWatcher handler.
 --
 
 -- | Inner onWatcher handler.
 --
@@ -304,7 +303,7 @@ initConfigReader save_fn = do
       modifyMVar_ statemvar
         (\state -> return state { reloadModel = initialPoll })
   -- fork the timeout timer
       modifyMVar_ statemvar
         (\state -> return state { reloadModel = initialPoll })
   -- fork the timeout timer
-  _ <- forkIO $ onWatcherTimer inotiaction conf_file save_fn statemvar
+  _ <- forkIO $ onWatcherTimer conf_file save_fn statemvar
   -- fork the polling timer
   unless has_inotify $ do
     _ <- forkIO $ onPollTimer inotiaction conf_file save_fn statemvar
   -- fork the polling timer
   unless has_inotify $ do
     _ <- forkIO $ onPollTimer inotiaction conf_file save_fn statemvar