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

schema: fix mismatched 'type' attr of parameters



check schema against python cli and validate 'type' attr matches
also add linting for this in the code to prevent future breaks

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


Tested-by: default avatarSPDK Automated Test System <spdkbot@gmail.com>
Reviewed-by: default avatarKonrad Sztyber <ksztyber@nvidia.com>
Reviewed-by: default avatarTomasz Zawadzki <tomasz@tzawadzki.com>
parent 303cee0e
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -282,12 +282,12 @@ def add_parser(subparsers):
    def bdev_null_resize(args):
        print_json(args.client.bdev_null_resize(
                                             name=args.name,
                                             new_size=int(args.new_size)))
                                             new_size=args.new_size))

    p = subparsers.add_parser('bdev_null_resize',
                              help='Resize a null bdev')
    p.add_argument('name', help='null bdev name')
    p.add_argument('new_size', help='new bdev size for resize operation. The unit is MiB')
    p.add_argument('new_size', help='new bdev size for resize operation. The unit is MiB', type=int)
    p.set_defaults(func=bdev_null_resize)

    def bdev_aio_create(args):
@@ -895,12 +895,12 @@ def add_parser(subparsers):
    def bdev_rbd_resize(args):
        print_json(args.client.bdev_rbd_resize(
                                            name=args.name,
                                            new_size=int(args.new_size)))
                                            new_size=args.new_size))

    p = subparsers.add_parser('bdev_rbd_resize',
                              help='Resize a rbd bdev')
    p.add_argument('name', help='rbd bdev name')
    p.add_argument('new_size', help='new bdev size for resize operation. The unit is MiB')
    p.add_argument('new_size', help='new bdev size for resize operation. The unit is MiB', type=int)
    p.set_defaults(func=bdev_rbd_resize)

    def bdev_delay_create(args):
@@ -1545,10 +1545,10 @@ def add_parser(subparsers):
    def bdev_daos_resize(args):
        print_json(args.client.bdev_daos_resize(
                                             name=args.name,
                                             new_size=int(args.new_size)))
                                             new_size=args.new_size))

    p = subparsers.add_parser('bdev_daos_resize',
                              help='Resize a DAOS bdev')
    p.add_argument('name', help='DAOS bdev name')
    p.add_argument('new_size', help='new bdev size for resize operation. The unit is MiB')
    p.add_argument('new_size', help='new bdev size for resize operation. The unit is MiB', type=int)
    p.set_defaults(func=bdev_daos_resize)
+25 −25
Original line number Diff line number Diff line
@@ -137,7 +137,7 @@
      "params": [
        {
          "name": "id",
          "type": "string",
          "type": "number",
          "required": true,
          "description": "Thread ID"
        },
@@ -464,7 +464,7 @@
      "params": [
        {
          "name": "pmd",
          "type": "int",
          "type": "number",
          "required": true,
          "description": "pmd selection"
        }
@@ -741,7 +741,7 @@
        },
        {
          "name": "period",
          "type": "int",
          "type": "number",
          "required": true,
          "description": "period (in microseconds).If set to 0, polling will be disabled."
        }
@@ -822,7 +822,7 @@
        },
        {
          "name": "cache_line_size",
          "type": "int",
          "type": "number",
          "required": false,
          "description": "OCF cache line size in KiB: 4, 8, 16, 32, 64"
        },
@@ -918,13 +918,13 @@
        },
        {
          "name": "threshold",
          "type": "int",
          "type": "number",
          "required": false,
          "description": "Activation threshold in KiB"
        },
        {
          "name": "promotion_count",
          "type": "int",
          "type": "number",
          "required": false,
          "description": "Promotion request count"
        }
@@ -1144,7 +1144,7 @@
        },
        {
          "name": "filename",
          "type": "number",
          "type": "string",
          "required": true,
          "description": "Path to device or file"
        },
@@ -2095,7 +2095,7 @@
        },
        {
          "name": "new_size",
          "type": "int",
          "type": "number",
          "required": true,
          "description": "New bdev size for resize operation in MiB"
        }
