sbcli-dev 19.2.3__tar.gz → 19.2.5__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 (175) hide show
  1. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/PKG-INFO +1 -1
  2. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/sbcli_dev.egg-info/PKG-INFO +1 -1
  3. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/sbcli_dev.egg-info/SOURCES.txt +1 -7
  4. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_cli/cli.py +1 -96
  5. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_cli/clibase.py +2 -48
  6. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/cluster_ops.py +1 -1
  7. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/controllers/lvol_controller.py +1 -8
  8. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/controllers/pool_controller.py +1 -33
  9. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/db_controller.py +0 -27
  10. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/env_var +1 -1
  11. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/models/pool.py +1 -1
  12. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/scripts/docker-compose-swarm.yml +1 -15
  13. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/services/health_check_service.py +1 -1
  14. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/services/tasks_runner_port_allow.py +3 -3
  15. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/storage_node_ops.py +4 -4
  16. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_web/app.py +1 -2
  17. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_web/blueprints/snode_ops_k8s.py +33 -1
  18. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_web/blueprints/web_api_lvol.py +0 -12
  19. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_web/blueprints/web_api_pool.py +2 -27
  20. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_web/node_webapp.py +0 -12
  21. sbcli_dev-19.2.5/simplyblock_web/templates/storage_core_isolation.yaml.j2 +201 -0
  22. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_web/test/api/test_pool.py +1 -1
  23. sbcli_dev-19.2.3/simplyblock_core/controllers/caching_node_controller.py +0 -747
  24. sbcli_dev-19.2.3/simplyblock_core/models/caching_node.py +0 -56
  25. sbcli_dev-19.2.3/simplyblock_core/services/cached_lvol_stat_collector.py +0 -88
  26. sbcli_dev-19.2.3/simplyblock_core/services/caching_node_monitor.py +0 -84
  27. sbcli_dev-19.2.3/simplyblock_web/blueprints/caching_node_ops.py +0 -301
  28. sbcli_dev-19.2.3/simplyblock_web/blueprints/caching_node_ops_k8s.py +0 -298
  29. sbcli_dev-19.2.3/simplyblock_web/blueprints/web_api_caching_node.py +0 -176
  30. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/README.md +0 -0
  31. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/pyproject.toml +0 -0
  32. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/requirements.txt +0 -0
  33. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/sbcli_dev.egg-info/dependency_links.txt +0 -0
  34. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/sbcli_dev.egg-info/entry_points.txt +0 -0
  35. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/sbcli_dev.egg-info/requires.txt +0 -0
  36. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/sbcli_dev.egg-info/top_level.txt +0 -0
  37. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/setup.cfg +0 -0
  38. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/setup.py +0 -0
  39. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_cli/__init__.py +0 -0
  40. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_cli/main.py +0 -0
  41. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/__init__.py +0 -0
  42. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/cnode_client.py +0 -0
  43. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/constants.py +0 -0
  44. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/controllers/__init__.py +0 -0
  45. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/controllers/cluster_events.py +0 -0
  46. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/controllers/device_controller.py +0 -0
  47. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/controllers/device_events.py +0 -0
  48. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/controllers/events_controller.py +0 -0
  49. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/controllers/health_controller.py +0 -0
  50. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/controllers/lvol_events.py +0 -0
  51. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/controllers/mgmt_events.py +0 -0
  52. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/controllers/pool_events.py +0 -0
  53. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/controllers/snapshot_controller.py +0 -0
  54. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/controllers/snapshot_events.py +0 -0
  55. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/controllers/storage_events.py +0 -0
  56. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/controllers/tasks_controller.py +0 -0
  57. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/controllers/tasks_events.py +0 -0
  58. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/controllers/tcp_ports_events.py +0 -0
  59. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/distr_controller.py +0 -0
  60. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/fw_api_client.py +0 -0
  61. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/mgmt_node_ops.py +0 -0
  62. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/models/__init__.py +0 -0
  63. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/models/base_model.py +0 -0
  64. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/models/cluster.py +0 -0
  65. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/models/deployer.py +0 -0
  66. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/models/events.py +0 -0
  67. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/models/hublvol.py +0 -0
  68. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/models/iface.py +0 -0
  69. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/models/job_schedule.py +0 -0
  70. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/models/lvol_model.py +0 -0
  71. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/models/mgmt_node.py +0 -0
  72. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/models/nvme_device.py +0 -0
  73. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/models/port_stat.py +0 -0
  74. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/models/snapshot.py +0 -0
  75. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/models/stats.py +0 -0
  76. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/models/storage_node.py +0 -0
  77. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/pci_utils.py +0 -0
  78. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/rpc_client.py +0 -0
  79. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/scripts/__init__.py +0 -0
  80. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/scripts/alerting/alert_resources.yaml.j2 +0 -0
  81. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/scripts/alerting/alert_rules.yaml +0 -0
  82. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/scripts/clean_local_storage_deploy.sh +0 -0
  83. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/scripts/config_docker.sh +0 -0
  84. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/scripts/dashboard.yml +0 -0
  85. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/scripts/dashboards/cluster.json +0 -0
  86. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/scripts/dashboards/devices.json +0 -0
  87. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/scripts/dashboards/lvols.json +0 -0
  88. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/scripts/dashboards/node-exporter.json +0 -0
  89. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/scripts/dashboards/nodes.json +0 -0
  90. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/scripts/dashboards/pools.json +0 -0
  91. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/scripts/datasource.yml +0 -0
  92. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/scripts/db_config_double.sh +0 -0
  93. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/scripts/db_config_single.sh +0 -0
  94. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/scripts/deploy_fdb.sh +0 -0
  95. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/scripts/deploy_stack.sh +0 -0
  96. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/scripts/docker-compose-swarm-monitoring.yml +0 -0
  97. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/scripts/foundation.yml +0 -0
  98. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/scripts/haproxy.cfg +0 -0
  99. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/scripts/helpers/__init__.py +0 -0
  100. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/scripts/helpers/deploy_cluster.sh +0 -0
  101. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/scripts/helpers/destroy_cluster.sh +0 -0
  102. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/scripts/helpers/nvme_disconnect_by_ip.py +0 -0
  103. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/scripts/install_deps.sh +0 -0
  104. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/scripts/objstore.yml +0 -0
  105. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/scripts/prepare_fdb.sh +0 -0
  106. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/scripts/prometheus.yml.j2 +0 -0
  107. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/scripts/run_ssh.sh +0 -0
  108. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/scripts/set_db_config.sh +0 -0
  109. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/scripts/stack_deploy_wait.sh +0 -0
  110. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/services/__init__.py +0 -0
  111. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/services/cap_monitor.py +0 -0
  112. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/services/capacity_and_stats_collector.py +0 -0
  113. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/services/device_monitor.py +0 -0
  114. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/services/install_service.sh +0 -0
  115. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/services/lvol_monitor.py +0 -0
  116. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/services/lvol_stat_collector.py +0 -0
  117. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/services/main_distr_event_collector.py +0 -0
  118. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/services/mgmt_node_monitor.py +0 -0
  119. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/services/new_device_discovery.py +0 -0
  120. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/services/remove_service.sh +0 -0
  121. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/services/service_template.service +0 -0
  122. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/services/spdk/__init__.py +0 -0
  123. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/services/spdk/client.py +0 -0
  124. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/services/spdk_http_proxy_server.py +0 -0
  125. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/services/storage_node_monitor.py +0 -0
  126. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/services/tasks_cluster_status.py +0 -0
  127. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/services/tasks_runner_failed_migration.py +0 -0
  128. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/services/tasks_runner_migration.py +0 -0
  129. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/services/tasks_runner_new_dev_migration.py +0 -0
  130. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/services/tasks_runner_node_add.py +0 -0
  131. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/services/tasks_runner_restart.py +0 -0
  132. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/shell_utils.py +0 -0
  133. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/snode_client.py +0 -0
  134. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/test/test_models.py +0 -0
  135. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/test/test_utils.py +0 -0
  136. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/utils.py +0 -0
  137. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_core/workers/cleanup_foundationdb.py +0 -0
  138. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_web/README.md +0 -0
  139. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_web/__init__.py +0 -0
  140. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_web/auth_middleware.py +0 -0
  141. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_web/blueprints/__init__.py +0 -0
  142. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_web/blueprints/node_api_basic.py +0 -0
  143. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_web/blueprints/snode_ops.py +0 -0
  144. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_web/blueprints/swagger_ui_blueprint.py +0 -0
  145. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_web/blueprints/web_api_cluster.py +0 -0
  146. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_web/blueprints/web_api_deployer.py +0 -0
  147. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_web/blueprints/web_api_device.py +0 -0
  148. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_web/blueprints/web_api_metrics.py +0 -0
  149. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_web/blueprints/web_api_mgmt_node.py +0 -0
  150. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_web/blueprints/web_api_snapshot.py +0 -0
  151. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_web/blueprints/web_api_storage_node.py +0 -0
  152. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_web/node_configure.py +0 -0
  153. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_web/node_utils.py +0 -0
  154. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_web/node_utils_k8s.py +0 -0
  155. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_web/static/SimplyBlock-API.postman_collection.json +0 -0
  156. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_web/static/delete.py +0 -0
  157. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_web/static/deploy.py +0 -0
  158. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_web/static/deploy_cnode.yaml +0 -0
  159. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_web/static/deploy_spdk.yaml +0 -0
  160. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_web/static/is_up.py +0 -0
  161. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_web/static/list_deps.py +0 -0
  162. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_web/static/rpac.yaml +0 -0
  163. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_web/static/swagger.yaml +0 -0
  164. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_web/static/tst.py +0 -0
  165. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_web/templates/caching_deploy_spdk.yaml.j2 +0 -0
  166. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_web/templates/storage_deploy_spdk.yaml.j2 +0 -0
  167. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_web/templates/storage_init_job.yaml.j2 +0 -0
  168. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_web/test/api/test_lvol.py +0 -0
  169. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_web/test/api/test_snapshot.py +0 -0
  170. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_web/test/api/test_storage_node.py +0 -0
  171. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_web/test/conftest.py +0 -0
  172. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_web/test/pytest.ini +0 -0
  173. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_web/test/requirements.txt +0 -0
  174. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/simplyblock_web/test/util.py +0 -0
  175. {sbcli_dev-19.2.3 → sbcli_dev-19.2.5}/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.3
