sbcli-dev 10.4.4__tar.gz → 10.7.1__tar.gz
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.
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/PKG-INFO +1 -1
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/sbcli_dev.egg-info/PKG-INFO +1 -1
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_cli/cli.py +4 -1
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/cluster_ops.py +7 -3
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/constants.py +4 -3
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/controllers/device_controller.py +161 -139
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/controllers/health_controller.py +5 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/controllers/lvol_controller.py +26 -13
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/env_var +1 -1
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/mgmt_node_ops.py +0 -3
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/models/nvme_device.py +1 -1
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/models/storage_node.py +2 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/scripts/config_docker.sh +13 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/scripts/install_deps.sh +5 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/services/health_check_service.py +3 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/services/tasks_runner_new_dev_migration.py +16 -13
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/snode_client.py +2 -1
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/storage_node_ops.py +175 -74
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/utils.py +2 -2
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_web/blueprints/snode_ops.py +29 -20
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_web/node_webapp.py +1 -1
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/README.md +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/pyproject.toml +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/requirements.txt +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/sbcli_dev.egg-info/SOURCES.txt +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/sbcli_dev.egg-info/dependency_links.txt +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/sbcli_dev.egg-info/entry_points.txt +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/sbcli_dev.egg-info/requires.txt +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/sbcli_dev.egg-info/top_level.txt +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/setup.cfg +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/setup.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_cli/__init__.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_cli/main.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/__init__.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/cnode_client.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/controllers/__init__.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/controllers/caching_node_controller.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/controllers/cluster_events.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/controllers/device_events.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/controllers/events_controller.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/controllers/lvol_events.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/controllers/mgmt_events.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/controllers/pool_controller.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/controllers/pool_events.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/controllers/snapshot_controller.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/controllers/snapshot_events.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/controllers/storage_events.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/controllers/tasks_controller.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/controllers/tasks_events.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/db_controller.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/distr_controller.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/models/__init__.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/models/base_model.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/models/caching_node.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/models/cluster.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/models/deployer.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/models/events.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/models/iface.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/models/job_schedule.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/models/lvol_model.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/models/mgmt_node.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/models/pool.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/models/port_stat.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/models/snapshot.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/models/stats.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/pci_utils.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/rpc_client.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/scripts/__init__.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/scripts/alerting/alert_resources.yaml.j2 +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/scripts/alerting/alert_rules.yaml +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/scripts/clean_local_storage_deploy.sh +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/scripts/dashboard.yml +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/scripts/dashboards/cluster.json +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/scripts/dashboards/devices.json +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/scripts/dashboards/lvols.json +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/scripts/dashboards/node-exporter.json +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/scripts/dashboards/nodes.json +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/scripts/dashboards/pools.json +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/scripts/datasource.yml +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/scripts/db_config_double.sh +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/scripts/db_config_single.sh +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/scripts/deploy_fdb.sh +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/scripts/deploy_stack.sh +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/scripts/docker-compose-swarm-monitoring.yml +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/scripts/docker-compose-swarm.yml +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/scripts/foundation.yml +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/scripts/haproxy.cfg +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/scripts/objstore.yml +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/scripts/prepare_fdb.sh +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/scripts/prometheus.yml +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/scripts/run_ssh.sh +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/scripts/set_db_config.sh +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/scripts/stack_deploy_wait.sh +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/services/__init__.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/services/cached_lvol_stat_collector.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/services/caching_node_monitor.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/services/cap_monitor.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/services/capacity_and_stats_collector.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/services/device_monitor.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/services/install_service.sh +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/services/log_agg_service.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/services/lvol_monitor.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/services/lvol_stat_collector.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/services/main_distr_event_collector.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/services/mgmt_node_monitor.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/services/new_device_discovery.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/services/port_stat_collector.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/services/remove_service.sh +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/services/service_template.service +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/services/spdk_http_proxy_server.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/services/storage_node_monitor.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/services/tasks_runner_failed_migration.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/services/tasks_runner_migration.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/services/tasks_runner_node_add.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/services/tasks_runner_restart.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/shell_utils.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_core/workers/cleanup_foundationdb.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_web/README.md +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_web/__init__.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_web/app.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_web/auth_middleware.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_web/blueprints/__init__.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_web/blueprints/caching_node_ops.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_web/blueprints/caching_node_ops_k8s.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_web/blueprints/node_api_basic.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_web/blueprints/node_api_caching_docker.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_web/blueprints/node_api_caching_ks.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_web/blueprints/snode_ops_k8s.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_web/blueprints/web_api_caching_node.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_web/blueprints/web_api_cluster.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_web/blueprints/web_api_deployer.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_web/blueprints/web_api_device.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_web/blueprints/web_api_lvol.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_web/blueprints/web_api_mgmt_node.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_web/blueprints/web_api_pool.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_web/blueprints/web_api_snapshot.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_web/blueprints/web_api_storage_node.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_web/caching_node_app.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_web/caching_node_app_k8s.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_web/node_utils.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_web/requirements.txt +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_web/snode_app.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_web/snode_app_k8s.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_web/static/delete.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_web/static/deploy.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_web/static/deploy_cnode.yaml +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_web/static/deploy_spdk.yaml +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_web/static/is_up.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_web/static/list_deps.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_web/static/rpac.yaml +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_web/static/tst.py +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_web/templates/caching_deploy_spdk.yaml.j2 +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_web/templates/storage_deploy_spdk.yaml.j2 +0 -0
- {sbcli_dev-10.4.4 → sbcli_dev-10.7.1}/simplyblock_web/utils.py +0 -0
|
@@ -47,6 +47,7 @@ class CLIWrapper:
|
|
|
47
47
|
sub_command.add_argument("--max-prov", help='Maximum amount of GB to be provisioned via all storage nodes', dest='max_prov')
|
|
48
48
|
sub_command.add_argument("--number-of-distribs", help='The number of distirbs to be created on the node', dest='number_of_distribs', type=int, default=2)
|
|
49
49
|
sub_command.add_argument("--number-of-devices", help='Number of devices per storage node if it\'s not supported EC2 instance', dest='number_of_devices', type=int)
|
|
50
|
+
sub_command.add_argument("--size-of-device", help='Size of device per storage node', dest='partition_size')
|
|
50
51
|
sub_command.add_argument("--cpu-mask", help='SPDK app CPU mask, default is all cores found', dest='spdk_cpu_mask')
|
|
51
52
|
|
|
52
53
|
sub_command.add_argument("--spdk-image", help='SPDK image uri', dest='spdk_image')
|
|
@@ -58,7 +59,7 @@ class CLIWrapper:
|
|
|
58
59
|
sub_command.add_argument("--disable-ha-jm", help='Disable HA JM for distrib creation', action='store_false', dest='enable_ha_jm', default=True)
|
|
59
60
|
sub_command.add_argument("--is-secondary-node", help='add as secondary node', action='store_true', dest='is_secondary_node', default=False)
|
|
60
61
|
sub_command.add_argument("--namespace", help='k8s namespace to deploy on',)
|
|
61
|
-
|
|
62
|
+
sub_command.add_argument("--id-device-by-nqn", help='Use device nqn to identify it instead of serial number', action='store_true', dest='id_device_by_nqn', default=False)
|
|
62
63
|
|
|
63
64
|
# delete storage node
|
|
64
65
|
sub_command = self.add_sub_command(subparser, "delete", 'Delete storage node obj')
|
|
@@ -798,6 +799,8 @@ class CLIWrapper:
|
|
|
798
799
|
number_of_distribs=number_of_distribs,
|
|
799
800
|
enable_ha_jm=enable_ha_jm,
|
|
800
801
|
is_secondary_node=args.is_secondary_node,
|
|
802
|
+
id_device_by_nqn=args.id_device_by_nqn,
|
|
803
|
+
partition_size=args.partition_size,
|
|
801
804
|
)
|
|
802
805
|
|
|
803
806
|
return out
|
|
@@ -130,6 +130,10 @@ def create_cluster(blk_size, page_size_in_blocks, cli_pass,
|
|
|
130
130
|
if c.swarm.attrs and "ID" in c.swarm.attrs:
|
|
131
131
|
logger.info("Docker swarm found, leaving swarm now")
|
|
132
132
|
c.swarm.leave(force=True)
|
|
133
|
+
try:
|
|
134
|
+
c.volumes.get("monitoring_grafana_data").remove(force=True)
|
|
135
|
+
except:
|
|
136
|
+
pass
|
|
133
137
|
time.sleep(3)
|
|
134
138
|
|
|
135
139
|
c.swarm.init(DEV_IP)
|
|
@@ -160,7 +164,7 @@ def create_cluster(blk_size, page_size_in_blocks, cli_pass,
|
|
|
160
164
|
if prov_cap_crit and prov_cap_crit > 0:
|
|
161
165
|
c.prov_cap_crit = prov_cap_crit
|
|
162
166
|
if distr_ndcs == 0 and distr_npcs == 0:
|
|
163
|
-
c.distr_ndcs =
|
|
167
|
+
c.distr_ndcs = 1
|
|
164
168
|
c.distr_npcs = 1
|
|
165
169
|
else:
|
|
166
170
|
c.distr_ndcs = distr_ndcs
|
|
@@ -365,7 +369,7 @@ def cluster_activate(cl_id, force=False, force_lvstore_create=False):
|
|
|
365
369
|
else:
|
|
366
370
|
ret = storage_node_ops.create_lvstore(snode, cluster.distr_ndcs, cluster.distr_npcs, cluster.distr_bs,
|
|
367
371
|
cluster.distr_chunk_bs, cluster.page_size_in_blocks, max_size, snodes)
|
|
368
|
-
if not ret:
|
|
372
|
+
if not ret and not force:
|
|
369
373
|
logger.error("Failed to activate cluster")
|
|
370
374
|
set_cluster_status(cl_id, ols_status)
|
|
371
375
|
return False
|
|
@@ -377,7 +381,7 @@ def cluster_activate(cl_id, force=False, force_lvstore_create=False):
|
|
|
377
381
|
continue
|
|
378
382
|
|
|
379
383
|
ret = storage_node_ops.recreate_lvstore(snode)
|
|
380
|
-
if not ret:
|
|
384
|
+
if not ret and not force:
|
|
381
385
|
logger.error("Failed to activate cluster")
|
|
382
386
|
set_cluster_status(cl_id, ols_status)
|
|
383
387
|
return False
|
|
@@ -76,7 +76,7 @@ TASK_EXEC_RETRY_COUNT = 8
|
|
|
76
76
|
SIMPLY_BLOCK_SPDK_CORE_IMAGE = "simplyblock/spdk-core:v24.05-tag-latest"
|
|
77
77
|
|
|
78
78
|
|
|
79
|
-
SIMPLY_BLOCK_SPDK_ULTRA_IMAGE = "simplyblock/spdk:
|
|
79
|
+
SIMPLY_BLOCK_SPDK_ULTRA_IMAGE = "simplyblock/spdk:main-latest"
|
|
80
80
|
|
|
81
81
|
GELF_PORT = 12202
|
|
82
82
|
|
|
@@ -88,7 +88,7 @@ EXTRA_LARGE_POOL_COUNT = 16000
|
|
|
88
88
|
# EXTRA_LARGE_POOL_COUNT = 0
|
|
89
89
|
EXTRA_HUGE_PAGE_MEMORY = 2147483648
|
|
90
90
|
#EXTRA_SYS_MEMORY = 2147483648
|
|
91
|
-
EXTRA_SYS_MEMORY = 0
|
|
91
|
+
EXTRA_SYS_MEMORY = 0.15
|
|
92
92
|
|
|
93
93
|
INSTANCE_STORAGE_DATA = {
|
|
94
94
|
'i4i.large': {'number_of_devices': 1, 'size_per_device_gb': 468},
|
|
@@ -128,4 +128,5 @@ LVOL_NVME_CONNECT_NR_IO_QUEUES=6
|
|
|
128
128
|
QPAIR_COUNT=32
|
|
129
129
|
NVME_TIMEOUT_US=20000000
|
|
130
130
|
|
|
131
|
-
NVMF_MAX_SUBSYSTEMS=50000
|
|
131
|
+
NVMF_MAX_SUBSYSTEMS=50000
|
|
132
|
+
HA_JM_COUNT=3
|
|
@@ -118,64 +118,92 @@ def _def_create_device_stack(device_obj, snode, force=False):
|
|
|
118
118
|
rpc_client = RPCClient(
|
|
119
119
|
snode.mgmt_ip, snode.rpc_port,
|
|
120
120
|
snode.rpc_username, snode.rpc_password,
|
|
121
|
-
timeout=600
|
|
122
|
-
|
|
121
|
+
timeout=600)
|
|
122
|
+
|
|
123
|
+
bdev_names = []
|
|
124
|
+
for dev in rpc_client.get_bdevs():
|
|
125
|
+
bdev_names.append(dev['name'])
|
|
126
|
+
|
|
123
127
|
nvme_bdev = device_obj.nvme_bdev
|
|
124
128
|
if snode.enable_test_device:
|
|
125
129
|
test_name = f"{device_obj.nvme_bdev}_test"
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
130
|
+
if test_name not in bdev_names:
|
|
131
|
+
# create testing bdev
|
|
132
|
+
ret = rpc_client.bdev_passtest_create(test_name, device_obj.nvme_bdev)
|
|
133
|
+
if not ret:
|
|
134
|
+
logger.error(f"Failed to create bdev: {test_name}")
|
|
135
|
+
if not force:
|
|
136
|
+
return False
|
|
137
|
+
else:
|
|
138
|
+
logger.info(f"bdev already exists {test_name}")
|
|
139
|
+
device_obj.testing_bdev = test_name
|
|
132
140
|
nvme_bdev = test_name
|
|
133
141
|
|
|
134
142
|
alceml_id = device_obj.get_id()
|
|
135
143
|
alceml_name = get_alceml_name(alceml_id)
|
|
136
|
-
logger.info(f"adding {alceml_name}")
|
|
137
144
|
|
|
138
|
-
if
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
+
if alceml_name not in bdev_names:
|
|
146
|
+
logger.info(f"adding {alceml_name}")
|
|
147
|
+
if snode.alceml_cpu_cores:
|
|
148
|
+
alceml_cpu_mask = utils.decimal_to_hex_power_of_2(snode.alceml_cpu_cores[snode.alceml_cpu_index])
|
|
149
|
+
ret = rpc_client.bdev_alceml_create(alceml_name, nvme_bdev, alceml_id, pba_init_mode=2,
|
|
150
|
+
alceml_cpu_mask=alceml_cpu_mask)
|
|
151
|
+
snode.alceml_cpu_index = (snode.alceml_cpu_index + 1) % len(snode.alceml_cpu_cores)
|
|
152
|
+
else:
|
|
153
|
+
ret = rpc_client.bdev_alceml_create(alceml_name, nvme_bdev, alceml_id, pba_init_mode=2)
|
|
145
154
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
155
|
+
if not ret:
|
|
156
|
+
logger.error(f"Failed to create alceml bdev: {alceml_name}")
|
|
157
|
+
if not force:
|
|
158
|
+
return False
|
|
159
|
+
else:
|
|
160
|
+
logger.info(f"bdev already exists {alceml_name}")
|
|
150
161
|
|
|
151
162
|
# add pass through
|
|
152
163
|
pt_name = f"{alceml_name}_PT"
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
164
|
+
if pt_name not in bdev_names:
|
|
165
|
+
ret = rpc_client.bdev_PT_NoExcl_create(pt_name, alceml_name)
|
|
166
|
+
if not ret:
|
|
167
|
+
logger.error(f"Failed to create pt noexcl bdev: {pt_name}")
|
|
168
|
+
if not force:
|
|
169
|
+
return False
|
|
170
|
+
else:
|
|
171
|
+
logger.info(f"bdev already exists {pt_name}")
|
|
158
172
|
|
|
159
173
|
subsystem_nqn = snode.subsystem + ":dev:" + alceml_id
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
174
|
+
namespace_found = False
|
|
175
|
+
subsys_found = False
|
|
176
|
+
ret = rpc_client.subsystem_list(subsystem_nqn)
|
|
177
|
+
if ret :
|
|
178
|
+
subsys_found = True
|
|
179
|
+
if ret[0]["namespaces"]:
|
|
180
|
+
for ns in ret[0]["namespaces"]:
|
|
181
|
+
if ns['name'] == pt_name:
|
|
182
|
+
namespace_found = True
|
|
183
|
+
break
|
|
184
|
+
|
|
185
|
+
if not subsys_found:
|
|
186
|
+
logger.info("Creating subsystem %s", subsystem_nqn)
|
|
187
|
+
ret = rpc_client.subsystem_create(subsystem_nqn, 'sbcli-cn', alceml_id)
|
|
188
|
+
for iface in snode.data_nics:
|
|
189
|
+
if iface.ip4_address:
|
|
190
|
+
tr_type = iface.get_transport_type()
|
|
191
|
+
ret = rpc_client.listeners_create(subsystem_nqn, tr_type, iface.ip4_address, "4420")
|
|
192
|
+
device_obj.nvmf_ip = iface.ip4_address
|
|
193
|
+
break
|
|
194
|
+
else:
|
|
195
|
+
logger.info(f"subsystem already exists {subsys_found}")
|
|
196
|
+
|
|
197
|
+
if not namespace_found:
|
|
198
|
+
logger.info(f"Adding {pt_name} to the subsystem")
|
|
199
|
+
ret = rpc_client.nvmf_subsystem_add_ns(subsystem_nqn, pt_name)
|
|
200
|
+
else:
|
|
201
|
+
logger.info(f"bdev already added to subsys {pt_name}")
|
|
171
202
|
|
|
172
|
-
if snode.enable_test_device:
|
|
173
|
-
device_obj.testing_bdev = test_name
|
|
174
203
|
device_obj.alceml_bdev = alceml_name
|
|
175
204
|
device_obj.alceml_name = alceml_name
|
|
176
205
|
device_obj.pt_bdev = pt_name
|
|
177
206
|
device_obj.nvmf_nqn = subsystem_nqn
|
|
178
|
-
device_obj.nvmf_ip = IP
|
|
179
207
|
device_obj.nvmf_port = 4420
|
|
180
208
|
return True
|
|
181
209
|
|
|
@@ -592,110 +620,109 @@ def add_device(device_id):
|
|
|
592
620
|
break
|
|
593
621
|
|
|
594
622
|
logger.info(f"Adding device {device_id}")
|
|
595
|
-
if snode.num_partitions_per_dev == 0:
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
return False
|
|
600
|
-
dev_order = storage_node_ops.get_next_cluster_device_order(db_controller, snode.cluster_id)
|
|
601
|
-
device_obj.cluster_device_order = dev_order
|
|
602
|
-
logger.info("Setting device online")
|
|
603
|
-
device_obj.status = NVMeDevice.STATUS_ONLINE
|
|
604
|
-
snode.write_to_db(db_controller.kv_store)
|
|
605
|
-
device_events.device_create(device_obj)
|
|
606
|
-
|
|
607
|
-
logger.info("Make other nodes connect to the node devices")
|
|
608
|
-
snodes = db_controller.get_storage_nodes_by_cluster_id(snode.cluster_id)
|
|
609
|
-
for node in snodes:
|
|
610
|
-
if node.get_id() == snode.get_id() or node.status != StorageNode.STATUS_ONLINE:
|
|
611
|
-
continue
|
|
612
|
-
node.remote_devices = storage_node_ops._connect_to_remote_devs(node, force_conect_restarting_nodes=True)
|
|
613
|
-
node.write_to_db()
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
snodes = db_controller.get_storage_nodes_by_cluster_id(snode.cluster_id)
|
|
617
|
-
for node in snodes:
|
|
618
|
-
if node.status != StorageNode.STATUS_ONLINE:
|
|
619
|
-
continue
|
|
620
|
-
distr_controller.send_cluster_map_add_device(device_obj, node)
|
|
621
|
-
|
|
622
|
-
tasks_controller.add_new_device_mig_task(device_id)
|
|
623
|
-
return device_id
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
# create partitions
|
|
627
|
-
partitions = snode.num_partitions_per_dev
|
|
628
|
-
rpc_client = RPCClient(snode.mgmt_ip, snode.rpc_port, snode.rpc_username, snode.rpc_password)
|
|
629
|
-
# look for partitions
|
|
630
|
-
partitioned_devices = storage_node_ops._search_for_partitions(rpc_client, device_obj)
|
|
631
|
-
logger.debug("partitioned_devices")
|
|
632
|
-
logger.debug(partitioned_devices)
|
|
633
|
-
if len(partitioned_devices) == partitions+1:
|
|
634
|
-
logger.info("Partitioned devices found")
|
|
635
|
-
else:
|
|
636
|
-
logger.info(f"Creating partitions for {device_obj.nvme_bdev}")
|
|
637
|
-
storage_node_ops._create_device_partitions(rpc_client, device_obj, snode, partitions, snode.jm_percent)
|
|
638
|
-
partitioned_devices = storage_node_ops._search_for_partitions(rpc_client, device_obj)
|
|
639
|
-
if len(partitioned_devices) == partitions+1:
|
|
640
|
-
logger.info("Device partitions created")
|
|
641
|
-
else:
|
|
642
|
-
logger.error("Failed to create partitions")
|
|
643
|
-
return False
|
|
644
|
-
|
|
645
|
-
jm_part = partitioned_devices.pop(0)
|
|
646
|
-
new_devices = []
|
|
647
|
-
dev_order = storage_node_ops.get_next_cluster_device_order(db_controller, snode.cluster_id)
|
|
648
|
-
for dev in partitioned_devices:
|
|
649
|
-
new_device = storage_node_ops._create_storage_device_stack(rpc_client, dev, snode, after_restart=False)
|
|
650
|
-
if not new_device:
|
|
651
|
-
logger.error("failed to create dev stack")
|
|
652
|
-
continue
|
|
653
|
-
|
|
654
|
-
new_device.cluster_device_order = dev_order
|
|
655
|
-
dev_order += 1
|
|
656
|
-
device_events.device_create(new_device)
|
|
657
|
-
new_devices.append(new_device)
|
|
658
|
-
|
|
659
|
-
if new_devices:
|
|
660
|
-
snode.nvme_devices.remove(device_obj)
|
|
661
|
-
snode.nvme_devices.extend(new_devices)
|
|
662
|
-
snode.write_to_db(db_controller.kv_store)
|
|
663
|
-
else:
|
|
664
|
-
logger.error("failed to create devices")
|
|
623
|
+
# if snode.num_partitions_per_dev == 0 or device_obj.is_partition:
|
|
624
|
+
ret = _def_create_device_stack(device_obj, snode, force=True)
|
|
625
|
+
if not ret:
|
|
626
|
+
logger.error("Failed to create device stack")
|
|
665
627
|
return False
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
628
|
+
dev_order = storage_node_ops.get_next_cluster_device_order(db_controller, snode.cluster_id)
|
|
629
|
+
device_obj.cluster_device_order = dev_order
|
|
630
|
+
logger.info("Setting device online")
|
|
631
|
+
device_obj.status = NVMeDevice.STATUS_ONLINE
|
|
632
|
+
snode.write_to_db(db_controller.kv_store)
|
|
633
|
+
device_events.device_create(device_obj)
|
|
669
634
|
|
|
670
635
|
logger.info("Make other nodes connect to the node devices")
|
|
671
636
|
snodes = db_controller.get_storage_nodes_by_cluster_id(snode.cluster_id)
|
|
672
637
|
for node in snodes:
|
|
673
638
|
if node.get_id() == snode.get_id() or node.status != StorageNode.STATUS_ONLINE:
|
|
674
639
|
continue
|
|
675
|
-
node.remote_devices = storage_node_ops._connect_to_remote_devs(node)
|
|
640
|
+
node.remote_devices = storage_node_ops._connect_to_remote_devs(node, force_conect_restarting_nodes=True)
|
|
676
641
|
node.write_to_db()
|
|
677
|
-
for dev in new_devices:
|
|
678
|
-
distr_controller.send_cluster_map_add_device(dev, node)
|
|
679
|
-
|
|
680
|
-
for dev in new_devices:
|
|
681
|
-
tasks_controller.add_new_device_mig_task(dev.get_id())
|
|
682
642
|
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
643
|
+
snodes = db_controller.get_storage_nodes_by_cluster_id(snode.cluster_id)
|
|
644
|
+
for node in snodes:
|
|
645
|
+
if node.status != StorageNode.STATUS_ONLINE:
|
|
646
|
+
continue
|
|
647
|
+
distr_controller.send_cluster_map_add_device(device_obj, node)
|
|
648
|
+
|
|
649
|
+
tasks_controller.add_new_device_mig_task(device_id)
|
|
650
|
+
return device_id
|
|
651
|
+
|
|
652
|
+
#
|
|
653
|
+
# # create partitions
|
|
654
|
+
# partitions = snode.num_partitions_per_dev
|
|
655
|
+
# rpc_client = RPCClient(snode.mgmt_ip, snode.rpc_port, snode.rpc_username, snode.rpc_password)
|
|
656
|
+
# # look for partitions
|
|
657
|
+
# partitioned_devices = storage_node_ops._search_for_partitions(rpc_client, device_obj)
|
|
658
|
+
# logger.debug("partitioned_devices")
|
|
659
|
+
# logger.debug(partitioned_devices)
|
|
660
|
+
# if len(partitioned_devices) == partitions+1:
|
|
661
|
+
# logger.info("Partitioned devices found")
|
|
662
|
+
# else:
|
|
663
|
+
# logger.info(f"Creating partitions for {device_obj.nvme_bdev}")
|
|
664
|
+
# storage_node_ops._create_device_partitions(rpc_client, device_obj, snode, partitions, snode.jm_percent)
|
|
665
|
+
# partitioned_devices = storage_node_ops._search_for_partitions(rpc_client, device_obj)
|
|
666
|
+
# if len(partitioned_devices) == partitions+1:
|
|
667
|
+
# logger.info("Device partitions created")
|
|
668
|
+
# else:
|
|
669
|
+
# logger.error("Failed to create partitions")
|
|
670
|
+
# return False
|
|
671
|
+
#
|
|
672
|
+
# jm_part = partitioned_devices.pop(0)
|
|
673
|
+
# new_devices = []
|
|
674
|
+
# dev_order = storage_node_ops.get_next_cluster_device_order(db_controller, snode.cluster_id)
|
|
675
|
+
# for dev in partitioned_devices:
|
|
676
|
+
# new_device = storage_node_ops._create_storage_device_stack(rpc_client, dev, snode, after_restart=False)
|
|
677
|
+
# if not new_device:
|
|
678
|
+
# logger.error("failed to create dev stack")
|
|
679
|
+
# continue
|
|
680
|
+
#
|
|
681
|
+
# new_device.cluster_device_order = dev_order
|
|
682
|
+
# dev_order += 1
|
|
683
|
+
# device_events.device_create(new_device)
|
|
684
|
+
# new_devices.append(new_device)
|
|
685
|
+
#
|
|
686
|
+
# if new_devices:
|
|
687
|
+
# snode.nvme_devices.remove(device_obj)
|
|
688
|
+
# snode.nvme_devices.extend(new_devices)
|
|
689
|
+
# snode.write_to_db(db_controller.kv_store)
|
|
690
|
+
# else:
|
|
691
|
+
# logger.error("failed to create devices")
|
|
692
|
+
# return False
|
|
693
|
+
#
|
|
694
|
+
# for dev in new_devices:
|
|
695
|
+
# distr_controller.send_cluster_map_add_device(dev, snode)
|
|
696
|
+
#
|
|
697
|
+
# logger.info("Make other nodes connect to the node devices")
|
|
698
|
+
# snodes = db_controller.get_storage_nodes_by_cluster_id(snode.cluster_id)
|
|
699
|
+
# for node in snodes:
|
|
700
|
+
# if node.get_id() == snode.get_id() or node.status != StorageNode.STATUS_ONLINE:
|
|
701
|
+
# continue
|
|
702
|
+
# node.remote_devices = storage_node_ops._connect_to_remote_devs(node)
|
|
703
|
+
# node.write_to_db()
|
|
704
|
+
# for dev in new_devices:
|
|
705
|
+
# distr_controller.send_cluster_map_add_device(dev, node)
|
|
706
|
+
#
|
|
707
|
+
# for dev in new_devices:
|
|
708
|
+
# tasks_controller.add_new_device_mig_task(dev.get_id())
|
|
709
|
+
#
|
|
710
|
+
# # add to jm raid
|
|
711
|
+
# if snode.jm_device and snode.jm_device.raid_bdev and jm_part:
|
|
712
|
+
# # looking for jm partition
|
|
713
|
+
# jm_dev_part = jm_part.nvme_bdev
|
|
714
|
+
# ret = rpc_client.get_bdevs(jm_dev_part)
|
|
715
|
+
# if ret:
|
|
716
|
+
# logger.info(f"JM part found: {jm_dev_part}")
|
|
717
|
+
# if snode.jm_device.status in [JMDevice.STATUS_UNAVAILABLE, JMDevice.STATUS_REMOVED]:
|
|
718
|
+
# restart_jm_device(snode.jm_device.get_id(), force=True, format_alceml=True)
|
|
719
|
+
#
|
|
720
|
+
# if snode.jm_device.status == JMDevice.STATUS_ONLINE and \
|
|
721
|
+
# jm_dev_part not in snode.jm_device.jm_nvme_bdev_list:
|
|
722
|
+
# remove_jm_device(snode.jm_device.get_id(), force=True)
|
|
723
|
+
# restart_jm_device(snode.jm_device.get_id(), force=True)
|
|
724
|
+
#
|
|
725
|
+
# return "Done"
|
|
699
726
|
|
|
700
727
|
|
|
701
728
|
def device_set_failed_and_migrated(device_id):
|
|
@@ -763,11 +790,6 @@ def remove_jm_device(device_id, force=False):
|
|
|
763
790
|
logger.error("device not found")
|
|
764
791
|
return False
|
|
765
792
|
|
|
766
|
-
if jm_device.status != JMDevice.STATUS_ONLINE:
|
|
767
|
-
logger.warning("device is not online")
|
|
768
|
-
if not force:
|
|
769
|
-
return False
|
|
770
|
-
|
|
771
793
|
set_jm_device_state(snode.jm_device.get_id(), JMDevice.STATUS_UNAVAILABLE)
|
|
772
794
|
|
|
773
795
|
if snode.status == StorageNode.STATUS_ONLINE:
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
from simplyblock_core import utils, distr_controller
|
|
4
4
|
from simplyblock_core.db_controller import DBController
|
|
5
|
+
from simplyblock_core.models.cluster import Cluster
|
|
5
6
|
from simplyblock_core.models.nvme_device import NVMeDevice, JMDevice
|
|
6
7
|
from simplyblock_core.models.storage_node import StorageNode
|
|
7
8
|
from simplyblock_core.rpc_client import RPCClient
|
|
@@ -115,6 +116,10 @@ def _check_node_lvstore(lvstore_stack, node, auto_fix=False):
|
|
|
115
116
|
logger.info(f"Checking distr stack on node : {node.get_id()}")
|
|
116
117
|
rpc_client = RPCClient(
|
|
117
118
|
node.mgmt_ip, node.rpc_port, node.rpc_username, node.rpc_password, timeout=3, retry=1)
|
|
119
|
+
cluster = db_controller.get_cluster_by_id(node.cluster_id)
|
|
120
|
+
if cluster.status in [Cluster.STATUS_INACTIVE, Cluster.STATUS_IN_ACTIVATION]:
|
|
121
|
+
auto_fix = False
|
|
122
|
+
|
|
118
123
|
distribs_list = []
|
|
119
124
|
raid = None
|
|
120
125
|
bdev_lvstore = None
|
|
@@ -1118,6 +1118,8 @@ def resize_lvol(id, new_size):
|
|
|
1118
1118
|
logger.error(f"Pool is disabled")
|
|
1119
1119
|
return False
|
|
1120
1120
|
|
|
1121
|
+
new_size = utils.parse_size(new_size)
|
|
1122
|
+
|
|
1121
1123
|
if lvol.size >= new_size:
|
|
1122
1124
|
logger.error(f"New size {new_size} must be higher than the original size {lvol.size}")
|
|
1123
1125
|
return False
|
|
@@ -1125,28 +1127,39 @@ def resize_lvol(id, new_size):
|
|
|
1125
1127
|
if lvol.max_size < new_size:
|
|
1126
1128
|
logger.error(f"New size {new_size} must be smaller than the max size {lvol.max_size}")
|
|
1127
1129
|
return False
|
|
1128
|
-
|
|
1129
|
-
if lvol.cloned_from_snap:
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
logger.info(f"Resizing LVol: {lvol.get_id()}, new size: {new_size}")
|
|
1130
|
+
#
|
|
1131
|
+
# if lvol.cloned_from_snap:
|
|
1132
|
+
# logger.error(f"Can not resize clone!")
|
|
1133
|
+
# return False
|
|
1134
1134
|
|
|
1135
1135
|
snode = db_controller.get_storage_node_by_id(lvol.node_id)
|
|
1136
1136
|
|
|
1137
|
+
logger.info(f"Resizing LVol: {lvol.get_id()} on primary node: {snode.get_id()}")
|
|
1138
|
+
logger.info(f"Current size: {utils.humanbytes(lvol.size)}, new size: {utils.humanbytes(new_size)}")
|
|
1139
|
+
|
|
1137
1140
|
# creating RPCClient instance
|
|
1138
1141
|
rpc_client = RPCClient(
|
|
1139
|
-
snode.mgmt_ip,
|
|
1140
|
-
|
|
1141
|
-
snode.rpc_username,
|
|
1142
|
-
snode.rpc_password)
|
|
1143
|
-
|
|
1142
|
+
snode.mgmt_ip, snode.rpc_port, snode.rpc_username, snode.rpc_password)
|
|
1143
|
+
rpc_client.bdev_lvol_set_leader(True, lvs_name=lvol.lvs_name)
|
|
1144
1144
|
size_in_mib = int(new_size / (1000*1000))
|
|
1145
|
-
ret = rpc_client.bdev_lvol_resize(lvol.
|
|
1145
|
+
ret = rpc_client.bdev_lvol_resize(f"{lvol.lvs_name}/{lvol.lvol_bdev}", size_in_mib)
|
|
1146
1146
|
if not ret:
|
|
1147
|
-
logger.error("Error resizing lvol")
|
|
1147
|
+
logger.error(f"Error resizing lvol on node: {snode.get_id()}")
|
|
1148
1148
|
return False
|
|
1149
1149
|
|
|
1150
|
+
if lvol.ha_type == "ha":
|
|
1151
|
+
sec_node = db_controller.get_storage_node_by_id(snode.secondary_node_id)
|
|
1152
|
+
if sec_node and sec_node.status == StorageNode.STATUS_ONLINE:
|
|
1153
|
+
sec_node_rpc_client = RPCClient(
|
|
1154
|
+
sec_node.mgmt_ip, sec_node.rpc_port, sec_node.rpc_username, sec_node.rpc_password)
|
|
1155
|
+
time.sleep(3)
|
|
1156
|
+
logger.info(f"Resizing LVol: {lvol.get_id()} on secondary node: {sec_node.get_id()}")
|
|
1157
|
+
sec_node_rpc_client.bdev_lvol_set_leader(False, lvs_name=lvol.lvs_name)
|
|
1158
|
+
ret = sec_node_rpc_client.bdev_lvol_resize(f"{lvol.lvs_name}/{lvol.lvol_bdev}", size_in_mib)
|
|
1159
|
+
if not ret:
|
|
1160
|
+
logger.error(f"Error resizing lvol on node: {sec_node.get_id()}")
|
|
1161
|
+
|
|
1162
|
+
lvol = db_controller.get_lvol_by_id(id)
|
|
1150
1163
|
lvol.size = new_size
|
|
1151
1164
|
lvol.write_to_db(db_controller.kv_store)
|
|
1152
1165
|
logger.info("Done")
|
|
@@ -132,9 +132,6 @@ def deploy_mgmt_node(cluster_ip, cluster_id, ifname, cluster_secret):
|
|
|
132
132
|
logger.info("Configuring Double DB...")
|
|
133
133
|
time.sleep(3)
|
|
134
134
|
scripts.set_db_config_double()
|
|
135
|
-
for cl in db_controller.get_clusters():
|
|
136
|
-
cl.ha_type = "ha"
|
|
137
|
-
cl.write_to_db(db_controller.kv_store)
|
|
138
135
|
|
|
139
136
|
logger.info("Node joined the cluster")
|
|
140
137
|
return node_id
|
|
@@ -35,6 +35,7 @@ class StorageNode(BaseNodeObject):
|
|
|
35
35
|
hostname: str = ""
|
|
36
36
|
hugepages: int = 0
|
|
37
37
|
ib_devices: List[IFace] = []
|
|
38
|
+
id_device_by_nqn: bool = False
|
|
38
39
|
iobuf_large_bufsize: int = 0
|
|
39
40
|
iobuf_large_pool_count: int = 0
|
|
40
41
|
iobuf_small_bufsize: int = 0
|
|
@@ -79,5 +80,6 @@ class StorageNode(BaseNodeObject):
|
|
|
79
80
|
spdk_debug: bool = False
|
|
80
81
|
spdk_image: str = ""
|
|
81
82
|
spdk_mem: int = 0
|
|
83
|
+
partition_size: int = 0
|
|
82
84
|
subsystem: str = ""
|
|
83
85
|
system_uuid: str = ""
|
|
@@ -6,6 +6,19 @@ function set_config() {
|
|
|
6
6
|
|
|
7
7
|
DEV_IP=$1
|
|
8
8
|
|
|
9
|
+
if [ ! -s "/etc/docker/daemon.json" ]
|
|
10
|
+
then
|
|
11
|
+
echo '{
|
|
12
|
+
"log-driver": "json-file",
|
|
13
|
+
"log-opts": {
|
|
14
|
+
"max-size": "30m",
|
|
15
|
+
"max-file": "3"
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
' > /etc/docker/daemon.json
|
|
19
|
+
fi
|
|
20
|
+
|
|
21
|
+
|
|
9
22
|
if [[ -z $(grep "tcp://${DEV_IP}:2375" /usr/lib/systemd/system/docker.service) ]]
|
|
10
23
|
then
|
|
11
24
|
set_config ExecStart "/usr/bin/dockerd --containerd=/run/containerd/containerd.sock -H tcp://${DEV_IP}:2375 -H unix:///var/run/docker.sock -H fd://" /usr/lib/systemd/system/docker.service
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
2
|
|
|
3
|
+
if [[ -z $(grep "$(hostname)" /etc/hosts) ]]
|
|
4
|
+
then
|
|
5
|
+
sudo sh -c 'echo "127.0.0.1 $(hostname)" >> /etc/hosts'
|
|
6
|
+
fi
|
|
7
|
+
|
|
3
8
|
sudo yum install -y yum-utils xorg-x11-xauth nvme-cli fio
|
|
4
9
|
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
|
|
5
10
|
sudo yum install hostname pkg-config git wget python3-pip yum-utils docker-ce docker-ce-cli \
|
|
@@ -4,6 +4,7 @@ from datetime import datetime
|
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
from simplyblock_core.controllers import health_controller, storage_events, device_events
|
|
7
|
+
from simplyblock_core.models.cluster import Cluster
|
|
7
8
|
from simplyblock_core.models.nvme_device import NVMeDevice
|
|
8
9
|
from simplyblock_core.models.storage_node import StorageNode
|
|
9
10
|
from simplyblock_core.rpc_client import RPCClient
|
|
@@ -193,6 +194,8 @@ while True:
|
|
|
193
194
|
else:
|
|
194
195
|
logger.info(f"Checking bdev: {remote_device.remote_bdev} ... not found")
|
|
195
196
|
|
|
197
|
+
if cluster.status in [Cluster.STATUS_IN_ACTIVATION, Cluster.STATUS_INACTIVE]:
|
|
198
|
+
continue
|
|
196
199
|
org_dev = None
|
|
197
200
|
org_dev_node = None
|
|
198
201
|
for node in db_controller.get_storage_nodes():
|