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.
Files changed (174) hide show
  1. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/PKG-INFO +1 -1
  2. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/sbcli_dev.egg-info/PKG-INFO +1 -1
  3. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/controllers/lvol_controller.py +3 -2
  4. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/controllers/pool_controller.py +39 -26
  5. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/controllers/snapshot_controller.py +3 -2
  6. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/db_controller.py +4 -4
  7. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/env_var +2 -2
  8. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/health_check_service.py +22 -24
  9. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/tasks_runner_port_allow.py +62 -4
  10. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/storage_node_ops.py +89 -85
  11. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/blueprints/snode_ops_k8s.py +1 -1
  12. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/blueprints/web_api_lvol.py +4 -3
  13. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/blueprints/web_api_pool.py +22 -14
  14. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/templates/storage_deploy_spdk.yaml.j2 +1 -1
  15. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/README.md +0 -0
  16. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/pyproject.toml +0 -0
  17. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/requirements.txt +0 -0
  18. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/sbcli_dev.egg-info/SOURCES.txt +0 -0
  19. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/sbcli_dev.egg-info/dependency_links.txt +0 -0
  20. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/sbcli_dev.egg-info/entry_points.txt +0 -0
  21. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/sbcli_dev.egg-info/requires.txt +0 -0
  22. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/sbcli_dev.egg-info/top_level.txt +0 -0
  23. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/setup.cfg +0 -0
  24. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/setup.py +0 -0
  25. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_cli/__init__.py +0 -0
  26. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_cli/cli.py +0 -0
  27. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_cli/clibase.py +0 -0
  28. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_cli/main.py +0 -0
  29. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/__init__.py +0 -0
  30. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/cluster_ops.py +0 -0
  31. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/cnode_client.py +0 -0
  32. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/constants.py +0 -0
  33. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/controllers/__init__.py +0 -0
  34. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/controllers/caching_node_controller.py +0 -0
  35. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/controllers/cluster_events.py +0 -0
  36. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/controllers/device_controller.py +0 -0
  37. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/controllers/device_events.py +0 -0
  38. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/controllers/events_controller.py +0 -0
  39. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/controllers/health_controller.py +0 -0
  40. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/controllers/lvol_events.py +0 -0
  41. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/controllers/mgmt_events.py +0 -0
  42. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/controllers/pool_events.py +0 -0
  43. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/controllers/snapshot_events.py +0 -0
  44. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/controllers/storage_events.py +0 -0
  45. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/controllers/tasks_controller.py +0 -0
  46. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/controllers/tasks_events.py +0 -0
  47. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/controllers/tcp_ports_events.py +0 -0
  48. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/distr_controller.py +0 -0
  49. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/fw_api_client.py +0 -0
  50. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/mgmt_node_ops.py +0 -0
  51. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/models/__init__.py +0 -0
  52. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/models/base_model.py +0 -0
  53. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/models/caching_node.py +0 -0
  54. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/models/cluster.py +0 -0
  55. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/models/deployer.py +0 -0
  56. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/models/events.py +0 -0
  57. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/models/hublvol.py +0 -0
  58. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/models/iface.py +0 -0
  59. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/models/job_schedule.py +0 -0
  60. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/models/lvol_model.py +0 -0
  61. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/models/mgmt_node.py +0 -0
  62. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/models/nvme_device.py +0 -0
  63. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/models/pool.py +0 -0
  64. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/models/port_stat.py +0 -0
  65. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/models/snapshot.py +0 -0
  66. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/models/stats.py +0 -0
  67. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/models/storage_node.py +0 -0
  68. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/pci_utils.py +0 -0
  69. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/rpc_client.py +0 -0
  70. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/__init__.py +0 -0
  71. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/alerting/alert_resources.yaml.j2 +0 -0
  72. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/alerting/alert_rules.yaml +0 -0
  73. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/clean_local_storage_deploy.sh +0 -0
  74. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/config_docker.sh +0 -0
  75. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/dashboard.yml +0 -0
  76. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/dashboards/cluster.json +0 -0
  77. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/dashboards/devices.json +0 -0
  78. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/dashboards/lvols.json +0 -0
  79. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/dashboards/node-exporter.json +0 -0
  80. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/dashboards/nodes.json +0 -0
  81. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/dashboards/pools.json +0 -0
  82. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/datasource.yml +0 -0
  83. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/db_config_double.sh +0 -0
  84. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/db_config_single.sh +0 -0
  85. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/deploy_fdb.sh +0 -0
  86. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/deploy_stack.sh +0 -0
  87. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/docker-compose-swarm-monitoring.yml +0 -0
  88. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/docker-compose-swarm.yml +0 -0
  89. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/foundation.yml +0 -0
  90. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/haproxy.cfg +0 -0
  91. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/helpers/__init__.py +0 -0
  92. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/helpers/deploy_cluster.sh +0 -0
  93. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/helpers/destroy_cluster.sh +0 -0
  94. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/helpers/nvme_disconnect_by_ip.py +0 -0
  95. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/install_deps.sh +0 -0
  96. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/objstore.yml +0 -0
  97. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/prepare_fdb.sh +0 -0
  98. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/prometheus.yml.j2 +0 -0
  99. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/run_ssh.sh +0 -0
  100. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/set_db_config.sh +0 -0
  101. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/scripts/stack_deploy_wait.sh +0 -0
  102. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/__init__.py +0 -0
  103. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/cached_lvol_stat_collector.py +0 -0
  104. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/caching_node_monitor.py +0 -0
  105. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/cap_monitor.py +0 -0
  106. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/capacity_and_stats_collector.py +0 -0
  107. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/device_monitor.py +0 -0
  108. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/install_service.sh +0 -0
  109. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/lvol_monitor.py +0 -0
  110. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/lvol_stat_collector.py +0 -0
  111. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/main_distr_event_collector.py +0 -0
  112. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/mgmt_node_monitor.py +0 -0
  113. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/new_device_discovery.py +0 -0
  114. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/remove_service.sh +0 -0
  115. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/service_template.service +0 -0
  116. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/spdk/__init__.py +0 -0
  117. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/spdk/client.py +0 -0
  118. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/spdk_http_proxy_server.py +0 -0
  119. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/storage_node_monitor.py +0 -0
  120. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/tasks_cluster_status.py +0 -0
  121. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/tasks_runner_failed_migration.py +0 -0
  122. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/tasks_runner_migration.py +0 -0
  123. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/tasks_runner_new_dev_migration.py +0 -0
  124. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/tasks_runner_node_add.py +0 -0
  125. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/services/tasks_runner_restart.py +0 -0
  126. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/shell_utils.py +0 -0
  127. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/snode_client.py +0 -0
  128. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/test/test_models.py +0 -0
  129. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/test/test_utils.py +0 -0
  130. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/utils.py +0 -0
  131. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_core/workers/cleanup_foundationdb.py +0 -0
  132. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/README.md +0 -0
  133. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/__init__.py +0 -0
  134. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/app.py +0 -0
  135. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/auth_middleware.py +0 -0
  136. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/blueprints/__init__.py +0 -0
  137. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/blueprints/caching_node_ops.py +0 -0
  138. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/blueprints/caching_node_ops_k8s.py +0 -0
  139. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/blueprints/node_api_basic.py +0 -0
  140. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/blueprints/snode_ops.py +0 -0
  141. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/blueprints/swagger_ui_blueprint.py +0 -0
  142. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/blueprints/web_api_caching_node.py +0 -0
  143. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/blueprints/web_api_cluster.py +0 -0
  144. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/blueprints/web_api_deployer.py +0 -0
  145. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/blueprints/web_api_device.py +0 -0
  146. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/blueprints/web_api_metrics.py +0 -0
  147. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/blueprints/web_api_mgmt_node.py +0 -0
  148. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/blueprints/web_api_snapshot.py +0 -0
  149. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/blueprints/web_api_storage_node.py +0 -0
  150. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/node_configure.py +0 -0
  151. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/node_utils.py +0 -0
  152. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/node_utils_k8s.py +0 -0
  153. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/node_webapp.py +0 -0
  154. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/static/SimplyBlock-API.postman_collection.json +0 -0
  155. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/static/delete.py +0 -0
  156. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/static/deploy.py +0 -0
  157. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/static/deploy_cnode.yaml +0 -0
  158. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/static/deploy_spdk.yaml +0 -0
  159. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/static/is_up.py +0 -0
  160. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/static/list_deps.py +0 -0
  161. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/static/rpac.yaml +0 -0
  162. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/static/swagger.yaml +0 -0
  163. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/static/tst.py +0 -0
  164. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/templates/caching_deploy_spdk.yaml.j2 +0 -0
  165. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/templates/storage_init_job.yaml.j2 +0 -0
  166. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/test/api/test_lvol.py +0 -0
  167. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/test/api/test_pool.py +0 -0
  168. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/test/api/test_snapshot.py +0 -0
  169. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/test/api/test_storage_node.py +0 -0
  170. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/test/conftest.py +0 -0
  171. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/test/pytest.ini +0 -0
  172. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/test/requirements.txt +0 -0
  173. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/test/util.py +0 -0
  174. {sbcli_dev-19.2.1 → sbcli_dev-19.2.3}/simplyblock_web/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sbcli-dev