3
+ Version: 19.2.5
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.3
3
+ Version: 19.2.5
4
4
  Summary: CLI for managing SimplyBlock cluster
5
5
  Home-page: https://www.simplyblock.io/
6
6
  Author: Hamdy
@@ -28,7 +28,6 @@ simplyblock_core/snode_client.py
28
28
  simplyblock_core/storage_node_ops.py
29
29
  simplyblock_core/utils.py
30
30
  simplyblock_core/controllers/__init__.py
31
- simplyblock_core/controllers/caching_node_controller.py
32
31
  simplyblock_core/controllers/cluster_events.py
33
32
  simplyblock_core/controllers/device_controller.py
34
33
  simplyblock_core/controllers/device_events.py
@@ -47,7 +46,6 @@ simplyblock_core/controllers/tasks_events.py
47
46
  simplyblock_core/controllers/tcp_ports_events.py
48
47
  simplyblock_core/models/__init__.py
49
48
  simplyblock_core/models/base_model.py
50
- simplyblock_core/models/caching_node.py
51
49
  simplyblock_core/models/cluster.py
52
50
  simplyblock_core/models/deployer.py
53
51
  simplyblock_core/models/events.py
@@ -95,8 +93,6 @@ simplyblock_core/scripts/helpers/deploy_cluster.sh
95
93
  simplyblock_core/scripts/helpers/destroy_cluster.sh