@@ -2233,25 +2233,25 @@
        },
        {
          "name": "num",
          "type": "int",
          "type": "number",
          "required": false,
          "description": "the number of commands you want to fail.(default:1)"
        },
        {
          "name": "queue_depth",
          "type": "int",
          "type": "number",
          "required": false,
          "description": "the queue depth at which to trigger the error"
        },
        {
          "name": "corrupt_offset",
          "type": "int",
          "type": "number",
          "required": false,
          "description": "the offset in bytes to xor with corrupt_value"
        },
        {
          "name": "corrupt_value",
          "type": "int",
          "type": "number",
          "required": false,
          "description": "the value for xor (1-255, 0 is invalid)"
        }
@@ -2337,7 +2337,7 @@
        },
        {
          "name": "overprovisioning",
          "type": "int",
          "type": "number",
          "required": false,
          "description": "Percentage of base device used for relocation, 20% by default"
        },
@@ -2349,7 +2349,7 @@
        },
        {
          "name": "l2p_dram_limit",
          "type": "int",
          "type": "number",
          "required": false,
          "description": "DRAM limit for most recent L2P addresses (default 2048 MiB)"
        }
@@ -2390,7 +2390,7 @@
        },
        {
          "name": "overprovisioning",
          "type": "int",
          "type": "number",
          "required": false,
          "description": "Percentage of base device used for relocation, 20% by default"
        },
@@ -2402,7 +2402,7 @@
        },
        {
          "name": "l2p_dram_limit",
          "type": "int",
          "type": "number",
          "required": false,
          "description": "DRAM limit for most recent L2P addresses (default 2048 MiB)"
        }
@@ -5361,19 +5361,19 @@
        },
        {
          "name": "ublk_id",
          "type": "int",
          "type": "number",
          "required": true,
          "description": "Device id"
        },
        {
          "name": "queue_depth",
          "type": "int",
          "type": "number",
          "required": false,
          "description": "Device queue depth"
        },
        {
          "name": "num_queues",
          "type": "int",
          "type": "number",
          "required": false,
          "description": "Total number of device queues"
        }
@@ -5390,7 +5390,7 @@
        },
        {
          "name": "ublk_id",
          "type": "int",
          "type": "number",
          "required": true,
          "description": "Device id"
        }
@@ -5401,7 +5401,7 @@
      "params": [
        {
          "name": "ublk_id",
          "type": "int",
          "type": "number",
          "required": true,
          "description": "Device id to delete"
        }
@@ -5412,7 +5412,7 @@
      "params": [
        {
          "name": "ublk_id",
          "type": "int",
          "type": "number",
          "required": false,
          "description": "ublk device id to display"
        }
@@ -5899,13 +5899,13 @@
      "params": [
        {
          "name": "fsdev_io_pool_size",
          "type": "int",
          "type": "number",
          "required": true,
          "description": "Size of fsdev IO objects pool."
        },
        {
          "name": "fsdev_io_cache_size",
          "type": "int",
          "type": "number",
          "required": true,
          "description": "Size of fsdev IO objects cache per thread."
        }
@@ -5940,7 +5940,7 @@
        },
        {
          "name": "max_write",
          "type": "int",
          "type": "number",
          "required": false,
          "description": "Max write size in bytes"
        },
+7 −0
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ def lint_json_examples():


def lint_py_cli(schema):
    types = {str: 'string', None: 'string', int: 'number', bool: 'boolean'}
    parser, subparsers = rpc.create_parser()
    for method in schema['methods']:
        if method['name'] not in subparsers.choices:
@@ -46,6 +47,12 @@ def lint_py_cli(schema):
                continue
            if param['required'] != action.required:
                raise ValueError(f"For method {method['name']}: parameter '{param['name']}': 'required' field is mismatched")
            newtype = types.get(action.type)
            if not newtype:
                # TODO: handle this case later and fix issues raised by it
                continue
            if param['type'] != newtype and action.metavar is None and param['type'] != "array":
                raise ValueError(f"For method {method['name']}: parameter '{param['name']}': 'type' field is mismatched")


def generate_docs(schema):