sbcli-dev 5.1.3__zip → 5.1.5__zip

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of sbcli-dev might be problematic. Click here for more details.

Files changed (149) hide show
  1. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/PKG-INFO +1 -1
  2. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/env_var +2 -2
  3. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/sbcli_dev.egg-info/PKG-INFO +1 -1
  4. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_cli/cli.py +26 -3
  5. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/cluster_ops.py +9 -2
  6. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/constants.py +3 -0
  7. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/controllers/device_controller.py +5 -0
  8. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/controllers/health_controller.py +4 -1
  9. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/controllers/lvol_controller.py +21 -15
  10. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/controllers/tasks_controller.py +8 -0
  11. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/models/cluster.py +3 -0
  12. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/models/lvol_model.py +1 -0
  13. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/models/nvme_device.py +3 -1
  14. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/rpc_client.py +20 -4
  15. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/services/capacity_and_stats_collector.py +1 -1
  16. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/storage_node_ops.py +56 -7
  17. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/blueprints/web_api_cluster.py +5 -1
  18. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/blueprints/web_api_lvol.py +3 -1
  19. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/README.md +0 -0
  20. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/pyproject.toml +0 -0
  21. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/sbcli_dev.egg-info/SOURCES.txt +0 -0
  22. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/sbcli_dev.egg-info/dependency_links.txt +0 -0
  23. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/sbcli_dev.egg-info/entry_points.txt +0 -0
  24. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/sbcli_dev.egg-info/requires.txt +0 -0
  25. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/sbcli_dev.egg-info/top_level.txt +0 -0
  26. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/setup.cfg +0 -0
  27. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/setup.py +0 -0
  28. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_cli/main.py +0 -0
  29. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/__init__.py +0 -0
  30. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/cnode_client.py +0 -0
  31. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/compute_node_ops.py +0 -0
  32. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/controllers/__init__.py +0 -0
  33. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/controllers/caching_node_controller.py +0 -0
  34. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/controllers/cluster_events.py +0 -0
  35. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/controllers/device_events.py +0 -0
  36. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/controllers/events_controller.py +0 -0
  37. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/controllers/lvol_events.py +0 -0
  38. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/controllers/mgmt_events.py +0 -0
  39. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/controllers/pool_controller.py +0 -0
  40. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/controllers/pool_events.py +0 -0
  41. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/controllers/snapshot_controller.py +0 -0
  42. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/controllers/snapshot_events.py +0 -0
  43. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/controllers/storage_events.py +0 -0
  44. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/controllers/tasks_events.py +0 -0
  45. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/distr_controller.py +0 -0
  46. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/kv_store.py +0 -0
  47. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/mgmt_node_ops.py +0 -0
  48. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/models/__init__.py +0 -0
  49. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/models/base_model.py +0 -0
  50. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/models/caching_node.py +0 -0
  51. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/models/compute_node.py +0 -0
  52. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/models/deployer.py +0 -0
  53. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/models/events.py +0 -0
  54. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/models/global_settings.py +0 -0
  55. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/models/iface.py +0 -0
  56. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/models/job_schedule.py +0 -0
  57. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/models/mgmt_node.py +0 -0
  58. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/models/pool.py +0 -0
  59. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/models/port_stat.py +0 -0
  60. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/models/snapshot.py +0 -0
  61. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/models/stats.py +0 -0
  62. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/models/storage_node.py +0 -0
  63. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/pci_utils.py +0 -0
  64. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/__init__.py +0 -0
  65. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/alerting/alert_resources.yaml.j2 +0 -0
  66. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/alerting/alert_rules.yaml +0 -0
  67. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/clean_local_storage_deploy.sh +0 -0
  68. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/config_docker.sh +0 -0
  69. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/dashboard.yml +0 -0
  70. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/dashboards/cluster.json +0 -0
  71. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/dashboards/devices.json +0 -0
  72. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/dashboards/lvols.json +0 -0
  73. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/dashboards/node-exporter.json +0 -0
  74. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/dashboards/nodes.json +0 -0
  75. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/dashboards/pools.json +0 -0
  76. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/datasource.yml +0 -0
  77. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/db_config_double.sh +0 -0
  78. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/db_config_single.sh +0 -0
  79. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/deploy_stack.sh +0 -0
  80. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/docker-compose-swarm-monitoring.yml +0 -0
  81. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/docker-compose-swarm.yml +0 -0
  82. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/haproxy.cfg +0 -0
  83. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/install_deps.sh +0 -0
  84. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/objstore.yml +0 -0
  85. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/prometheus.yml +0 -0
  86. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/run_ssh.sh +0 -0
  87. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/set_db_config.sh +0 -0
  88. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/stack_deploy_wait.sh +0 -0
  89. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/services/__init__.py +0 -0
  90. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/services/cached_lvol_stat_collector.py +0 -0
  91. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/services/caching_node_monitor.py +0 -0
  92. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/services/cap_monitor.py +0 -0
  93. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/services/device_monitor.py +0 -0
  94. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/services/health_check_service.py +0 -0
  95. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/services/install_service.sh +0 -0
  96. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/services/log_agg_service.py +0 -0
  97. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/services/lvol_monitor.py +0 -0
  98. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/services/lvol_stat_collector.py +0 -0
  99. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/services/main_distr_event_collector.py +0 -0
  100. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/services/mgmt_node_monitor.py +0 -0
  101. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/services/new_device_discovery.py +0 -0
  102. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/services/port_stat_collector.py +0 -0
  103. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/services/remove_service.sh +0 -0
  104. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/services/service_template.service +0 -0
  105. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/services/spdk_http_proxy_server.py +0 -0
  106. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/services/storage_node_monitor.py +0 -0
  107. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/services/tasks_runner_failed_migration.py +0 -0
  108. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/services/tasks_runner_migration.py +0 -0
  109. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/services/tasks_runner_new_dev_migration.py +0 -0
  110. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/services/tasks_runner_node_add.py +0 -0
  111. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/services/tasks_runner_restart.py +0 -0
  112. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/shell_utils.py +0 -0
  113. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/snode_client.py +0 -0
  114. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/utils.py +0 -0
  115. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/__init__.py +0 -0
  116. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/app.py +0 -0
  117. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/auth_middleware.py +0 -0
  118. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/blueprints/__init__.py +0 -0
  119. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/blueprints/caching_node_ops.py +0 -0
  120. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/blueprints/caching_node_ops_k8s.py +0 -0
  121. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/blueprints/node_api_basic.py +0 -0
  122. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/blueprints/node_api_caching_docker.py +0 -0
  123. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/blueprints/node_api_caching_ks.py +0 -0
  124. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/blueprints/snode_ops.py +0 -0
  125. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/blueprints/snode_ops_k8s.py +0 -0
  126. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/blueprints/web_api_caching_node.py +0 -0
  127. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/blueprints/web_api_deployer.py +0 -0
  128. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/blueprints/web_api_device.py +0 -0
  129. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/blueprints/web_api_mgmt_node.py +0 -0
  130. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/blueprints/web_api_pool.py +0 -0
  131. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/blueprints/web_api_snapshot.py +0 -0
  132. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/blueprints/web_api_storage_node.py +0 -0
  133. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/caching_node_app.py +0 -0
  134. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/caching_node_app_k8s.py +0 -0
  135. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/node_utils.py +0 -0
  136. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/node_webapp.py +0 -0
  137. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/snode_app.py +0 -0
  138. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/snode_app_k8s.py +0 -0
  139. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/static/delete.py +0 -0
  140. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/static/deploy.py +0 -0
  141. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/static/deploy_cnode.yaml +0 -0
  142. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/static/deploy_spdk.yaml +0 -0
  143. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/static/is_up.py +0 -0
  144. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/static/list_deps.py +0 -0
  145. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/static/rpac.yaml +0 -0
  146. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/static/tst.py +0 -0
  147. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/templates/caching_deploy_spdk.yaml.j2 +0 -0
  148. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/templates/storage_deploy_spdk.yaml.j2 +0 -0
  149. {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sbcli-dev
3
- Version: 5.1.3
3
+ Version: 5.1.5
4
4
  Summary: CLI for managing SimplyBlock cluster
5
5
  Home-page: https://www.simplyblock.io/
6
6
  Author: Hamdy
@@ -1,5 +1,5 @@
1
1
  SIMPLY_BLOCK_COMMAND_NAME=sbcli-dev
2
- SIMPLY_BLOCK_VERSION=5.1.3
2
+ SIMPLY_BLOCK_VERSION=5.1.5
3
3
 
4
4
  SIMPLY_BLOCK_DOCKER_IMAGE=simplyblock/simplyblock:main
5
- DOCKER_USER=hamdysimplyblock
5
+ DOCKER_USER=hamdysimplyblock
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sbcli-dev
3
- Version: 5.1.3
3
+ Version: 5.1.5
4
4
  Summary: CLI for managing SimplyBlock cluster
5
5
  Home-page: https://www.simplyblock.io/
6
6
  Author: Hamdy
@@ -296,6 +296,11 @@ class CLIWrapper:
296
296
  sub_command.add_argument("--enable-node-affinity", help='Enable node affinity for storage nodes', action='store_true')
297
297
  sub_command.add_argument("--qpair-count", help='tcp transport qpair count', type=int, dest='qpair_count',
298
298
  default=6, choices=range(128))
299
+ sub_command.add_argument("--max-queue-size", help='The max size the queue will grow', type=int, default=128)
300
+ sub_command.add_argument("--inflight-io-threshold", help='The number of inflight IOs allowed before the IO queuing starts', type=int, default=4)
301
+ sub_command.add_argument("--enable-qos", help='Enable qos bdev for storage nodes', action='store_true', dest='enable_qos')
302
+
303
+
299
304
  # add cluster
300
305
  sub_command = self.add_sub_command(subparser, 'add', 'Add new cluster')
301
306
  sub_command.add_argument("--blk_size", help='The block size in bytes', type=int, choices=[512, 4096], default=512)
@@ -319,6 +324,9 @@ class CLIWrapper:
319
324
  sub_command.add_argument("--enable-node-affinity", help='Enable node affinity for storage nodes', action='store_true')
320
325
  sub_command.add_argument("--qpair-count", help='tcp transport qpair count', type=int, dest='qpair_count',
321
326
  default=6, choices=range(128))
327
+ sub_command.add_argument("--max-queue-size", help='The max size the queue will grow', type=int, default=128)
328
+ sub_command.add_argument("--inflight-io-threshold", help='The number of inflight IOs allowed before the IO queuing starts', type=int, default=4)
329
+ sub_command.add_argument("--enable-qos", help='Enable qos bdev for storage nodes', action='store_true', dest='enable_qos')
322
330
 
323
331
  # Activate cluster
324
332
  sub_command = self.add_sub_command(subparser, 'activate', 'Create distribs and raid0 bdevs on all the storage node and move the cluster to active state')
@@ -440,6 +448,7 @@ class CLIWrapper:
440
448
  default=0)
441
449
  sub_command.add_argument("--ha-type", help='LVol HA type (single, ha), default is cluster HA type',
442
450
  dest='ha_type', choices=["single", "ha", "default"], default='default')
451
+ sub_command.add_argument("--lvol-priority-class", help='Lvol priority class', type=int, choices=[0, 1], default=0)
443
452
 
444
453
 
445
454
  # set lvol params
@@ -1007,6 +1016,7 @@ class CLIWrapper:
1007
1016
  crypto = args.encrypt
1008
1017
  distr_vuid = args.distr_vuid
1009
1018
  with_snapshot = args.snapshot
1019
+ lvol_priority_class = args.lvol_priority_class
1010
1020
  results, error = lvol_controller.add_lvol_ha(
1011
1021
  name, size, host_id, ha_type, pool, comp, crypto,
1012
1022
  distr_vuid,
@@ -1017,7 +1027,8 @@ class CLIWrapper:
1017
1027
  with_snapshot=with_snapshot,
1018
1028
  max_size=max_size,
1019
1029
  crypto_key1=args.crypto_key1,
1020
- crypto_key2=args.crypto_key2)
1030
+ crypto_key2=args.crypto_key2,
1031
+ lvol_priority_class=lvol_priority_class)
1021
1032
  if results:
1022
1033
  ret = results