96
94
  simplyblock_core/scripts/helpers/nvme_disconnect_by_ip.py
97
95
  simplyblock_core/services/__init__.py
98
- simplyblock_core/services/cached_lvol_stat_collector.py
99
- simplyblock_core/services/caching_node_monitor.py
100
96
  simplyblock_core/services/cap_monitor.py
101
97
  simplyblock_core/services/capacity_and_stats_collector.py
102
98
  simplyblock_core/services/device_monitor.py
@@ -133,13 +129,10 @@ simplyblock_web/node_utils_k8s.py
133
129
  simplyblock_web/node_webapp.py
134
130
  simplyblock_web/utils.py
135
131
  simplyblock_web/blueprints/__init__.py
136
- simplyblock_web/blueprints/caching_node_ops.py
137
- simplyblock_web/blueprints/caching_node_ops_k8s.py
138
132
  simplyblock_web/blueprints/node_api_basic.py
139
133
  simplyblock_web/blueprints/snode_ops.py
140
134
  simplyblock_web/blueprints/snode_ops_k8s.py
141
135
  simplyblock_web/blueprints/swagger_ui_blueprint.py
142
- simplyblock_web/blueprints/web_api_caching_node.py
143
136
  simplyblock_web/blueprints/web_api_cluster.py
144
137
  simplyblock_web/blueprints/web_api_deployer.py
145
138
  simplyblock_web/blueprints/web_api_device.py
@@ -160,6 +153,7 @@ simplyblock_web/static/rpac.yaml
160
153
  simplyblock_web/static/swagger.yaml
161
154
  simplyblock_web/static/tst.py
162
155
  simplyblock_web/templates/caching_deploy_spdk.yaml.j2
156
+ simplyblock_web/templates/storage_core_isolation.yaml.j2
163
157
  simplyblock_web/templates/storage_deploy_spdk.yaml.j2
164
158
  simplyblock_web/templates/storage_init_job.yaml.j2
165
159
  simplyblock_web/test/conftest.py
@@ -27,7 +27,6 @@ class CLIWrapper(CLIWrapperBase):
27
27
  self.init_control_plane()
28
28
  self.init_storage_pool()
29
29
  self.init_snapshot()
30
- self.init_caching_node()
31
30
  super().__init__()
32
31
 
33
32
  def init_storage_node(self):
@@ -169,6 +168,7 @@ class CLIWrapper(CLIWrapperBase):
169
168
  argument = subcommand.add_argument('--iobuf_large_bufsize', help='bdev_set_options param', type=int, default=0, dest='large_bufsize')
170
169
  argument = subcommand.add_argument('--force', help='Force restart', dest='force', action='store_true')
171
170
  argument = subcommand.add_argument('--ssd-pcie', help='New Nvme PCIe address to add to the storage node. Can be more than one.', type=str, default='', dest='ssd_pcie', required=False, nargs='+')
171
+ argument = subcommand.add_argument('--force-lvol-recreate', help='Force LVol recreate on node restart even if lvol bdev was not recovered', type=bool, dest='force_lvol_recreate')
172
172
 
173
173
  def init_storage_node__shutdown(self, subparser):
174
174
  subcommand = self.add_sub_command(subparser, 'shutdown', 'Initiates a storage node shutdown')
@@ -655,8 +655,6 @@ class CLIWrapper(CLIWrapperBase):
655
655
  argument = subcommand.add_argument('--max-rw-mbytes', help='Maximum Read Write Megabytes Per Second', type=int, dest='max_rw_mbytes')
656
656
  argument = subcommand.add_argument('--max-r-mbytes', help='Maximum Read Megabytes Per Second', type=int, dest='max_r_mbytes')
657
657
  argument = subcommand.add_argument('--max-w-mbytes', help='Maximum Write Megabytes Per Second', type=int, dest='max_w_mbytes')
658
- if self.developer_mode:
659
- argument = subcommand.add_argument('--has-secret', help='Pool is created with a secret (all further API interactions with the pool and logical volumes in the pool require this secret)', dest='has_secret', action='store_true')
660
658
 
661
659
  def init_storage_pool__set(self, subparser):
662
660
  subcommand = self.add_sub_command(subparser, 'set', 'Sets a storage pool\'s attributes')
@@ -730,70 +728,6 @@ class CLIWrapper(CLIWrapperBase):
730
728
  argument = subcommand.add_argument('--resize', help='New logical volume size: 10M, 10G, 10(bytes). Can only increase.', type=size_type(), default='0', dest='resize')
731
729
 
732
730
 
