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.
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/PKG-INFO +1 -1
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/env_var +2 -2
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/sbcli_dev.egg-info/PKG-INFO +1 -1
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_cli/cli.py +26 -3
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/cluster_ops.py +9 -2
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/constants.py +3 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/controllers/device_controller.py +5 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/controllers/health_controller.py +4 -1
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/controllers/lvol_controller.py +21 -15
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/controllers/tasks_controller.py +8 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/models/cluster.py +3 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/models/lvol_model.py +1 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/models/nvme_device.py +3 -1
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/rpc_client.py +20 -4
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/services/capacity_and_stats_collector.py +1 -1
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/storage_node_ops.py +56 -7
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/blueprints/web_api_cluster.py +5 -1
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/blueprints/web_api_lvol.py +3 -1
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/README.md +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/pyproject.toml +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/sbcli_dev.egg-info/SOURCES.txt +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/sbcli_dev.egg-info/dependency_links.txt +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/sbcli_dev.egg-info/entry_points.txt +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/sbcli_dev.egg-info/requires.txt +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/sbcli_dev.egg-info/top_level.txt +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/setup.cfg +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/setup.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_cli/main.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/__init__.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/cnode_client.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/compute_node_ops.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/controllers/__init__.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/controllers/caching_node_controller.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/controllers/cluster_events.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/controllers/device_events.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/controllers/events_controller.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/controllers/lvol_events.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/controllers/mgmt_events.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/controllers/pool_controller.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/controllers/pool_events.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/controllers/snapshot_controller.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/controllers/snapshot_events.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/controllers/storage_events.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/controllers/tasks_events.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/distr_controller.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/kv_store.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/mgmt_node_ops.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/models/__init__.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/models/base_model.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/models/caching_node.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/models/compute_node.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/models/deployer.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/models/events.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/models/global_settings.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/models/iface.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/models/job_schedule.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/models/mgmt_node.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/models/pool.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/models/port_stat.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/models/snapshot.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/models/stats.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/models/storage_node.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/pci_utils.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/__init__.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/alerting/alert_resources.yaml.j2 +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/alerting/alert_rules.yaml +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/clean_local_storage_deploy.sh +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/config_docker.sh +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/dashboard.yml +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/dashboards/cluster.json +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/dashboards/devices.json +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/dashboards/lvols.json +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/dashboards/node-exporter.json +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/dashboards/nodes.json +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/dashboards/pools.json +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/datasource.yml +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/db_config_double.sh +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/db_config_single.sh +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/deploy_stack.sh +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/docker-compose-swarm-monitoring.yml +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/docker-compose-swarm.yml +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/haproxy.cfg +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/install_deps.sh +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/objstore.yml +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/prometheus.yml +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/run_ssh.sh +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/set_db_config.sh +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/stack_deploy_wait.sh +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/services/__init__.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/services/cached_lvol_stat_collector.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/services/caching_node_monitor.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/services/cap_monitor.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/services/device_monitor.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/services/health_check_service.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/services/install_service.sh +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/services/log_agg_service.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/services/lvol_monitor.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/services/lvol_stat_collector.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/services/main_distr_event_collector.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/services/mgmt_node_monitor.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/services/new_device_discovery.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/services/port_stat_collector.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/services/remove_service.sh +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/services/service_template.service +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/services/spdk_http_proxy_server.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/services/storage_node_monitor.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/services/tasks_runner_failed_migration.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/services/tasks_runner_migration.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/services/tasks_runner_new_dev_migration.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/services/tasks_runner_node_add.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/services/tasks_runner_restart.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/shell_utils.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/snode_client.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/utils.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/__init__.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/app.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/auth_middleware.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/blueprints/__init__.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/blueprints/caching_node_ops.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/blueprints/caching_node_ops_k8s.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/blueprints/node_api_basic.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/blueprints/node_api_caching_docker.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/blueprints/node_api_caching_ks.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/blueprints/snode_ops.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/blueprints/snode_ops_k8s.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/blueprints/web_api_caching_node.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/blueprints/web_api_deployer.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/blueprints/web_api_device.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/blueprints/web_api_mgmt_node.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/blueprints/web_api_pool.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/blueprints/web_api_snapshot.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/blueprints/web_api_storage_node.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/caching_node_app.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/caching_node_app_k8s.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/node_utils.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/node_webapp.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/snode_app.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/snode_app_k8s.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/static/delete.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/static/deploy.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/static/deploy_cnode.yaml +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/static/deploy_spdk.yaml +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/static/is_up.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/static/list_deps.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/static/rpac.yaml +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/static/tst.py +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/templates/caching_deploy_spdk.yaml.j2 +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/templates/storage_deploy_spdk.yaml.j2 +0 -0
- {sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_web/utils.py +0 -0
|
@@ -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,
|
|
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,
|
|
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
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
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
|
-
"
|
|
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):
|
|
@@ -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)
|
{sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/services/capacity_and_stats_collector.py
RENAMED
|
@@ -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.
|
|
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
|
-
|
|
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,
|
|
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 =
|
|
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,
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/alerting/alert_resources.yaml.j2
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/scripts/docker-compose-swarm-monitoring.yml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/services/tasks_runner_failed_migration.py
RENAMED
|
File without changes
|
|
File without changes
|
{sbcli_dev-5.1.3 → sbcli_dev-5.1.5}/simplyblock_core/services/tasks_runner_new_dev_migration.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|