On Apr 16 15:19, Ilias Tsitsimpis wrote:
> Now that disks are top level citizens in config,
> they need a timestamp and a serial_no slot.
> 
> Signed-off-by: Ilias Tsitsimpis <[email protected]>
> ---
>  lib/objects.py                  |  9 ++++++++-
>  src/Ganeti/Objects.hs           |  7 ++++++-
>  test/data/instance-prim-sec.txt | 15 ++++++++++++---
>  test/hs/Test/Ganeti/Objects.hs  | 21 ++++++++++++++-------
>  test/py/ganeti.rpc_unittest.py  |  6 ++++++
>  5 files changed, 46 insertions(+), 12 deletions(-)
> 
> diff --git a/lib/objects.py b/lib/objects.py
> index bd72e07..1b3c7d2 100644
> --- a/lib/objects.py
> +++ b/lib/objects.py
> @@ -532,7 +532,8 @@ class NIC(ConfigObject):
>  class Disk(ConfigObject):
>    """Config object representing a block device."""
>    __slots__ = (["name", "dev_type", "logical_id", "children", "iv_name",
> -                "size", "mode", "params", "spindles", "pci"] + _UUID +
> +                "size", "mode", "params", "spindles", "pci", "serial_no"] +
> +               _UUID + _TIMESTAMPS +

Format this vertically so it is consistent with the other classes.

Rest LGTM.

Thanks,
Jose