733
- def init_caching_node(self):
734
- subparser = self.add_command('caching-node', 'Caching node commands', aliases=['cn',])
735
- self.init_caching_node__deploy(subparser)
736
- self.init_caching_node__add_node(subparser)
737
- self.init_caching_node__list(subparser)
738
- self.init_caching_node__list_lvols(subparser)
739
- self.init_caching_node__remove(subparser)
740
- self.init_caching_node__connect(subparser)
741
- self.init_caching_node__disconnect(subparser)
742
- self.init_caching_node__recreate(subparser)
743
- self.init_caching_node__get_lvol_stats(subparser)
744
-
745
-
746
- def init_caching_node__deploy(self, subparser):
747
- subcommand = self.add_sub_command(subparser, 'deploy', 'Deploys a caching node on this machine (local run)')
748
- argument = subcommand.add_argument('--ifname', help='Management interface name, e.g. eth0', type=str, dest='ifname')
749
-
750
- def init_caching_node__add_node(self, subparser):
751
- subcommand = self.add_sub_command(subparser, 'add-node', 'Adds a new caching node to the cluster')
752
- subcommand.add_argument('cluster_id', help='Cluster id', type=str)
753
- subcommand.add_argument('node_ip', help='Node IP address', type=str)
754
- subcommand.add_argument('ifname', help='Management interface name', type=str)
755
- argument = subcommand.add_argument('--vcpu-count', help='Number of vCPUs used for SPDK. Remaining CPUs will be used for Linux system, TCP/IP processing, and other workloads. The default on non-Kubernetes hosts is 80%%.', type=int, dest='vcpu_count')
756
- if self.developer_mode:
757
- argument = subcommand.add_argument('--cpu-mask', help='SPDK app CPU mask, default is all cores found', type=regex_type(r'^(0x|0X)?[a-fA-F0-9]+$'), dest='spdk_cpu_mask')
758
- if self.developer_mode:
759
- argument = subcommand.add_argument('--memory', help='SPDK huge memory allocation. By default it will acquire all available huge pages.', type=size_type(min=utils.parse_size('1G'), max=None), dest='spdk_mem')
760
- if self.developer_mode:
761
- argument = subcommand.add_argument('--spdk-image', help='SPDK image uri', type=str, dest='spdk_image')
762
- argument = subcommand.add_argument('--namespace', help='k8s namespace to deploy on', type=str, dest='namespace')
763
- argument = subcommand.add_argument('--multipathing', help='Enable multipathing for logical volume connection, default: on', type=str, default='True', dest='multipathing', choices=['on','off',])
764
-
765
- def init_caching_node__list(self, subparser):
766
- subcommand = self.add_sub_command(subparser, 'list', 'Lists all caching nodes')
767
-
768
- def init_caching_node__list_lvols(self, subparser):
769
- subcommand = self.add_sub_command(subparser, 'list-lvols', 'Lists all connected logical volumes')
770
- subcommand.add_argument('node_id', help='Caching node id', type=str)
771
-
772
- def init_caching_node__remove(self, subparser):
773
- subcommand = self.add_sub_command(subparser, 'remove', 'Removes a caching node from the cluster')
774
- subcommand.add_argument('node_id', help='Caching node id', type=str)
775
- argument = subcommand.add_argument('--force', help='Force remove', dest='force', action='store_true')
776
-
777
- def init_caching_node__connect(self, subparser):
778
- subcommand = self.add_sub_command(subparser, 'connect', 'Connects a logical volume to the caching node')
779
- subcommand.add_argument('node_id', help='Caching node id', type=str)
780
- subcommand.add_argument('lvol_id', help='Logical volume id', type=str)
781
-
782
- def init_caching_node__disconnect(self, subparser):
783
- subcommand = self.add_sub_command(subparser, 'disconnect', 'Disconnects a logical volume from the caching node')
784
- subcommand.add_argument('node_id', help='Caching node id', type=str)
785
- subcommand.add_argument('lvol_id', help='Logical volume id', type=str)
786
-
787
- def init_caching_node__recreate(self, subparser):
788
- subcommand = self.add_sub_command(subparser, 'recreate', 'Recreate a caching node\'s bdevs')
789
- subcommand.add_argument('node_id', help='Caching node id', type=str)
790
-
791
- def init_caching_node__get_lvol_stats(self, subparser):
792
- subcommand = self.add_sub_command(subparser, 'get-lvol-stats', 'Gets a logical volume\'s statistics')
793
- subcommand.add_argument('lvol_id', help='Logical volume id', type=str)
794
- argument = subcommand.add_argument('--history', help='(XXdYYh), list history records (one for every 15 minutes) for XX days and YY hours (up to 10 days in total).', type=str, dest='history')
795
-
796
-
797
731
  def run(self):
798
732
  args = self.parser.parse_args()
799
733
  if args.debug:
@@ -1076,8 +1010,6 @@ class CLIWrapper(CLIWrapperBase):
1076
1010
  elif args.command in ['storage-pool', 'pool']:
1077
1011
  sub_command = args_dict['storage-pool']
1078
1012
  if sub_command in ['add']:
1079
- if not self.developer_mode:
1080
- args.has_secret = None
1081
1013
  ret = self.storage_pool__add(sub_command, args)
1082
1014
  elif sub_command in ['set']:
1083
1015
  ret = self.storage_pool__set(sub_command, args)
@@ -1111,33 +1043,6 @@ class CLIWrapper(CLIWrapperBase):
1111
1043
  else:
1112
1044
  self.parser.print_help()
1113
1045
 
1114
- elif args.command in ['caching-node', 'cn']:
1115
- sub_command = args_dict['caching-node']
1116
- if sub_command in ['deploy']:
1117
- ret = self.caching_node__deploy(sub_command, args)
1118
- elif sub_command in ['add-node']:
1119
- if not self.developer_mode:
1120
- args.spdk_cpu_mask = None
1121
- args.spdk_mem = None
1122
- args.spdk_image = None
1123
- ret = self.caching_node__add_node(sub_command, args)
1124
- elif sub_command in ['list']:
1125
- ret = self.caching_node__list(sub_command, args)
1126
- elif sub_command in ['list-lvols']:
1127
- ret = self.caching_node__list_lvols(sub_command, args)
1128
- elif sub_command in ['remove']:
1129
- ret = self.caching_node__remove(sub_command, args)
1130
- elif sub_command in ['connect']:
1131
- ret = self.caching_node__connect(sub_command, args)
1132
- elif sub_command in ['disconnect']:
1133
- ret = self.caching_node__disconnect(sub_command, args)
1134
- elif sub_command in ['recreate']:
1135
- ret = self.caching_node__recreate(sub_command, args)
1136
- elif sub_command in ['get-lvol-stats']:
1137
- ret = self.caching_node__get_lvol_stats(sub_command, args)
1138
- else:
1139
- self.parser.print_help()
1140
-
1141
1046
  else:
