sbcli-dev 3.8.57__zip → 3.8.59__zip

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/PKG-INFO +1 -1
  2. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/env_var +1 -1
  3. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/sbcli_dev.egg-info/PKG-INFO +1 -1
  4. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/controllers/device_controller.py +94 -5
  5. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/controllers/health_controller.py +22 -9
  6. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/services/health_check_service.py +21 -1
  7. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/storage_node_ops.py +8 -6
  8. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/README.md +0 -0
  9. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/pyproject.toml +0 -0
  10. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/sbcli_dev.egg-info/SOURCES.txt +0 -0
  11. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/sbcli_dev.egg-info/dependency_links.txt +0 -0
  12. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/sbcli_dev.egg-info/entry_points.txt +0 -0
  13. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/sbcli_dev.egg-info/requires.txt +0 -0
  14. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/sbcli_dev.egg-info/top_level.txt +0 -0
  15. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/setup.cfg +0 -0
  16. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/setup.py +0 -0
  17. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_cli/cli.py +0 -0
  18. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_cli/main.py +0 -0
  19. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/__init__.py +0 -0
  20. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/cluster_ops.py +0 -0
  21. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/cnode_client.py +0 -0
  22. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/compute_node_ops.py +0 -0
  23. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/constants.py +0 -0
  24. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/controllers/__init__.py +0 -0
  25. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/controllers/caching_node_controller.py +0 -0
  26. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/controllers/cluster_events.py +0 -0
  27. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/controllers/device_events.py +0 -0
  28. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/controllers/events_controller.py +0 -0
  29. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/controllers/lvol_controller.py +0 -0
  30. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/controllers/lvol_events.py +0 -0
  31. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/controllers/mgmt_events.py +0 -0
  32. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/controllers/pool_controller.py +0 -0
  33. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/controllers/pool_events.py +0 -0
  34. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/controllers/snapshot_controller.py +0 -0
  35. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/controllers/snapshot_events.py +0 -0
  36. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/controllers/storage_events.py +0 -0
  37. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/controllers/tasks_controller.py +0 -0
  38. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/controllers/tasks_events.py +0 -0
  39. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/distr_controller.py +0 -0
  40. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/kv_store.py +0 -0
  41. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/mgmt_node_ops.py +0 -0
  42. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/models/__init__.py +0 -0
  43. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/models/base_model.py +0 -0
  44. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/models/caching_node.py +0 -0
  45. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/models/cluster.py +0 -0
  46. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/models/compute_node.py +0 -0
  47. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/models/deployer.py +0 -0
  48. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/models/events.py +0 -0
  49. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/models/global_settings.py +0 -0
  50. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/models/iface.py +0 -0
  51. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/models/job_schedule.py +0 -0
  52. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/models/lvol_model.py +0 -0
  53. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/models/mgmt_node.py +0 -0
  54. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/models/nvme_device.py +0 -0
  55. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/models/pool.py +0 -0
  56. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/models/port_stat.py +0 -0
  57. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/models/snapshot.py +0 -0
  58. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/models/stats.py +0 -0
  59. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/models/storage_node.py +0 -0
  60. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/pci_utils.py +0 -0
  61. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/rpc_client.py +0 -0
  62. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/scripts/__init__.py +0 -0
  63. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/scripts/alerting/alert_resources.yaml.j2 +0 -0
  64. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/scripts/alerting/alert_rules.yaml +0 -0
  65. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/scripts/clean_local_storage_deploy.sh +0 -0
  66. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/scripts/config_docker.sh +0 -0
  67. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/scripts/dashboard.yml +0 -0
  68. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/scripts/dashboards/cluster.json +0 -0
  69. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/scripts/dashboards/devices.json +0 -0
  70. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/scripts/dashboards/lvols.json +0 -0
  71. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/scripts/dashboards/node-exporter.json +0 -0
  72. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/scripts/dashboards/nodes.json +0 -0
  73. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/scripts/dashboards/pools.json +0 -0
  74. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/scripts/datasource.yml +0 -0
  75. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/scripts/db_config_double.sh +0 -0
  76. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/scripts/db_config_single.sh +0 -0
  77. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/scripts/deploy_stack.sh +0 -0
  78. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/scripts/docker-compose-swarm-monitoring.yml +0 -0
  79. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/scripts/docker-compose-swarm.yml +0 -0
  80. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/scripts/haproxy.cfg +0 -0
  81. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/scripts/install_deps.sh +0 -0
  82. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/scripts/objstore.yml +0 -0
  83. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/scripts/prometheus.yml +0 -0
  84. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/scripts/run_ssh.sh +0 -0
  85. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/scripts/set_db_config.sh +0 -0
  86. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/scripts/stack_deploy_wait.sh +0 -0
  87. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/services/__init__.py +0 -0
  88. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/services/cached_lvol_stat_collector.py +0 -0
  89. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/services/caching_node_monitor.py +0 -0
  90. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/services/cap_monitor.py +0 -0
  91. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/services/capacity_and_stats_collector.py +0 -0
  92. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/services/device_monitor.py +0 -0
  93. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/services/distr_event_collector.py +0 -0
  94. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/services/install_service.sh +0 -0
  95. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/services/log_agg_service.py +0 -0
  96. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/services/lvol_monitor.py +0 -0
  97. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/services/lvol_stat_collector.py +0 -0
  98. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/services/main_distr_event_collector.py +0 -0
  99. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/services/mgmt_node_monitor.py +0 -0
  100. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/services/new_device_discovery.py +0 -0
  101. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/services/port_stat_collector.py +0 -0
  102. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/services/remove_service.sh +0 -0
  103. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/services/service_template.service +0 -0
  104. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/services/spdk_http_proxy_server.py +0 -0
  105. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/services/storage_node_monitor.py +0 -0
  106. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/services/tasks_runner_failed_migration.py +0 -0
  107. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/services/tasks_runner_migration.py +0 -0
  108. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/services/tasks_runner_new_dev_migration.py +0 -0
  109. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/services/tasks_runner_node_add.py +0 -0
  110. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/services/tasks_runner_restart.py +0 -0
  111. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/shell_utils.py +0 -0
  112. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/snode_client.py +0 -0
  113. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_core/utils.py +0 -0
  114. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_web/__init__.py +0 -0
  115. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_web/app.py +0 -0
  116. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_web/auth_middleware.py +0 -0
  117. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_web/blueprints/__init__.py +0 -0
  118. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_web/blueprints/caching_node_ops.py +0 -0
  119. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_web/blueprints/caching_node_ops_k8s.py +0 -0
  120. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_web/blueprints/node_api_basic.py +0 -0
  121. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_web/blueprints/node_api_caching_docker.py +0 -0
  122. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_web/blueprints/node_api_caching_ks.py +0 -0
  123. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_web/blueprints/snode_ops.py +0 -0
  124. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_web/blueprints/snode_ops_k8s.py +0 -0
  125. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_web/blueprints/web_api_caching_node.py +0 -0
  126. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_web/blueprints/web_api_cluster.py +0 -0
  127. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_web/blueprints/web_api_deployer.py +0 -0
  128. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_web/blueprints/web_api_device.py +0 -0
  129. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_web/blueprints/web_api_lvol.py +0 -0
  130. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_web/blueprints/web_api_mgmt_node.py +0 -0
  131. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_web/blueprints/web_api_pool.py +0 -0
  132. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_web/blueprints/web_api_snapshot.py +0 -0
  133. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_web/blueprints/web_api_storage_node.py +0 -0
  134. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_web/caching_node_app.py +0 -0
  135. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_web/caching_node_app_k8s.py +0 -0
  136. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_web/node_utils.py +0 -0
  137. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_web/node_webapp.py +0 -0
  138. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_web/snode_app.py +0 -0
  139. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_web/snode_app_k8s.py +0 -0
  140. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_web/static/delete.py +0 -0
  141. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_web/static/deploy.py +0 -0
  142. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_web/static/deploy_cnode.yaml +0 -0
  143. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_web/static/deploy_spdk.yaml +0 -0
  144. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_web/static/is_up.py +0 -0
  145. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_web/static/list_deps.py +0 -0
  146. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_web/static/rpac.yaml +0 -0
  147. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_web/static/tst.py +0 -0
  148. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_web/templates/caching_deploy_spdk.yaml.j2 +0 -0
  149. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_web/templates/storage_deploy_spdk.yaml.j2 +0 -0
  150. {sbcli_dev-3.8.57 → sbcli_dev-3.8.59}/simplyblock_web/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sbcli-dev
