blobstore: add RPC for growing blobstore
Add num_md_pages_per_cluster_ratio parameter to bdev_lvol_create_lvstore. Add bdev_lvol_grow_lvstore rpc. Signed-off-by: Peng Yu <yupeng0921@gmail.com> Change-Id: I43a129efbc1a08f9d0df027e80f63ab1393163a2 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/9734 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com> Community-CI: Mellanox Build Bot Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
parent
1f0b8df7b0
commit
4c59c6ac53
@ -7862,12 +7862,27 @@ Construct a logical volume store.
|
|||||||
|
|
||||||
#### Parameters
|
#### Parameters
|
||||||
|
|
||||||
Name | Optional | Type | Description
|
Name | Optional | Type | Description
|
||||||
----------------------- | -------- | ----------- | -----------
|
----------------------------- | -------- | ----------- | -----------
|
||||||
bdev_name | Required | string | Bdev on which to construct logical volume store
|
bdev_name | Required | string | Bdev on which to construct logical volume store
|
||||||
lvs_name | Required | string | Name of the logical volume store to create
|
lvs_name | Required | string | Name of the logical volume store to create
|
||||||
cluster_sz | Optional | number | Cluster size of the logical volume store in bytes
|
cluster_sz | Optional | number | Cluster size of the logical volume store in bytes (Default: 4MiB)
|
||||||
clear_method | Optional | string | Change clear method for data region. Available: none, unmap (default), write_zeroes
|
clear_method | Optional | string | Change clear method for data region. Available: none, unmap (default), write_zeroes
|
||||||
|
num_md_pages_per_cluster_ratio| Optional | number | Reserved metadata pages per cluster (Default: 100)
|
||||||
|
|
||||||
|
The num_md_pages_per_cluster_ratio defines the amount of metadata to
|
||||||
|
allocate when the logical volume store is created. The default value
|
||||||
|
is '100', which translates to 1 4KiB per cluster. For the default 4MiB
|
||||||
|
cluster size, this equates to about 0.1% of the underlying block
|
||||||
|
device allocated for metadata. Logical volume stores can be grown, if
|
||||||
|
the size of the underlying block device grows in the future, but only
|
||||||
|
if enough metadata pages were allocated to support the growth. So
|
||||||
|
num_md_pages_per_cluster_ratio should be set to a higher value if
|
||||||
|
wanting to support future growth. For example,
|
||||||
|
num_md_pages_per_cluster_ratio = 200 would support future 2x growth of
|
||||||
|
the logical volume store, and would result in 0.2% of the underlying
|
||||||
|
block device allocated for metadata (with a default 4MiB cluster
|
||||||
|
size).
|
||||||
|
|
||||||
#### Response
|
#### Response
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
def bdev_lvol_create_lvstore(client, bdev_name, lvs_name, cluster_sz=None, clear_method=None):
|
def bdev_lvol_create_lvstore(client, bdev_name, lvs_name, cluster_sz=None,
|
||||||
|
clear_method=None, num_md_pages_per_cluster_ratio=None):
|
||||||
"""Construct a logical volume store.
|
"""Construct a logical volume store.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
@ -6,6 +7,7 @@ def bdev_lvol_create_lvstore(client, bdev_name, lvs_name, cluster_sz=None, clear
|
|||||||
lvs_name: name of the logical volume store to create
|
lvs_name: name of the logical volume store to create
|
||||||
cluster_sz: cluster size of the logical volume store in bytes (optional)
|
cluster_sz: cluster size of the logical volume store in bytes (optional)
|
||||||
clear_method: Change clear method for data region. Available: none, unmap, write_zeroes (optional)
|
clear_method: Change clear method for data region. Available: none, unmap, write_zeroes (optional)
|
||||||
|
num_md_pages_per_cluster_ratio: metadata pages per cluster (optional)
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
UUID of created logical volume store.
|
UUID of created logical volume store.
|
||||||
@ -15,6 +17,8 @@ def bdev_lvol_create_lvstore(client, bdev_name, lvs_name, cluster_sz=None, clear
|
|||||||
params['cluster_sz'] = cluster_sz
|
params['cluster_sz'] = cluster_sz
|
||||||
if clear_method:
|
if clear_method:
|
||||||
params['clear_method'] = clear_method
|
params['clear_method'] = clear_method
|
||||||
|
if num_md_pages_per_cluster_ratio:
|
||||||
|
params['num_md_pages_per_cluster_ratio'] = num_md_pages_per_cluster_ratio
|
||||||
return client.call('bdev_lvol_create_lvstore', params)
|
return client.call('bdev_lvol_create_lvstore', params)
|
||||||
|
|
||||||
|
|
||||||
@ -32,6 +36,23 @@ def bdev_lvol_rename_lvstore(client, old_name, new_name):
|
|||||||
return client.call('bdev_lvol_rename_lvstore', params)
|
return client.call('bdev_lvol_rename_lvstore', params)
|
||||||
|
|
||||||
|
|
||||||
|
def bdev_lvol_grow_lvstore(client, uuid=None, lvs_name=None):
|
||||||
|
"""Grow the logical volume store to fill the underlying bdev
|
||||||
|
|
||||||
|
Args:
|
||||||
|
uuid: UUID of logical volume store to resize (optional)
|
||||||
|
lvs_name: name of logical volume store to resize (optional)
|
||||||
|
"""
|
||||||
|
if (uuid and lvs_name):
|
||||||
|
raise ValueError("Exactly one of uuid or lvs_name may be specified")
|
||||||
|
params = {}
|
||||||
|
if uuid:
|
||||||
|
params['uuid'] = uuid
|
||||||
|
if lvs_name:
|
||||||
|
params['lvs_name'] = lvs_name
|
||||||
|
return client.call('bdev_lvol_grow_lvstore', params)
|
||||||
|
|
||||||
|
|
||||||
def bdev_lvol_create(client, lvol_name, size, thin_provision=False, uuid=None, lvs_name=None, clear_method=None):
|
def bdev_lvol_create(client, lvol_name, size, thin_provision=False, uuid=None, lvs_name=None, clear_method=None):
|
||||||
"""Create a logical volume on a logical volume store.
|
"""Create a logical volume on a logical volume store.
|
||||||
|
|
||||||
|
@ -1767,7 +1767,8 @@ Format: 'user:u1 secret:s1 muser:mu1 msecret:ms1,user:u2 secret:s2 muser:mu2 mse
|
|||||||
bdev_name=args.bdev_name,
|
bdev_name=args.bdev_name,
|
||||||
lvs_name=args.lvs_name,
|
lvs_name=args.lvs_name,
|
||||||
cluster_sz=args.cluster_sz,
|
cluster_sz=args.cluster_sz,
|
||||||
clear_method=args.clear_method))
|
clear_method=args.clear_method,
|
||||||
|
num_md_pages_per_cluster_ratio=args.md_pages_per_cluster_ratio))
|
||||||
|
|
||||||
p = subparsers.add_parser('bdev_lvol_create_lvstore', help='Add logical volume store on base bdev')
|
p = subparsers.add_parser('bdev_lvol_create_lvstore', help='Add logical volume store on base bdev')
|
||||||
p.add_argument('bdev_name', help='base bdev name')
|
p.add_argument('bdev_name', help='base bdev name')
|
||||||
@ -1775,6 +1776,7 @@ Format: 'user:u1 secret:s1 muser:mu1 msecret:ms1,user:u2 secret:s2 muser:mu2 mse
|
|||||||
p.add_argument('-c', '--cluster-sz', help='size of cluster (in bytes)', type=int, required=False)
|
p.add_argument('-c', '--cluster-sz', help='size of cluster (in bytes)', type=int, required=False)
|
||||||
p.add_argument('--clear-method', help="""Change clear method for data region.
|
p.add_argument('--clear-method', help="""Change clear method for data region.
|
||||||
Available: none, unmap, write_zeroes""", required=False)
|
Available: none, unmap, write_zeroes""", required=False)
|
||||||
|
p.add_argument('-m', '--md-pages-per-cluster-ratio', help='reserved metadata pages for each cluster', type=int, required=False)
|
||||||
p.set_defaults(func=bdev_lvol_create_lvstore)
|
p.set_defaults(func=bdev_lvol_create_lvstore)
|
||||||
|
|
||||||
def bdev_lvol_rename_lvstore(args):
|
def bdev_lvol_rename_lvstore(args):
|
||||||
@ -1787,6 +1789,17 @@ Format: 'user:u1 secret:s1 muser:mu1 msecret:ms1,user:u2 secret:s2 muser:mu2 mse
|
|||||||
p.add_argument('new_name', help='new name')
|
p.add_argument('new_name', help='new name')
|
||||||
p.set_defaults(func=bdev_lvol_rename_lvstore)
|
p.set_defaults(func=bdev_lvol_rename_lvstore)
|
||||||
|
|
||||||
|
def bdev_lvol_grow_lvstore(args):
|
||||||
|
print_dict(rpc.lvol.bdev_lvol_grow_lvstore(args.client,
|
||||||
|
uuid=args.uuid,
|
||||||
|
lvs_name=args.lvs_name))
|
||||||
|
|
||||||
|
p = subparsers.add_parser('bdev_lvol_grow_lvstore',
|
||||||
|
help='Grow the lvstore size to the underlying bdev size')
|
||||||
|
p.add_argument('-u', '--uuid', help='lvol store UUID', required=False)
|
||||||
|
p.add_argument('-l', '--lvs-name', help='lvol store name', required=False)
|
||||||
|
p.set_defaults(func=bdev_lvol_grow_lvstore)
|
||||||
|
|
||||||
def bdev_lvol_create(args):
|
def bdev_lvol_create(args):
|
||||||
print_json(rpc.lvol.bdev_lvol_create(args.client,
|
print_json(rpc.lvol.bdev_lvol_create(args.client,
|
||||||
lvol_name=args.lvol_name,
|
lvol_name=args.lvol_name,
|
||||||
|
Loading…
Reference in New Issue
Block a user