1142
1047
  self.parser.print_help()
1143
1048
 
@@ -13,7 +13,7 @@ from simplyblock_core import storage_node_ops as storage_ops
13
13
  from simplyblock_core import mgmt_node_ops as mgmt_ops
14
14
  from simplyblock_core.controllers import pool_controller, lvol_controller, snapshot_controller, device_controller, \
15
15
  tasks_controller
16
- from simplyblock_core.controllers import caching_node_controller, health_controller
16
+ from simplyblock_core.controllers import health_controller
17
17
  from simplyblock_core.models.pool import Pool
18
18
  from simplyblock_core.models.cluster import Cluster
19
19
 
@@ -188,7 +188,7 @@ class CLIWrapperBase:
188
188
  node_id, max_lvol, max_snap, max_prov,
189
189
  spdk_image, spdk_debug,
190
190
  small_bufsize, large_bufsize, node_ip=args.node_ip, reattach_volume=reattach_volume, force=args.force,
191
- new_ssd_pcie=ssd_pcie)
191
+ new_ssd_pcie=ssd_pcie, force_lvol_recreate=args.force_lvol_recreate)
192
192
 
193
193
  def storage_node__shutdown(self, sub_command, args):
194
194
  return storage_ops.shutdown_storage_node(args.node_id, args.force)
@@ -553,9 +553,6 @@ class CLIWrapperBase:
553
553
  return mgmt_ops.remove_mgmt_node(args.node_id)
554
554
 
555
555
  def storage_pool__add(self, sub_command, args):
556
- has_secret = args.has_secret
557
- if has_secret is None:
558
- has_secret = False
559
556
  return pool_controller.add_pool(
560
557
  args.name,
561
558
  args.pool_max,
@@ -564,7 +561,6 @@ class CLIWrapperBase:
564
561
  args.max_rw_mbytes,
565
562
  args.max_r_mbytes,
566
563
  args.max_w_mbytes,
567
- has_secret,
568
564
  args.cluster_id
569
565
  )
570
566
 
@@ -625,48 +621,6 @@ class CLIWrapperBase:
625
621
  success, details = snapshot_controller.clone(args.snapshot_id, args.lvol_name, new_size)
626
622
  return details
627
623
 
628
- def caching_node__deploy(self, sub_command, args):
629
- return caching_node_controller.deploy(args.ifname)
630
-
631
- def caching_node__add_node(self, sub_command, args):
632
- cluster_id = args.cluster_id
633
- node_ip = args.node_ip
634
- ifname = args.ifname
635
- data_nics = []
636
- spdk_image = args.spdk_image
637
- namespace = args.namespace
638
- multipathing = args.multipathing == "on"
639
- spdk_cpu_mask = args.spdk_cpu_mask
640
- spdk_mem = args.spdk_mem
641
-
642
- return caching_node_controller.add_node(
643
- cluster_id, node_ip, ifname, data_nics, spdk_cpu_mask, spdk_mem, spdk_image, namespace, multipathing)
644
-
645
- def caching_node__list(self, sub_command, args):
646
- return caching_node_controller.list_nodes()
647
-
648
- def caching_node__list_lvols(self, sub_command, args):
649
- return caching_node_controller.list_lvols(args.node_id)
650
-
651
- def caching_node__remove(self, sub_command, args):
652
- return caching_node_controller.remove_node(args.node_id, args.force)
653
-
654
- def caching_node__connect(self, sub_command, args):
655
- return caching_node_controller.connect(args.node_id, args.lvol_id)
656
-
657
- def caching_node__disconnect(self, sub_command, args):
658
- return caching_node_controller.disconnect(args.node_id, args.lvol_id)
659
-
660
- def caching_node__recreate(self, sub_command, args):
661
- return caching_node_controller.recreate(args.node_id)
662
-
663
- def caching_node__get_lvol_stats(self, sub_command, args):
664
- data = caching_node_controller.get_io_stats(args.lvol_id, args.history)
665
- if data:
666
- return utils.print_table(data)
667
- else:
668
- return False
669
-
670
624
  def storage_node_list_devices(self, args):
671
625
  node_id = args.node_id
672
626
  is_json = args.json
@@ -506,7 +506,7 @@ def cluster_expand(cl_id) -> None:
506
506
  secondary_nodes = storage_node_ops.get_secondary_nodes(snode)
507
507
  if not secondary_nodes:
508
508
  set_cluster_status(cl_id, ols_status)
509
- raise ValueError("Failed to expand cluster, No enough secondary nodes")
509
+ raise ValueError("A minimum of 2 new nodes are required to expand cluster")
510
510
 
511
511
  snode = db_controller.get_storage_node_by_id(snode.get_id())
512
512
  snode.secondary_node_id = secondary_nodes[0]
@@ -9,7 +9,7 @@ from datetime import datetime
9
9
  from typing import Tuple
10
10
 
11
11
  from simplyblock_core import utils, constants
12
- from simplyblock_core.controllers import snapshot_controller, pool_controller, lvol_events, caching_node_controller
12
+ from simplyblock_core.controllers import snapshot_controller, pool_controller, lvol_events
13
13
  from simplyblock_core.db_controller import DBController