3
- Version: 19.2.1
3
+ Version: 19.2.3
4
4
  Summary: CLI for managing SimplyBlock cluster
5
5
  Home-page: https://www.simplyblock.io/
6
6
  Author: Hamdy
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sbcli-dev
3
- Version: 19.2.1
3
+ Version: 19.2.3
4
4
  Summary: CLI for managing SimplyBlock cluster
5
5
  Home-page: https://www.simplyblock.io/
6
6
  Author: Hamdy
@@ -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
- pool = db_controller.get_pool_by_id(pool_id_or_name)
1084
- if not pool:
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
- pool = db_controller.get_pool_by_id(uuid)
109
- if not pool:
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
- pool = db_controller.get_pool_by_id(uuid)
171
- if not pool:
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
- if not pool:
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
- pool = db_controller.get_pool_by_id(pool_id)
230
- if not pool:
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
- pool = db_controller.get_pool_by_id(pool_id)
245
- if not pool:
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
- pool = db_controller.get_pool_by_id(pool_id)
272
- if not pool:
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
- pool = db_controller.get_pool_by_id(pool_id)
304
- if not pool:
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
- pool = db_controller.get_pool_by_id(pool_id)
317
- if not pool:
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
- pool = db_controller.get_pool_by_id(pool_id)
332
- if not pool:
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
- pool = db_controller.get_pool_by_id(pool_id)
349
- if not pool:
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
- pool = db_controller.get_pool_by_id(pool_id)
365
- if not pool:
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
- pool = db_controller.get_pool_by_id(pool_id)
381
- if not pool:
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
- pool = db_controller.get_pool_by_id(pool_id)
397
- if not pool:
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
- pool = db_controller.get_pool_by_id(snap.lvol.pool_uuid)
361
- if not pool:
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) -> Optional[Pool]:
148
+ def get_pool_by_id(self, id) -> Pool:
149
149
  ret = Pool().read_from_db(self.kv_store, id)
