Merge branch 'stable-2.15' into stable-2.16
authorKlaus Aehlig <aehlig@google.com>
Mon, 1 Feb 2016 11:59:37 +0000 (12:59 +0100)
committerKlaus Aehlig <aehlig@google.com>
Mon, 1 Feb 2016 12:28:13 +0000 (13:28 +0100)
* stable-2.15
  Do not add a new Inotify watchers on timer
  Mock InitDrbdHelper's output in unittests
  Optimise codegen for Python OpCode classes

Signed-off-by: Klaus Aehlig <aehlig@google.com>
Reviewed-by: Hrvoje Ribicic <riba@google.com>

lib/client/gnt_cluster.py
src/Ganeti/ConfigReader.hs
src/Ganeti/THH/PyType.hs
test/py/ganeti.client.gnt_cluster_unittest.py

index 5af1c1a..4acb02e 100644 (file)
@@ -126,15 +126,15 @@ def _InitVgName(opts, enabled_disk_templates):
   return vg_name
 
 
-def _InitDrbdHelper(opts, enabled_disk_templates):
+def _InitDrbdHelper(opts, enabled_disk_templates, feedback_fn=ToStdout):
   """Initialize the DRBD usermode helper.
 
   """
   drbd_enabled = constants.DT_DRBD8 in enabled_disk_templates
 
   if not drbd_enabled and opts.drbd_helper is not None:
-    ToStdout("Note: You specified a DRBD usermode helper, while DRBD storage"
-             " is not enabled.")
+    feedback_fn("Note: You specified a DRBD usermode helper, while DRBD storage"
+                " is not enabled.")
 
   if drbd_enabled:
     if opts.drbd_helper is None:
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.
-onWatcherTimer :: IO Bool -> FilePath -> (Result ConfigData -> IO ())
+onWatcherTimer :: FilePath -> (Result ConfigData -> 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)
-  _ <- inotiaction
-  onWatcherTimer inotiaction path save_fn state
+  onWatcherTimer path save_fn state
 
 -- | Inner onWatcher handler.
 --
@@ -304,7 +303,7 @@ initConfigReader save_fn = do
       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
index a3dbe44..5a3941c 100644 (file)
@@ -78,6 +78,13 @@ instance Lift PyType where
   lift PTTupleOf     = [| PTTupleOf |]
 
 instance PyValue PyType where
+  -- Use lib/ht.py type aliases to avoid Python creating redundant
+  -- new match functions for commonly used OpCode param types.
+  showValue (PTMaybe (PTOther "NonEmptyString")) = ht "MaybeString"
+  showValue (PTMaybe (PTOther "Bool")) = ht "MaybeBool"
+  showValue (PTMaybe PTDictOf) = ht "MaybeDict"
+  showValue (PTMaybe PTListOf) = ht "MaybeList"
+
   showValue (PTMaybe x)   = ptApp (ht "Maybe") [x]
   showValue (PTApp tf as) = ptApp (showValue tf) as
   showValue (PTOther i)   = ht i
index c2cb9f5..38bda23 100755 (executable)
@@ -293,21 +293,24 @@ class InitDrbdHelper(DrbdHelperTestCase):
     opts = mock.Mock()
     opts.drbd_helper = None
     self.disableDrbd()
-    helper = gnt_cluster._InitDrbdHelper(opts, self.enabled_disk_templates)
+    helper = gnt_cluster._InitDrbdHelper(opts, self.enabled_disk_templates,
+                                         feedback_fn=mock.Mock())
     self.assertEquals(None, helper)
 
   def testNoDrbdHelper(self):
     opts = mock.Mock()
     self.disableDrbd()
     opts.drbd_helper = "/bin/true"
-    helper = gnt_cluster._InitDrbdHelper(opts, self.enabled_disk_templates)
+    helper = gnt_cluster._InitDrbdHelper(opts, self.enabled_disk_templates,
+                                         feedback_fn=mock.Mock())
     self.assertEquals(opts.drbd_helper, helper)
 
   def testDrbdHelperNone(self):
     opts = mock.Mock()
     self.enableDrbd()
     opts.drbd_helper = None
-    helper = gnt_cluster._InitDrbdHelper(opts, self.enabled_disk_templates)
+    helper = gnt_cluster._InitDrbdHelper(opts, self.enabled_disk_templates,
+                                         feedback_fn=mock.Mock())
     self.assertEquals(constants.DEFAULT_DRBD_HELPER, helper)
 
   def testDrbdHelperEmpty(self):
@@ -315,13 +318,14 @@ class InitDrbdHelper(DrbdHelperTestCase):
     self.enableDrbd()
     opts.drbd_helper = ''
     self.assertRaises(errors.OpPrereqError, gnt_cluster._InitDrbdHelper, opts,
-        self.enabled_disk_templates)
+        self.enabled_disk_templates, feedback_fn=mock.Mock())
 
   def testDrbdHelper(self):
     opts = mock.Mock()
     self.enableDrbd()
     opts.drbd_helper = "/bin/true"
-    helper = gnt_cluster._InitDrbdHelper(opts, self.enabled_disk_templates)
+    helper = gnt_cluster._InitDrbdHelper(opts, self.enabled_disk_templates,
+                                         feedback_fn=mock.Mock())
     self.assertEquals(opts.drbd_helper, helper)