14
14
  from simplyblock_core.models.pool import Pool
15
15
  from simplyblock_core.models.lvol_model import LVol
@@ -873,13 +873,6 @@ def delete_lvol(id_or_name, force_delete=False):
873
873
  logger.info("Done")
874
874
  return True
875
875
 
876
- # disconnect from caching nodes:
877
- cnodes = db_controller.get_caching_nodes()
878
- for cnode in cnodes:
879
- for lv in cnode.lvols:
880
- if lv.lvol_id == lvol.get_id():
881
- caching_node_controller.disconnect(cnode.get_id(), lvol.get_id())
882
-
883
876
  if lvol.ha_type == 'single':
884
877
  if snode.status != StorageNode.STATUS_ONLINE:
885
878
  logger.error(f"Node status is not online, node: {snode.get_id()}, status: {snode.status}")
@@ -22,7 +22,7 @@ def _generate_string(length):
22
22
  string.ascii_letters + string.digits) for _ in range(length))
23
23
 
24
24
 
25
- def add_pool(name, pool_max, lvol_max, max_rw_iops, max_rw_mbytes, max_r_mbytes, max_w_mbytes, has_secret, cluster_id):
25
+ def add_pool(name, pool_max, lvol_max, max_rw_iops, max_rw_mbytes, max_r_mbytes, max_w_mbytes, cluster_id):
26
26
  db_controller = DBController()
27
27
  if not name:
28
28
  logger.error("Pool name is empty!")
