HTools/Types.hs: minor adjustments to auto-repair types
authorDato Simó <dato@google.com>
Wed, 16 Jan 2013 20:46:08 +0000 (20:46 +0000)
committerDato Simó <dato@google.com>
Wed, 30 Jan 2013 17:37:20 +0000 (17:37 +0000)
In particular:

  - make ArHealthy take an optional AutoRepairData; this allows to
    represent the situation where a repair completed successfully, and
    hence there's an associated tag we might want to know about.

  - add an 'arTag' member to AutoRepairData to store the exact tag this
    data was derived from; this allows for easier removal of the tag when
    its associated state is superseded. It also stores the tag that will
    be written to the cluster when a new AutoRepairData record is created.

  - change the default sort order of AutoRepairResult to reflect the
    precedence used when reading tags from an object (a failure, if
    present, is always the resulting state; a success overrides an
    ENOPERM).

  - (trivial) make AutoRepairStatus and AutoRepairData derive Eq and Show.

Signed-off-by: Dato Simó <dato@google.com>
Reviewed-by: Iustin Pop <iustin@google.com>

src/Ganeti/HTools/Types.hs

index 735ae5e..c394c6c 100644 (file)
@@ -370,9 +370,11 @@ $(THH.declareSADT "AutoRepairType"
 
 -- | The possible auto-repair results.
 $(THH.declareSADT "AutoRepairResult"
-       [ ("ArSuccess", 'C.autoRepairSuccess)
+       -- Order is important here: higher results take precedence when an object
+       -- has several result annotations attached.
+       [ ("ArEnoperm", 'C.autoRepairEnoperm)
+       , ("ArSuccess", 'C.autoRepairSuccess)
        , ("ArFailure", 'C.autoRepairFailure)
-       , ("ArEnoperm", 'C.autoRepairEnoperm)
        ])
 
 -- | The possible auto-repair policy for a given instance.
@@ -389,10 +391,11 @@ data AutoRepairSuspendTime = Forever         -- ^ Permanently suspended
 
 -- | The possible auto-repair states for any given instance.
 data AutoRepairStatus
-  = ArHealthy                      -- ^ No problems detected with the instance
+  = ArHealthy (Maybe AutoRepairData) -- ^ No problems detected with the instance
   | ArNeedsRepair AutoRepairData   -- ^ Instance has problems, no action taken
   | ArPendingRepair AutoRepairData -- ^ Repair jobs ongoing for the instance
   | ArFailedRepair AutoRepairData  -- ^ Some repair jobs for the instance failed
+  deriving (Eq, Show)
 
 -- | The data accompanying a repair operation (future, pending, or failed).
 data AutoRepairData = AutoRepairData { arType :: AutoRepairType
@@ -400,4 +403,6 @@ data AutoRepairData = AutoRepairData { arType :: AutoRepairType
                                      , arTime :: ClockTime
                                      , arJobs :: [JobId]
                                      , arResult :: Maybe AutoRepairResult
+                                     , arTag :: String
                                      }
+                    deriving (Eq, Show)