1023
1034
  else:
@@ -1252,12 +1263,18 @@ class CLIWrapper:
1252
1263
  distr_bs = args.distr_bs
1253
1264
  distr_chunk_bs = args.distr_chunk_bs
1254
1265
  ha_type = args.ha_type
1266
+
1255
1267
  enable_node_affinity = args.enable_node_affinity
1256
1268
  qpair_count = args.qpair_count
1269
+ max_queue_size = args.max_queue_size
1270
+ inflight_io_threshold = args.inflight_io_threshold
1271
+ enable_qos = args.enable_qos
1257
1272
 
1258
1273
  return cluster_ops.add_cluster(
1259
1274
  blk_size, page_size_in_blocks, cap_warn, cap_crit, prov_cap_warn, prov_cap_crit,
1260
- distr_ndcs, distr_npcs, distr_bs, distr_chunk_bs, ha_type, enable_node_affinity, qpair_count)
1275
+ distr_ndcs, distr_npcs, distr_bs, distr_chunk_bs, ha_type, enable_node_affinity,
1276
+ qpair_count, max_queue_size, inflight_io_threshold, enable_qos)
1277
+
1261
1278
 
1262
1279
  def cluster_create(self, args):
1263
1280
  page_size_in_blocks = args.page_size
@@ -1279,12 +1296,18 @@ class CLIWrapper:
1279
1296
  grafana_endpoint = args.grafana_endpoint
1280
1297
  enable_node_affinity = args.enable_node_affinity
1281
1298
  qpair_count = args.qpair_count
1299
+ max_queue_size = args.max_queue_size
1300
+ inflight_io_threshold = args.inflight_io_threshold
1301
+ enable_qos = args.enable_qos
1302
+
1282
1303
 
1283
1304
  return cluster_ops.create_cluster(
1284
1305
  blk_size, page_size_in_blocks,
1285
1306
  CLI_PASS, cap_warn, cap_crit, prov_cap_warn, prov_cap_crit,
1286
1307
  ifname, log_del_interval, metrics_retention_period, contact_point, grafana_endpoint,
1287
- distr_ndcs, distr_npcs, distr_bs, distr_chunk_bs, ha_type, enable_node_affinity, qpair_count)
1308
+ distr_ndcs, distr_npcs, distr_bs, distr_chunk_bs, ha_type, enable_node_affinity,
1309
+ qpair_count, max_queue_size, inflight_io_threshold, enable_qos)
1310
+
1288
1311
 
1289
1312
  def query_yes_no(self, question, default="yes"):
1290
1313
  """Ask a yes/no question via raw_input() and return their answer.
@@ -103,7 +103,8 @@ def _add_graylog_input(cluster_ip, password):
103
103
  def create_cluster(blk_size, page_size_in_blocks, cli_pass,
104
104
  cap_warn, cap_crit, prov_cap_warn, prov_cap_crit, ifname, log_del_interval, metrics_retention_period,
105
105
  contact_point, grafana_endpoint, distr_ndcs, distr_npcs, distr_bs, distr_chunk_bs, ha_type,
106
- enable_node_affinity, qpair_count):
106
+ enable_node_affinity, qpair_count, max_queue_size, inflight_io_threshold, enable_qos):
107
+
107
108
  logger.info("Installing dependencies...")
108
109
  ret = scripts.install_deps()
109
110
  logger.info("Installing dependencies > Done")
@@ -172,6 +173,10 @@ def create_cluster(blk_size, page_size_in_blocks, cli_pass,
172
173
  c.enable_node_affinity = enable_node_affinity
173
174
  c.qpair_count = qpair_count or 256
174
175
 
176
+ c.max_queue_size = max_queue_size
177
+ c.inflight_io_threshold = inflight_io_threshold
178
+ c.enable_qos = enable_qos
179
+
175
180
  alerts_template_folder = os.path.join(TOP_DIR, "simplyblock_core/scripts/alerting/")
176
181
  alert_resources_file = "alert_resources.yaml"
177
182
 
@@ -289,7 +294,8 @@ def deploy_spdk(node_docker, spdk_cpu_mask, spdk_mem):
289
294
 
290
295
 
291
296
  def add_cluster(blk_size, page_size_in_blocks, cap_warn, cap_crit, prov_cap_warn, prov_cap_crit,
292
- distr_ndcs, distr_npcs, distr_bs, distr_chunk_bs, ha_type, enable_node_affinity, qpair_count):
297
+ distr_ndcs, distr_npcs, distr_bs, distr_chunk_bs, ha_type, enable_node_affinity, qpair_count,
298
+ enable_qos):
293
299
  db_controller = DBController()
294
300
  clusters = db_controller.get_clusters()
295
301
  if not clusters:
@@ -322,6 +328,7 @@ def add_cluster(blk_size, page_size_in_blocks, cap_warn, cap_crit, prov_cap_warn
322
328
  cluster.ha_type = ha_type
323
329
  cluster.enable_node_affinity = enable_node_affinity
324
330
  cluster.qpair_count = qpair_count or 256
331
+ cluster.enable_qos = enable_qos
325
332
  if cap_warn and cap_warn > 0:
326
333
  cluster.cap_warn = cap_warn
327
334
  if cap_crit and cap_crit > 0:
@@ -52,11 +52,14 @@ GRAYLOG_CHECK_INTERVAL_SEC = 60
52
52
 
53
53
  FDB_CHECK_INTERVAL_SEC = 60
54
54
 
55
+
56
+
55
57
  SIMPLY_BLOCK_DOCKER_IMAGE = "simplyblock/simplyblock:main"
56
58
  SIMPLY_BLOCK_CLI_NAME = "sbcli-dev"
57
59
  TASK_EXEC_INTERVAL_SEC = 30
58
60
  TASK_EXEC_RETRY_COUNT = 8
59
61
 
62
+
60
63
  SIMPLY_BLOCK_SPDK_ULTRA_IMAGE = "simplyblock/spdk:main-latest"
61
64
 
62
65
  GELF_PORT = 12202
@@ -380,6 +380,11 @@ def device_remove(device_id, force=True):
380
380
  logger.error(f"Failed to remove bdev: {device.alceml_bdev}")
381
381
  if not force:
382
382
  return False
383
+ ret = rpc_client.qos_vbdev_delete(device.qos_bdev)
384
+ if not ret:
385
+ logger.error(f"Failed to remove bdev: {device.qos_bdev}")
386
+ if not force:
387
+ return False
383
388
  if snode.enable_test_device:
384
389
  ret = rpc_client.bdev_passtest_delete(device.testing_bdev)
385
390
  if not ret:
@@ -6,7 +6,7 @@ import docker
6
6
 
7
7
  from simplyblock_core import utils, distr_controller
8
8
  from simplyblock_core.kv_store import DBController
9
- from simplyblock_core.models.nvme_device import NVMeDevice
9
+ from simplyblock_core.models.nvme_device import NVMeDevice, JMDevice
10
10
  from simplyblock_core.models.storage_node import StorageNode
11
11
  from simplyblock_core.rpc_client import RPCClient
12
12
  from simplyblock_core.snode_client import SNodeClient
@@ -444,6 +444,9 @@ def check_jm_device(device_id):
444
444
  logger.info(f"Skipping ,device status is {jm_device.status}")
445
445
  return True
446
446
 
447
+ if snode.primary_ip != snode.mgmt_ip and jm_device.status == JMDevice.STATUS_UNAVAILABLE:
448
+ return True
449
+
447
450
  passed = True
448
451
  try:
449
452
  rpc_client = RPCClient(
@@ -277,7 +277,7 @@ def validate_aes_xts_keys(key1: str, key2: str) -> Tuple[bool, str]:
277
277
 
278
278
  def add_lvol_ha(name, size, host_id_or_name, ha_type, pool_id_or_name, use_comp, use_crypto,
279
279
  distr_vuid, max_rw_iops, max_rw_mbytes, max_r_mbytes, max_w_mbytes,
280
- with_snapshot=False, max_size=0, crypto_key1=None, crypto_key2=None):
280
+ with_snapshot=False, max_size=0, crypto_key1=None, crypto_key2=None, lvol_priority_class=0):
281
281
 
282
282
  logger.info(f"Adding LVol: {name}")
283
283
  host_node = None
@@ -400,6 +400,7 @@ def add_lvol_ha(name, size, host_id_or_name, ha_type, pool_id_or_name, use_comp,
400
400
  lvol.npcs = cl.distr_npcs
401
401
  lvol.distr_bs = cl.distr_bs
402
402
  lvol.distr_chunk_bs = cl.distr_chunk_bs
403
+ lvol.lvol_priority_class = lvol_priority_class
403
404
  #lvol.distr_page_size = (distr_npcs+distr_npcs)*cl.page_size_in_blocks
404
405
 
405
406
 
@@ -456,8 +457,8 @@ def add_lvol_ha(name, size, host_id_or_name, ha_type, pool_id_or_name, use_comp,
456
457
  # }
457
458
  # })
458
459
  # else:
459
- lvol.bdev_stack.extend(
460
- [
460
+ #lvol.bdev_stack.extend(
461
+ # [
461
462
  #{
462
463
  # "type": "bdev_distr",
463
464
  # "name": lvol.base_bdev,
@@ -483,17 +484,22 @@ def add_lvol_ha(name, size, host_id_or_name, ha_type, pool_id_or_name, use_comp,
483
484
  # "num_md_pages_per_cluster_ratio": 1,
484
485
  # }
485
486
  #},
486
- {
487
- "type": "bdev_lvol",
488
- "name": lvol.lvol_bdev,
489
- "params": {
490
- "name": lvol.lvol_bdev,
491
- "size_in_mib": int(lvol.size/(1000*1000)),
492
- "lvs_name": lvol.lvs_name
493
- }
494
- }
495
- ]
496
- )
487
+
488
+ # ]
489
+ #)
490
+ lvol_dict = {
491
+ "type": "bdev_lvol",
492
+ "name": lvol.lvol_bdev,
493
+ "params": {
494
+ "name": lvol.lvol_bdev,
495
+ "size_in_mib": int(lvol.size / (1000 * 1000)),
496
+ "lvs_name": lvol.lvs_name
497
+ }
498
+ }
499
+
500
+ if lvol.lvol_priority_class:
501
+ lvol_dict["lvol_priority_class"] = lvol.lvol_priority_class
502
+ lvol.bdev_stack = [lvol_dict]
497
503
 
498
504
  if use_crypto:
499
505
  if crypto_key1 == None or crypto_key2 == None:
@@ -970,7 +976,7 @@ def list_lvols(is_json, cluster_id, pool_id_or_name, all=False):
970
976
  "Size": utils.humanbytes(lvol.size),
971
977
  "Hostname": lvol.hostname,
972
978
  "HA": lvol.ha_type,
973
- "VUID": lvol.vuid,
979
+ "Priority": lvol.lvol_priority_class,
974
980
  "Mod": f"{lvol.ndcs}x{lvol.npcs}",
975
981
  "Status": lvol.status,
976
982
  "IO Err": lvol.io_error,
@@ -235,3 +235,11 @@ def get_new_device_mig_task_for_device(cluster_id):
235
235
  return task.uuid
236
236
  return False
237
237
 
238
+
239
+ def get_failed_device_mig_task(cluster_id, device_id):
240
+ tasks = db_controller.get_job_tasks(cluster_id)
241
+ for task in tasks:
242
+ if task.function_name == JobSchedule.FN_FAILED_DEV_MIG and task.device_id == device_id:
243
+ if task.status != JobSchedule.STATUS_DONE and task.canceled is False:
244
+ return task.uuid
245
+ return False
@@ -57,6 +57,9 @@ class Cluster(BaseModel):
57
57
  "updated_at": {"type": str, "default": ""},
58
58
  "grafana_endpoint": {"type": str, "default": ""},
59
59
  "enable_node_affinity": {"type": bool, 'default': False},
60
+ "max_queue_size": {"type": int, "default": 128},
61
+ "inflight_io_threshold": {"type": int, "default": 4},
62
+ "enable_qos": {"type": bool, 'default': False}
60
63
  }
61
64
 
62
65
  def __init__(self, data=None):
@@ -70,6 +70,7 @@ class LVol(BaseModel):
70
70
  "io_error": {"type": bool, 'default': False},
71
71
 
72
72
  "deletion_status": {"type": str, 'default': ""},
73
+ "lvol_priority_class": {"type": int, 'default': 0},
73
74
 
74
75
  }
75
76
 
@@ -52,7 +52,8 @@ class NVMeDevice(BaseModel):
52
52
  "cluster_device_order": {"type": int, 'default': 0},
53
53
  "health_check": {"type": bool, "default": True},
54
54
  "cluster_id": {"type": str, 'default': ""},
55
-
55
+ "qos_name": {"type": str, 'default': ""},
56
+ "alceml_name": {"type": str, 'default': ""},
56
57
  "bdev_stack": {"type": List, 'default': []},
57
58
 
58
59
  "io_error": {"type": bool, 'default': False},
@@ -106,6 +107,7 @@ class JMDevice(BaseModel):
106
107
  "raid_bdev": {"type": str, 'default': ""},
107
108
  "nvme_bdev": {"type": str, 'default': ""},
108
109
  "alceml_bdev": {"type": str, 'default': ""},
110
+ "alceml_name": {"type": str, 'default': ""},
109
111
  "testing_bdev": {"type": str, 'default': ""},
110
112
  "jm_bdev": {"type": str, 'default': ""},
111
113
  "device_data_dict": {"type": dict, 'default': {}},
@@ -1,4 +1,3 @@
1
-
2
1
  import json
3
2
 
4
3
  import requests
@@ -265,7 +264,7 @@ class RPCClient:
265
264
  }
266
265
  return self._request("bdev_lvol_create_lvstore", params)
267
266
 
268
- def create_lvol(self, name, size_in_mib, lvs_name):
267
+ def create_lvol(self, name, size_in_mib, lvs_name, lvol_priority_class=0):
269
268
  params = {
270
269
  "lvol_name": name,
271
270
  "size_in_mib": size_in_mib,
@@ -273,6 +272,8 @@ class RPCClient:
273
272
  "thin_provision": True,
274
273
  "clear_method": "unmap",
275
274
  }
275
+ if lvol_priority_class:
276
+ params["lvol_priority_class"] = lvol_priority_class
276
277
  return self._request("bdev_lvol_create", params)
277
278
 
278
279
  def delete_lvol(self, name):
@@ -360,6 +361,22 @@ class RPCClient:
360
361
  params = {"name": name}
361
362
  return self._request2("ultra21_bdev_pass_delete", params)
362
363
 
364
+ def qos_vbdev_create(self, qos_bdev, base_bdev_name, base_nvme_hw_name, max_queue_size,
365
+ inflight_io_threshold):
366
+ params = {
367
+ "base_bdev_name": base_bdev_name,
368
+ "name": qos_bdev,
369
+ "base_nvme_hw_name": base_nvme_hw_name,
370
+ "max_queue_size": max_queue_size,
371
+ "inflight_io_threshold": inflight_io_threshold
372
+ }
373
+
374
+ return self._request("qos_vbdev_create", params)
375
+
376
+ def qos_vbdev_delete(self, name):
377
+ params = {"name": name}
378
+ return self._request2("qos_vbdev_delete", params)
379
+
363
380
  def bdev_alceml_create(self, alceml_name, nvme_name, uuid, pba_init_mode=3,
364
381
  alceml_cpu_mask="", alceml_worker_cpu_mask=""):
365
382
  params = {
@@ -381,7 +398,7 @@ class RPCClient:
381
398
  if alceml_cpu_mask:
382
399
  params["bdb_lcpu_mask"] = int(alceml_cpu_mask, 16)
383
400
  if alceml_worker_cpu_mask:
384
- params["bdb_lcpu_mask_alt_workers"] = int(alceml_worker_cpu_mask,16)
401
+ params["bdb_lcpu_mask_alt_workers"] = int(alceml_worker_cpu_mask, 16)
385
402
  return self._request("bdev_alceml_create", params)
386
403
 
387
404
  def bdev_distrib_create(self, name, vuid, ndcs, npcs, num_blocks, block_size, jm_names,
@@ -734,7 +751,6 @@ class RPCClient:
734
751
  }
735
752
  return self._request("nbd_stop_disk", params)
736
753
 
737
-
738
754
  def bdev_jm_unmap_vuid(self, name, vuid):
739
755
  params = {"name": name, "vuid": vuid}
740
756
  return self._request("bdev_jm_unmap_vuid", params)
@@ -182,7 +182,7 @@ while True:
182
182
  if device.status not in [NVMeDevice.STATUS_ONLINE, NVMeDevice.STATUS_READONLY]:
183
183
  logger.info(f"Device is skipped: {device.get_id()} status: {device.status}")
184
184
  continue
185
- capacity_dict = rpc_client.alceml_get_capacity(device.alceml_bdev)
185
+ capacity_dict = rpc_client.alceml_get_capacity(device.alceml_name)
186
186
  stats_dict = rpc_client.get_device_stats(device.nvme_bdev)
187
187
  record = add_device_stats(cl, device, capacity_dict, stats_dict)
188
188
  if record:
@@ -254,6 +254,18 @@ def _create_jm_stack_on_raid(rpc_client, jm_nvme_bdevs, snode, after_restart):
254
254
  else:
255
255
  raid_bdev = jm_nvme_bdevs[0]
256
256
 
257
+
258
+ # Add qos bdev device
259
+ #db_controller = DBController()
260
+ #cluster = db_controller.get_cluster_by_id(snode.cluster_id)
261
+ #max_queue_size = 0
262
+ #inflight_io_threshold = cluster.inflight_io_threshold
263
+ #ret = rpc_client.qos_vbdev_create(qos_bdev, raid_bdev, raid_bdev, max_queue_size, inflight_io_threshold)
264
+ #if not ret:
265
+ # logger.error(f"Failed to create qos bdev: {qos_bdev}")
266
+ # return False
267
+
268
+
257
269
  alceml_name = f"alceml_jm_{snode.get_id()}"
258
270
 
259
271
  nvme_bdev = raid_bdev
@@ -336,9 +348,9 @@ def _create_jm_stack_on_raid(rpc_client, jm_nvme_bdevs, snode, after_restart):
336
348
  'jm_nvme_bdev_list': jm_nvme_bdevs,
337
349
  'raid_bdev': raid_bdev,
338
350
  'alceml_bdev': alceml_name,
351
+ 'alceml_name': alceml_name,
339
352
  'testing_bdev': test_name,
340
353
  'jm_bdev': jm_bdev,
341
-
342
354
  'pt_bdev': pt_name,
343
355
  'nvmf_nqn': subsystem_nqn,
344
356
  'nvmf_ip': IP,
@@ -347,6 +359,18 @@ def _create_jm_stack_on_raid(rpc_client, jm_nvme_bdevs, snode, after_restart):
347
359
 
348
360
 
349
361
  def _create_jm_stack_on_device(rpc_client, nvme, snode, after_restart):
362
+
363
+ # Add qos bdev device
364
+ #db_controller = DBController()
365
+ #cluster = db_controller.get_cluster_by_id(snode.cluster_id)
366
+ #max_queue_size = 0
367
+ #inflight_io_threshold = cluster.inflight_io_threshold
368
+ #qos_bdev = f"{nvme.nvme_bdev}_qos"
369
+ #ret = rpc_client.qos_vbdev_create(qos_bdev, nvme.nvme_bdev, nvme.nvme_bdev, max_queue_size, inflight_io_threshold)
370
+ #if not ret:
371
+ # logger.error(f"Failed to create qos bdev: {qos_bdev}")
372
+ # return False
373
+
350
374
  alceml_id = nvme.get_id()
351
375
  alceml_name = device_controller.get_alceml_name(alceml_id)
352
376
  logger.info(f"adding {alceml_name}")
@@ -427,12 +451,12 @@ def _create_jm_stack_on_device(rpc_client, nvme, snode, after_restart):
427
451
  'size': nvme.size,
428
452
  'status': JMDevice.STATUS_ONLINE,
429
453
  'alceml_bdev': alceml_name,
454
+ 'alceml_name': alceml_name,
430
455
  'nvme_bdev': nvme.nvme_bdev,
431
456
  "serial_number": nvme.serial_number,
432
457
  "device_data_dict": nvme.to_dict(),
433
458
  'jm_bdev': jm_bdev,
434
459
  'testing_bdev': test_name,
435
-
436
460
  'pt_bdev': pt_name,
437
461
  'nvmf_nqn': subsystem_nqn,
438
462
  'nvmf_ip': IP,
@@ -467,15 +491,28 @@ def _create_storage_device_stack(rpc_client, nvme, snode, after_restart):
467
491
  snode.alceml_worker_cpu_index = (snode.alceml_worker_cpu_index + 1) % len(snode.alceml_worker_cpu_cores)
468
492
 
469
493
  ret = rpc_client.bdev_alceml_create(alceml_name, nvme_bdev, alceml_id, pba_init_mode=pba_init_mode,
470
- alceml_cpu_mask=alceml_cpu_mask, alceml_worker_cpu_mask=alceml_worker_cpu_mask)
471
-
494
+ alceml_cpu_mask=alceml_cpu_mask, alceml_worker_cpu_mask=alceml_worker_cpu_mask)
472
495
  if not ret:
473
496
  logger.error(f"Failed to create alceml bdev: {alceml_name}")
474
497
  return False
498
+ alceml_bdev = alceml_name
499
+ db_controller = DBController()
500
+ cluster = db_controller.get_cluster_by_id(snode.cluster_id)
501
+ qos_bdev = ""
502
+ # Add qos bdev device
503
+ if cluster.enable_qos:
504
+ max_queue_size = cluster.max_queue_size
505
+ inflight_io_threshold = cluster.inflight_io_threshold
506
+ qos_bdev = f"{alceml_name}_qos"
507
+ ret = rpc_client.qos_vbdev_create(qos_bdev, alceml_name, nvme.nvme_controller, max_queue_size, inflight_io_threshold)
508
+ if not ret:
509
+ logger.error(f"Failed to create qos bdev: {qos_bdev}")
510
+ return False
511
+ alceml_bdev = qos_bdev
475
512
 
476
513
  # add pass through
477
514
  pt_name = f"{alceml_name}_PT"
478
- ret = rpc_client.bdev_PT_NoExcl_create(pt_name, alceml_name)
515
+ ret = rpc_client.bdev_PT_NoExcl_create(pt_name, alceml_bdev)
479
516
  if not ret:
480
517
  logger.error(f"Failed to create pt noexcl bdev: {pt_name}")
481
518
  return False
@@ -507,8 +544,10 @@ def _create_storage_device_stack(rpc_client, nvme, snode, after_restart):
507
544
  return False
508
545
  if snode.enable_test_device:
509
546
  nvme.testing_bdev = test_name
510
- nvme.alceml_bdev = alceml_name
547
+ nvme.alceml_bdev = alceml_bdev
511
548
  nvme.pt_bdev = pt_name
549
+ nvme.qos_bdev = qos_bdev
550
+ nvme.alceml_name = alceml_name
512
551
  nvme.nvmf_nqn = subsystem_nqn
513
552
  nvme.nvmf_ip = IP
514
553
  nvme.nvmf_port = 4420
@@ -713,9 +752,19 @@ def _prepare_cluster_devices_on_restart(snode):
713
752
  logger.error(f"Failed to create passtest bdev {jm_device.testing_bdev}")
714
753
  return False
715
754
  nvme_bdev = jm_device.testing_bdev
755
+
756
+
757
+ # Add qos bdev device
758
+ #cluster = db_controller.get_cluster_by_id(snode.cluster_id)
759
+ #max_queue_size = 0
760
+ #inflight_io_threshold = cluster.inflight_io_threshold
761
+ #ret = rpc_client.qos_vbdev_create(jm_device.qos_bdev, jm_device.nvme_bdev, jm_device.nvme_bdev, max_queue_size, inflight_io_threshold)
762
+ #if not ret:
763
+ # logger.error(f"Failed to create qos bdev: {jm_device.qos_bdev}")
764
+ # return False
765
+
716
766
  alceml_cpu_mask = ""
717
767
  alceml_worker_cpu_mask = ""
718
-
719
768
  if snode.alceml_cpu_cores:
720
769
  alceml_cpu_mask = utils.decimal_to_hex_power_of_2(snode.alceml_cpu_cores[snode.alceml_cpu_index])
721
770
  snode.alceml_cpu_index = (snode.alceml_cpu_index + 1) % len(snode.alceml_cpu_cores)
@@ -47,8 +47,12 @@ def add_cluster():
47
47
  enable_node_affinity = cl_data.get('enable_node_affinity', False)
48
48
  qpair_count = cl_data.get('qpair_count', 256)
49
49
 
50
+ max_queue_size = cl_data.get('max_queue_size', 128)
51
+ inflight_io_threshold = cl_data.get('inflight_io_threshold', 4)
52
+
50
53
  ret = cluster_ops.add_cluster(blk_size, page_size_in_blocks, cap_warn, cap_crit, prov_cap_warn, prov_cap_crit,
51
- distr_ndcs, distr_npcs, distr_bs, distr_chunk_bs, ha_type, enable_node_affinity, qpair_count)
54
+ distr_ndcs, distr_npcs, distr_bs, distr_chunk_bs, ha_type, enable_node_affinity,
55
+ qpair_count, max_queue_size, inflight_io_threshold)
52
56
 
53
57
  return utils.get_response(ret)
54
58
 
@@ -139,6 +139,7 @@ def add_lvol():
139
139
  crypto_key1 = utils.get_value_or_default(cl_data, "crypto_key1", None)
140
140
  crypto_key2 = utils.get_value_or_default(cl_data, "crypto_key2", None)
141
141
  host_id = utils.get_value_or_default(cl_data, "host_id", None)
142
+ lvol_priority_class = utils.get_value_or_default(cl_data, "lvol_priority_class", 0)
142
143
 
143
144
  ret, error = lvol_controller.add_lvol_ha(
144
145
  name=name,
@@ -159,7 +160,8 @@ def add_lvol():
159
160
  crypto_key2=crypto_key2,
160
161
 
161
162
  use_comp=False,
162
- distr_vuid=0
163
+ distr_vuid=0,
164
+ lvol_priority_class=lvol_priority_class
163
165
  )
164
166
 
165
167
  return utils.get_response(ret, error, http_code=400)
File without changes
File without changes
File without changes
File without changes