@@ -58,8 +58,6 @@ def add_pool(name, pool_max, lvol_max, max_rw_iops, max_rw_mbytes, max_r_mbytes,
58
58
  pool.cluster_id = cluster.get_id()
59
59
  pool.numeric_id = _generate_numeric_id(pool_list)
60
60
  pool.pool_name = name
61
- if has_secret:
62
- pool.secret = _generate_string(20)
63
61
  pool.pool_max_size = pool_max
64
62
  pool.lvol_max_size = lvol_max
65
63
  pool.max_rw_ios_per_sec = max_rw_iops
@@ -304,36 +302,6 @@ def get_io_stats(pool_id, history, records_count=20):
304
302
  return utils.print_table(out)
305
303
 
306
304
 
307
- def get_secret(pool_id):
308
- db_controller = DBController()
309
- try:
310
- pool = db_controller.get_pool_by_id(pool_id)
311
- except KeyError:
312
- logger.error(f"Pool not found {pool_id}")
313
- return False
314
-
315
- if pool.secret:
316
- return pool.secret
317
- else:
318
- return "Pool has no secret"
319
-
320
-
321
- def set_secret(pool_id, secret):
322
- db_controller = DBController()
323
- try:
324
- pool = db_controller.get_pool_by_id(pool_id)
325
- except KeyError:
326
- logger.error(f"Pool not found {pool_id}")
327
- return False
328
-
329
- secret = secret.strip()
330
- if len(secret) < 20:
331
- return "Secret must be at least 20 char"
332
-
333
- pool.secret = secret
334
- pool.write_to_db(db_controller.kv_store)
335
-
336
-
337
305
  def get_pool_total_capacity(pool_id):
338
306
  db_controller = DBController()
339
307
  try:
@@ -5,7 +5,6 @@ import fdb
5
5
  from typing import List, Optional
6
6
 
7
7
  from simplyblock_core import constants
8
- from simplyblock_core.models.caching_node import CachingNode
9
8
  from simplyblock_core.models.cluster import Cluster
10
9
  from simplyblock_core.models.deployer import Deployer
11
10
  from simplyblock_core.models.events import EventObj
@@ -89,32 +88,6 @@ class DBController(metaclass=Singleton):
89
88
  raise KeyError(f'StorageNode {id} not found')
90
89
  return ret[0]
91
90
 
92
- # todo: change this function for multi cluster
93
- def get_caching_nodes(self) -> List[CachingNode]:
94
- ret = CachingNode().read_from_db(self.kv_store)
95
- ret = sorted(ret, key=lambda x: x.create_dt)
96
- return ret
97
-
98
- def get_caching_node_by_id(self, id) -> Optional[CachingNode]:
99
- ret = CachingNode().read_from_db(self.kv_store, id)
100
- if ret:
101
- return ret[0]
102
- return None
103
-
104
- def get_caching_node_by_system_id(self, system_id) -> Optional[CachingNode]:
105
- nodes = CachingNode().read_from_db(self.kv_store)
106
- for node in nodes:
107
- if node.system_uuid == system_id:
108
- return node
109
- return None
110
-
111
- def get_caching_node_by_hostname(self, hostname) -> Optional[CachingNode]:
112
- nodes = self.get_caching_nodes()
113
- for node in nodes:
114
- if node.hostname == hostname:
115
- return node
116
- return None
117
-
118
91
  def get_storage_node_by_hostname(self, hostname) -> Optional[StorageNode]:
119
92
  nodes = self.get_storage_nodes()
120
93
  for node in nodes:
@@ -1,5 +1,5 @@
1
1
  SIMPLY_BLOCK_COMMAND_NAME=sbcli-dev
2
- SIMPLY_BLOCK_VERSION=19.2.3
2
+ SIMPLY_BLOCK_VERSION=19.2.5
3
3
 
4
4
 
5
5
  SIMPLY_BLOCK_DOCKER_IMAGE=public.ecr.aws/simply-block/simplyblock:main
@@ -26,7 +26,7 @@ class Pool(BaseModel):
26
26
  pool_max_size: int = 0
27
27
  pool_name: str = ""
28
28
  numeric_id: int = 0
29
- secret: str = ""
29
+ secret: str = "" # unused
30
30
  users: List[str] = []
31
31
 
32
32
 
@@ -29,7 +29,7 @@ services:
29
29
  placement:
30
30
  constraints: [ node.role == manager ]
31
31
  resources:
32
- limits:
32
+ reservations:
33
33
  memory: 4g
34
34
 
35
35
  fdb-backup-agent:
@@ -92,20 +92,6 @@ services:
92
92
  environment:
93
93
  SIMPLYBLOCK_LOG_LEVEL: "$LOG_LEVEL"
94
94
 
95
- CachingNodeMonitor:
96
- <<: *service-base
97
- image: $SIMPLYBLOCK_DOCKER_IMAGE
98
- command: "python simplyblock_core/services/caching_node_monitor.py"
99
- deploy:
100
- placement:
101
- constraints: [node.role == manager]
102
- volumes:
103
- - "/etc/foundationdb:/etc/foundationdb"
104
- networks:
105
- - hostnet
106
- environment:
107
- SIMPLYBLOCK_LOG_LEVEL: "$LOG_LEVEL"
108
-
109
95
  LVolStatsCollector:
110
96
  <<: *service-base
111
97
  image: $SIMPLYBLOCK_DOCKER_IMAGE
@@ -208,7 +208,7 @@ while True:
208
208
 
209
209
  lvstore_check = True
210
210
  snode = db.get_storage_node_by_id(snode.get_id())
211
- if snode.lvstore_status == "ready":
211
+ if snode.status == StorageNode.STATUS_ONLINE:
212
212
 
213
213
  lvstore_stack = snode.lvstore_stack
214
214
  lvstore_check &= health_controller._check_node_lvstore(
@@ -68,7 +68,7 @@ while True:
68
68
  logger.info(f"Check 2: ping mgmt ip {node.mgmt_ip} ... {ping_check}")
69
69
 
70
70
  if not ping_check:
71
- msg = f"Node ping is false, retry task"
71
+ msg = "Node ping is false, retry task"
72
72
  logger.info(msg)
73
73
  task.function_result = msg
74
74
  task.status = JobSchedule.STATUS_SUSPENDED
@@ -105,7 +105,7 @@ while True:
105
105
  node.remote_devices = remote_devices
106
106
  node.write_to_db()
107
107
  else:
108
- msg = f"Node unable to connect to remote devs, retry task"
108
+ msg = "Node unable to connect to remote devs, retry task"
109
109
  logger.info(msg)
110
110
  task.function_result = msg
111
111
  task.status = JobSchedule.STATUS_SUSPENDED
@@ -114,7 +114,7 @@ while True:
114
114
 
115
115
  except Exception as e:
116
116
  logger.error(e)
117
- msg = f"Error when connect to remote devs, retry task"
117
+ msg = "Error when connect to remote devs, retry task"
118
118
  logger.info(msg)
119
119
  task.function_result = msg
120
120
  task.status = JobSchedule.STATUS_SUSPENDED
@@ -1361,7 +1361,7 @@ def restart_storage_node(
1361
1361
  node_id, max_lvol=0, max_snap=0, max_prov=0,
1362
1362
  spdk_image=None, set_spdk_debug=None,
1363
1363
  small_bufsize=0, large_bufsize=0,
1364
- force=False, node_ip=None, reattach_volume=False, clear_data=False, new_ssd_pcie=[]):
1364
+ force=False, node_ip=None, reattach_volume=False, clear_data=False, new_ssd_pcie=[], force_lvol_recreate=False):
1365
1365
  db_controller = DBController()
1366
1366
  kv_store = db_controller.kv_store
1367
1367
 
@@ -1793,7 +1793,7 @@ def restart_storage_node(
1793
1793
  snode = db_controller.get_storage_node_by_id(snode.get_id())
1794
1794
  logger.info("Recreate lvstore")
1795
1795
  try:
1796
- ret = recreate_lvstore(snode, force=force)
1796
+ ret = recreate_lvstore(snode, force=force_lvol_recreate)
1797
1797
  except Exception as e:
1798
1798
  logger.error(e)
1799
1799
  return False
@@ -3005,7 +3005,7 @@ def recreate_lvstore(snode, force=False):
3005
3005
  fw_api.firewall_set_port(snode.lvol_subsys_port, "tcp", "block", sec_node.rpc_port)
3006
3006
  tcp_ports_events.port_deny(sec_node, snode.lvol_subsys_port)
3007
3007
 
3008
- # time.sleep(0.2)
3008
+ time.sleep(0.5)
3009
3009
  ### 4- set leadership to false
3010
3010
  sec_rpc_client.bdev_lvol_set_leader(snode.lvstore, leader=False, bs_nonleadership=True)
3011
3011
  sec_rpc_client.bdev_distrib_force_to_non_leader(snode.jm_vuid)
@@ -3015,7 +3015,7 @@ def recreate_lvstore(snode, force=False):
3015
3015
  rpc_client.jc_explicit_synchronization(snode.jm_vuid)
3016
3016
 
3017
3017
  ### 5- examine
3018
- time.sleep(0.2)
3018
+ # time.sleep(0.2)
3019
3019
  rpc_client.bdev_distrib_force_to_non_leader(snode.jm_vuid)
3020
3020
  ret = rpc_client.bdev_examine(snode.raid)
3021
3021
  # time.sleep(1)
@@ -6,7 +6,7 @@ from flask import Flask
6
6
 
7
7
  from simplyblock_web import utils
8
8
  from simplyblock_web.blueprints import web_api_cluster, web_api_mgmt_node, web_api_device, \
9
- web_api_lvol, web_api_storage_node, web_api_pool, web_api_caching_node, \
9
+ web_api_lvol, web_api_storage_node, web_api_pool, \
10
10
  web_api_snapshot, web_api_deployer, swagger_ui_blueprint, web_api_metrics
11
11
  from simplyblock_web.auth_middleware import token_required
12
12
  from simplyblock_core import constants, utils as core_utils
@@ -31,7 +31,6 @@ app.register_blueprint(web_api_lvol.bp)
31
31
  app.register_blueprint(web_api_snapshot.bp)
32
32
  app.register_blueprint(web_api_storage_node.bp)
33
33
  app.register_blueprint(web_api_pool.bp)
34
- app.register_blueprint(web_api_caching_node.bp)
35
34
  app.register_blueprint(web_api_deployer.bp)
36
35
  app.register_blueprint(swagger_ui_blueprint.bp, url_prefix=swagger_ui_blueprint.SWAGGER_URL)
37
36
  app.register_blueprint(web_api_metrics.bp)
@@ -336,14 +336,24 @@ def spdk_process_start(body: SPDKParams):
336
336
  spdk_process_kill(query)
337
337
 
338
338
  node_prepration_job_name = "snode-spdk-job-"
339
+ node_prepration_core_name = "snode-spdk-core-isolate-"
339
340
  node_name = os.environ.get("HOSTNAME", "")
340
-
341
+ core_isolate = os.environ.get("CORE_ISOLATION", False)
342
+ if isinstance(core_isolate, str):
343
+ core_isolate = core_isolate.strip().lower() in ("true")
344
+
341
345
  # limit the job name length to 63 characters
342
346
  k8s_job_name_length = len(node_prepration_job_name+node_name)
347
+ core_name_length = len(node_prepration_core_name+node_name)
343
348
  if k8s_job_name_length > 63:
344
349
  node_prepration_job_name += node_name[k8s_job_name_length-63:]
345
350
  else:
346
351
  node_prepration_job_name += node_name
352
+
353
+ if core_name_length > 63:
354
+ node_prepration_core_name += node_name[core_name_length-63:]
355
+ else:
356
+ node_prepration_core_name += node_name
347
357
 
348
358
  logger.debug(f"deploying k8s job to prepare worker: {node_name}")
349
359
 
@@ -361,6 +371,7 @@ def spdk_process_start(body: SPDKParams):
361
371
  'RPC_PASSWORD': body.rpc_password,
362
372
  'HOSTNAME': node_name,
363
373
  'JOBNAME': node_prepration_job_name,
374
+ 'CORE_JOBNAME': node_prepration_core_name,
364
375
  'NAMESPACE': namespace,
365
376
  'FDB_CONNECTION': body.fdb_connection,
366
377
  'SIMPLYBLOCK_DOCKER_IMAGE': constants.SIMPLY_BLOCK_DOCKER_IMAGE,
@@ -390,6 +401,27 @@ def spdk_process_start(body: SPDKParams):
390
401
  )
391
402
  logger.info(f"Job deleted: '{job_resp.metadata.name}' in namespace '{namespace}")
392
403
 
404
+ if core_isolate:
405
+ core_template = env.get_template('storage_core_isolation.yaml.j2')
406
+ core_yaml = yaml.safe_load(core_template.render(values))
407
+ batch_v1 = core_utils.get_k8s_batch_client()
408
+ core_resp = batch_v1.create_namespaced_job(namespace=namespace, body=core_yaml)
409
+ msg = f"Job created: '{core_resp.metadata.name}' in namespace '{namespace}"
410
+ logger.info(msg)
411
+
412
+ node_utils_k8s.wait_for_job_completion(core_resp.metadata.name, namespace)
413
+ logger.info(f"Job '{core_resp.metadata.name}' completed successfully")
414
+
415
+ batch_v1.delete_namespaced_job(
416
+ name=core_resp.metadata.name,
417
+ namespace=namespace,
418
+ body=V1DeleteOptions(
419
+ propagation_policy='Foreground',
420
+ grace_period_seconds=0
421
+ )
422
+ )
423
+ logger.info(f"Job deleted: '{core_resp.metadata.name}' in namespace '{namespace}")
424
+
393
425
  env = Environment(loader=FileSystemLoader(os.path.join(TOP_DIR, 'templates')), trim_blocks=True, lstrip_blocks=True)
394
426
  template = env.get_template('storage_deploy_spdk.yaml.j2')
395
427
  dep = yaml.safe_load(template.render(values))
@@ -49,12 +49,6 @@ def lvol_iostats(uuid, history):
49
49
  if not lvol:
50
50
  return utils.get_response_error(f"LVol not found: {uuid}", 404)
51
51
 
52
- pool = db.get_pool_by_id(lvol.pool_uuid)
53
- if pool.secret:
54
- req_secret = request.headers.get('secret', "")
55
- if req_secret != pool.secret:
56
- return utils.get_response_error("Pool secret doesn't mach the value in the request header", 400)
57
-
58
52
  data = lvol_controller.get_io_stats(uuid, history, parse_sizes=False, with_sizes=True)
59
53
  ret = {
60
54
  "object_data": lvol.get_clean_dict(),
@@ -69,12 +63,6 @@ def lvol_capacity(uuid, history):
69
63
  if not lvol:
70
64
  return utils.get_response_error(f"LVol not found: {uuid}", 404)
71
65
 
72
- pool = db.get_pool_by_id(lvol.pool_uuid)
73
- if pool.secret:
74
- req_secret = request.headers.get('secret', "")
75
- if req_secret != pool.secret:
76
- return utils.get_response_error("Pool secret doesn't mach the value in the request header", 400)
77
-
78
66
  data = lvol_controller.get_capacity(uuid, history, parse_sizes=False)
79
67
  out = []
80
68
  if data: