1from .helpers import deprecated_alias 2 3 4@deprecated_alias('set_bdev_options') 5def bdev_set_options(client, bdev_io_pool_size=None, bdev_io_cache_size=None, bdev_auto_examine=None, 6 small_buf_pool_size=None, large_buf_pool_size=None): 7 """Set parameters for the bdev subsystem. 8 9 Args: 10 bdev_io_pool_size: number of bdev_io structures in shared buffer pool (optional) 11 bdev_io_cache_size: maximum number of bdev_io structures cached per thread (optional) 12 bdev_auto_examine: if set to false, the bdev layer will not examine every disks automatically (optional) 13 small_buf_pool_size: maximum number of small buffer (8KB buffer) pool size (optional) 14 large_buf_pool_size: maximum number of large buffer (64KB buffer) pool size (optional) 15 """ 16 params = {} 17 18 if bdev_io_pool_size: 19 params['bdev_io_pool_size'] = bdev_io_pool_size 20 if bdev_io_cache_size: 21 params['bdev_io_cache_size'] = bdev_io_cache_size 22 if bdev_auto_examine is not None: 23 params["bdev_auto_examine"] = bdev_auto_examine 24 if small_buf_pool_size: 25 params['small_buf_pool_size'] = small_buf_pool_size 26 if large_buf_pool_size: 27 params['large_buf_pool_size'] = large_buf_pool_size 28 return client.call('bdev_set_options', params) 29 30 31def bdev_examine(client, name): 32 """Examine a bdev manually. If the bdev does not exist yet when this RPC is called, 33 it will be examined when it is created 34 35 Args: 36 name: name of the bdev 37 """ 38 params = { 39 'name': name 40 } 41 return client.call('bdev_examine', params) 42 43 44def bdev_wait_for_examine(client): 45 """Report when all bdevs have been examined 46 """ 47 return client.call('bdev_wait_for_examine') 48 49 50@deprecated_alias('construct_compress_bdev') 51def bdev_compress_create(client, base_bdev_name, pm_path, lb_size): 52 """Construct a compress virtual block device. 53 54 Args: 55 base_bdev_name: name of the underlying base bdev 56 pm_path: path to persistent memory 57 lb_size: logical block size for the compressed vol in bytes. Must be 4K or 512. 58 59 Returns: 60 Name of created virtual block device. 61 """ 62 params = {'base_bdev_name': base_bdev_name, 'pm_path': pm_path, 'lb_size': lb_size} 63 64 return client.call('bdev_compress_create', params) 65 66 67@deprecated_alias('delete_compress_bdev') 68def bdev_compress_delete(client, name): 69 """Delete compress virtual block device. 70 71 Args: 72 name: name of compress vbdev to delete 73 """ 74 params = {'name': name} 75 return client.call('bdev_compress_delete', params) 76 77 78@deprecated_alias('set_compress_pmd') 79@deprecated_alias('compress_set_pmd') 80def bdev_compress_set_pmd(client, pmd): 81 """Set pmd options for the bdev compress. 82 83 Args: 84 pmd: 0 = auto-select, 1 = QAT, 2 = ISAL, 3 = mlx5_pci 85 """ 86 params = {'pmd': pmd} 87 88 return client.call('bdev_compress_set_pmd', params) 89 90 91def bdev_compress_get_orphans(client, name=None): 92 """Get a list of comp bdevs that do not have a pmem file (aka orphaned). 93 94 Args: 95 name: comp bdev name to query (optional; if omitted, query all comp bdevs) 96 97 Returns: 98 List of comp bdev names. 99 """ 100 params = {} 101 if name: 102 params['name'] = name 103 return client.call('bdev_compress_get_orphans', params) 104 105 106@deprecated_alias('construct_crypto_bdev') 107def bdev_crypto_create(client, base_bdev_name, name, crypto_pmd, key, cipher=None, key2=None): 108 """Construct a crypto virtual block device. 109 110 Args: 111 base_bdev_name: name of the underlying base bdev 112 name: name for the crypto vbdev 113 crypto_pmd: name of of the DPDK crypto driver to use 114 key: key 115 116 Returns: 117 Name of created virtual block device. 118 """ 119 params = {'base_bdev_name': base_bdev_name, 'name': name, 'crypto_pmd': crypto_pmd, 'key': key} 120 if cipher: 121 params['cipher'] = cipher 122 if key2: 123 params['key2'] = key2 124 return client.call('bdev_crypto_create', params) 125 126 127@deprecated_alias('delete_crypto_bdev') 128def bdev_crypto_delete(client, name): 129 """Delete crypto virtual block device. 130 131 Args: 132 name: name of crypto vbdev to delete 133 """ 134 params = {'name': name} 135 return client.call('bdev_crypto_delete', params) 136 137 138@deprecated_alias('construct_ocf_bdev') 139def bdev_ocf_create(client, name, mode, cache_line_size, cache_bdev_name, core_bdev_name): 140 """Add an OCF block device 141 142 Args: 143 name: name of constructed OCF bdev 144 mode: OCF cache mode: {'wb', 'wt', 'pt', 'wa', 'wi', 'wo'} 145 cache_line_size: OCF cache line size. The unit is KiB: {4, 8, 16, 32, 64} 146 cache_bdev_name: name of underlying cache bdev 147 core_bdev_name: name of underlying core bdev 148 149 Returns: 150 Name of created block device 151 """ 152 params = { 153 'name': name, 154 'mode': mode, 155 'cache_line_size': cache_line_size, 156 'cache_bdev_name': cache_bdev_name, 157 'core_bdev_name': core_bdev_name, 158 } 159 160 return client.call('bdev_ocf_create', params) 161 162 163@deprecated_alias('delete_ocf_bdev') 164def bdev_ocf_delete(client, name): 165 """Delete an OCF device 166 167 Args: 168 name: name of OCF bdev 169 170 """ 171 params = {'name': name} 172 173 return client.call('bdev_ocf_delete', params) 174 175 176@deprecated_alias('get_ocf_stats') 177def bdev_ocf_get_stats(client, name): 178 """Get statistics of chosen OCF block device 179 180 Args: 181 name: name of OCF bdev 182 183 Returns: 184 Statistics as json object 185 """ 186 params = {'name': name} 187 188 return client.call('bdev_ocf_get_stats', params) 189 190 191@deprecated_alias('get_ocf_stats') 192def bdev_ocf_get_bdevs(client, name=None): 193 """Get list of OCF devices including unregistered ones 194 195 Args: 196 name: name of OCF vbdev or name of cache device or name of core device (optional) 197 198 Returns: 199 Array of OCF devices with their current status 200 """ 201 params = None 202 if name: 203 params = {'name': name} 204 return client.call('bdev_ocf_get_bdevs', params) 205 206 207def bdev_ocf_set_cache_mode(client, name, mode): 208 """Set cache mode of OCF block device 209 210 Args: 211 name: name of OCF bdev 212 mode: OCF cache mode: {'wb', 'wt', 'pt', 'wa', 'wi', 'wo'} 213 214 Returns: 215 New cache mode name 216 """ 217 params = { 218 'name': name, 219 'mode': mode, 220 } 221 222 return client.call('bdev_ocf_set_cache_mode', params) 223 224 225def bdev_ocf_set_seqcutoff(client, name, policy, threshold, promotion_count): 226 """Set sequential cutoff parameters on all cores for the given OCF cache device 227 228 Args: 229 name: Name of OCF cache bdev 230 policy: Sequential cutoff policy 231 threshold: Activation threshold [KiB] (optional) 232 promotion_count: Promotion request count (optional) 233 """ 234 params = { 235 'name': name, 236 'policy': policy, 237 } 238 if threshold: 239 params['threshold'] = threshold 240 if promotion_count: 241 params['promotion_count'] = promotion_count 242 243 return client.call('bdev_ocf_set_seqcutoff', params) 244 245 246@deprecated_alias('construct_malloc_bdev') 247def bdev_malloc_create(client, num_blocks, block_size, name=None, uuid=None, optimal_io_boundary=None): 248 """Construct a malloc block device. 249 250 Args: 251 num_blocks: size of block device in blocks 252 block_size: block size of device; must be a power of 2 and at least 512 253 name: name of block device (optional) 254 uuid: UUID of block device (optional) 255 optimal_io_boundary: Split on optimal IO boundary, in number of blocks, default 0 (disabled, optional) 256 257 Returns: 258 Name of created block device. 259 """ 260 params = {'num_blocks': num_blocks, 'block_size': block_size} 261 if name: 262 params['name'] = name 263 if uuid: 264 params['uuid'] = uuid 265 if optimal_io_boundary: 266 params['optimal_io_boundary'] = optimal_io_boundary 267 return client.call('bdev_malloc_create', params) 268 269 270@deprecated_alias('delete_malloc_bdev') 271def bdev_malloc_delete(client, name): 272 """Delete malloc block device. 273 274 Args: 275 bdev_name: name of malloc bdev to delete 276 """ 277 params = {'name': name} 278 return client.call('bdev_malloc_delete', params) 279 280 281@deprecated_alias('construct_null_bdev') 282def bdev_null_create(client, num_blocks, block_size, name, uuid=None, md_size=None, 283 dif_type=None, dif_is_head_of_md=None): 284 """Construct a null block device. 285 286 Args: 287 num_blocks: size of block device in blocks 288 block_size: block size of device; data part size must be a power of 2 and at least 512 289 name: name of block device 290 uuid: UUID of block device (optional) 291 md_size: metadata size of device (optional) 292 dif_type: protection information type (optional) 293 dif_is_head_of_md: protection information is in the first 8 bytes of metadata (optional) 294 295 Returns: 296 Name of created block device. 297 """ 298 params = {'name': name, 'num_blocks': num_blocks, 299 'block_size': block_size} 300 if uuid: 301 params['uuid'] = uuid 302 if md_size: 303 params['md_size'] = md_size 304 if dif_type: 305 params['dif_type'] = dif_type 306 if dif_is_head_of_md: 307 params['dif_is_head_of_md'] = dif_is_head_of_md 308 return client.call('bdev_null_create', params) 309 310 311@deprecated_alias('delete_null_bdev') 312def bdev_null_delete(client, name): 313 """Remove null bdev from the system. 314 315 Args: 316 name: name of null bdev to delete 317 """ 318 params = {'name': name} 319 return client.call('bdev_null_delete', params) 320 321 322def bdev_null_resize(client, name, new_size): 323 """Resize null bdev in the system. 324 325 Args: 326 name: name of null bdev to resize 327 new_size: new bdev size of resize operation. The unit is MiB 328 """ 329 params = { 330 'name': name, 331 'new_size': new_size, 332 } 333 return client.call('bdev_null_resize', params) 334 335 336@deprecated_alias('get_raid_bdevs') 337def bdev_raid_get_bdevs(client, category): 338 """Get list of raid bdevs based on category 339 340 Args: 341 category: any one of all or online or configuring or offline 342 343 Returns: 344 List of raid bdev names 345 """ 346 params = {'category': category} 347 return client.call('bdev_raid_get_bdevs', params) 348 349 350@deprecated_alias('construct_raid_bdev') 351def bdev_raid_create(client, name, raid_level, base_bdevs, strip_size=None, strip_size_kb=None): 352 """Create raid bdev. Either strip size arg will work but one is required. 353 354 Args: 355 name: user defined raid bdev name 356 strip_size (deprecated): strip size of raid bdev in KB, supported values like 8, 16, 32, 64, 128, 256, etc 357 strip_size_kb: strip size of raid bdev in KB, supported values like 8, 16, 32, 64, 128, 256, etc 358 raid_level: raid level of raid bdev, supported values 0 359 base_bdevs: Space separated names of Nvme bdevs in double quotes, like "Nvme0n1 Nvme1n1 Nvme2n1" 360 361 Returns: 362 None 363 """ 364 params = {'name': name, 'raid_level': raid_level, 'base_bdevs': base_bdevs} 365 366 if strip_size: 367 params['strip_size'] = strip_size 368 369 if strip_size_kb: 370 params['strip_size_kb'] = strip_size_kb 371 372 return client.call('bdev_raid_create', params) 373 374 375@deprecated_alias('destroy_raid_bdev') 376def bdev_raid_delete(client, name): 377 """Delete raid bdev 378 379 Args: 380 name: raid bdev name 381 382 Returns: 383 None 384 """ 385 params = {'name': name} 386 return client.call('bdev_raid_delete', params) 387 388 389@deprecated_alias('construct_aio_bdev') 390def bdev_aio_create(client, filename, name, block_size=None): 391 """Construct a Linux AIO block device. 392 393 Args: 394 filename: path to device or file (ex: /dev/sda) 395 name: name of block device 396 block_size: block size of device (optional; autodetected if omitted) 397 398 Returns: 399 Name of created block device. 400 """ 401 params = {'name': name, 402 'filename': filename} 403 404 if block_size: 405 params['block_size'] = block_size 406 407 return client.call('bdev_aio_create', params) 408 409 410def bdev_aio_rescan(client, name): 411 """Rescan a Linux AIO block device. 412 413 Args: 414 bdev_name: name of aio bdev to delete 415 """ 416 params = {'name': name} 417 return client.call('bdev_aio_rescan', params) 418 419 420@deprecated_alias('delete_aio_bdev') 421def bdev_aio_delete(client, name): 422 """Remove aio bdev from the system. 423 424 Args: 425 bdev_name: name of aio bdev to delete 426 """ 427 params = {'name': name} 428 return client.call('bdev_aio_delete', params) 429 430 431def bdev_uring_create(client, filename, name, block_size=None): 432 """Create a bdev with Linux io_uring backend. 433 434 Args: 435 filename: path to device or file (ex: /dev/nvme0n1) 436 name: name of bdev 437 block_size: block size of device (optional; autodetected if omitted) 438 439 Returns: 440 Name of created bdev. 441 """ 442 params = {'name': name, 443 'filename': filename} 444 445 if block_size: 446 params['block_size'] = block_size 447 448 return client.call('bdev_uring_create', params) 449 450 451def bdev_uring_delete(client, name): 452 """Delete a uring bdev. 453 454 Args: 455 name: name of uring bdev to delete 456 """ 457 params = {'name': name} 458 return client.call('bdev_uring_delete', params) 459 460 461@deprecated_alias('set_bdev_nvme_options') 462def bdev_nvme_set_options(client, action_on_timeout=None, timeout_us=None, timeout_admin_us=None, 463 keep_alive_timeout_ms=None, retry_count=None, arbitration_burst=None, 464 low_priority_weight=None, medium_priority_weight=None, high_priority_weight=None, 465 nvme_adminq_poll_period_us=None, nvme_ioq_poll_period_us=None, io_queue_requests=None, 466 delay_cmd_submit=None, transport_retry_count=None, bdev_retry_count=None, 467 transport_ack_timeout=None, ctrlr_loss_timeout_sec=None, reconnect_delay_sec=None, 468 fast_io_fail_timeout_sec=None): 469 """Set options for the bdev nvme. This is startup command. 470 471 Args: 472 action_on_timeout: action to take on command time out. Valid values are: none, reset, abort (optional) 473 timeout_us: Timeout for each command, in microseconds. If 0, don't track timeouts (optional) 474 timeout_admin_us: Timeout for each admin command, in microseconds. If 0, treat same as io timeouts (optional) 475 keep_alive_timeout_ms: Keep alive timeout period in millisecond, default is 10s (optional) 476 retry_count: The number of attempts per I/O when an I/O fails (deprecated) (optional) 477 arbitration_burst: The value is expressed as a power of two (optional) 478 low_priority_weight: The number of commands that may be executed from the low priority queue at one time (optional) 479 medium_priority_weight: The number of commands that may be executed from the medium priority queue at one time (optional) 480 high_priority_weight: The number of commands that may be executed from the high priority queue at one time (optional) 481 nvme_adminq_poll_period_us: How often the admin queue is polled for asynchronous events in microseconds (optional) 482 nvme_ioq_poll_period_us: How often to poll I/O queues for completions in microseconds (optional) 483 io_queue_requests: The number of requests allocated for each NVMe I/O queue. Default: 512 (optional) 484 delay_cmd_submit: Enable delayed NVMe command submission to allow batching of multiple commands (optional) 485 transport_retry_count: The number of attempts per I/O in the transport layer when an I/O fails (optional) 486 bdev_retry_count: The number of attempts per I/O in the bdev layer when an I/O fails. -1 means infinite retries. (optional) 487 transport_ack_timeout: Time to wait ack until packet retransmission for RDMA or until closes connection for TCP. 488 Range 0-31 where 0 is driver-specific default value (optional) 489 ctrlr_loss_timeout_sec: Time to wait until ctrlr is reconnected before deleting ctrlr. 490 -1 means infinite reconnect retries. 0 means no reconnect retry. 491 If reconnect_delay_sec is zero, ctrlr_loss_timeout_sec has to be zero. 492 If reconnect_delay_sec is non-zero, ctrlr_loss_timeout_sec has to be -1 or not less than reconnect_delay_sec. 493 This can be overridden by bdev_nvme_attach_controller. (optional) 494 reconnect_delay_sec: Time to delay a reconnect retry. 495 If ctrlr_loss_timeout_sec is zero, reconnect_delay_sec has to be zero. 496 If ctrlr_loss_timeout_sec is -1, reconnect_delay_sec has to be non-zero. 497 If ctrlr_loss_timeout_sec is not -1 or zero, reconnect_sec has to be non-zero and less than ctrlr_loss_timeout_sec. 498 This can be overridden by bdev_nvme_attach_controller. (optional) 499 fail_io_fast_timeout_sec: Time to wait until ctrlr is reconnected before failing I/O to ctrlr. 500 0 means no such timeout. 501 If fast_io_fail_timeout_sec is not zero, it has to be not less than reconnect_delay_sec and less than 502 ctrlr_loss_timeout_sec if ctrlr_loss_timeout_sec is not -1. 503 This can be overridden by bdev_nvme_attach_controller. (optional) 504 505 """ 506 params = {} 507 508 if action_on_timeout: 509 params['action_on_timeout'] = action_on_timeout 510 511 if timeout_us is not None: 512 params['timeout_us'] = timeout_us 513 514 if timeout_admin_us is not None: 515 params['timeout_admin_us'] = timeout_admin_us 516 517 if keep_alive_timeout_ms is not None: 518 params['keep_alive_timeout_ms'] = keep_alive_timeout_ms 519 520 if retry_count is not None: 521 print("WARNING: retry_count is deprecated, please use transport_retry_count.") 522 params['retry_count'] = retry_count 523 524 if arbitration_burst is not None: 525 params['arbitration_burst'] = arbitration_burst 526 527 if low_priority_weight is not None: 528 params['low_priority_weight'] = low_priority_weight 529 530 if medium_priority_weight is not None: 531 params['medium_priority_weight'] = medium_priority_weight 532 533 if high_priority_weight is not None: 534 params['high_priority_weight'] = high_priority_weight 535 536 if nvme_adminq_poll_period_us: 537 params['nvme_adminq_poll_period_us'] = nvme_adminq_poll_period_us 538 539 if nvme_ioq_poll_period_us is not None: 540 params['nvme_ioq_poll_period_us'] = nvme_ioq_poll_period_us 541 542 if io_queue_requests is not None: 543 params['io_queue_requests'] = io_queue_requests 544 545 if delay_cmd_submit is not None: 546 params['delay_cmd_submit'] = delay_cmd_submit 547 548 if transport_retry_count is not None: 549 params['transport_retry_count'] = transport_retry_count 550 551 if bdev_retry_count is not None: 552 params['bdev_retry_count'] = bdev_retry_count 553 554 if transport_ack_timeout is not None: 555 params['transport_ack_timeout'] = transport_ack_timeout 556 557 if ctrlr_loss_timeout_sec is not None: 558 params['ctrlr_loss_timeout_sec'] = ctrlr_loss_timeout_sec 559 560 if reconnect_delay_sec is not None: 561 params['reconnect_delay_sec'] = reconnect_delay_sec 562 563 if fast_io_fail_timeout_sec is not None: 564 params['fast_io_fail_timeout_sec'] = fast_io_fail_timeout_sec 565 566 return client.call('bdev_nvme_set_options', params) 567 568 569@deprecated_alias('set_bdev_nvme_hotplug') 570def bdev_nvme_set_hotplug(client, enable, period_us=None): 571 """Set options for the bdev nvme. This is startup command. 572 573 Args: 574 enable: True to enable hotplug, False to disable. 575 period_us: how often the hotplug is processed for insert and remove events. Set 0 to reset to default. (optional) 576 """ 577 params = {'enable': enable} 578 579 if period_us: 580 params['period_us'] = period_us 581 582 return client.call('bdev_nvme_set_hotplug', params) 583 584 585@deprecated_alias('construct_nvme_bdev') 586def bdev_nvme_attach_controller(client, name, trtype, traddr, adrfam=None, trsvcid=None, 587 priority=None, subnqn=None, hostnqn=None, hostaddr=None, 588 hostsvcid=None, prchk_reftag=None, prchk_guard=None, 589 hdgst=None, ddgst=None, fabrics_timeout=None, multipath=None, num_io_queues=None, 590 ctrlr_loss_timeout_sec=None, reconnect_delay_sec=None, 591 fast_io_fail_timeout_sec=None): 592 """Construct block device for each NVMe namespace in the attached controller. 593 594 Args: 595 name: bdev name prefix; "n" + namespace ID will be appended to create unique names 596 trtype: transport type ("PCIe", "RDMA", "FC", "TCP") 597 traddr: transport address (PCI BDF or IP address) 598 adrfam: address family ("IPv4", "IPv6", "IB", or "FC") 599 trsvcid: transport service ID (port number for IP-based addresses) 600 priority: transport connection priority (Sock priority for TCP-based transports; optional) 601 subnqn: subsystem NQN to connect to (optional) 602 hostnqn: NQN to connect from (optional) 603 hostaddr: host transport address (IP address for IP-based transports, NULL for PCIe or FC; optional) 604 hostsvcid: host transport service ID (port number for IP-based transports, NULL for PCIe or FC; optional) 605 prchk_reftag: Enable checking of PI reference tag for I/O processing (optional) 606 prchk_guard: Enable checking of PI guard for I/O processing (optional) 607 hdgst: Enable TCP header digest (optional) 608 ddgst: Enable TCP data digest (optional) 609 fabrics_timeout: Fabrics connect timeout in us (optional) 610 multipath: The behavior when multiple paths are created ("disable", "failover", or "multipath"; failover if not specified) 611 num_io_queues: The number of IO queues to request during initialization. (optional) 612 ctrlr_loss_timeout_sec: Time to wait until ctrlr is reconnected before deleting ctrlr. 613 -1 means infinite reconnect retries. 0 means no reconnect retry. 614 If reconnect_delay_sec is zero, ctrlr_loss_timeout_sec has to be zero. 615 If reconnect_delay_sec is non-zero, ctrlr_loss_timeout_sec has to be -1 or not less than reconnect_delay_sec. 616 (optional) 617 reconnect_delay_sec: Time to delay a reconnect retry. 618 If ctrlr_loss_timeout_sec is zero, reconnect_delay_sec has to be zero. 619 If ctrlr_loss_timeout_sec is -1, reconnect_delay_sec has to be non-zero. 620 If ctrlr_loss_timeout_sec is not -1 or zero, reconnect_sec has to be non-zero and less than ctrlr_loss_timeout_sec. 621 (optional) 622 fail_io_fast_timeout_sec: Time to wait until ctrlr is reconnected before failing I/O to ctrlr. 623 0 means no such timeout. 624 If fast_io_fail_timeout_sec is not zero, it has to be not less than reconnect_delay_sec and less than 625 ctrlr_loss_timeout_sec if ctrlr_loss_timeout_sec is not -1. (optional) 626 627 Returns: 628 Names of created block devices. 629 """ 630 params = {'name': name, 631 'trtype': trtype, 632 'traddr': traddr} 633 634 if hostnqn: 635 params['hostnqn'] = hostnqn 636 637 if hostaddr: 638 params['hostaddr'] = hostaddr 639 640 if hostsvcid: 641 params['hostsvcid'] = hostsvcid 642 643 if adrfam: 644 params['adrfam'] = adrfam 645 646 if trsvcid: 647 params['trsvcid'] = trsvcid 648 649 if priority: 650 params['priority'] = priority 651 652 if subnqn: 653 params['subnqn'] = subnqn 654 655 if prchk_reftag: 656 params['prchk_reftag'] = prchk_reftag 657 658 if prchk_guard: 659 params['prchk_guard'] = prchk_guard 660 661 if hdgst: 662 params['hdgst'] = hdgst 663 664 if ddgst: 665 params['ddgst'] = ddgst 666 667 if fabrics_timeout: 668 params['fabrics_connect_timeout_us'] = fabrics_timeout 669 670 if multipath: 671 params['multipath'] = multipath 672 673 if num_io_queues: 674 params['num_io_queues'] = num_io_queues 675 676 if ctrlr_loss_timeout_sec is not None: 677 params['ctrlr_loss_timeout_sec'] = ctrlr_loss_timeout_sec 678 679 if reconnect_delay_sec is not None: 680 params['reconnect_delay_sec'] = reconnect_delay_sec 681 682 if fast_io_fail_timeout_sec is not None: 683 params['fast_io_fail_timeout_sec'] = fast_io_fail_timeout_sec 684 685 return client.call('bdev_nvme_attach_controller', params) 686 687 688@deprecated_alias('delete_nvme_controller') 689def bdev_nvme_detach_controller(client, name, trtype=None, traddr=None, 690 adrfam=None, trsvcid=None, subnqn=None, 691 hostaddr=None, hostsvcid=None): 692 """Detach NVMe controller and delete any associated bdevs. Optionally, 693 If all of the transport ID options are specified, only remove that 694 transport path from the specified controller. If that is the only 695 available path for the controller, this will also result in the 696 controller being detached and the associated bdevs being deleted. 697 698 Args: 699 name: controller name 700 trtype: transport type ("PCIe", "RDMA") 701 traddr: transport address (PCI BDF or IP address) 702 adrfam: address family ("IPv4", "IPv6", "IB", or "FC") 703 trsvcid: transport service ID (port number for IP-based addresses) 704 subnqn: subsystem NQN to connect to (optional) 705 hostaddr: Host address (IP address) 706 hostsvcid: transport service ID on host side (port number) 707 """ 708 709 params = {'name': name} 710 711 if trtype: 712 params['trtype'] = trtype 713 714 if traddr: 715 params['traddr'] = traddr 716 717 if adrfam: 718 params['adrfam'] = adrfam 719 720 if trsvcid: 721 params['trsvcid'] = trsvcid 722 723 if subnqn: 724 params['subnqn'] = subnqn 725 726 if hostaddr: 727 params['hostaddr'] = hostaddr 728 729 if hostsvcid: 730 params['hostsvcid'] = hostsvcid 731 732 return client.call('bdev_nvme_detach_controller', params) 733 734 735def bdev_nvme_reset_controller(client, name): 736 """Reset NVMe controller. 737 738 Args: 739 name: controller name 740 """ 741 742 params = {'name': name} 743 744 return client.call('bdev_nvme_reset_controller', params) 745 746 747def bdev_nvme_start_discovery(client, name, trtype, traddr, adrfam=None, trsvcid=None, 748 hostnqn=None, wait_for_attach=None, ctrlr_loss_timeout_sec=None, 749 reconnect_delay_sec=None, fast_io_fail_timeout_sec=None): 750 """Start discovery with the specified discovery subsystem 751 752 Args: 753 name: bdev name prefix; "n" + namespace ID will be appended to create unique names 754 trtype: transport type ("PCIe", "RDMA", "FC", "TCP") 755 traddr: transport address (PCI BDF or IP address) 756 adrfam: address family ("IPv4", "IPv6", "IB", or "FC") 757 trsvcid: transport service ID (port number for IP-based addresses) 758 hostnqn: NQN to connect from (optional) 759 wait_for_attach: Wait to complete RPC until all discovered NVM subsystems have attached (optional) 760 ctrlr_loss_timeout_sec: Time to wait until ctrlr is reconnected before deleting ctrlr. 761 -1 means infinite reconnect retries. 0 means no reconnect retry. 762 If reconnect_delay_sec is zero, ctrlr_loss_timeout_sec has to be zero. 763 If reconnect_delay_sec is non-zero, ctrlr_loss_timeout_sec has to be -1 or not less than reconnect_delay_sec. 764 (optional) 765 reconnect_delay_sec: Time to delay a reconnect retry. 766 If ctrlr_loss_timeout_sec is zero, reconnect_delay_sec has to be zero. 767 If ctrlr_loss_timeout_sec is -1, reconnect_delay_sec has to be non-zero. 768 If ctrlr_loss_timeout_sec is not -1 or zero, reconnect_sec has to be non-zero and less than ctrlr_loss_timeout_sec. 769 (optional) 770 fail_io_fast_timeout_sec: Time to wait until ctrlr is reconnected before failing I/O to ctrlr. 771 0 means no such timeout. 772 If fast_io_fail_timeout_sec is not zero, it has to be not less than reconnect_delay_sec and less than 773 ctrlr_loss_timeout_sec if ctrlr_loss_timeout_sec is not -1. (optional) 774 """ 775 params = {'name': name, 776 'trtype': trtype, 777 'traddr': traddr} 778 779 if hostnqn: 780 params['hostnqn'] = hostnqn 781 782 if adrfam: 783 params['adrfam'] = adrfam 784 785 if trsvcid: 786 params['trsvcid'] = trsvcid 787 788 if wait_for_attach: 789 params['wait_for_attach'] = True 790 791 if ctrlr_loss_timeout_sec is not None: 792 params['ctrlr_loss_timeout_sec'] = ctrlr_loss_timeout_sec 793 794 if reconnect_delay_sec is not None: 795 params['reconnect_delay_sec'] = reconnect_delay_sec 796 797 if fast_io_fail_timeout_sec is not None: 798 params['fast_io_fail_timeout_sec'] = fast_io_fail_timeout_sec 799 800 return client.call('bdev_nvme_start_discovery', params) 801 802 803def bdev_nvme_stop_discovery(client, name): 804 """Stop a previously started discovery service 805 806 Args: 807 name: name of discovery service to start 808 """ 809 params = {'name': name} 810 811 return client.call('bdev_nvme_stop_discovery', params) 812 813 814def bdev_nvme_cuse_register(client, name): 815 """Register CUSE devices on NVMe controller. 816 817 Args: 818 name: Name of the operating NVMe controller 819 """ 820 params = {'name': name} 821 822 return client.call('bdev_nvme_cuse_register', params) 823 824 825def bdev_nvme_cuse_unregister(client, name): 826 """Unregister CUSE devices on NVMe controller. 827 828 Args: 829 name: Name of the operating NVMe controller 830 """ 831 params = {'name': name} 832 833 return client.call('bdev_nvme_cuse_unregister', params) 834 835 836def bdev_zone_block_create(client, name, base_bdev, zone_capacity, optimal_open_zones): 837 """Creates a virtual zone device on top of existing non-zoned bdev. 838 839 Args: 840 name: Zone device name 841 base_bdev: Base Nvme bdev name 842 zone_capacity: Surfaced zone capacity in blocks 843 optimal_open_zones: Number of zones required to reach optimal write speed (optional, default: 1) 844 845 Returns: 846 Name of created block device. 847 """ 848 params = {'name': name, 849 'base_bdev': base_bdev, 850 'zone_capacity': zone_capacity, 851 'optimal_open_zones': optimal_open_zones} 852 853 return client.call('bdev_zone_block_create', params) 854 855 856def bdev_zone_block_delete(client, name): 857 """Remove block zone bdev from the system. 858 859 Args: 860 name: name of block zone bdev to delete 861 """ 862 params = {'name': name} 863 return client.call('bdev_zone_block_delete', params) 864 865 866def bdev_rbd_register_cluster(client, name, user=None, config_param=None, config_file=None, key_file=None): 867 """Create a Rados Cluster object of the Ceph RBD backend. 868 869 Args: 870 name: name of Rados Cluster 871 user: Ceph user name (optional) 872 config_param: map of config keys to values (optional) 873 config_file: file path of Ceph configuration file (optional) 874 key_file: file path of Ceph key file (optional) 875 876 Returns: 877 Name of registered Rados Cluster object. 878 """ 879 params = {'name': name} 880 881 if user is not None: 882 params['user_id'] = user 883 if config_param is not None: 884 params['config_param'] = config_param 885 if config_file is not None: 886 params['config_file'] = config_file 887 if key_file is not None: 888 params['key_file'] = key_file 889 890 return client.call('bdev_rbd_register_cluster', params) 891 892 893def bdev_rbd_unregister_cluster(client, name): 894 """Remove Rados cluster object from the system. 895 896 Args: 897 name: name of Rados cluster object to unregister 898 """ 899 params = {'name': name} 900 return client.call('bdev_rbd_unregister_cluster', params) 901 902 903def bdev_rbd_get_clusters_info(client, name): 904 """Get the cluster(s) info 905 906 Args: 907 name: name of Rados cluster object to query (optional; if omitted, query all clusters) 908 909 Returns: 910 List of registered Rados cluster information objects. 911 """ 912 params = {} 913 if name: 914 params['name'] = name 915 return client.call('bdev_rbd_get_clusters_info', params) 916 917 918@deprecated_alias('construct_rbd_bdev') 919def bdev_rbd_create(client, pool_name, rbd_name, block_size, name=None, user=None, config=None, cluster_name=None, uuid=None): 920 """Create a Ceph RBD block device. 921 922 Args: 923 pool_name: Ceph RBD pool name 924 rbd_name: Ceph RBD image name 925 block_size: block size of RBD volume 926 name: name of block device (optional) 927 user: Ceph user name (optional) 928 config: map of config keys to values (optional) 929 cluster_name: Name to identify Rados cluster (optional) 930 uuid: UUID of block device (optional) 931 932 Returns: 933 Name of created block device. 934 """ 935 params = { 936 'pool_name': pool_name, 937 'rbd_name': rbd_name, 938 'block_size': block_size, 939 } 940 941 if name: 942 params['name'] = name 943 if user is not None: 944 params['user_id'] = user 945 if config is not None: 946 params['config'] = config 947 if cluster_name is not None: 948 params['cluster_name'] = cluster_name 949 if uuid is not None: 950 params['uuid'] = uuid 951 952 return client.call('bdev_rbd_create', params) 953 954 955@deprecated_alias('delete_rbd_bdev') 956def bdev_rbd_delete(client, name): 957 """Remove rbd bdev from the system. 958 959 Args: 960 name: name of rbd bdev to delete 961 """ 962 params = {'name': name} 963 return client.call('bdev_rbd_delete', params) 964 965 966def bdev_rbd_resize(client, name, new_size): 967 """Resize rbd bdev in the system. 968 969 Args: 970 name: name of rbd bdev to resize 971 new_size: new bdev size of resize operation. The unit is MiB 972 """ 973 params = { 974 'name': name, 975 'new_size': new_size, 976 } 977 return client.call('bdev_rbd_resize', params) 978 979 980@deprecated_alias('construct_error_bdev') 981def bdev_error_create(client, base_name): 982 """Construct an error injection block device. 983 984 Args: 985 base_name: base bdev name 986 """ 987 params = {'base_name': base_name} 988 return client.call('bdev_error_create', params) 989 990 991def bdev_delay_create(client, base_bdev_name, name, avg_read_latency, p99_read_latency, avg_write_latency, p99_write_latency): 992 """Construct a delay block device. 993 994 Args: 995 base_bdev_name: name of the existing bdev 996 name: name of block device 997 avg_read_latency: complete 99% of read ops with this delay 998 p99_read_latency: complete 1% of read ops with this delay 999 avg_write_latency: complete 99% of write ops with this delay 1000 p99_write_latency: complete 1% of write ops with this delay 1001 1002 Returns: 1003 Name of created block device. 1004 """ 1005 params = { 1006 'base_bdev_name': base_bdev_name, 1007 'name': name, 1008 'avg_read_latency': avg_read_latency, 1009 'p99_read_latency': p99_read_latency, 1010 'avg_write_latency': avg_write_latency, 1011 'p99_write_latency': p99_write_latency, 1012 } 1013 return client.call('bdev_delay_create', params) 1014 1015 1016def bdev_delay_delete(client, name): 1017 """Remove delay bdev from the system. 1018 1019 Args: 1020 name: name of delay bdev to delete 1021 """ 1022 params = {'name': name} 1023 return client.call('bdev_delay_delete', params) 1024 1025 1026def bdev_delay_update_latency(client, delay_bdev_name, latency_type, latency_us): 1027 """Update the latency value for a delay block device 1028 1029 Args: 1030 delay_bdev_name: name of the delay bdev 1031 latency_type: 'one of: avg_read, avg_write, p99_read, p99_write. No other values accepted.' 1032 latency_us: 'new latency value.' 1033 1034 Returns: 1035 True if successful, or a specific error otherwise. 1036 """ 1037 params = { 1038 'delay_bdev_name': delay_bdev_name, 1039 'latency_type': latency_type, 1040 'latency_us': latency_us, 1041 } 1042 return client.call('bdev_delay_update_latency', params) 1043 1044 1045@deprecated_alias('delete_error_bdev') 1046def bdev_error_delete(client, name): 1047 """Remove error bdev from the system. 1048 1049 Args: 1050 bdev_name: name of error bdev to delete 1051 """ 1052 params = {'name': name} 1053 return client.call('bdev_error_delete', params) 1054 1055 1056@deprecated_alias('construct_iscsi_bdev') 1057def bdev_iscsi_create(client, name, url, initiator_iqn): 1058 """Construct an iSCSI block device. 1059 1060 Args: 1061 name: name of block device 1062 url: iSCSI URL 1063 initiator_iqn: IQN name to be used by initiator 1064 1065 Returns: 1066 Name of created block device. 1067 """ 1068 params = { 1069 'name': name, 1070 'url': url, 1071 'initiator_iqn': initiator_iqn, 1072 } 1073 return client.call('bdev_iscsi_create', params) 1074 1075 1076@deprecated_alias('delete_iscsi_bdev') 1077def bdev_iscsi_delete(client, name): 1078 """Remove iSCSI bdev from the system. 1079 1080 Args: 1081 bdev_name: name of iSCSI bdev to delete 1082 """ 1083 params = {'name': name} 1084 return client.call('bdev_iscsi_delete', params) 1085 1086 1087@deprecated_alias('construct_pmem_bdev') 1088def bdev_pmem_create(client, pmem_file, name): 1089 """Construct a libpmemblk block device. 1090 1091 Args: 1092 pmem_file: path to pmemblk pool file 1093 name: name of block device 1094 1095 Returns: 1096 Name of created block device. 1097 """ 1098 params = { 1099 'pmem_file': pmem_file, 1100 'name': name 1101 } 1102 return client.call('bdev_pmem_create', params) 1103 1104 1105@deprecated_alias('delete_pmem_bdev') 1106def bdev_pmem_delete(client, name): 1107 """Remove pmem bdev from the system. 1108 1109 Args: 1110 name: name of pmem bdev to delete 1111 """ 1112 params = {'name': name} 1113 return client.call('bdev_pmem_delete', params) 1114 1115 1116@deprecated_alias('construct_passthru_bdev') 1117def bdev_passthru_create(client, base_bdev_name, name): 1118 """Construct a pass-through block device. 1119 1120 Args: 1121 base_bdev_name: name of the existing bdev 1122 name: name of block device 1123 1124 Returns: 1125 Name of created block device. 1126 """ 1127 params = { 1128 'base_bdev_name': base_bdev_name, 1129 'name': name, 1130 } 1131 return client.call('bdev_passthru_create', params) 1132 1133 1134@deprecated_alias('delete_passthru_bdev') 1135def bdev_passthru_delete(client, name): 1136 """Remove pass through bdev from the system. 1137 1138 Args: 1139 name: name of pass through bdev to delete 1140 """ 1141 params = {'name': name} 1142 return client.call('bdev_passthru_delete', params) 1143 1144 1145def bdev_opal_create(client, nvme_ctrlr_name, nsid, locking_range_id, range_start, range_length, password): 1146 """Create opal virtual block devices from a base nvme bdev. 1147 1148 Args: 1149 nvme_ctrlr_name: name of the nvme ctrlr 1150 nsid: namespace ID of nvme ctrlr 1151 locking_range_id: locking range ID corresponding to this virtual bdev 1152 range_start: start address of this locking range 1153 range_length: length of this locking range 1154 password: admin password of base nvme bdev 1155 1156 Returns: 1157 Name of the new created block devices. 1158 """ 1159 params = { 1160 'nvme_ctrlr_name': nvme_ctrlr_name, 1161 'nsid': nsid, 1162 'locking_range_id': locking_range_id, 1163 'range_start': range_start, 1164 'range_length': range_length, 1165 'password': password, 1166 } 1167 1168 return client.call('bdev_opal_create', params) 1169 1170 1171def bdev_opal_get_info(client, bdev_name, password): 1172 """Get opal locking range info. 1173 1174 Args: 1175 bdev_name: name of opal vbdev to get info 1176 password: admin password 1177 1178 Returns: 1179 Locking range info. 1180 """ 1181 params = { 1182 'bdev_name': bdev_name, 1183 'password': password, 1184 } 1185 1186 return client.call('bdev_opal_get_info', params) 1187 1188 1189def bdev_opal_delete(client, bdev_name, password): 1190 """Delete opal virtual bdev from the system. 1191 1192 Args: 1193 bdev_name: name of opal vbdev to delete 1194 password: admin password of base nvme bdev 1195 """ 1196 params = { 1197 'bdev_name': bdev_name, 1198 'password': password, 1199 } 1200 1201 return client.call('bdev_opal_delete', params) 1202 1203 1204def bdev_opal_new_user(client, bdev_name, admin_password, user_id, user_password): 1205 """Add a user to opal bdev who can set lock state for this bdev. 1206 1207 Args: 1208 bdev_name: name of opal vbdev 1209 admin_password: admin password 1210 user_id: ID of the user who will be added to this opal bdev 1211 user_password: password set for this user 1212 """ 1213 params = { 1214 'bdev_name': bdev_name, 1215 'admin_password': admin_password, 1216 'user_id': user_id, 1217 'user_password': user_password, 1218 } 1219 1220 return client.call('bdev_opal_new_user', params) 1221 1222 1223def bdev_opal_set_lock_state(client, bdev_name, user_id, password, lock_state): 1224 """set lock state for an opal bdev. 1225 1226 Args: 1227 bdev_name: name of opal vbdev 1228 user_id: ID of the user who will set lock state 1229 password: password of the user 1230 lock_state: lock state to set 1231 """ 1232 params = { 1233 'bdev_name': bdev_name, 1234 'user_id': user_id, 1235 'password': password, 1236 'lock_state': lock_state, 1237 } 1238 1239 return client.call('bdev_opal_set_lock_state', params) 1240 1241 1242@deprecated_alias('construct_split_vbdev') 1243def bdev_split_create(client, base_bdev, split_count, split_size_mb=None): 1244 """Create split block devices from a base bdev. 1245 1246 Args: 1247 base_bdev: name of bdev to split 1248 split_count: number of split bdevs to create 1249 split_size_mb: size of each split volume in MiB (optional) 1250 1251 Returns: 1252 List of created block devices. 1253 """ 1254 params = { 1255 'base_bdev': base_bdev, 1256 'split_count': split_count, 1257 } 1258 if split_size_mb: 1259 params['split_size_mb'] = split_size_mb 1260 1261 return client.call('bdev_split_create', params) 1262 1263 1264@deprecated_alias('destruct_split_vbdev') 1265def bdev_split_delete(client, base_bdev): 1266 """Delete split block devices. 1267 1268 Args: 1269 base_bdev: name of previously split bdev 1270 """ 1271 params = { 1272 'base_bdev': base_bdev, 1273 } 1274 1275 return client.call('bdev_split_delete', params) 1276 1277 1278@deprecated_alias('construct_ftl_bdev') 1279def bdev_ftl_create(client, name, base_bdev, **kwargs): 1280 """Construct FTL bdev 1281 1282 Args: 1283 name: name of the bdev 1284 base_bdev: name of the base bdev 1285 kwargs: optional parameters 1286 """ 1287 params = {'name': name, 1288 'base_bdev': base_bdev} 1289 for key, value in kwargs.items(): 1290 if value is not None: 1291 params[key] = value 1292 1293 return client.call('bdev_ftl_create', params) 1294 1295 1296@deprecated_alias('delete_ftl_bdev') 1297def bdev_ftl_delete(client, name): 1298 """Delete FTL bdev 1299 1300 Args: 1301 name: name of the bdev 1302 """ 1303 params = {'name': name} 1304 1305 return client.call('bdev_ftl_delete', params) 1306 1307 1308@deprecated_alias('get_bdevs') 1309def bdev_get_bdevs(client, name=None, timeout=None): 1310 """Get information about block devices. 1311 1312 Args: 1313 name: bdev name to query (optional; if omitted, query all bdevs) 1314 timeout: time in ms to wait for the bdev with specified name to appear 1315 1316 Returns: 1317 List of bdev information objects. 1318 """ 1319 params = {} 1320 if name: 1321 params['name'] = name 1322 if timeout: 1323 params['timeout'] = timeout 1324 return client.call('bdev_get_bdevs', params) 1325 1326 1327@deprecated_alias('get_bdevs_iostat') 1328def bdev_get_iostat(client, name=None): 1329 """Get I/O statistics for block devices. 1330 1331 Args: 1332 name: bdev name to query (optional; if omitted, query all bdevs) 1333 1334 Returns: 1335 I/O statistics for the requested block devices. 1336 """ 1337 params = {} 1338 if name: 1339 params['name'] = name 1340 return client.call('bdev_get_iostat', params) 1341 1342 1343@deprecated_alias('enable_bdev_histogram') 1344def bdev_enable_histogram(client, name, enable): 1345 """Control whether histogram is enabled for specified bdev. 1346 1347 Args: 1348 bdev_name: name of bdev 1349 """ 1350 params = {'name': name, "enable": enable} 1351 return client.call('bdev_enable_histogram', params) 1352 1353 1354@deprecated_alias('get_bdev_histogram') 1355def bdev_get_histogram(client, name): 1356 """Get histogram for specified bdev. 1357 1358 Args: 1359 bdev_name: name of bdev 1360 """ 1361 params = {'name': name} 1362 return client.call('bdev_get_histogram', params) 1363 1364 1365@deprecated_alias('bdev_inject_error') 1366def bdev_error_inject_error(client, name, io_type, error_type, num=1): 1367 """Inject an error via an error bdev. 1368 1369 Args: 1370 name: name of error bdev 1371 io_type: one of "clear", "read", "write", "unmap", "flush", or "all" 1372 error_type: one of "failure" or "pending" 1373 num: number of commands to fail 1374 """ 1375 params = { 1376 'name': name, 1377 'io_type': io_type, 1378 'error_type': error_type, 1379 'num': num, 1380 } 1381 1382 return client.call('bdev_error_inject_error', params) 1383 1384 1385@deprecated_alias('set_bdev_qd_sampling_period') 1386def bdev_set_qd_sampling_period(client, name, period): 1387 """Enable queue depth tracking on a specified bdev. 1388 1389 Args: 1390 name: name of a bdev on which to track queue depth. 1391 period: period (in microseconds) at which to update the queue depth reading. If set to 0, polling will be disabled. 1392 """ 1393 1394 params = {} 1395 params['name'] = name 1396 params['period'] = period 1397 return client.call('bdev_set_qd_sampling_period', params) 1398 1399 1400@deprecated_alias('set_bdev_qos_limit') 1401def bdev_set_qos_limit( 1402 client, 1403 name, 1404 rw_ios_per_sec=None, 1405 rw_mbytes_per_sec=None, 1406 r_mbytes_per_sec=None, 1407 w_mbytes_per_sec=None): 1408 """Set QoS rate limit on a block device. 1409 1410 Args: 1411 name: name of block device 1412 rw_ios_per_sec: R/W IOs per second limit (>=1000, example: 20000). 0 means unlimited. 1413 rw_mbytes_per_sec: R/W megabytes per second limit (>=10, example: 100). 0 means unlimited. 1414 r_mbytes_per_sec: Read megabytes per second limit (>=10, example: 100). 0 means unlimited. 1415 w_mbytes_per_sec: Write megabytes per second limit (>=10, example: 100). 0 means unlimited. 1416 """ 1417 params = {} 1418 params['name'] = name 1419 if rw_ios_per_sec is not None: 1420 params['rw_ios_per_sec'] = rw_ios_per_sec 1421 if rw_mbytes_per_sec is not None: 1422 params['rw_mbytes_per_sec'] = rw_mbytes_per_sec 1423 if r_mbytes_per_sec is not None: 1424 params['r_mbytes_per_sec'] = r_mbytes_per_sec 1425 if w_mbytes_per_sec is not None: 1426 params['w_mbytes_per_sec'] = w_mbytes_per_sec 1427 return client.call('bdev_set_qos_limit', params) 1428 1429 1430@deprecated_alias('apply_firmware') 1431def bdev_nvme_apply_firmware(client, bdev_name, filename): 1432 """Download and commit firmware to NVMe device. 1433 1434 Args: 1435 bdev_name: name of NVMe block device 1436 filename: filename of the firmware to download 1437 """ 1438 params = { 1439 'filename': filename, 1440 'bdev_name': bdev_name, 1441 } 1442 return client.call('bdev_nvme_apply_firmware', params) 1443 1444 1445def bdev_nvme_get_transport_statistics(client): 1446 """Get bdev_nvme poll group transport statistics""" 1447 return client.call('bdev_nvme_get_transport_statistics') 1448 1449 1450def bdev_nvme_get_controller_health_info(client, name): 1451 """Display health log of the required NVMe bdev controller. 1452 1453 Args: 1454 name: name of the required NVMe bdev controller 1455 1456 Returns: 1457 Health log for the requested NVMe bdev controller. 1458 """ 1459 params = {} 1460 params['name'] = name 1461 return client.call('bdev_nvme_get_controller_health_info', params) 1462