3
- Version: 3.8.57
3
+ Version: 3.8.59
4
4
  Summary: CLI for managing SimplyBlock cluster
5
5
  Home-page: https://www.simplyblock.io/
6
6
  Author: Hamdy
@@ -1,5 +1,5 @@
1
1
  SIMPLY_BLOCK_COMMAND_NAME=sbcli-dev
2
- SIMPLY_BLOCK_VERSION=3.8.57
2
+ SIMPLY_BLOCK_VERSION=3.8.59
3
3
 
4
4
 
5
5
  SIMPLY_BLOCK_DOCKER_IMAGE=simplyblock/simplyblock:main
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sbcli-dev
3
- Version: 3.8.57
3
+ Version: 3.8.59
4
4
  Summary: CLI for managing SimplyBlock cluster
5
5
  Home-page: https://www.simplyblock.io/
6
6
  Author: Hamdy
@@ -4,7 +4,8 @@ import logging
4
4
  from simplyblock_core import distr_controller, utils, storage_node_ops
5
5
  from simplyblock_core.controllers import device_events, lvol_controller, tasks_controller
6
6
  from simplyblock_core.kv_store import DBController
7
- from simplyblock_core.models.nvme_device import NVMeDevice
7
+ from simplyblock_core.models.nvme_device import NVMeDevice, JMDevice
8
+ from simplyblock_core.models.storage_node import StorageNode
8
9
  from simplyblock_core.rpc_client import RPCClient
