On Apr 16 15:19, Ilias Tsitsimpis wrote:
> Provide a mapping of node to LVs a given instance owns.
> 
> Signed-off-by: Ilias Tsitsimpis <[email protected]>
> ---
>  lib/config.py | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 56 insertions(+)
> 
> diff --git a/lib/config.py b/lib/config.py
> index 7147b50..9e01cd5 100644
> --- a/lib/config.py
> +++ b/lib/config.py
> @@ -408,6 +408,62 @@ class ConfigWriter(object):
>      """
>      return self._UnlockedGetInstanceSecondaryNodes(inst_uuid)
>  
> +  def _UnlockedGetInstanceLVsByNode(self, inst_uuid, lvmap=None):
> +    """Provide a mapping of node to LVs a given instance owns.
> +
> +    @type inst_uuid: string
> +    @param inst_uuid: The UUID of the instance we want to
> +        compute the LVsByNode for
> +    @type lvmap: dict
> +    @param lvmap: Optional dictionary to receive the
> +        'node' : ['lv', ...] data.
> +    @return: None if lvmap arg is given, otherwise, a dictionary of
> +        the form { 'node_uuid' : ['volume1', 'volume2', ...], ... };
> +        volumeN is of the form "vg_name/lv_name", compatible with
> +        GetVolumeList()
> +
> +    """
> +    def _MapLVsByNode(lvmap, devices, node_uuid):
> +      """Recursively helper function."""

Maybe you meant this?

  s/Recursively/Recursive/

> +      if not node_uuid in lvmap:
> +        lvmap[node_uuid] = []
> +
> +      for dev in devices:
> +        if dev.dev_type == constants.DT_PLAIN:
> +          lvmap[node_uuid].append(dev.logical_id[0] + "/" + 
> dev.logical_id[1])
> +
> +        elif dev.dev_type in constants.DTS_DRBD:
> +          if dev.children:
> +            _MapLVsByNode(lvmap, dev.children, dev.logical_id[0])
> +            _MapLVsByNode(lvmap, dev.children, dev.logical_id[1])
> +
> +        elif dev.children:
> +          _MapLVsByNode(lvmap, dev.children, node_uuid)
> +
> +    instance = self._UnlockedGetInstanceInfo(inst_uuid)
> +    if instance is None:
> +      raise errors.ConfigurationError("Unknown instance '%s'" % inst_uuid)
> +
> +    if lvmap is None:
> +      lvmap = {}
> +      ret = lvmap
> +    else:
> +      ret = None
> +
> +    node_uuid = instance.primary_node
> +    devices = instance.disks
> +    _MapLVsByNode(lvmap, devices, node_uuid)

We don't really need the local variables:

  _MapLVsByNode(lvmap, instance.disks, instance.primary_node)

Rest LGTM.

Thanks,
Jose

> +    return ret
> +
> +  @_ConfigSync(shared=1)
> +  def GetInstanceLVsByNode(self, inst_uuid, lvmap=None):
> +    """Provide a mapping of node to LVs a given instance owns.
> +
> +    This is a simple wrapper over L{_UnlockedGetInstanceLVsByNode}
> +
> +    """
> +    return self._UnlockedGetInstanceLVsByNode(inst_uuid, lvmap=lvmap)
> +
>    @_ConfigSync(shared=1)
>    def GetGroupDiskParams(self, group):
>      """Get the disk params populated with inherit chain.
> -- 
> 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