sbcli-pre 25.6.2__tar.gz → 25.6.4__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-pre-25.6.2 → sbcli-pre-25.6.4}/PKG-INFO +1 -1
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/sbcli_pre.egg-info/PKG-INFO +1 -1
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/cluster_ops.py +7 -58
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/constants.py +1 -1
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/controllers/device_controller.py +8 -4
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/controllers/lvol_controller.py +12 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/controllers/tasks_controller.py +3 -3
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/distr_controller.py +1 -1
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/env_var +1 -1
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/mgmt_node_ops.py +3 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/models/cluster.py +1 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/models/storage_node.py +6 -3
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/rpc_client.py +8 -3
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/services/tasks_runner_port_allow.py +19 -4
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/storage_node_ops.py +4 -3
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/utils.py +57 -2
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_web/blueprints/snode_ops.py +2 -1
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/README.md +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/pyproject.toml +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/requirements.txt +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/sbcli_pre.egg-info/SOURCES.txt +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/sbcli_pre.egg-info/dependency_links.txt +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/sbcli_pre.egg-info/entry_points.txt +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/sbcli_pre.egg-info/requires.txt +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/sbcli_pre.egg-info/top_level.txt +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/setup.cfg +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/setup.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_cli/__init__.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_cli/cli.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_cli/clibase.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_cli/main.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/__init__.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/cnode_client.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/controllers/__init__.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/controllers/caching_node_controller.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/controllers/cluster_events.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/controllers/device_events.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/controllers/events_controller.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/controllers/health_controller.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/controllers/lvol_events.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/controllers/mgmt_events.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/controllers/pool_controller.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/controllers/pool_events.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/controllers/snapshot_controller.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/controllers/snapshot_events.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/controllers/storage_events.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/controllers/tasks_events.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/controllers/tcp_ports_events.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/db_controller.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/models/__init__.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/models/base_model.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/models/caching_node.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/models/deployer.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/models/events.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/models/hublvol.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/models/iface.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/models/job_schedule.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/models/lvol_model.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/models/mgmt_node.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/models/nvme_device.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/models/pool.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/models/port_stat.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/models/snapshot.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/models/stats.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/pci_utils.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/scripts/__init__.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/scripts/alerting/alert_resources.yaml.j2 +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/scripts/alerting/alert_rules.yaml +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/scripts/clean_local_storage_deploy.sh +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/scripts/config_docker.sh +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/scripts/dashboard.yml +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/scripts/dashboards/cluster.json +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/scripts/dashboards/devices.json +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/scripts/dashboards/lvols.json +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/scripts/dashboards/node-exporter.json +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/scripts/dashboards/nodes.json +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/scripts/dashboards/pools.json +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/scripts/datasource.yml +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/scripts/db_config_double.sh +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/scripts/db_config_single.sh +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/scripts/deploy_fdb.sh +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/scripts/deploy_stack.sh +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/scripts/docker-compose-swarm-monitoring.yml +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/scripts/docker-compose-swarm.yml +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/scripts/foundation.yml +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/scripts/haproxy.cfg +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/scripts/helpers/__init__.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/scripts/helpers/deploy_cluster.sh +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/scripts/helpers/destroy_cluster.sh +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/scripts/helpers/nvme_disconnect_by_ip.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/scripts/install_deps.sh +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/scripts/objstore.yml +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/scripts/prepare_fdb.sh +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/scripts/prometheus.yml.j2 +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/scripts/run_ssh.sh +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/scripts/set_db_config.sh +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/scripts/stack_deploy_wait.sh +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/services/__init__.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/services/cached_lvol_stat_collector.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/services/caching_node_monitor.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/services/cap_monitor.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/services/capacity_and_stats_collector.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/services/device_monitor.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/services/health_check_service.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/services/install_service.sh +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/services/lvol_monitor.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/services/lvol_stat_collector.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/services/main_distr_event_collector.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/services/mgmt_node_monitor.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/services/new_device_discovery.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/services/remove_service.sh +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/services/service_template.service +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/services/spdk/__init__.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/services/spdk/client.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/services/spdk_http_proxy_server.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/services/storage_node_monitor.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/services/tasks_cluster_status.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/services/tasks_runner_failed_migration.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/services/tasks_runner_migration.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/services/tasks_runner_new_dev_migration.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/services/tasks_runner_node_add.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/services/tasks_runner_restart.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/shell_utils.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/snode_client.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/test/test_models.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/test/test_utils.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/workers/cleanup_foundationdb.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_web/README.md +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_web/__init__.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_web/app.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_web/auth_middleware.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_web/blueprints/__init__.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_web/blueprints/caching_node_ops.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_web/blueprints/caching_node_ops_k8s.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_web/blueprints/node_api_basic.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_web/blueprints/node_api_caching_docker.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_web/blueprints/node_api_caching_ks.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_web/blueprints/snode_ops_k8s.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_web/blueprints/swagger_ui_blueprint.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_web/blueprints/web_api_caching_node.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_web/blueprints/web_api_cluster.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_web/blueprints/web_api_deployer.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_web/blueprints/web_api_device.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_web/blueprints/web_api_lvol.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_web/blueprints/web_api_metrics.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_web/blueprints/web_api_mgmt_node.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_web/blueprints/web_api_pool.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_web/blueprints/web_api_snapshot.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_web/blueprints/web_api_storage_node.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_web/node_configure.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_web/node_utils.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_web/node_utils_k8s.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_web/node_webapp.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_web/static/SimplyBlock-API.postman_collection.json +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_web/static/delete.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_web/static/deploy.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_web/static/deploy_cnode.yaml +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_web/static/deploy_spdk.yaml +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_web/static/is_up.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_web/static/list_deps.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_web/static/rpac.yaml +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_web/static/swagger.yaml +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_web/static/tst.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_web/templates/caching_deploy_spdk.yaml.j2 +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_web/templates/storage_deploy_spdk.yaml.j2 +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_web/test/api/test_lvol.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_web/test/api/test_pool.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_web/test/api/test_snapshot.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_web/test/api/test_storage_node.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_web/test/conftest.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_web/test/pytest.ini +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_web/test/requirements.txt +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_web/test/util.py +0 -0
- {sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_web/utils.py +0 -0
@@ -3,8 +3,6 @@ import datetime
|
|
3
3
|
import json
|
4
4
|
import os
|
5
5
|
import socket
|
6
|
-
import re
|
7
|
-
import tempfile
|
8
6
|
import subprocess
|
9
7
|
import time
|
10
8
|
import uuid
|
@@ -13,7 +11,6 @@ import typing as t
|
|
13
11
|
|
14
12
|
import docker
|
15
13
|
import requests
|
16
|
-
from jinja2 import Environment, FileSystemLoader
|
17
14
|
|
18
15
|
from simplyblock_core import utils, scripts, constants, mgmt_node_ops, storage_node_ops
|
19
16
|
from simplyblock_core.controllers import cluster_events, device_controller, pool_controller, \
|
@@ -30,7 +27,6 @@ from simplyblock_core.models.storage_node import StorageNode
|
|
30
27
|
from simplyblock_core.utils import pull_docker_image_with_retry
|
31
28
|
|
32
29
|
logger = utils.get_logger(__name__)
|
33
|
-
TOP_DIR = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
|
34
30
|
|
35
31
|
db_controller = DBController()
|
36
32
|
|
@@ -216,56 +212,9 @@ def create_cluster(blk_size, page_size_in_blocks, cli_pass,
|
|
216
212
|
c.inflight_io_threshold = inflight_io_threshold
|
217
213
|
c.enable_qos = enable_qos
|
218
214
|
c.strict_node_anti_affinity = strict_node_anti_affinity
|
215
|
+
c.contact_point = contact_point
|
219
216
|
|
220
|
-
|
221
|
-
alert_resources_file = "alert_resources.yaml"
|
222
|
-
|
223
|
-
env = Environment(loader=FileSystemLoader(alerts_template_folder), trim_blocks=True, lstrip_blocks=True)
|
224
|
-
template = env.get_template(f'{alert_resources_file}.j2')
|
225
|
-
|
226
|
-
slack_pattern = re.compile(r"https://hooks\.slack\.com/services/\S+")
|
227
|
-
email_pattern = re.compile(r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$")
|
228
|
-
|
229
|
-
if slack_pattern.match(contact_point):
|
230
|
-
ALERT_TYPE = "slack"
|
231
|
-
elif email_pattern.match(contact_point):
|
232
|
-
ALERT_TYPE = "email"
|
233
|
-
else:
|
234
|
-
ALERT_TYPE = "slack"
|
235
|
-
contact_point = 'https://hooks.slack.com/services/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'
|
236
|
-
|
237
|
-
values = {
|
238
|
-
'CONTACT_POINT': contact_point,
|
239
|
-
'GRAFANA_ENDPOINT': c.grafana_endpoint,
|
240
|
-
'ALERT_TYPE': ALERT_TYPE,
|
241
|
-
}
|
242
|
-
|
243
|
-
with tempfile.TemporaryDirectory() as temp_dir:
|
244
|
-
temp_file_path = os.path.join(temp_dir, alert_resources_file)
|
245
|
-
with open(temp_file_path, 'w') as file:
|
246
|
-
file.write(template.render(values))
|
247
|
-
|
248
|
-
destination_file_path = os.path.join(alerts_template_folder, alert_resources_file)
|
249
|
-
subprocess.check_call(['sudo', '-v']) # sudo -v checks if the current user has sudo permissions
|
250
|
-
subprocess.check_call(['sudo', 'mv', temp_file_path, destination_file_path])
|
251
|
-
print(f"File moved to {destination_file_path} successfully.")
|
252
|
-
|
253
|
-
scripts_folder = os.path.join(TOP_DIR, "simplyblock_core/scripts/")
|
254
|
-
prometheus_file = "prometheus.yml"
|
255
|
-
env = Environment(loader=FileSystemLoader(scripts_folder), trim_blocks=True, lstrip_blocks=True)
|
256
|
-
template = env.get_template(f'{prometheus_file}.j2')
|
257
|
-
values = {
|
258
|
-
'CLUSTER_ID': c.uuid,
|
259
|
-
'CLUSTER_SECRET': c.secret}
|
260
|
-
|
261
|
-
with tempfile.TemporaryDirectory() as temp_dir:
|
262
|
-
file_path = os.path.join(temp_dir, prometheus_file)
|
263
|
-
with open(file_path, 'w') as file:
|
264
|
-
file.write(template.render(values))
|
265
|
-
|
266
|
-
prometheus_file_path = os.path.join(scripts_folder, prometheus_file)
|
267
|
-
subprocess.check_call(['sudo', 'mv', file_path, prometheus_file_path])
|
268
|
-
print(f"File moved to {prometheus_file_path} successfully.")
|
217
|
+
utils.render_and_deploy_alerting_configs(contact_point, c.grafana_endpoint, c.uuid, c.secret)
|
269
218
|
|
270
219
|
logger.info("Deploying swarm stack ...")
|
271
220
|
log_level = "DEBUG" if constants.LOG_WEB_DEBUG else "INFO"
|
@@ -1194,11 +1143,11 @@ def update_cluster(cluster_id, mgmt_only=False, restart=False, spdk_image=None,
|
|
1194
1143
|
service_image = constants.SIMPLY_BLOCK_DOCKER_IMAGE
|
1195
1144
|
if mgmt_image:
|
1196
1145
|
service_image = mgmt_image
|
1197
|
-
|
1198
|
-
|
1199
|
-
|
1200
|
-
|
1201
|
-
|
1146
|
+
for service in cluster_docker.services.list():
|
1147
|
+
if image_parts in service.attrs['Spec']['Labels']['com.docker.stack.image'] or \
|
1148
|
+
"simplyblock" in service.attrs['Spec']['Labels']['com.docker.stack.image']:
|
1149
|
+
logger.info(f"Updating service {service.name}")
|
1150
|
+
service.update(image=service_image, force_update=True)
|
1202
1151
|
logger.info("Done updating mgmt cluster")
|
1203
1152
|
|
1204
1153
|
if mgmt_only:
|
@@ -125,7 +125,7 @@ MAX_SNAP_COUNT = 100
|
|
125
125
|
SPDK_PROXY_MULTI_THREADING_ENABLED=True
|
126
126
|
SPDK_PROXY_TIMEOUT=60*5
|
127
127
|
LVOL_NVME_CONNECT_RECONNECT_DELAY=2
|
128
|
-
LVOL_NVME_CONNECT_CTRL_LOSS_TMO=60
|
128
|
+
LVOL_NVME_CONNECT_CTRL_LOSS_TMO=60*60
|
129
129
|
LVOL_NVME_CONNECT_NR_IO_QUEUES=6
|
130
130
|
LVOL_NVME_KEEP_ALIVE_TO=5
|
131
131
|
LVOL_NVMF_PORT_START=9100
|
@@ -903,13 +903,15 @@ def restart_jm_device(device_id, force=False, format_alceml=False):
|
|
903
903
|
|
904
904
|
if not ret:
|
905
905
|
logger.error(f"Failed to create alceml bdev: {jm_device.alceml_bdev}")
|
906
|
-
|
906
|
+
if not force:
|
907
|
+
return False
|
907
908
|
|
908
909
|
jm_bdev = f"jm_{snode.get_id()}"
|
909
910
|
ret = rpc_client.bdev_jm_create(jm_bdev, jm_device.alceml_bdev, jm_cpu_mask=snode.jm_cpu_mask)
|
910
911
|
if not ret:
|
911
912
|
logger.error(f"Failed to create {jm_bdev}")
|
912
|
-
|
913
|
+
if not force:
|
914
|
+
return False
|
913
915
|
|
914
916
|
if snode.enable_ha_jm:
|
915
917
|
# add pass through
|
@@ -917,7 +919,8 @@ def restart_jm_device(device_id, force=False, format_alceml=False):
|
|
917
919
|
ret = rpc_client.bdev_PT_NoExcl_create(pt_name, jm_bdev)
|
918
920
|
if not ret:
|
919
921
|
logger.error(f"Failed to create pt noexcl bdev: {pt_name}")
|
920
|
-
|
922
|
+
if not force:
|
923
|
+
return False
|
921
924
|
|
922
925
|
subsystem_nqn = snode.subsystem + ":dev:" + jm_bdev
|
923
926
|
logger.info("creating subsystem %s", subsystem_nqn)
|
@@ -936,7 +939,8 @@ def restart_jm_device(device_id, force=False, format_alceml=False):
|
|
936
939
|
ret = rpc_client.nvmf_subsystem_add_ns(subsystem_nqn, pt_name)
|
937
940
|
if not ret:
|
938
941
|
logger.error(f"Failed to add: {pt_name} to the subsystem: {subsystem_nqn}")
|
939
|
-
|
942
|
+
if not force:
|
943
|
+
return False
|
940
944
|
|
941
945
|
set_jm_device_state(snode.jm_device.get_id(), JMDevice.STATUS_ONLINE)
|
942
946
|
|
@@ -932,6 +932,17 @@ def delete_lvol(id_or_name, force_delete=False):
|
|
932
932
|
logger.error(msg)
|
933
933
|
return False, msg
|
934
934
|
|
935
|
+
# 1- delete subsystem from secondary
|
936
|
+
if secondary_node:
|
937
|
+
secondary_node = db_controller.get_storage_node_by_id(secondary_node.get_id())
|
938
|
+
if secondary_node.status == StorageNode.STATUS_ONLINE:
|
939
|
+
logger.info(f"Deleting subsystem for lvol:{lvol.get_id()} from node:{secondary_node.get_id()}")
|
940
|
+
secondary_rpc_client = secondary_node.rpc_client()
|
941
|
+
ret = secondary_rpc_client.subsystem_delete(lvol.nqn)
|
942
|
+
if not ret:
|
943
|
+
logger.warning(f"Failed to delete subsystem from node: {secondary_node.get_id()}")
|
944
|
+
|
945
|
+
# 2- delete subsystem and lvol bdev from primary
|
935
946
|
if primary_node:
|
936
947
|
|
937
948
|
ret = delete_lvol_from_node(lvol.get_id(), primary_node.get_id())
|
@@ -940,6 +951,7 @@ def delete_lvol(id_or_name, force_delete=False):
|
|
940
951
|
if not force_delete:
|
941
952
|
return False
|
942
953
|
|
954
|
+
# 3- delete lvol bdev from secondary
|
943
955
|
if secondary_node:
|
944
956
|
secondary_node = db_controller.get_storage_node_by_id(secondary_node.get_id())
|
945
957
|
if secondary_node.status == StorageNode.STATUS_ONLINE:
|
@@ -96,11 +96,11 @@ def add_device_to_auto_restart(device):
|
|
96
96
|
|
97
97
|
def add_node_to_auto_restart(node):
|
98
98
|
cluster = db.get_cluster_by_id(node.cluster_id)
|
99
|
-
if cluster.status
|
100
|
-
logger.
|
99
|
+
if cluster.status not in [Cluster.STATUS_ACTIVE, Cluster.STATUS_DEGRADED, Cluster.STATUS_READONLY]:
|
100
|
+
logger.warning(f"Cluster is not active, skip node auto restart, status: {cluster.status}")
|
101
101
|
return False
|
102
102
|
for sn in db.get_storage_nodes_by_cluster_id(node.cluster_id):
|
103
|
-
if node.get_id() != sn.get_id() and sn.status != StorageNode.STATUS_ONLINE:
|
103
|
+
if node.get_id() != sn.get_id() and sn.status != StorageNode.STATUS_ONLINE and node.mgmt_ip != sn.mgmt_ip:
|
104
104
|
logger.info("Node found that is not online, skip node auto restart")
|
105
105
|
return False
|
106
106
|
return _add_task(JobSchedule.FN_NODE_RESTART, node.cluster_id, node.get_id(), "")
|
@@ -49,7 +49,7 @@ def send_dev_status_event(device, status, target_node=None):
|
|
49
49
|
else:
|
50
50
|
snodes = db_controller.get_storage_nodes_by_cluster_id(device.cluster_id)
|
51
51
|
for node in snodes:
|
52
|
-
if node.status not in [StorageNode.STATUS_ONLINE, StorageNode.STATUS_SUSPENDED]:
|
52
|
+
if node.status not in [StorageNode.STATUS_ONLINE, StorageNode.STATUS_SUSPENDED, StorageNode.STATUS_DOWN]:
|
53
53
|
continue
|
54
54
|
|
55
55
|
dev_status = status
|
@@ -60,6 +60,9 @@ def deploy_mgmt_node(cluster_ip, cluster_id, ifname, cluster_secret):
|
|
60
60
|
logger.error("Node already exists in the cluster")
|
61
61
|
return False
|
62
62
|
|
63
|
+
utils.render_and_deploy_alerting_configs(cluster_data['contact_point'], cluster_data['grafana_endpoint'],
|
64
|
+
cluster_data['uuid'], cluster_data['secret'])
|
65
|
+
|
63
66
|
logger.info("Joining docker swarm...")
|
64
67
|
try:
|
65
68
|
cluster_docker = utils.get_docker_client(cluster_id)
|
@@ -236,12 +236,15 @@ class StorageNode(BaseNodeObject):
|
|
236
236
|
remote_bdev = f"{primary_node.hublvol.bdev_name}n1"
|
237
237
|
|
238
238
|
if not rpc_client.get_bdevs(remote_bdev):
|
239
|
-
|
239
|
+
ip_lst = []
|
240
240
|
for ip in (iface.ip4_address for iface in primary_node.data_nics):
|
241
|
+
ip_lst.append(ip)
|
242
|
+
multipath = bool(len(ip_lst) > 1)
|
243
|
+
for ip in ip_lst:
|
241
244
|
ret = rpc_client.bdev_nvme_attach_controller_tcp(
|
242
245
|
primary_node.hublvol.bdev_name, primary_node.hublvol.nqn,
|
243
|
-
ip, primary_node.hublvol.nvmf_port)
|
244
|
-
if not ret:
|
246
|
+
ip, primary_node.hublvol.nvmf_port, multipath=multipath)
|
247
|
+
if not ret and not multipath:
|
245
248
|
logger.warning(f'Failed to connect to hublvol on {ip}')
|
246
249
|
|
247
250
|
if not rpc_client.bdev_lvol_set_lvs_opts(
|
@@ -151,7 +151,8 @@ class RPCClient:
|
|
151
151
|
"buf_cache_size": 512,
|
152
152
|
"dif_insert_or_strip": False,
|
153
153
|
"c2h_success": True,
|
154
|
-
"sock_priority": 0
|
154
|
+
"sock_priority": 0,
|
155
|
+
"ack_timeout": 4096,
|
155
156
|
}
|
156
157
|
return self._request("nvmf_create_transport", params)
|
157
158
|
|
@@ -571,7 +572,10 @@ class RPCClient:
|
|
571
572
|
"trsvcid": str(port),
|
572
573
|
"subnqn": nqn,
|
573
574
|
"fabrics_connect_timeout_us": 100000,
|
574
|
-
"num_io_queues": 128
|
575
|
+
"num_io_queues": 128,
|
576
|
+
"fast_io_fail_timeout_sec": 2,
|
577
|
+
"ctrlr_loss_timeout_sec": 10,
|
578
|
+
"reconnect_delay_sec": 2,
|
575
579
|
}
|
576
580
|
if multipath:
|
577
581
|
params["multipath"] = "failover"
|
@@ -639,7 +643,8 @@ class RPCClient:
|
|
639
643
|
"fast_io_fail_timeout_sec" : 0,
|
640
644
|
"reconnect_delay_sec": 1,
|
641
645
|
"keep_alive_timeout_ms": 10000,
|
642
|
-
"timeout_us": constants.NVME_TIMEOUT_US
|
646
|
+
"timeout_us": constants.NVME_TIMEOUT_US,
|
647
|
+
"transport_ack_timeout": 13,
|
643
648
|
}
|
644
649
|
return self._request("bdev_nvme_set_options", params)
|
645
650
|
|
@@ -2,8 +2,8 @@
|
|
2
2
|
import time
|
3
3
|
|
4
4
|
|
5
|
-
from simplyblock_core import db_controller, utils
|
6
|
-
from simplyblock_core.controllers import tasks_events, tcp_ports_events
|
5
|
+
from simplyblock_core import db_controller, utils, storage_node_ops, distr_controller
|
6
|
+
from simplyblock_core.controllers import tasks_events, tcp_ports_events, health_controller
|
7
7
|
from simplyblock_core.models.job_schedule import JobSchedule
|
8
8
|
from simplyblock_core.models.cluster import Cluster
|
9
9
|
from simplyblock_core.models.storage_node import StorageNode
|
@@ -57,8 +57,23 @@ while True:
|
|
57
57
|
task.write_to_db(db.kv_store)
|
58
58
|
continue
|
59
59
|
|
60
|
-
|
61
|
-
|
60
|
+
logger.info("connecting remote devices")
|
61
|
+
node.remote_devices = storage_node_ops._connect_to_remote_devs(
|
62
|
+
node, force_conect_restarting_nodes=True)
|
63
|
+
node.write_to_db()
|
64
|
+
|
65
|
+
logger.info("Sending device status event")
|
66
|
+
for db_dev in node.nvme_devices:
|
67
|
+
distr_controller.send_dev_status_event(db_dev, db_dev.status)
|
68
|
+
|
69
|
+
lvstore_check = True
|
70
|
+
if node.lvstore_status == "ready":
|
71
|
+
lvstore_check &= health_controller._check_node_lvstore(node.lvstore_stack, node, auto_fix=True)
|
72
|
+
if node.secondary_node_id:
|
73
|
+
lvstore_check &= health_controller._check_node_hublvol(node)
|
74
|
+
|
75
|
+
if lvstore_check is False:
|
76
|
+
msg = f"Node LVolStore check fail, retry later"
|
62
77
|
logger.warning(msg)
|
63
78
|
task.function_result = msg
|
64
79
|
task.status = JobSchedule.STATUS_SUSPENDED
|
@@ -1502,11 +1502,11 @@ def restart_storage_node(
|
|
1502
1502
|
# Calculate pool count
|
1503
1503
|
|
1504
1504
|
number_of_alceml_devices = snode.number_of_alceml_devices
|
1505
|
-
small_pool_count, large_pool_count = utils.calculate_pool_count(
|
1506
|
-
|
1505
|
+
#small_pool_count, large_pool_count = utils.calculate_pool_count(
|
1506
|
+
# number_of_alceml_devices, snode.number_of_distribs * 2, snode.cpu, len(snode.poller_cpu_cores) or snode.cpu)
|
1507
1507
|
|
1508
1508
|
# Calculate minimum huge page memory
|
1509
|
-
minimum_hp_memory = utils.calculate_minimum_hp_memory(
|
1509
|
+
minimum_hp_memory = utils.calculate_minimum_hp_memory(snode.iobuf_small_pool_count, snode.iobuf_large_pool_count, snode.max_lvol,
|
1510
1510
|
snode.max_prov,
|
1511
1511
|
len(utils.hexa_to_cpu_list(snode.spdk_cpu_mask)))
|
1512
1512
|
|
@@ -1546,6 +1546,7 @@ def restart_storage_node(
|
|
1546
1546
|
for n in db_controller.get_storage_nodes_by_cluster_id(snode.cluster_id):
|
1547
1547
|
if n.api_endpoint == snode.api_endpoint:
|
1548
1548
|
total_mem += n.spdk_mem
|
1549
|
+
total_mem+= utils.parse_size("500m")
|
1549
1550
|
|
1550
1551
|
results = None
|
1551
1552
|
try:
|
@@ -16,6 +16,9 @@ import docker
|
|
16
16
|
from prettytable import PrettyTable
|
17
17
|
from docker.errors import APIError, DockerException, ImageNotFound
|
18
18
|
|
19
|
+
import tempfile
|
20
|
+
from jinja2 import Environment, FileSystemLoader
|
21
|
+
|
19
22
|
from simplyblock_core import constants
|
20
23
|
from simplyblock_core import shell_utils
|
21
24
|
from simplyblock_core.models.job_schedule import JobSchedule
|
@@ -1409,7 +1412,7 @@ def regenerate_config(new_config, old_config, force=False):
|
|
1409
1412
|
logger.error(f"The nic {nic} is not a member of system nics {all_nics}")
|
1410
1413
|
return False
|
1411
1414
|
|
1412
|
-
small_pool_count, large_pool_count = calculate_pool_count(number_of_alcemls, 2 * number_of_distribs,
|
1415
|
+
small_pool_count, large_pool_count = calculate_pool_count(number_of_alcemls + 1, 2 * number_of_distribs,
|
1413
1416
|
len(isolated_cores),
|
1414
1417
|
number_of_poller_cores or len(
|
1415
1418
|
isolated_cores),)
|
@@ -1478,7 +1481,7 @@ def generate_configs(max_lvol, max_prov, sockets_to_use, nodes_per_socket, pci_a
|
|
1478
1481
|
nvme_by_numa = {nid: [] for nid in sockets_to_use}
|
1479
1482
|
nvme_numa_neg1 = []
|
1480
1483
|
for nvme_name, val in nvmes.items():
|
1481
|
-
numa = val["numa_node"]
|
1484
|
+
numa = int(val["numa_node"])
|
1482
1485
|
if numa in sockets_to_use:
|
1483
1486
|
nvme_by_numa[numa].append(nvme_name)
|
1484
1487
|
elif int(numa) == -1:
|
@@ -1760,3 +1763,55 @@ def remove_container(client: docker.DockerClient, name, timeout=3):
|
|
1760
1763
|
except docker.errors.APIError as e:
|
1761
1764
|
if 'Conflict ("removal of container {container.id} is already in progress")' != e.response.reason:
|
1762
1765
|
raise
|
1766
|
+
|
1767
|
+
def render_and_deploy_alerting_configs(contact_point, grafana_endpoint, cluster_uuid, cluster_secret):
|
1768
|
+
TOP_DIR = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
|
1769
|
+
alerts_template_folder = os.path.join(TOP_DIR, "simplyblock_core/scripts/alerting/")
|
1770
|
+
alert_resources_file = "alert_resources.yaml"
|
1771
|
+
|
1772
|
+
env = Environment(loader=FileSystemLoader(alerts_template_folder), trim_blocks=True, lstrip_blocks=True)
|
1773
|
+
template = env.get_template(f'{alert_resources_file}.j2')
|
1774
|
+
|
1775
|
+
slack_pattern = re.compile(r"https://hooks\.slack\.com/services/\S+")
|
1776
|
+
email_pattern = re.compile(r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$")
|
1777
|
+
|
1778
|
+
if slack_pattern.match(contact_point):
|
1779
|
+
ALERT_TYPE = "slack"
|
1780
|
+
elif email_pattern.match(contact_point):
|
1781
|
+
ALERT_TYPE = "email"
|
1782
|
+
else:
|
1783
|
+
ALERT_TYPE = "slack"
|
1784
|
+
contact_point = 'https://hooks.slack.com/services/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'
|
1785
|
+
|
1786
|
+
values = {
|
1787
|
+
'CONTACT_POINT': contact_point,
|
1788
|
+
'GRAFANA_ENDPOINT': grafana_endpoint,
|
1789
|
+
'ALERT_TYPE': ALERT_TYPE,
|
1790
|
+
}
|
1791
|
+
|
1792
|
+
with tempfile.TemporaryDirectory() as temp_dir:
|
1793
|
+
temp_file_path = os.path.join(temp_dir, alert_resources_file)
|
1794
|
+
with open(temp_file_path, 'w') as file:
|
1795
|
+
file.write(template.render(values))
|
1796
|
+
|
1797
|
+
destination_file_path = os.path.join(alerts_template_folder, alert_resources_file)
|
1798
|
+
subprocess.check_call(['sudo', '-v']) # sudo -v checks if the current user has sudo permissions
|
1799
|
+
subprocess.check_call(['sudo', 'mv', temp_file_path, destination_file_path])
|
1800
|
+
print(f"File moved to {destination_file_path} successfully.")
|
1801
|
+
|
1802
|
+
scripts_folder = os.path.join(TOP_DIR, "simplyblock_core/scripts/")
|
1803
|
+
prometheus_file = "prometheus.yml"
|
1804
|
+
env = Environment(loader=FileSystemLoader(scripts_folder), trim_blocks=True, lstrip_blocks=True)
|
1805
|
+
template = env.get_template(f'{prometheus_file}.j2')
|
1806
|
+
values = {
|
1807
|
+
'CLUSTER_ID': cluster_uuid,
|
1808
|
+
'CLUSTER_SECRET': cluster_secret}
|
1809
|
+
|
1810
|
+
with tempfile.TemporaryDirectory() as temp_dir:
|
1811
|
+
file_path = os.path.join(temp_dir, prometheus_file)
|
1812
|
+
with open(file_path, 'w') as file:
|
1813
|
+
file.write(template.render(values))
|
1814
|
+
|
1815
|
+
prometheus_file_path = os.path.join(scripts_folder, prometheus_file)
|
1816
|
+
subprocess.check_call(['sudo', 'mv', file_path, prometheus_file_path])
|
1817
|
+
print(f"File moved to {prometheus_file_path} successfully.")
|
@@ -1,6 +1,7 @@
|
|
1
1
|
#!/usr/bin/env python
|
2
2
|
# encoding: utf-8
|
3
3
|
import json
|
4
|
+
import math
|
4
5
|
import os
|
5
6
|
import time
|
6
7
|
from typing import List, Optional, Union
|
@@ -633,7 +634,7 @@ def set_hugepages():
|
|
633
634
|
numa = node_config["socket"]
|
634
635
|
huge_page_memory_dict[numa] = huge_page_memory_dict.get(numa, 0) + node_config["huge_page_memory"]
|
635
636
|
for numa, huge_page_memory in huge_page_memory_dict.items():
|
636
|
-
num_pages = huge_page_memory
|
637
|
+
num_pages = math.ceil(huge_page_memory / (2048 * 1024))
|
637
638
|
core_utils.set_hugepages_if_needed(numa, num_pages)
|
638
639
|
|
639
640
|
return utils.get_response(True)
|
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-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/controllers/caching_node_controller.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
|
{sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/scripts/alerting/alert_resources.yaml.j2
RENAMED
File without changes
|
File without changes
|
{sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/scripts/clean_local_storage_deploy.sh
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/scripts/dashboards/node-exporter.json
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
|
{sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/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
|
{sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/scripts/helpers/nvme_disconnect_by_ip.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
|
{sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/services/cached_lvol_stat_collector.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/services/capacity_and_stats_collector.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/services/main_distr_event_collector.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
|
{sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_core/services/tasks_runner_failed_migration.py
RENAMED
File without changes
|
File without changes
|
{sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/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
|
{sbcli-pre-25.6.2 → sbcli-pre-25.6.4}/simplyblock_web/static/SimplyBlock-API.postman_collection.json
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
|