9
10
 
10
11
 
@@ -248,6 +249,53 @@ def restart_device(device_id, force=False):
248
249
  logger.info("Setting device online")
249
250
  device_set_online(device_id)
250
251
  device_events.device_restarted(device_obj)
252
+
253
+ # add to jm raid
254
+ if snode.jm_device and snode.jm_device.raid_bdev:
255
+ nvme_controller = device_obj.nvme_controller
256
+ jm_part = None
257
+ for part in snode.jm_device.jm_nvme_bdev_list:
258
+ if part.startswith(nvme_controller):
259
+ jm_part = part
260
+ break
261
+ if snode.jm_device.status == NVMeDevice.STATUS_ONLINE:
262
+ set_jm_device_state(snode.jm_device.get_id(), JMDevice.STATUS_UNAVAILABLE)
263
+ # delete jm stack
264
+ if snode.enable_ha_jm:
265
+ ret = rpc_client.subsystem_delete(snode.jm_device.nvmf_nqn)
266
+
267
+ if snode.jm_device.pt_bdev:
268
+ ret = rpc_client.bdev_PT_NoExcl_delete(snode.jm_device.pt_bdev)
269
+
270
+ ret = rpc_client.bdev_jm_delete(snode.jm_device.jm_bdev)
271
+ if snode.jm_device.testing_bdev:
272
+ ret = rpc_client.bdev_passtest_delete(snode.jm_device.testing_bdev)
273
+ ret = rpc_client.bdev_alceml_delete(snode.jm_device.alceml_bdev)
274
+ if len(snode.jm_device.jm_nvme_bdev_list) == 2:
275
+ ret = rpc_client.bdev_raid_delete(snode.jm_device.raid_bdev)
276
+
277
+ # create jm
278
+ jm_nvme_bdevs = snode.jm_device.jm_nvme_bdev_list
279
+ if jm_part not in jm_nvme_bdevs:
280
+ jm_nvme_bdevs.append(jm_part)
281
+ new_jm = storage_node_ops._create_jm_stack_on_raid(rpc_client, jm_nvme_bdevs, snode, after_restart=True)
282
+ if new_jm:
283
+ snode = db_controller.get_storage_node_by_id(snode.get_id())
284
+ snode.jm_device = new_jm
285
+ snode.write_to_db(db_controller.kv_store)
286
+ set_jm_device_state(snode.jm_device.get_id(), JMDevice.STATUS_ONLINE)
287
+
288
+ # make other nodes connect to new jm
289
+ if snode.enable_ha_jm:
290
+ logger.info("Make other nodes connect to the new devices")
291
+ snodes = db_controller.get_storage_nodes_by_cluster_id(snode.cluster_id)
292
+ for node_index, node in enumerate(snodes):
293
+ if node.get_id() == snode.get_id() or node.status != StorageNode.STATUS_ONLINE:
294
+ continue
295
+ node.remote_jm_devices = storage_node_ops._connect_to_remote_jm_devs(node)
296
+ node.write_to_db(db_controller.kv_store)
297
+ logger.info(f"connected to devices count: {len(node.remote_devices)}")
298
+
251
299
  return "Done"
