One of the tasks the maintenance daemon does is keeping
the cluster balanced, taking load into account. As this
is not wanted for all use cases of Ganeti, there is a
flag to control it. Also, to avoid flapping behavior,
a threshold for balancing operations can be specified;
a balancing move will only be carried out if the gain
in the cluster metrics is bigger than the given threshold.
We also provide safe default values: balancing is
disabled by default, and the threshold is 10 times higher
than the one for manual balancing.

Signed-off-by: Klaus Aehlig <[email protected]>
---
 lib/objects.py                    | 3 ++-
 src/Ganeti/Objects/Maintenance.hs | 3 +++
 test/hs/Test/Ganeti/Objects.hs    | 2 ++
 3 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/lib/objects.py b/lib/objects.py
index 806fe75..2bea940 100644
--- a/lib/objects.py
+++ b/lib/objects.py
@@ -557,7 +557,8 @@ class Filter(ConfigObject):
 
 class Maintenance(ConfigObject):
   """Config object representing the state of the maintenance daemon"""
-  __slots__ = ["roundDelay", "jobs", "serial_no"] + _TIMESTAMPS
+  __slots__ = ["roundDelay", "jobs", "balance", "balanceThreshold",
+               "serial_no"] + _TIMESTAMPS
 
   def UpgradeConfig(self):
     if self.serial_no is None:
diff --git a/src/Ganeti/Objects/Maintenance.hs 
b/src/Ganeti/Objects/Maintenance.hs
index 8587f81..fa05a01 100644
--- a/src/Ganeti/Objects/Maintenance.hs
+++ b/src/Ganeti/Objects/Maintenance.hs
@@ -47,6 +47,9 @@ $(buildObject "MaintenanceData" "maint" $
   [ defaultField [| C.maintdDefaultRoundDelay |]
     $ simpleField "roundDelay" [t| Int |]
   , defaultField [| [] |] $ simpleField "jobs" [t| [ JobId ] |]
+  , defaultField [| False |] $ simpleField "balance" [t| Bool |]
+  , defaultField [| 0.1 :: Double |]
+    $ simpleField "balanceThreshold" [t| Double |]
   ]
   ++ timeStampFields
   ++ serialFields)
diff --git a/test/hs/Test/Ganeti/Objects.hs b/test/hs/Test/Ganeti/Objects.hs
index 4b116e1..b97944d 100644
--- a/test/hs/Test/Ganeti/Objects.hs
+++ b/test/hs/Test/Ganeti/Objects.hs
@@ -381,6 +381,8 @@ instance Arbitrary MaintenanceData where
                               <*> arbitrary
                               <*> arbitrary
                               <*> arbitrary
+                              <*> arbitrary
+                              <*> arbitrary
 
 -- | Generates a network instance with minimum netmasks of /24. Generating
 -- bigger networks slows down the tests, because long bit strings are generated
-- 
2.4.3.573.g4eafbef

Reply via email to