Commit 1c63d1df authored by Boris Glimcher's avatar Boris Glimcher Committed by Tomasz Zawadzki
Browse files

python/rpc: immutable python helper functions



Instead of mutating the incoming kwargs dict in-place,
It is much safer to reurn a copy (new dict).

Change-Id: I9a591ddd7d351023974f2cead21ec880e41a44bb
Signed-off-by: default avatarBoris Glimcher <Boris.Glimcher@emc.com>
Reviewed-on: https://review.spdk.io/c/spdk/spdk/+/26428


Reviewed-by: default avatarTomasz Zawadzki <tomasz@tzawadzki.com>
Tested-by: default avatarSPDK Automated Test System <spdkbot@gmail.com>
Reviewed-by: default avatarKonrad Sztyber <ksztyber@nvidia.com>
parent f185ccaa
Loading
Loading
Loading
Loading
+1 −5
Original line number Diff line number Diff line
@@ -624,11 +624,7 @@ def bdev_nvme_set_options(client, **params):
        tcp_connect_timeout_ms: Time to wait until TCP connection is done. Default: 0 (no timeout).
        enable_flush: Pass flush to nvme devices when volatile write cache is present. Default: false
    """

    strip_globals(params)
    remove_null(params)

    return client.call('bdev_nvme_set_options', params)
    return client.call('bdev_nvme_set_options', remove_null(strip_globals(params)))


def bdev_nvme_set_hotplug(client, enable, period_us=None):
+6 −17
Original line number Diff line number Diff line
@@ -7,29 +7,18 @@ args_global = ['server_addr', 'port', 'timeout', 'verbose', 'dry_run', 'conn_ret


def strip_globals(kwargs):
    for arg in args_global:
        kwargs.pop(arg, None)
    return {k: v for k, v in kwargs.items() if k not in args_global}


def remove_null(kwargs):
    keys = []
    for key, value in kwargs.items():
        if value is None:
            keys.append(key)

    for key in keys:
        kwargs.pop(key, None)
    return {k: v for k, v in kwargs.items() if v is not None}


def apply_defaults(kwargs, **defaults):
    for key, value in defaults.items():
        if key not in kwargs:
            kwargs[key] = value
    return {**defaults, **kwargs}


def group_as(kwargs, name, values):
    group = {}
    for arg in values:
        if arg in kwargs and kwargs[arg] is not None:
            group[arg] = kwargs.pop(arg, None)
    kwargs[name] = group
    group = {k: v for k, v in kwargs.items() if k in values and v is not None}
    rest = {k: v for k, v in kwargs.items() if k not in values}
    return {**rest, name: group}
+18 −17
Original line number Diff line number Diff line
@@ -140,9 +140,9 @@ def nvmf_create_transport(client, **params):
        True or False
    """

    strip_globals(params)
    apply_defaults(params, no_srq=False, c2h_success=True)
    remove_null(params)
    params = strip_globals(params)
    params = apply_defaults(params, no_srq=False, c2h_success=True)
    params = remove_null(params)

    return client.call('nvmf_create_transport', params)

@@ -279,10 +279,10 @@ def nvmf_subsystem_add_listener(client, **params):
        True or False
    """

    strip_globals(params)
    apply_defaults(params, tgt_name=None)
    group_as(params, 'listen_address', ['trtype', 'traddr', 'trsvcid', 'adrfam'])
    remove_null(params)
    params = strip_globals(params)
    params = apply_defaults(params, tgt_name=None)
    params = group_as(params, 'listen_address', ['trtype', 'traddr', 'trsvcid', 'adrfam'])
    params = remove_null(params)

    if params['nqn'] == 'discovery':
        params['nqn'] = 'nqn.2014-08.org.nvmexpress.discovery'
@@ -395,10 +395,10 @@ def nvmf_discovery_add_referral(client, **params):
        True or False
    """

    strip_globals(params)
    apply_defaults(params, tgt_name=None)
    group_as(params, 'address', ['trtype', 'traddr', 'trsvcid', 'adrfam'])
    remove_null(params)
    params = strip_globals(params)
    params = apply_defaults(params, tgt_name=None)
    params = group_as(params, 'address', ['trtype', 'traddr', 'trsvcid', 'adrfam'])
    params = remove_null(params)

    if params.get('subnqn') == 'discovery':
        params['subnqn'] = 'nqn.2014-08.org.nvmexpress.discovery'
@@ -484,12 +484,13 @@ def nvmf_subsystem_add_ns(client, **params):
        The namespace ID
    """

    strip_globals(params)
    apply_defaults(params, tgt_name=None)
    group_as(params, 'namespace', ['bdev_name', 'ptpl_file', 'nsid',
    params = strip_globals(params)
    params = apply_defaults(params, tgt_name=None)
    params = group_as(params, 'namespace',
                      ['bdev_name', 'ptpl_file', 'nsid',
                       'nguid', 'eui64', 'uuid', 'anagrpid', 'no_auto_visible',
                       'hide_metadata'])
    remove_null(params)
    params = remove_null(params)

    return client.call('nvmf_subsystem_add_ns', params)

+2 −8
Original line number Diff line number Diff line
@@ -42,10 +42,7 @@ def virtio_blk_create_transport(client, **params):
    Args:
        name: transport name
    """
    strip_globals(params)
    remove_null(params)

    return client.call('virtio_blk_create_transport', params)
    return client.call('virtio_blk_create_transport', remove_null(strip_globals(params)))


def vhost_create_scsi_controller(client, ctrlr, delay=False, cpumask=None):
@@ -111,10 +108,7 @@ def vhost_create_blk_controller(client, **params):
        readonly: set controller as read-only
        packed_ring: support controller packed_ring
    """
    strip_globals(params)
    remove_null(params)

    return client.call('vhost_create_blk_controller', params)
    return client.call('vhost_create_blk_controller', remove_null(strip_globals(params)))


def vhost_get_controllers(client, name=None):