252
300
 
253
301
 
@@ -377,10 +425,51 @@ def device_remove(device_id, force=True):
377
425
  break
378
426
 
379
427
  if dev_to_remove:
380
- ret = rpc_client.bdev_raid_remove_base_bdev(snode.jm_device.raid_bdev, dev_to_remove)
381
- if ret:
382
- snode.jm_device.jm_nvme_bdev_list.remove(dev_to_remove)
383
- snode.write_to_db(db_controller.kv_store)
428
+ if len(snode.jm_device.jm_nvme_bdev_list) <= 2:
429
+
430
+ set_jm_device_state(snode.jm_device.get_id(), JMDevice.STATUS_UNAVAILABLE)
431
+
432
+ # delete jm stack
433
+ if snode.enable_ha_jm:
434
+ ret = rpc_client.subsystem_delete(snode.jm_device.nvmf_nqn)
435
+
436
+ if snode.jm_device.pt_bdev:
437
+ ret = rpc_client.bdev_PT_NoExcl_delete(snode.jm_device.pt_bdev)
438
+
439
+ ret = rpc_client.bdev_jm_delete(snode.jm_device.jm_bdev)
440
+ if snode.jm_device.testing_bdev:
441
+ ret = rpc_client.bdev_passtest_delete(snode.jm_device.testing_bdev)
442
+ ret = rpc_client.bdev_alceml_delete(snode.jm_device.alceml_bdev)
443
+ if len(snode.jm_device.jm_nvme_bdev_list) == 2:
444
+ ret = rpc_client.bdev_raid_delete(snode.jm_device.raid_bdev)
445
+
446
+
447
+ # create jm
448
+ jm_nvme_bdevs = snode.jm_device.jm_nvme_bdev_list
449
+ jm_nvme_bdevs.remove(dev_to_remove)
450
+ if len(jm_nvme_bdevs) > 0:
451
+ new_jm = storage_node_ops._create_jm_stack_on_raid(rpc_client, jm_nvme_bdevs, snode, after_restart=True)
452
+ snode.jm_device = new_jm
453
+ snode.write_to_db(db_controller.kv_store)
454
+ set_jm_device_state(snode.jm_device.get_id(), JMDevice.STATUS_ONLINE)
455
+
456
+ # make other nodes connect to new jm
457
+ if snode.enable_ha_jm:
458
+ logger.info("Make other nodes connect to the new devices")
459
+ snodes = db_controller.get_storage_nodes_by_cluster_id(snode.cluster_id)
460
+ for node_index, node in enumerate(snodes):
461
+ if node.get_id() == snode.get_id() or node.status != StorageNode.STATUS_ONLINE:
462
+ continue
463
+ node.remote_jm_devices = storage_node_ops._connect_to_remote_jm_devs(node)
464
+ node.write_to_db(db_controller.kv_store)
465
+ logger.info(f"connected to devices count: {len(node.remote_devices)}")
466
+ time.sleep(3)
467
+
468
+ elif len(snode.jm_device.jm_nvme_bdev_list) > 2:
469
+ ret = rpc_client.bdev_raid_remove_base_bdev(snode.jm_device.raid_bdev, dev_to_remove)
470
+ if ret:
471
+ snode.jm_device.jm_nvme_bdev_list.remove(dev_to_remove)
472
+ snode.write_to_db(db_controller.kv_store)
384
473
 