150
- if ret:
151
- return ret[0]
152
- return None
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.1
2
+ SIMPLY_BLOCK_VERSION=19.2.3
3
3
 
4
4
 
5
- SIMPLY_BLOCK_DOCKER_IMAGE=public.ecr.aws/simply-block/simplyblock:multi_sn_k8s_worker
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
- ret = True
156
- else:
157
- if not org_dev.alceml_bdev:
158
- logger.error(f"device alceml bdev not found!, {org_dev.get_id()}")
159
- continue
160
- name = f"remote_{org_dev.alceml_bdev}"
161
- logger.info(f"Connecting {name} to {snode.get_id()}")
162
- ret = rpc_client.bdev_nvme_attach_controller_tcp(
163
- name, org_dev.nvmf_nqn, org_dev.nvmf_ip, org_dev.nvmf_port)
164
- if ret:
165
- logger.info(f"Successfully connected to device: {org_dev.get_id()}")
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
-
174
- distr_controller.send_dev_status_event(org_dev, NVMeDevice.STATUS_ONLINE, snode)
175
- else:
176
- logger.error(f"Failed to connect to device: {org_dev.get_id()}")
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
- logger.info("connecting remote devices")
62
- node.remote_devices = storage_node_ops._connect_to_remote_devs(
63
- node, force_conect_restarting_nodes=True)
64
- node.write_to_db()
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
- logger.error(f"device alceml bdev not found!, {dev.get_id()}")
633
- continue
634
- name = f"remote_{dev.alceml_bdev}"
635
- bdev_name = f"{name}n1"
636
- if bdev_name in node_bdev_names:
637
- logger.info(f"bdev found {bdev_name}")
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
- name = f"remote_{org_dev.jm_bdev}"
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
- new_devs.append(org_dev)
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
- node.remote_devices = _connect_to_remote_devs(node)
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
- snode.remote_devices = _connect_to_remote_devs(snode)
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
- node.remote_devices = _connect_to_remote_devs(node, force_conect_restarting_nodes=True)
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
- node.remote_devices = _connect_to_remote_devs(node, force_conect_restarting_nodes=True)
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
- snode.remote_devices = _connect_to_remote_devs(snode)
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
- snode.remote_devices = _connect_to_remote_devs(snode)
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
- logger.error("Failed to suspend JC compression")
3058
- # return False
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 = node_utils_k8s.get_k8s_core_client()
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
- pool = db.get_pool_by_id(lvol.pool_uuid)
238
- if not pool:
239
- return utils.get_response_error(f"Pool not found: {uuid}", 404)
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)