[blivet][PATCH] Allow specifying thin pool profiles
Vratislav Podzimek
vpodzime at redhat.com
Fri Sep 19 13:47:08 UTC 2014
Related: rhbz#869456
Signed-off-by: Vratislav Podzimek <vpodzime at redhat.com>
---
blivet/devicelibs/lvm.py | 12 ++++++++++--
blivet/devices.py | 10 ++++++++--
2 files changed, 18 insertions(+), 4 deletions(-)
diff --git a/blivet/devicelibs/lvm.py b/blivet/devicelibs/lvm.py
index 426794f..e3b7ca9 100644
--- a/blivet/devicelibs/lvm.py
+++ b/blivet/devicelibs/lvm.py
@@ -22,6 +22,7 @@
import math
from decimal import Decimal
+from collections import namedtuple
import logging
log = logging.getLogger("blivet")
@@ -31,7 +32,7 @@ from ..size import Size
from .. import util
from .. import arch
from ..errors import LVMError
-from ..i18n import _
+from ..i18n import _, N_
MAX_LV_SLOTS = 256
@@ -47,6 +48,10 @@ LVM_THINP_MAX_CHUNK_SIZE = Size("1 GiB")
RAID_levels = raid.RAIDLevels(["raid0", "raid1", "linear"])
+ThPoolProfile = namedtuple("ThPoolProfile", ["name", "desc"])
+KNOWN_THPOOL_PROFILES = (ThPoolProfile("thin-generic", N_("Generic")),
+ ThPoolProfile("thin-performance", N_("Performance")))
+
def has_lvm():
if util.find_program_in_path("lvm"):
for line in open("/proc/devices").readlines():
@@ -559,7 +564,7 @@ def lvsnapshotcreate(vg_name, snap_name, size, origin_name):
except LVMError as msg:
raise LVMError("lvsnapshotcreate failed for %s/%s: %s" % (vg_name, snap_name, msg))
-def thinpoolcreate(vg_name, lv_name, size, metadatasize=None, chunksize=None):
+def thinpoolcreate(vg_name, lv_name, size, metadatasize=None, chunksize=None, profile=None):
args = ["lvcreate", "--thinpool", "%s/%s" % (vg_name, lv_name),
"--size", "%dm" % size.convertTo(spec="mib")]
@@ -571,6 +576,9 @@ def thinpoolcreate(vg_name, lv_name, size, metadatasize=None, chunksize=None):
# default unit is KiB
args += ["--chunksize", "%d" % chunksize.convertTo(spec="kib")]
+ if profile:
+ args += ["--profile=%s" % profile]
+
args += _getConfigArgs()
try:
diff --git a/blivet/devices.py b/blivet/devices.py
index 26dfff8..9cd6eb6 100644
--- a/blivet/devices.py
+++ b/blivet/devices.py
@@ -3441,7 +3441,7 @@ class LVMThinPoolDevice(LVMLogicalVolumeDevice):
def __init__(self, name, parents=None, size=None, uuid=None,
fmt=None, exists=False, sysfsPath='',
grow=None, maxsize=None, percent=None,
- metadatasize=None, chunksize=None, segType=None):
+ metadatasize=None, chunksize=None, segType=None, profile=None):
"""
:param name: the device name (generally a device node's basename)
:type name: str
@@ -3472,6 +3472,9 @@ class LVMThinPoolDevice(LVMLogicalVolumeDevice):
:type metadatasize: :class:`~.size.Size`
:keyword chunksize: chunk size for the pool
:type chunksize: :class:`~.size.Size`
+ :keyword profile: (allocation) profile for the pool or None (unspecified)
+ :type profile: :class:`~.devicelibs.lvm.ThPoolProfile` or NoneType
+
"""
if metadatasize is not None and \
not lvm.is_valid_thin_pool_metadata_size(metadatasize):
@@ -3491,6 +3494,7 @@ class LVMThinPoolDevice(LVMLogicalVolumeDevice):
self.metaDataSize = metadatasize or 0
self.chunkSize = chunksize or 0
+ self.profile = profile
self._lvs = []
def _addLogVol(self, lv):
@@ -3536,7 +3540,8 @@ class LVMThinPoolDevice(LVMLogicalVolumeDevice):
# TODO: chunk size, data/metadata split --> profile
lvm.thinpoolcreate(self.vg.name, self.lvname, self.size,
metadatasize=self.metaDataSize,
- chunksize=self.chunkSize)
+ chunksize=self.chunkSize,
+ profile=self.profile)
def dracutSetupArgs(self):
return set()
@@ -3552,6 +3557,7 @@ class LVMThinPoolDevice(LVMLogicalVolumeDevice):
data.thin_pool = True
data.metadata_size = self.metaDataSize
data.chunk_size = self.chunkSize
+ data.profile = self.profile
class LVMThinLogicalVolumeDevice(LVMLogicalVolumeDevice):
""" An LVM Thin Logical Volume """
--
1.9.3
More information about the anaconda-patches
mailing list