385
474
  return True
386
475
 
@@ -160,13 +160,12 @@ def check_node(node_id, with_devices=True):
160
160
  else:
161
161
  logger.info(f"Node device count: {len(snode.nvme_devices)}")
162
162
  for dev in snode.nvme_devices:
163
- ret = check_device(dev.get_id())
164
163
  if dev.status in [NVMeDevice.STATUS_ONLINE, NVMeDevice.STATUS_UNAVAILABLE]:
164
+ ret = check_device(dev.get_id())
165
165
  node_devices_check &= ret
166
166
  print("*" * 100)
167
167
 
168
168
  logger.info(f"Node remote device: {len(snode.remote_devices)}")
169
-
170
169
  rpc_client = RPCClient(
171
170
  snode.mgmt_ip, snode.rpc_port,
172
171
  snode.rpc_username, snode.rpc_password,
@@ -177,14 +176,28 @@ def check_node(node_id, with_devices=True):
177
176
  logger.info(f"Checking bdev: {remote_device.remote_bdev} ... ok")
178
177
  else:
179
178
  logger.info(f"Checking bdev: {remote_device.remote_bdev} ... not found")
180
- # node_remote_devices_check &= bool(ret)
179
+ node_remote_devices_check &= bool(ret)
180
+
181
181
  if snode.jm_device:
182
182
  jm_device = snode.jm_device
183
+ logger.info(f"Node node jm: {jm_device}")
183
184
  ret = check_jm_device(jm_device.get_id())
184
185
  if ret:
185
186
  logger.info(f"Checking jm bdev: {jm_device.jm_bdev} ... ok")
186
187
  else:
187
188
  logger.info(f"Checking jm bdev: {jm_device.jm_bdev} ... not found")
189
+ node_devices_check &= ret
190
+
191
+ if snode.enable_ha_jm:
192
+ logger.info(f"Node remote JMs: {len(snode.remote_jm_devices)}")
193
+ for remote_device in snode.remote_jm_devices:
194
+ ret = rpc_client.get_bdevs(remote_device.remote_bdev)
195
+ if ret:
196
+ logger.info(f"Checking bdev: {remote_device.remote_bdev} ... ok")
197
+ else:
198
+ logger.info(f"Checking bdev: {remote_device.remote_bdev} ... not found")
199
+ node_remote_devices_check &= bool(ret)
200
+
188
201
  lvstore_check = True
189
202
  if snode.lvstore and snode.lvstore_stack:
190
203
  distribs_list = []
@@ -196,7 +209,7 @@ def check_node(node_id, with_devices=True):
196
209
  for distr in distribs_list:
197
210
  ret = rpc_client.get_bdevs(distr)
198
211
  if ret:
199
- logger.info("Checking distr bdev : {distr} ... ok")
212
+ logger.info(f"Checking distr bdev : {distr} ... ok")
200
213
  logger.info("Checking Distr map ...")
201
214
  ret = rpc_client.distr_get_cluster_map(distr)
202
215
  if not ret:
@@ -211,19 +224,19 @@ def check_node(node_id, with_devices=True):
211
224
  logger.error("Failed to parse distr cluster map")
212
225
  lvstore_check &= is_passed
213
226
  else:
214
- logger.info("Checking distr bdev : {distr} ... not found")
227
+ logger.info(f"Checking distr bdev : {distr} ... not found")
215
228
  lvstore_check = False
216
229
  ret = rpc_client.get_bdevs(snode.raid)
217
230
  if ret:
218
- logger.info("Checking raid bdev: {snode.raid} ... ok")
231
+ logger.info(f"Checking raid bdev: {snode.raid} ... ok")
219
232
  else:
220
- logger.info("Checking raid bdev: {snode.raid} ... not found")
233
+ logger.info(f"Checking raid bdev: {snode.raid} ... not found")
221
234
  lvstore_check = False
222
235
  ret = rpc_client.bdev_lvol_get_lvstores(snode.lvstore)
223
236
  if ret:
224
- logger.info("Checking lvstore: {snode.lvstore} ... ok")
237
+ logger.info(f"Checking lvstore: {snode.lvstore} ... ok")
225
238
  else:
226
- logger.info("Checking lvstore: {snode.lvstore} ... not found")
239
+ logger.info(f"Checking lvstore: {snode.lvstore} ... not found")
227
240
  lvstore_check = False
228
241
 
229
242
  return is_node_online and node_devices_check and node_remote_devices_check and lvstore_check
@@ -114,7 +114,27 @@ while True:
114
114
  logger.info(f"Checking bdev: {remote_device.remote_bdev} ... ok")
115
115
  else:
116
116
  logger.info(f"Checking bdev: {remote_device.remote_bdev} ... not found")
117
- # node_remote_devices_check &= bool(ret)
117
+ node_remote_devices_check &= bool(ret)
118
+
119
+ if snode.jm_device:
120
+ jm_device = snode.jm_device
121
+ logger.info(f"Node node jm: {jm_device}")
122
+ ret = health_controller.check_jm_device(jm_device.get_id())
123
+ if ret:
124
+ logger.info(f"Checking jm bdev: {jm_device.jm_bdev} ... ok")
125
+ else:
126
+ logger.info(f"Checking jm bdev: {jm_device.jm_bdev} ... not found")
127
+ node_devices_check &= ret
128
+
129
+ if snode.enable_ha_jm:
130
+ logger.info(f"Node remote JMs: {len(snode.remote_jm_devices)}")
131
+ for remote_device in snode.remote_jm_devices:
132
+ ret = rpc_client.get_bdevs(remote_device.remote_bdev)
133
+ if ret:
134
+ logger.info(f"Checking bdev: {remote_device.remote_bdev} ... ok")
135
+ else:
136
+ logger.info(f"Checking bdev: {remote_device.remote_bdev} ... not found")
137
+ node_remote_devices_check &= bool(ret)
118
138
 
119
139
  health_check_status = is_node_online and node_devices_check and node_remote_devices_check
120
140
  set_node_health_check(snode, health_check_status)
@@ -244,13 +244,15 @@ def _search_for_partitions(rpc_client, nvme_device):
244
244
 
245
245
  def _create_jm_stack_on_raid(rpc_client, jm_nvme_bdevs, snode, after_restart):
246
246
  raid_bdev = f"raid_jm_{snode.get_id()}"
247
- raid_level = "0"
248
247
  if len(jm_nvme_bdevs) > 1:
249
248
  raid_level = "1"
250
- ret = rpc_client.bdev_raid_create(raid_bdev, jm_nvme_bdevs, raid_level)
251
- if not ret:
252
- logger.error(f"Failed to create raid_jm_{snode.get_id()}")
253
- return False
249
+ ret = rpc_client.bdev_raid_create(raid_bdev, jm_nvme_bdevs, raid_level)
250
+ if not ret:
251
+ logger.error(f"Failed to create raid_jm_{snode.get_id()}")
252
+ return False
253
+ else:
254
+ raid_bdev = jm_nvme_bdevs[0]
255
+
254
256
  alceml_name = f"alceml_jm_{snode.get_id()}"
255
257
 
256
258
  nvme_bdev = raid_bdev
@@ -323,7 +325,7 @@ def _create_jm_stack_on_raid(rpc_client, jm_nvme_bdevs, snode, after_restart):
323
325
  logger.error(f"Failed to add: {pt_name} to the subsystem: {subsystem_nqn}")
324
326
  return False
325
327
 
326
- ret = rpc_client.get_bdevs(raid_bdev)
328
+ ret = rpc_client.get_bdevs(jm_bdev)
327
329
 
328
330
  return JMDevice({
329
331
  'uuid': alceml_id,
File without changes
File without changes
File without changes
File without changes