sbcli-dev 19.2.1__tar.gz → 19.2.3__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-19.2.1 → sbcli_dev-19.2.3}/PKG-INFO +1 -1
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/sbcli_dev.egg-info/PKG-INFO +1 -1
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/controllers/lvol_controller.py +3 -2
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/controllers/pool_controller.py +39 -26
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/controllers/snapshot_controller.py +3 -2
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/db_controller.py +4 -4
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/env_var +2 -2
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/health_check_service.py +22 -24
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/tasks_runner_port_allow.py +62 -4
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/storage_node_ops.py +89 -85
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/blueprints/snode_ops_k8s.py +1 -1
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/blueprints/web_api_lvol.py +4 -3
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/blueprints/web_api_pool.py +22 -14
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/templates/storage_deploy_spdk.yaml.j2 +1 -1
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/README.md +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/pyproject.toml +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/requirements.txt +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/sbcli_dev.egg-info/SOURCES.txt +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/sbcli_dev.egg-info/dependency_links.txt +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/sbcli_dev.egg-info/entry_points.txt +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/sbcli_dev.egg-info/requires.txt +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/sbcli_dev.egg-info/top_level.txt +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/setup.cfg +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/setup.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_cli/__init__.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_cli/cli.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_cli/clibase.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_cli/main.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/__init__.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/cluster_ops.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/cnode_client.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/constants.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/controllers/__init__.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/controllers/caching_node_controller.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/controllers/cluster_events.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/controllers/device_controller.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/controllers/device_events.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/controllers/events_controller.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/controllers/health_controller.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/controllers/lvol_events.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/controllers/mgmt_events.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/controllers/pool_events.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/controllers/snapshot_events.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/controllers/storage_events.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/controllers/tasks_controller.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/controllers/tasks_events.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/controllers/tcp_ports_events.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/distr_controller.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/fw_api_client.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/mgmt_node_ops.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/models/__init__.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/models/base_model.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/models/caching_node.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/models/cluster.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/models/deployer.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/models/events.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/models/hublvol.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/models/iface.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/models/job_schedule.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/models/lvol_model.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/models/mgmt_node.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/models/nvme_device.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/models/pool.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/models/port_stat.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/models/snapshot.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/models/stats.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/models/storage_node.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/pci_utils.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/rpc_client.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/__init__.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/alerting/alert_resources.yaml.j2 +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/alerting/alert_rules.yaml +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/clean_local_storage_deploy.sh +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/config_docker.sh +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/dashboard.yml +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/dashboards/cluster.json +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/dashboards/devices.json +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/dashboards/lvols.json +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/dashboards/node-exporter.json +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/dashboards/nodes.json +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/dashboards/pools.json +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/datasource.yml +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/db_config_double.sh +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/db_config_single.sh +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/deploy_fdb.sh +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/deploy_stack.sh +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/docker-compose-swarm-monitoring.yml +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/docker-compose-swarm.yml +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/foundation.yml +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/haproxy.cfg +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/helpers/__init__.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/helpers/deploy_cluster.sh +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/helpers/destroy_cluster.sh +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/helpers/nvme_disconnect_by_ip.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/install_deps.sh +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/objstore.yml +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/prepare_fdb.sh +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/prometheus.yml.j2 +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/run_ssh.sh +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/set_db_config.sh +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/stack_deploy_wait.sh +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/__init__.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/cached_lvol_stat_collector.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/caching_node_monitor.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/cap_monitor.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/capacity_and_stats_collector.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/device_monitor.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/install_service.sh +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/lvol_monitor.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/lvol_stat_collector.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/main_distr_event_collector.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/mgmt_node_monitor.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/new_device_discovery.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/remove_service.sh +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/service_template.service +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/spdk/__init__.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/spdk/client.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/spdk_http_proxy_server.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/storage_node_monitor.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/tasks_cluster_status.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/tasks_runner_failed_migration.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/tasks_runner_migration.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/tasks_runner_new_dev_migration.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/tasks_runner_node_add.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/tasks_runner_restart.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/shell_utils.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/snode_client.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/test/test_models.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/test/test_utils.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/utils.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/workers/cleanup_foundationdb.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/README.md +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/__init__.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/app.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/auth_middleware.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/blueprints/__init__.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/blueprints/caching_node_ops.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/blueprints/caching_node_ops_k8s.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/blueprints/node_api_basic.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/blueprints/snode_ops.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/blueprints/swagger_ui_blueprint.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/blueprints/web_api_caching_node.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/blueprints/web_api_cluster.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/blueprints/web_api_deployer.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/blueprints/web_api_device.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/blueprints/web_api_metrics.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/blueprints/web_api_mgmt_node.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/blueprints/web_api_snapshot.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/blueprints/web_api_storage_node.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/node_configure.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/node_utils.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/node_utils_k8s.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/node_webapp.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/static/SimplyBlock-API.postman_collection.json +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/static/delete.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/static/deploy.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/static/deploy_cnode.yaml +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/static/deploy_spdk.yaml +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/static/is_up.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/static/list_deps.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/static/rpac.yaml +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/static/swagger.yaml +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/static/tst.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/templates/caching_deploy_spdk.yaml.j2 +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/templates/storage_init_job.yaml.j2 +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/test/api/test_lvol.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/test/api/test_pool.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/test/api/test_snapshot.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/test/api/test_storage_node.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/test/conftest.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/test/pytest.ini +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/test/requirements.txt +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/test/util.py +0 -0
- {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/utils.py +0 -0
|
@@ -1080,8 +1080,9 @@ def list_lvols(is_json, cluster_id, pool_id_or_name, all=False):
|
|
|
1080
1080
|
if cluster_id:
|
|
1081
1081
|
lvols = db_controller.get_lvols(cluster_id)
|
|
1082
1082
|
elif pool_id_or_name:
|
|
1083
|
-
|
|
1084
|
-
|
|
1083
|
+
try:
|
|
1084
|
+
pool = db_controller.get_pool_by_id(pool_id_or_name)
|
|
1085
|
+
except KeyError:
|
|
1085
1086
|
pool = db_controller.get_pool_by_name(pool_id_or_name)
|
|
1086
1087
|
if pool:
|
|
1087
1088
|
for lv in db_controller.get_lvols_by_pool_id(pool.get_id()):
|
|
@@ -105,8 +105,9 @@ def qos_exists_on_child_lvol(db_controller: DBController, pool_uuid):
|
|
|
105
105
|
def set_pool(uuid, pool_max=0, lvol_max=0, max_rw_iops=0,
|
|
106
106
|
max_rw_mbytes=0, max_r_mbytes=0, max_w_mbytes=0, name=""):
|
|
107
107
|
db_controller = DBController()
|
|
108
|
-
|
|
109
|
-
|
|
108
|
+
try:
|
|
109
|
+
pool = db_controller.get_pool_by_id(uuid)
|
|
110
|
+
except KeyError:
|
|
110
111
|
msg = f"Pool not found: {uuid}"
|
|
111
112
|
logger.error(msg)
|
|
112
113
|
return False, msg
|
|
@@ -167,8 +168,9 @@ def set_pool(uuid, pool_max=0, lvol_max=0, max_rw_iops=0,
|
|
|
167
168
|
|
|
168
169
|
def delete_pool(uuid):
|
|
169
170
|
db_controller = DBController()
|
|
170
|
-
|
|
171
|
-
|
|
171
|
+
try:
|
|
172
|
+
pool = db_controller.get_pool_by_id(uuid)
|
|
173
|
+
except KeyError:
|
|
172
174
|
pool = db_controller.get_pool_by_name(uuid)
|
|
173
175
|
if not pool:
|
|
174
176
|
logger.error(f"Pool not found {uuid}")
|
|
@@ -214,9 +216,10 @@ def list_pools(is_json, cluster_id=None):
|
|
|
214
216
|
|
|
215
217
|
def set_status(pool_id, status):
|
|
216
218
|
db_controller = DBController()
|
|
217
|
-
pool = db_controller.get_pool_by_id(pool_id)
|
|
218
219
|
logger.info(f"Setting pool:{pool_id} status to Active")
|
|
219
|
-
|
|
220
|
+
try:
|
|
221
|
+
pool = db_controller.get_pool_by_id(pool_id)
|
|
222
|
+
except KeyError:
|
|
220
223
|
logger.error(f"Pool not found {pool_id}")
|
|
221
224
|
return False
|
|
222
225
|
pool.status = status
|
|
@@ -226,8 +229,9 @@ def set_status(pool_id, status):
|
|
|
226
229
|
|
|
227
230
|
def get_pool(pool_id, is_json):
|
|
228
231
|
db_controller = DBController()
|
|
229
|
-
|
|
230
|
-
|
|
232
|
+
try:
|
|
233
|
+
pool = db_controller.get_pool_by_id(pool_id)
|
|
234
|
+
except KeyError:
|
|
231
235
|
logger.error(f"Pool not found {pool_id}")
|
|
232
236
|
return False
|
|
233
237
|
|
|
@@ -241,8 +245,9 @@ def get_pool(pool_id, is_json):
|
|
|
241
245
|
|
|
242
246
|
def get_capacity(pool_id):
|
|
243
247
|
db_controller = DBController()
|
|
244
|
-
|
|
245
|
-
|
|
248
|
+
try:
|
|
249
|
+
db_controller.get_pool_by_id(pool_id)
|
|
250
|
+
except KeyError:
|
|
246
251
|
logger.error(f"Pool not found {pool_id}")
|
|
247
252
|
return False
|
|
248
253
|
|
|
@@ -268,8 +273,9 @@ def get_capacity(pool_id):
|
|
|
268
273
|
|
|
269
274
|
def get_io_stats(pool_id, history, records_count=20):
|
|
270
275
|
db_controller = DBController()
|
|
271
|
-
|
|
272
|
-
|
|
276
|
+
try:
|
|
277
|
+
pool = db_controller.get_pool_by_id(pool_id)
|
|
278
|
+
except KeyError:
|
|
273
279
|
logger.error(f"Pool not found {pool_id}")
|
|
274
280
|
return False
|
|
275
281
|
|
|
@@ -300,8 +306,9 @@ def get_io_stats(pool_id, history, records_count=20):
|
|
|
300
306
|
|
|
301
307
|
def get_secret(pool_id):
|
|
302
308
|
db_controller = DBController()
|
|
303
|
-
|
|
304
|
-
|
|
309
|
+
try:
|
|
310
|
+
pool = db_controller.get_pool_by_id(pool_id)
|
|
311
|
+
except KeyError:
|
|
305
312
|
logger.error(f"Pool not found {pool_id}")
|
|
306
313
|
return False
|
|
307
314
|
|
|
@@ -313,8 +320,9 @@ def get_secret(pool_id):
|
|
|
313
320
|
|
|
314
321
|
def set_secret(pool_id, secret):
|
|
315
322
|
db_controller = DBController()
|
|
316
|
-
|
|
317
|
-
|
|
323
|
+
try:
|
|
324
|
+
pool = db_controller.get_pool_by_id(pool_id)
|
|
325
|
+
except KeyError:
|
|
318
326
|
logger.error(f"Pool not found {pool_id}")
|
|
319
327
|
return False
|
|
320
328
|
|
|
@@ -328,8 +336,9 @@ def set_secret(pool_id, secret):
|
|
|
328
336
|
|
|
329
337
|
def get_pool_total_capacity(pool_id):
|
|
330
338
|
db_controller = DBController()
|
|
331
|
-
|
|
332
|
-
|
|
339
|
+
try:
|
|
340
|
+
db_controller.get_pool_by_id(pool_id)
|
|
341
|
+
except KeyError:
|
|
333
342
|
logger.error(f"Pool not found {pool_id}")
|
|
334
343
|
return False
|
|
335
344
|
total = 0
|
|
@@ -345,8 +354,9 @@ def get_pool_total_capacity(pool_id):
|
|
|
345
354
|
|
|
346
355
|
def get_pool_total_rw_iops(pool_id):
|
|
347
356
|
db_controller = DBController()
|
|
348
|
-
|
|
349
|
-
|
|
357
|
+
try:
|
|
358
|
+
pool = db_controller.get_pool_by_id(pool_id)
|
|
359
|
+
except KeyError:
|
|
350
360
|
logger.error(f"Pool not found {pool_id}")
|
|
351
361
|
return False
|
|
352
362
|
if pool.max_rw_ios_per_sec <= 0:
|
|
@@ -361,8 +371,9 @@ def get_pool_total_rw_iops(pool_id):
|
|
|
361
371
|
|
|
362
372
|
def get_pool_total_rw_mbytes(pool_id):
|
|
363
373
|
db_controller = DBController()
|
|
364
|
-
|
|
365
|
-
|
|
374
|
+
try:
|
|
375
|
+
pool = db_controller.get_pool_by_id(pool_id)
|
|
376
|
+
except KeyError:
|
|
366
377
|
logger.error(f"Pool not found {pool_id}")
|
|
367
378
|
return False
|
|
368
379
|
if pool.max_rw_mbytes_per_sec <= 0:
|
|
@@ -377,8 +388,9 @@ def get_pool_total_rw_mbytes(pool_id):
|
|
|
377
388
|
|
|
378
389
|
def get_pool_total_r_mbytes(pool_id):
|
|
379
390
|
db_controller = DBController()
|
|
380
|
-
|
|
381
|
-
|
|
391
|
+
try:
|
|
392
|
+
pool = db_controller.get_pool_by_id(pool_id)
|
|
393
|
+
except KeyError:
|
|
382
394
|
logger.error(f"Pool not found {pool_id}")
|
|
383
395
|
return False
|
|
384
396
|
if pool.max_r_mbytes_per_sec <= 0:
|
|
@@ -393,8 +405,9 @@ def get_pool_total_r_mbytes(pool_id):
|
|
|
393
405
|
|
|
394
406
|
def get_pool_total_w_mbytes(pool_id):
|
|
395
407
|
db_controller = DBController()
|
|
396
|
-
|
|
397
|
-
|
|
408
|
+
try:
|
|
409
|
+
pool = db_controller.get_pool_by_id(pool_id)
|
|
410
|
+
except KeyError:
|
|
398
411
|
logger.error(f"Pool not found {pool_id}")
|
|
399
412
|
return False
|
|
400
413
|
if pool.max_w_mbytes_per_sec <= 0:
|
|
@@ -357,8 +357,9 @@ def clone(snapshot_id, clone_name, new_size=0, pvc_name=None, pvc_namespace=None
|
|
|
357
357
|
logger.error(msg)
|
|
358
358
|
return False, msg
|
|
359
359
|
|
|
360
|
-
|
|
361
|
-
|
|
360
|
+
try:
|
|
361
|
+
pool = db_controller.get_pool_by_id(snap.lvol.pool_uuid)
|
|
362
|
+
except KeyError:
|
|
362
363
|
msg=f"Pool not found: {snap.lvol.pool_uuid}"
|
|
363
364
|
logger.error(msg)
|
|
364
365
|
return False, msg
|
|
@@ -145,11 +145,11 @@ class DBController(metaclass=Singleton):
|
|
|
145
145
|
pools = Pool().read_from_db(self.kv_store)
|
|
146
146
|
return pools
|
|
147
147
|
|
|
148
|
-
def get_pool_by_id(self, id) ->
|
|
148
|
+
def get_pool_by_id(self, id) -> Pool:
|
|
149
149
|
ret = Pool().read_from_db(self.kv_store, id)
|
|
150
|
-
if ret:
|
|
151
|
-
|
|
152
|
-
return
|
|
150
|
+
if not ret:
|
|
151
|
+
raise KeyError(f'Pool {id} not found')
|
|
152
|
+
return ret[0]
|
|
153
153
|
|
|
154
154
|
def get_pool_by_name(self, name) -> Optional[Pool]:
|
|
155
155
|
pools = Pool().read_from_db(self.kv_store)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
SIMPLY_BLOCK_COMMAND_NAME=sbcli-dev
|
|
2
|
-
SIMPLY_BLOCK_VERSION=19.2.
|
|
2
|
+
SIMPLY_BLOCK_VERSION=19.2.3
|
|
3
3
|
|
|
4
4
|
|
|
5
|
-
SIMPLY_BLOCK_DOCKER_IMAGE=public.ecr.aws/simply-block/simplyblock:
|
|
5
|
+
SIMPLY_BLOCK_DOCKER_IMAGE=public.ecr.aws/simply-block/simplyblock:main
|
|
6
6
|
|
|
7
7
|
SIMPLY_BLOCK_SPDK_ULTRA_IMAGE=public.ecr.aws/simply-block/ultra:main-latest
|
|
@@ -152,30 +152,28 @@ while True:
|
|
|
152
152
|
if org_dev.status == NVMeDevice.STATUS_ONLINE and org_node.status == StorageNode.STATUS_ONLINE:
|
|
153
153
|
if health_controller.check_bdev(remote_device.remote_bdev, bdev_names=node_bdev_names):
|
|
154
154
|
connected_devices.append(remote_device.get_id())
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
node_remote_devices_check &= bool(ret)
|
|
155
|
+
continue
|
|
156
|
+
|
|
157
|
+
if not org_dev.alceml_bdev:
|
|
158
|
+
logger.error(f"device alceml bdev not found!, {org_dev.get_id()}")
|
|
159
|
+
continue
|
|
160
|
+
|
|
161
|
+
try:
|
|
162
|
+
storage_node_ops.connect_device(
|
|
163
|
+
f"remote_{org_dev.alceml_bdev}", org_dev, rpc_client,
|
|
164
|
+
bdev_names=list(node_bdev_names), reattach=False,
|
|
165
|
+
)
|
|
166
|
+
connected_devices.append(org_dev.get_id())
|
|
167
|
+
sn = db.get_storage_node_by_id(snode.get_id())
|
|
168
|
+
for d in sn.remote_devices:
|
|
169
|
+
if d.get_id() == remote_device.get_id():
|
|
170
|
+
d.status = NVMeDevice.STATUS_ONLINE
|
|
171
|
+
sn.write_to_db()
|
|
172
|
+
break
|
|
173
|
+
distr_controller.send_dev_status_event(org_dev, NVMeDevice.STATUS_ONLINE, snode)
|
|
174
|
+
except RuntimeError:
|
|
175
|
+
logger.error(f"Failed to connect to device: {org_dev.get_id()}")
|
|
176
|
+
node_remote_devices_check = False
|
|
179
177
|
|
|
180
178
|
connected_jms = []
|
|
181
179
|
if snode.jm_device and snode.jm_device.get_id():
|
|
@@ -7,6 +7,7 @@ from simplyblock_core.controllers import tasks_events, tcp_ports_events, health_
|
|
|
7
7
|
from simplyblock_core.fw_api_client import FirewallClient
|
|
8
8
|
from simplyblock_core.models.job_schedule import JobSchedule
|
|
9
9
|
from simplyblock_core.models.cluster import Cluster
|
|
10
|
+
from simplyblock_core.models.nvme_device import NVMeDevice
|
|
10
11
|
from simplyblock_core.models.storage_node import StorageNode
|
|
11
12
|
from simplyblock_core.snode_client import SNodeClient
|
|
12
13
|
|
|
@@ -58,10 +59,67 @@ while True:
|
|
|
58
59
|
task.write_to_db(db.kv_store)
|
|
59
60
|
continue
|
|
60
61
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
62
|
+
# check node ping
|
|
63
|
+
ping_check = health_controller._check_node_ping(node.mgmt_ip)
|
|
64
|
+
logger.info(f"Check: ping mgmt ip {node.mgmt_ip} ... {ping_check}")
|
|
65
|
+
if not ping_check:
|
|
66
|
+
time.sleep(1)
|
|
67
|
+
ping_check = health_controller._check_node_ping(node.mgmt_ip)
|
|
68
|
+
logger.info(f"Check 2: ping mgmt ip {node.mgmt_ip} ... {ping_check}")
|
|
69
|
+
|
|
70
|
+
if not ping_check:
|
|
71
|
+
msg = f"Node ping is false, retry task"
|
|
72
|
+
logger.info(msg)
|
|
73
|
+
task.function_result = msg
|
|
74
|
+
task.status = JobSchedule.STATUS_SUSPENDED
|
|
75
|
+
task.write_to_db(db.kv_store)
|
|
76
|
+
continue
|
|
77
|
+
|
|
78
|
+
# check node ping
|
|
79
|
+
logger.info("connect to remote devices")
|
|
80
|
+
nodes = db.get_storage_nodes_by_cluster_id(node.cluster_id)
|
|
81
|
+
# connect to remote devs
|
|
82
|
+
try:
|
|
83
|
+
remote_devices = []
|
|
84
|
+
for nd in nodes:
|
|
85
|
+
if nd.get_id() == node.get_id() or nd.status not in [StorageNode.STATUS_ONLINE, StorageNode.STATUS_DOWN]:
|
|
86
|
+
continue
|
|
87
|
+
logger.info(f"Connecting to node {nd.get_id()}")
|
|
88
|
+
for index, dev in enumerate(nd.nvme_devices):
|
|
89
|
+
|
|
90
|
+
if dev.status not in [NVMeDevice.STATUS_ONLINE, NVMeDevice.STATUS_READONLY,
|
|
91
|
+
NVMeDevice.STATUS_CANNOT_ALLOCATE]:
|
|
92
|
+
logger.debug(f"Device is not online: {dev.get_id()}, status: {dev.status}")
|
|
93
|
+
continue
|
|
94
|
+
|
|
95
|
+
if not dev.alceml_bdev:
|
|
96
|
+
raise ValueError(f"device alceml bdev not found!, {dev.get_id()}")
|
|
97
|
+
|
|
98
|
+
dev.remote_bdev = storage_node_ops.connect_device(
|
|
99
|
+
f"remote_{dev.alceml_bdev}", dev, node.rpc_client(),
|
|
100
|
+
bdev_names=[], reattach=False)
|
|
101
|
+
|
|
102
|
+
remote_devices.append(dev)
|
|
103
|
+
if remote_devices:
|
|
104
|
+
node = db.get_storage_node_by_id(task.node_id)
|
|
105
|
+
node.remote_devices = remote_devices
|
|
106
|
+
node.write_to_db()
|
|
107
|
+
else:
|
|
108
|
+
msg = f"Node unable to connect to remote devs, retry task"
|
|
109
|
+
logger.info(msg)
|
|
110
|
+
task.function_result = msg
|
|
111
|
+
task.status = JobSchedule.STATUS_SUSPENDED
|
|
112
|
+
task.write_to_db(db.kv_store)
|
|
113
|
+
continue
|
|
114
|
+
|
|
115
|
+
except Exception as e:
|
|
116
|
+
logger.error(e)
|
|
117
|
+
msg = f"Error when connect to remote devs, retry task"
|
|
118
|
+
logger.info(msg)
|
|
119
|
+
task.function_result = msg
|
|
120
|
+
task.status = JobSchedule.STATUS_SUSPENDED
|
|
121
|
+
task.write_to_db(db.kv_store)
|
|
122
|
+
continue
|
|
65
123
|
|
|
66
124
|
logger.info("Sending device status event")
|
|
67
125
|
for db_dev in node.nvme_devices:
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import datetime
|
|
3
3
|
import json
|
|
4
4
|
import os
|
|
5
|
+
from typing import List
|
|
5
6
|
|
|
6
7
|
import threading
|
|
7
8
|
|
|
@@ -34,6 +35,39 @@ from simplyblock_core.utils import pull_docker_image_with_retry
|
|
|
34
35
|
logger = utils.get_logger(__name__)
|
|
35
36
|
|
|
36
37
|
|
|
38
|
+
def connect_device(name: str, device: NVMeDevice, rpc_client: RPCClient, bdev_names: List[str], reattach: bool):
|
|
39
|
+
"""Connect snode to device
|
|
40
|
+
|
|
41
|
+
This only performs the actual operation between both involved SPDK instances,
|
|
42
|
+
no book-keeping is done here.
|
|
43
|
+
|
|
44
|
+
More sensibly this would be a member function of either StorageNode or NVMeDevice.
|
|
45
|
+
"""
|
|
46
|
+
|
|
47
|
+
logger.info(f'Connecting to {name}')
|
|
48
|
+
bdev_name = f"{name}n1"
|
|
49
|
+
if bdev_name in bdev_names:
|
|
50
|
+
logger.debug("Already connected")
|
|
51
|
+
return bdev_name
|
|
52
|
+
|
|
53
|
+
if reattach and rpc_client.bdev_nvme_controller_list(name):
|
|
54
|
+
rpc_client.bdev_nvme_detach_controller(name)
|
|
55
|
+
time.sleep(1)
|
|
56
|
+
|
|
57
|
+
for ip in device.nvmf_ip.split(","):
|
|
58
|
+
rpc_client.bdev_nvme_attach_controller_tcp(
|
|
59
|
+
name, device.nvmf_nqn, ip, device.nvmf_port,
|
|
60
|
+
multipath=device.nvmf_multipath,
|
|
61
|
+
)
|
|
62
|
+
if device.nvmf_multipath:
|
|
63
|
+
rpc_client.bdev_nvme_set_multipath_policy(bdev_name, "active_active")
|
|
64
|
+
|
|
65
|
+
if not rpc_client.get_bdevs(bdev_name):
|
|
66
|
+
raise RuntimeError(f"Failed to connect to device: {device.get_id()}")
|
|
67
|
+
|
|
68
|
+
return bdev_name
|
|
69
|
+
|
|
70
|
+
|
|
37
71
|
def get_next_cluster_device_order(db_controller, cluster_id):
|
|
38
72
|
max_order = 0
|
|
39
73
|
found = False
|
|
@@ -629,32 +663,12 @@ def _connect_to_remote_devs(this_node, force_conect_restarting_nodes=False):
|
|
|
629
663
|
continue
|
|
630
664
|
|
|
631
665
|
if not dev.alceml_bdev:
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
else:
|
|
639
|
-
# if rpc_client.bdev_nvme_controller_list(name):
|
|
640
|
-
# logger.info(f"detaching {name} from {this_node.get_id()}")
|
|
641
|
-
# rpc_client.bdev_nvme_detach_controller(name)
|
|
642
|
-
# time.sleep(1)
|
|
643
|
-
if dev.nvmf_multipath:
|
|
644
|
-
for ip in dev.nvmf_ip.split(","):
|
|
645
|
-
logger.info(f"Connecting {name} to {this_node.get_id()}")
|
|
646
|
-
rpc_client.bdev_nvme_attach_controller_tcp(
|
|
647
|
-
name, dev.nvmf_nqn, ip, dev.nvmf_port, multipath=True)
|
|
648
|
-
rpc_client.bdev_nvme_set_multipath_policy(bdev_name, "active_active")
|
|
649
|
-
else:
|
|
650
|
-
logger.info(f"Connecting {name} to {this_node.get_id()}")
|
|
651
|
-
rpc_client.bdev_nvme_attach_controller_tcp(
|
|
652
|
-
name, dev.nvmf_nqn, dev.nvmf_ip, dev.nvmf_port, multipath=False)
|
|
653
|
-
ret = rpc_client.get_bdevs(bdev_name)
|
|
654
|
-
if not ret:
|
|
655
|
-
logger.error(f"Failed to connect to device: {dev.get_id()}")
|
|
656
|
-
continue
|
|
657
|
-
dev.remote_bdev = bdev_name
|
|
666
|
+
raise ValueError(f"device alceml bdev not found!, {dev.get_id()}")
|
|
667
|
+
|
|
668
|
+
dev.remote_bdev = connect_device(
|
|
669
|
+
f"remote_{dev.alceml_bdev}", dev, rpc_client,
|
|
670
|
+
bdev_names=node_bdev_names, reattach=False
|
|
671
|
+
)
|
|
658
672
|
remote_devices.append(dev)
|
|
659
673
|
|
|
660
674
|
return remote_devices
|
|
@@ -710,55 +724,18 @@ def _connect_to_remote_jm_devs(this_node, jm_ids=None):
|
|
|
710
724
|
if not org_dev or org_dev in new_devs or org_dev_node.get_id() == this_node.get_id():
|
|
711
725
|
continue
|
|
712
726
|
|
|
713
|
-
|
|
714
|
-
bdev_name = f"{name}n1"
|
|
715
|
-
org_dev.remote_bdev = bdev_name
|
|
716
|
-
|
|
717
|
-
if org_dev.status == NVMeDevice.STATUS_ONLINE:
|
|
718
|
-
|
|
719
|
-
if bdev_name in node_bdev_names:
|
|
720
|
-
logger.debug(f"bdev found {bdev_name}")
|
|
721
|
-
org_dev.status = JMDevice.STATUS_ONLINE
|
|
722
|
-
new_devs.append(org_dev)
|
|
723
|
-
elif org_dev_node.status == StorageNode.STATUS_ONLINE:
|
|
724
|
-
if rpc_client.bdev_nvme_controller_list(name):
|
|
725
|
-
logger.info(f"detaching {name} from {this_node.get_id()}")
|
|
726
|
-
rpc_client.bdev_nvme_detach_controller(name)
|
|
727
|
-
time.sleep(1)
|
|
728
|
-
|
|
729
|
-
if org_dev.nvmf_multipath:
|
|
730
|
-
for ip in org_dev.nvmf_ip.split(","):
|
|
731
|
-
logger.info(f"Connecting {name} to {this_node.get_id()}")
|
|
732
|
-
ret = rpc_client.bdev_nvme_attach_controller_tcp(
|
|
733
|
-
name, org_dev.nvmf_nqn, ip, org_dev.nvmf_port, multipath=True)
|
|
734
|
-
rpc_client.bdev_nvme_set_multipath_policy(bdev_name, "active_active")
|
|
735
|
-
|
|
736
|
-
# if ret:
|
|
737
|
-
org_dev.status = JMDevice.STATUS_ONLINE
|
|
738
|
-
# else:
|
|
739
|
-
# logger.error(f"failed to connect to remote JM {name}")
|
|
740
|
-
# org_dev.status = JMDevice.STATUS_UNAVAILABLE
|
|
741
|
-
else:
|
|
742
|
-
logger.info(f"Connecting {name} to {this_node.get_id()}")
|
|
743
|
-
ret = rpc_client.bdev_nvme_attach_controller_tcp(
|
|
744
|
-
name, org_dev.nvmf_nqn, org_dev.nvmf_ip, org_dev.nvmf_port, multipath=False)
|
|
745
|
-
if ret:
|
|
746
|
-
org_dev.status = JMDevice.STATUS_ONLINE
|
|
747
|
-
else:
|
|
748
|
-
logger.error(f"failed to connect to remote JM {name}")
|
|
749
|
-
org_dev.status = JMDevice.STATUS_UNAVAILABLE
|
|
750
|
-
new_devs.append(org_dev)
|
|
751
|
-
else:
|
|
752
|
-
org_dev.status = JMDevice.STATUS_UNAVAILABLE
|
|
753
|
-
new_devs.append(org_dev)
|
|
754
|
-
|
|
755
|
-
else:
|
|
756
|
-
# if bdev_name in node_bdev_names:
|
|
757
|
-
# logger.debug(f"bdev found {bdev_name}")
|
|
758
|
-
# rpc_client.bdev_nvme_detach_controller(name)
|
|
759
|
-
|
|
727
|
+
if org_dev.status != NVMeDevice.STATUS_ONLINE or org_dev_node.status != StorageNode.STATUS_ONLINE:
|
|
760
728
|
org_dev.status = JMDevice.STATUS_UNAVAILABLE
|
|
761
|
-
|
|
729
|
+
else:
|
|
730
|
+
try:
|
|
731
|
+
org_dev.remote_bdev = connect_device(
|
|
732
|
+
f"remote_{org_dev.jm_bdev}", org_dev, rpc_client,
|
|
733
|
+
bdev_names=node_bdev_names, reattach=True,
|
|
734
|
+
)
|
|
735
|
+
except RuntimeError:
|
|
736
|
+
logger.error(f'Failed to connect to {org_dev.get_id()}')
|
|
737
|
+
org_dev.status = JMDevice.STATUS_UNAVAILABLE
|
|
738
|
+
new_devs.append(org_dev)
|
|
762
739
|
|
|
763
740
|
return new_devs
|
|
764
741
|
|
|
@@ -1197,7 +1174,11 @@ def add_node(cluster_id, node_addr, iface_name, data_nics_list,
|
|
|
1197
1174
|
for node in snodes:
|
|
1198
1175
|
if node.get_id() == snode.get_id() or node.status != StorageNode.STATUS_ONLINE:
|
|
1199
1176
|
continue
|
|
1200
|
-
|
|
1177
|
+
try:
|
|
1178
|
+
node.remote_devices = _connect_to_remote_devs(node)
|
|
1179
|
+
except RuntimeError:
|
|
1180
|
+
logger.error('Failed to connect to remote devices')
|
|
1181
|
+
return False
|
|
1201
1182
|
node.write_to_db(kv_store)
|
|
1202
1183
|
|
|
1203
1184
|
if cluster.status not in [Cluster.STATUS_ACTIVE, Cluster.STATUS_DEGRADED, Cluster.STATUS_READONLY, Cluster.STATUS_IN_EXPANSION]:
|
|
@@ -1741,7 +1722,11 @@ def restart_storage_node(
|
|
|
1741
1722
|
snode.write_to_db()
|
|
1742
1723
|
|
|
1743
1724
|
logger.info("Connecting to remote devices")
|
|
1744
|
-
|
|
1725
|
+
try:
|
|
1726
|
+
snode.remote_devices = _connect_to_remote_devs(snode)
|
|
1727
|
+
except RuntimeError:
|
|
1728
|
+
logger.error('Failed to connect to remote devices')
|
|
1729
|
+
return False
|
|
1745
1730
|
if snode.enable_ha_jm:
|
|
1746
1731
|
snode.remote_jm_devices = _connect_to_remote_jm_devs(snode)
|
|
1747
1732
|
snode.health_check = True
|
|
@@ -1784,7 +1769,11 @@ def restart_storage_node(
|
|
|
1784
1769
|
for node in snodes:
|
|
1785
1770
|
if node.get_id() == snode.get_id() or node.status != StorageNode.STATUS_ONLINE:
|
|
1786
1771
|
continue
|
|
1787
|
-
|
|
1772
|
+
try:
|
|
1773
|
+
node.remote_devices = _connect_to_remote_devs(node, force_conect_restarting_nodes=True)
|
|
1774
|
+
except RuntimeError:
|
|
1775
|
+
logger.error('Failed to connect to remote devices')
|
|
1776
|
+
return False
|
|
1788
1777
|
node.write_to_db(kv_store)
|
|
1789
1778
|
|
|
1790
1779
|
logger.info("Sending device status event")
|
|
@@ -1826,8 +1815,14 @@ def restart_storage_node(
|
|
|
1826
1815
|
for node in snodes:
|
|
1827
1816
|
if node.get_id() == snode.get_id() or node.status != StorageNode.STATUS_ONLINE:
|
|
1828
1817
|
continue
|
|
1829
|
-
|
|
1818
|
+
|
|
1819
|
+
try:
|
|
1820
|
+
node.remote_devices = _connect_to_remote_devs(node, force_conect_restarting_nodes=True)
|
|
1821
|
+
except RuntimeError:
|
|
1822
|
+
logger.error('Failed to connect to remote devices')
|
|
1823
|
+
return False
|
|
1830
1824
|
node.write_to_db(kv_store)
|
|
1825
|
+
|
|
1831
1826
|
|
|
1832
1827
|
logger.info("Sending device status event")
|
|
1833
1828
|
snode = db_controller.get_storage_node_by_id(snode.get_id())
|
|
@@ -2263,7 +2258,12 @@ def resume_storage_node(node_id):
|
|
|
2263
2258
|
|
|
2264
2259
|
logger.info("Connecting to remote devices")
|
|
2265
2260
|
snode = db_controller.get_storage_node_by_id(node_id)
|
|
2266
|
-
|
|
2261
|
+
try:
|
|
2262
|
+
snode.remote_devices = _connect_to_remote_devs(snode)
|
|
2263
|
+
except RuntimeError:
|
|
2264
|
+
logger.error('Failed to connect to remote devices')
|
|
2265
|
+
return False
|
|
2266
|
+
|
|
2267
2267
|
if snode.enable_ha_jm:
|
|
2268
2268
|
snode.remote_jm_devices = _connect_to_remote_jm_devs(snode)
|
|
2269
2269
|
|
|
@@ -2831,7 +2831,11 @@ def set_node_status(node_id, status, reconnect_on_online=True):
|
|
|
2831
2831
|
if snode.status == StorageNode.STATUS_ONLINE and reconnect_on_online:
|
|
2832
2832
|
snode = db_controller.get_storage_node_by_id(node_id)
|
|
2833
2833
|
logger.info("Connecting to remote devices")
|
|
2834
|
-
|
|
2834
|
+
try:
|
|
2835
|
+
snode.remote_devices = _connect_to_remote_devs(snode)
|
|
2836
|
+
except RuntimeError:
|
|
2837
|
+
logger.error('Failed to connect to remote devices')
|
|
2838
|
+
return False
|
|
2835
2839
|
if snode.enable_ha_jm:
|
|
2836
2840
|
snode.remote_jm_devices = _connect_to_remote_jm_devs(snode)
|
|
2837
2841
|
snode.health_check = True
|
|
@@ -3051,11 +3055,11 @@ def recreate_lvstore(snode, force=False):
|
|
|
3051
3055
|
_kill_app()
|
|
3052
3056
|
raise Exception("Failed to recover lvstore")
|
|
3053
3057
|
|
|
3054
|
-
logger.info("Suspending JC compression")
|
|
3055
|
-
ret = rpc_client.jc_suspend_compression(jm_vuid=snode.jm_vuid, suspend=True)
|
|
3056
|
-
if not ret:
|
|
3057
|
-
|
|
3058
|
-
|
|
3058
|
+
# logger.info("Suspending JC compression")
|
|
3059
|
+
# ret = rpc_client.jc_suspend_compression(jm_vuid=snode.jm_vuid, suspend=True)
|
|
3060
|
+
# if not ret:
|
|
3061
|
+
# logger.error("Failed to suspend JC compression")
|
|
3062
|
+
# # return False
|
|
3059
3063
|
|
|
3060
3064
|
ret = rpc_client.bdev_lvol_set_lvs_opts(
|
|
3061
3065
|
snode.lvstore,
|
|
@@ -437,7 +437,7 @@ def spdk_process_kill(query: utils.RPCPortParams):
|
|
|
437
437
|
|
|
438
438
|
|
|
439
439
|
def _is_pod_up(rpc_port):
|
|
440
|
-
k8s_core_v1 =
|
|
440
|
+
k8s_core_v1 = core_utils.get_k8s_core_client()
|
|
441
441
|
pod_name = f"snode-spdk-pod-{rpc_port}"
|
|
442
442
|
try:
|
|
443
443
|
resp = k8s_core_v1.list_namespaced_pod(node_utils_k8s.get_namespace())
|
|
@@ -234,9 +234,10 @@ def delete_lvol(uuid):
|
|
|
234
234
|
if not lvol:
|
|
235
235
|
return utils.get_response_error(f"LVol not found: {uuid}", 404)
|
|
236
236
|
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
237
|
+
try:
|
|
238
|
+
pool = db.get_pool_by_id(lvol.pool_uuid)
|
|
239
|
+
except KeyError:
|
|
240
|
+
return utils.get_response_error(f"Pool not found: {lvol.pool_uuid}", 404)
|
|
240
241
|
|
|
241
242
|
if pool.status == pool.STATUS_INACTIVE:
|
|
242
243
|
return utils.get_response_error("Pool is disabled", 400)
|