>                 # dynamic_params is special. It depends on the node this 
> instance
>                 # is sent to, and should not be persisted.
>                 ["dynamic_params"])
> @@ -877,6 +878,12 @@ class Disk(ConfigObject):
>        self.params = {}
>  
>      # add here config upgrade for this disk
> +    if self.serial_no is None:
> +      self.serial_no = 1
> +    if self.mtime is None:
> +      self.mtime = time.time()
> +    if self.ctime is None:
> +      self.ctime = time.time()
>  
>      # map of legacy device types (mapping differing LD constants to new
>      # DT constants)
> diff --git a/src/Ganeti/Objects.hs b/src/Ganeti/Objects.hs
> index 3cf1ce8..8a0c5ac 100644
> --- a/src/Ganeti/Objects.hs
> +++ b/src/Ganeti/Objects.hs
> @@ -405,6 +405,9 @@ data Disk = Disk
>    , diskName       :: Maybe String
>    , diskSpindles   :: Maybe Int
>    , diskUuid       :: String
> +  , diskSerial     :: Int
> +  , diskCtime      :: ClockTime
> +  , diskMtime      :: ClockTime
>    } deriving (Show, Eq)
>  
>  $(buildObjectSerialisation "Disk" $
> @@ -417,7 +420,9 @@ $(buildObjectSerialisation "Disk" $
>    , optionalField $ simpleField "name" [t| String |]
>    , optionalField $ simpleField "spindles" [t| Int |]
>    ]
> -  ++ uuidFields)
> +  ++ uuidFields
> +  ++ serialFields
> +  ++ timeStampFields)
>  
>  instance UuidObject Disk where
>    uuidOf = diskUuid
> diff --git a/test/data/instance-prim-sec.txt b/test/data/instance-prim-sec.txt
> index b159439..b27fd5c 100644
> --- a/test/data/instance-prim-sec.txt
> +++ b/test/data/instance-prim-sec.txt
> @@ -17,7 +17,10 @@
>               "df9ff3f6-a833-48ff-8bd5-bff2eaeab759.disk0_data"
>             ],
>             "size": 1024,
> -           "uuid": "eaff6322-1bfb-4d59-b306-4535730917cc"
> +           "uuid": "eaff6322-1bfb-4d59-b306-4535730917cc",
> +           "serial_no": 1,
> +           "ctime": 1372838946.2599809,
> +           "mtime": 1372838946.2599809
>           },
>           {
>             "dev_type": "plain",
> @@ -31,7 +34,10 @@
>               "df9ff3f6-a833-48ff-8bd5-bff2eaeab759.disk0_meta"
>             ],
>             "size": 128,
> -           "uuid": "bf512e95-2a49-4cb3-8d1f-30a503f6bf1b"
> +           "uuid": "bf512e95-2a49-4cb3-8d1f-30a503f6bf1b",
> +           "serial_no": 1,
> +           "ctime": 1372838946.2599809,
> +           "mtime": 1372838946.2599809
>           }
>         ],
>         "dev_type": "drbd",
> @@ -55,7 +61,10 @@
>           "9bdb15fb7ab6bb4610a313d654ed4d0d2433713e"
>         ],
>         "size": 1024,
> -       "uuid": "5d61e205-bf89-4ba8-a319-589b7bb7419e"
> +       "uuid": "5d61e205-bf89-4ba8-a319-589b7bb7419e",
> +       "serial_no": 1,
> +       "ctime": 1372838946.2599809,
> +       "mtime": 1372838946.2599809
>       }
>     ],
>     "disks_active": true,
> diff --git a/test/hs/Test/Ganeti/Objects.hs b/test/hs/Test/Ganeti/Objects.hs
> index 1a31b55..8653fc5 100644
> --- a/test/hs/Test/Ganeti/Objects.hs
> +++ b/test/hs/Test/Ganeti/Objects.hs
> @@ -51,6 +51,7 @@ import qualified Data.Map as Map
>  import Data.Maybe (fromMaybe)
>  import qualified Data.Set as Set
>  import GHC.Exts (IsString(..))
> +import System.Time (ClockTime(..))
>  import qualified Text.JSON as J
>  
>  import Test.Ganeti.TestHelper
> @@ -93,6 +94,7 @@ instance Arbitrary DiskLogicalId where
>  instance Arbitrary Disk where
>    arbitrary = Disk <$> arbitrary <*> pure [] <*> arbitrary
>                     <*> arbitrary <*> arbitrary <*> arbitrary
> +                   <*> arbitrary <*> arbitrary <*> arbitrary
>                     <*> arbitrary <*> arbitrary
>  
>  -- FIXME: we should generate proper values, >=0, etc., but this is
> @@ -185,8 +187,10 @@ genDiskWithChildren num_children = do
>    name <- genMaybe genName
>    spindles <- arbitrary
>    uuid <- genName
> -  let disk = Disk logicalid children ivname size mode name spindles uuid
> -  return disk
> +  serial <- arbitrary
> +  time <- arbitrary
> +  return $
> +    Disk logicalid children ivname size mode name spindles uuid serial time 
> time
>  
>  genDisk :: Gen Disk
>  genDisk = genDiskWithChildren 3
> @@ -555,9 +559,10 @@ caseIncludeLogicalIdPlain :: HUnit.Assertion
>  caseIncludeLogicalIdPlain =
>    let vg_name = "xenvg" :: String
>        lv_name = "1234sdf-qwef-2134-asff-asd2-23145d.data" :: String
> +      time = TOD 0 0
>        d =
>          Disk (LIDPlain vg_name lv_name) [] "diskname" 1000 DiskRdWr
> -          Nothing Nothing "asdfgr-1234-5123-daf3-sdfw-134f43"
> +          Nothing Nothing "asdfgr-1234-5123-daf3-sdfw-134f43" 0 time time
>    in
>      HUnit.assertBool "Unable to detect that plain Disk includes logical ID" $
>        includesLogicalId vg_name lv_name d
> @@ -567,15 +572,16 @@ caseIncludeLogicalIdDrbd :: HUnit.Assertion
>  caseIncludeLogicalIdDrbd =
>    let vg_name = "xenvg" :: String
>        lv_name = "1234sdf-qwef-2134-asff-asd2-23145d.data" :: String
> +      time = TOD 0 0
>        d =
>          Disk
>            (LIDDrbd8 "node1.example.com" "node2.example.com" 2000 1 5 
> "secret")
>            [ Disk (LIDPlain "onevg" "onelv") [] "disk1" 1000 DiskRdWr Nothing
> -              Nothing "145145-asdf-sdf2-2134-asfd-534g2x"
> +              Nothing "145145-asdf-sdf2-2134-asfd-534g2x" 0 time time
>            , Disk (LIDPlain vg_name lv_name) [] "disk2" 1000 DiskRdWr Nothing
> -              Nothing "6gd3sd-423f-ag2j-563b-dg34-gj3fse"
> +              Nothing "6gd3sd-423f-ag2j-563b-dg34-gj3fse" 0 time time
>            ] "diskname" 1000 DiskRdWr Nothing Nothing
> -          "asdfgr-1234-5123-daf3-sdfw-134f43"
> +          "asdfgr-1234-5123-daf3-sdfw-134f43" 0 time time
>    in
>      HUnit.assertBool "Unable to detect that plain Disk includes logical ID" $
>        includesLogicalId vg_name lv_name d
> @@ -585,9 +591,10 @@ caseNotIncludeLogicalIdPlain :: HUnit.Assertion
>  caseNotIncludeLogicalIdPlain =
>    let vg_name = "xenvg" :: String
>        lv_name = "1234sdf-qwef-2134-asff-asd2-23145d.data" :: String
> +      time = TOD 0 0
>        d =
>          Disk (LIDPlain "othervg" "otherlv") [] "diskname" 1000 DiskRdWr
> -          Nothing Nothing "asdfgr-1234-5123-daf3-sdfw-134f43"
> +          Nothing Nothing "asdfgr-1234-5123-daf3-sdfw-134f43" 0 time time
>    in
>      HUnit.assertBool "Unable to detect that plain Disk includes logical ID" $
>        not (includesLogicalId vg_name lv_name d)
> diff --git a/test/py/ganeti.rpc_unittest.py b/test/py/ganeti.rpc_unittest.py
> index 89b00a1..26f1069 100755
> --- a/test/py/ganeti.rpc_unittest.py
> +++ b/test/py/ganeti.rpc_unittest.py
> @@ -884,18 +884,24 @@ class TestRpcRunner(unittest.TestCase):
>      self.assertEqual(result["hvparams"][constants.HT_KVM], {
>        constants.HV_BOOT_ORDER: "xyz",
>        })
> +    del result["disks"][0]["ctime"]
> +    del result["disks"][0]["mtime"]
> +    del result["disks"][1]["ctime"]
> +    del result["disks"][1]["mtime"]
>      self.assertEqual(result["disks"], [{
>        "dev_type": constants.DT_PLAIN,
>        "dynamic_params": {},
>        "size": 4096,
>        "logical_id": ("vg", "disk6120"),
>        "params": constants.DISK_DT_DEFAULTS[inst.disk_template],
> +      "serial_no": 1,
>        }, {
>        "dev_type": constants.DT_PLAIN,
>        "dynamic_params": {},
>        "size": 1024,
>        "logical_id": ("vg", "disk8508"),
>        "params": constants.DISK_DT_DEFAULTS[inst.disk_template],
> +      "serial_no": 1,
>        }])
>  
>      self.assertTrue(compat.all(disk.params == {} for disk in inst.disks),
> -- 
> 1.9.1
> 

-- 
Jose Antonio Lopes
Ganeti Engineering
Google Germany GmbH
Dienerstr. 12, 80331, München

Registergericht und -nummer: Hamburg, HRB 86891
Sitz der Gesellschaft: Hamburg
Geschäftsführer: Graham Law, Christine Elizabeth Flores
Steuernummer: 48/725/00206
Umsatzsteueridentifikationsnummer: DE813741370

Reply via email to