Commit cd46491f authored by René Nussbaumer's avatar René Nussbaumer
Browse files

rpc: Adding helper to annotate disk params


Signed-off-by: default avatarRené Nussbaumer <rn@google.com>
Reviewed-by: default avatarIustin Pop <iustin@google.com>
parent 8a147bba
......@@ -8639,91 +8639,6 @@ def _GenerateUniqueNames(lu, exts):
return results
 
 
def _ComputeLDParams(disk_template, disk_params):
"""Computes Logical Disk parameters from Disk Template parameters.
@type disk_template: string
@param disk_template: disk template, one of L{constants.DISK_TEMPLATES}
@type disk_params: dict
@param disk_params: disk template parameters; dict(template_name -> parameters
@rtype: list(dict)
@return: a list of dicts, one for each node of the disk hierarchy. Each dict
contains the LD parameters of the node. The tree is flattened in-order.
"""
if disk_template not in constants.DISK_TEMPLATES:
raise errors.ProgrammerError("Unknown disk template %s" % disk_template)
result = list()
dt_params = disk_params[disk_template]
if disk_template == constants.DT_DRBD8:
drbd_params = {
constants.LDP_RESYNC_RATE: dt_params[constants.DRBD_RESYNC_RATE],
constants.LDP_BARRIERS: dt_params[constants.DRBD_DISK_BARRIERS],
constants.LDP_NO_META_FLUSH: dt_params[constants.DRBD_META_BARRIERS],
constants.LDP_DEFAULT_METAVG: dt_params[constants.DRBD_DEFAULT_METAVG],
constants.LDP_DISK_CUSTOM: dt_params[constants.DRBD_DISK_CUSTOM],
constants.LDP_NET_CUSTOM: dt_params[constants.DRBD_NET_CUSTOM],
constants.LDP_DYNAMIC_RESYNC: dt_params[constants.DRBD_DYNAMIC_RESYNC],
constants.LDP_PLAN_AHEAD: dt_params[constants.DRBD_PLAN_AHEAD],
constants.LDP_FILL_TARGET: dt_params[constants.DRBD_FILL_TARGET],
constants.LDP_DELAY_TARGET: dt_params[constants.DRBD_DELAY_TARGET],
constants.LDP_MAX_RATE: dt_params[constants.DRBD_MAX_RATE],
constants.LDP_MIN_RATE: dt_params[constants.DRBD_MIN_RATE],
}
drbd_params = \
objects.FillDict(constants.DISK_LD_DEFAULTS[constants.LD_DRBD8],
drbd_params)
result.append(drbd_params)
# data LV
data_params = {
constants.LDP_STRIPES: dt_params[constants.DRBD_DATA_STRIPES],
}
data_params = \
objects.FillDict(constants.DISK_LD_DEFAULTS[constants.LD_LV],
data_params)
result.append(data_params)
# metadata LV
meta_params = {
constants.LDP_STRIPES: dt_params[constants.DRBD_META_STRIPES],
}
meta_params = \
objects.FillDict(constants.DISK_LD_DEFAULTS[constants.LD_LV],
meta_params)
result.append(meta_params)
elif (disk_template == constants.DT_FILE or
disk_template == constants.DT_SHARED_FILE):
result.append(constants.DISK_LD_DEFAULTS[constants.LD_FILE])
elif disk_template == constants.DT_PLAIN:
params = {
constants.LDP_STRIPES: dt_params[constants.LV_STRIPES],
}
params = \
objects.FillDict(constants.DISK_LD_DEFAULTS[constants.LD_LV],
params)
result.append(params)
elif disk_template == constants.DT_BLOCK:
result.append(constants.DISK_LD_DEFAULTS[constants.LD_BLOCKDEV])
elif disk_template == constants.DT_RBD:
params = {
constants.LDP_POOL: dt_params[constants.RBD_POOL]
}
params = \
objects.FillDict(constants.DISK_LD_DEFAULTS[constants.LD_RBD],
params)
result.append(params)
return result
def _GenerateDRBD8Branch(lu, primary, secondary, size, vgnames, names,
iv_name, p_minor, s_minor, drbd_params, data_params,
meta_params):
......
......@@ -922,6 +922,94 @@ class Disk(ConfigObject):
self.params)
# add here config upgrade for this disk
@staticmethod
def ComputeLDParams(disk_template, disk_params):
"""Computes Logical Disk parameters from Disk Template parameters.
@type disk_template: string
@param disk_template: disk template, one of L{constants.DISK_TEMPLATES}
@type disk_params: dict
@param disk_params: disk template parameters;
dict(template_name -> parameters
@rtype: list(dict)
@return: a list of dicts, one for each node of the disk hierarchy. Each dict
contains the LD parameters of the node. The tree is flattened in-order.
"""
if disk_template not in constants.DISK_TEMPLATES:
raise errors.ProgrammerError("Unknown disk template %s" % disk_template)
assert disk_template in disk_params
result = list()
dt_params = disk_params[disk_template]
if disk_template == constants.DT_DRBD8:
drbd_params = {
constants.LDP_RESYNC_RATE: dt_params[constants.DRBD_RESYNC_RATE],
constants.LDP_BARRIERS: dt_params[constants.DRBD_DISK_BARRIERS],
constants.LDP_NO_META_FLUSH: dt_params[constants.DRBD_META_BARRIERS],
constants.LDP_DEFAULT_METAVG: dt_params[constants.DRBD_DEFAULT_METAVG],
constants.LDP_DISK_CUSTOM: dt_params[constants.DRBD_DISK_CUSTOM],
constants.LDP_NET_CUSTOM: dt_params[constants.DRBD_NET_CUSTOM],
constants.LDP_DYNAMIC_RESYNC: dt_params[constants.DRBD_DYNAMIC_RESYNC],
constants.LDP_PLAN_AHEAD: dt_params[constants.DRBD_PLAN_AHEAD],
constants.LDP_FILL_TARGET: dt_params[constants.DRBD_FILL_TARGET],
constants.LDP_DELAY_TARGET: dt_params[constants.DRBD_DELAY_TARGET],
constants.LDP_MAX_RATE: dt_params[constants.DRBD_MAX_RATE],
constants.LDP_MIN_RATE: dt_params[constants.DRBD_MIN_RATE],
}
drbd_params = \
FillDict(constants.DISK_LD_DEFAULTS[constants.LD_DRBD8],
drbd_params)
result.append(drbd_params)
# data LV
data_params = {
constants.LDP_STRIPES: dt_params[constants.DRBD_DATA_STRIPES],
}
data_params = \
FillDict(constants.DISK_LD_DEFAULTS[constants.LD_LV],
data_params)
result.append(data_params)
# metadata LV
meta_params = {
constants.LDP_STRIPES: dt_params[constants.DRBD_META_STRIPES],
}
meta_params = \
FillDict(constants.DISK_LD_DEFAULTS[constants.LD_LV],
meta_params)
result.append(meta_params)
elif (disk_template == constants.DT_FILE or
disk_template == constants.DT_SHARED_FILE):
result.append(constants.DISK_LD_DEFAULTS[constants.LD_FILE])
elif disk_template == constants.DT_PLAIN:
params = {
constants.LDP_STRIPES: dt_params[constants.LV_STRIPES],
}
params = \
FillDict(constants.DISK_LD_DEFAULTS[constants.LD_LV],
params)
result.append(params)
elif disk_template == constants.DT_BLOCK:
result.append(constants.DISK_LD_DEFAULTS[constants.LD_BLOCKDEV])
elif disk_template == constants.DT_RBD:
params = {
constants.LDP_POOL: dt_params[constants.RBD_POOL]
}
params = \
FillDict(constants.DISK_LD_DEFAULTS[constants.LD_RBD],
params)
result.append(params)
return result
class InstancePolicy(ConfigObject):
"""Config object representing instance policy limits dictionary.
......
......@@ -575,6 +575,56 @@ def _EncodeBlockdevRename(value):
return [(d.ToDict(), uid) for d, uid in value]
def _AnnotateDParamsDRBD(disk, (drbd_params, data_params, meta_params)):
"""Annotates just DRBD disks layouts.
"""
assert disk.dev_type == constants.LD_DRBD8
disk.params = objects.FillDict(drbd_params, disk.params)
(dev_data, dev_meta) = disk.children
dev_data.params = objects.FillDict(data_params, dev_data.params)
dev_meta.params = objects.FillDict(meta_params, dev_meta.params)
return disk
def _AnnotateDParamsGeneric(disk, (params, )):
"""Generic disk parameter annotation routine.
"""
assert disk.dev_type != constants.LD_DRBD8
disk.params = objects.FillDict(params, disk.params)
return disk
def AnnotateDiskParams(template, disks, disk_params):
"""Annotates the disk objects with the disk parameters.
@param template: The disk template used
@param disks: The list of disks objects to annotate
@param disk_params: The disk paramaters for annotation
@returns: A list of disk objects annotated
"""
ld_params = objects.Disk.ComputeLDParams(template, disk_params)
if template == constants.DT_DRBD8:
annotation_fn = _AnnotateDParamsDRBD
elif template == constants.DT_DISKLESS:
annotation_fn = lambda disk, _: disk
else:
annotation_fn = _AnnotateDParamsGeneric
new_disks = []
for disk in disks:
new_disks.append(annotation_fn(disk.Copy(), ld_params))
return new_disks
#: Generic encoders
_ENCODERS = {
rpc_defs.ED_OBJECT_DICT: _ObjectToDict,
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment