sbcli-pre 1.1.4__zip → 1.1.6__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 (136) hide show
  1. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/PKG-INFO +1 -1
  2. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/env_var +1 -1
  3. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/sbcli_pre.egg-info/PKG-INFO +1 -1
  4. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_cli/cli.py +2 -13
  5. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/models/nvme_device.py +1 -0
  6. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/storage_node_ops.py +87 -161
  7. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/README.md +0 -0
  8. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/pyproject.toml +0 -0
  9. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/sbcli_pre.egg-info/SOURCES.txt +0 -0
  10. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/sbcli_pre.egg-info/dependency_links.txt +0 -0
  11. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/sbcli_pre.egg-info/entry_points.txt +0 -0
  12. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/sbcli_pre.egg-info/requires.txt +0 -0
  13. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/sbcli_pre.egg-info/top_level.txt +0 -0
  14. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/setup.cfg +0 -0
  15. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/setup.py +0 -0
  16. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_cli/main.py +0 -0
  17. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/__init__.py +0 -0
  18. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/cluster_ops.py +0 -0
  19. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/cnode_client.py +0 -0
  20. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/compute_node_ops.py +0 -0
  21. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/constants.py +0 -0
  22. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/controllers/__init__.py +0 -0
  23. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/controllers/caching_node_controller.py +0 -0
  24. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/controllers/cluster_events.py +0 -0
  25. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/controllers/device_controller.py +0 -0
  26. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/controllers/device_events.py +0 -0
  27. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/controllers/events_controller.py +0 -0
  28. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/controllers/health_controller.py +0 -0
  29. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/controllers/lvol_controller.py +0 -0
  30. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/controllers/lvol_events.py +0 -0
  31. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/controllers/mgmt_events.py +0 -0
  32. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/controllers/pool_controller.py +0 -0
  33. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/controllers/pool_events.py +0 -0
  34. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/controllers/snapshot_controller.py +0 -0
  35. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/controllers/snapshot_events.py +0 -0
  36. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/controllers/storage_events.py +0 -0
  37. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/controllers/tasks_controller.py +0 -0
  38. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/controllers/tasks_events.py +0 -0
  39. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/distr_controller.py +0 -0
  40. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/kv_store.py +0 -0
  41. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/mgmt_node_ops.py +0 -0
  42. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/models/__init__.py +0 -0
  43. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/models/base_model.py +0 -0
  44. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/models/caching_node.py +0 -0
  45. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/models/cluster.py +0 -0
  46. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/models/compute_node.py +0 -0
  47. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/models/events.py +0 -0
  48. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/models/global_settings.py +0 -0
  49. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/models/iface.py +0 -0
  50. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/models/job_schedule.py +0 -0
  51. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/models/lvol_model.py +0 -0
  52. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/models/mgmt_node.py +0 -0
  53. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/models/pool.py +0 -0
  54. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/models/port_stat.py +0 -0
  55. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/models/snapshot.py +0 -0
  56. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/models/stats.py +0 -0
  57. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/models/storage_node.py +0 -0
  58. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/pci_utils.py +0 -0
  59. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/rpc_client.py +0 -0
  60. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/scripts/__init__.py +0 -0
  61. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/scripts/alerting/alert_resources.yaml.j2 +0 -0
  62. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/scripts/alerting/alert_rules.yaml +0 -0
  63. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/scripts/clean_local_storage_deploy.sh +0 -0
  64. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/scripts/config_docker.sh +0 -0
  65. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/scripts/dashboards/cluster.json +0 -0
  66. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/scripts/dashboards/devices.json +0 -0
  67. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/scripts/dashboards/lvols.json +0 -0
  68. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/scripts/dashboards/node-exporter.json +0 -0
  69. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/scripts/dashboards/nodes.json +0 -0
  70. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/scripts/dashboards/pools.json +0 -0
  71. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/scripts/datasource.yml +0 -0
  72. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/scripts/db_config_double.sh +0 -0
  73. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/scripts/db_config_single.sh +0 -0
  74. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/scripts/deploy_stack.sh +0 -0
  75. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/scripts/docker-compose-swarm-monitoring.yml +0 -0
  76. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/scripts/docker-compose-swarm.yml +0 -0
  77. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/scripts/haproxy.cfg +0 -0
  78. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/scripts/install_deps.sh +0 -0
  79. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/scripts/prometheus.yml +0 -0
  80. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/scripts/run_ssh.sh +0 -0
  81. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/scripts/set_db_config.sh +0 -0
  82. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/scripts/stack_deploy_wait.sh +0 -0
  83. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/services/__init__.py +0 -0
  84. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/services/caching_node_monitor.py +0 -0
  85. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/services/cap_monitor.py +0 -0
  86. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/services/capacity_and_stats_collector.py +0 -0
  87. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/services/device_monitor.py +0 -0
  88. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/services/distr_event_collector.py +0 -0
  89. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/services/health_check_service.py +0 -0
  90. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/services/install_service.sh +0 -0
  91. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/services/log_agg_service.py +0 -0
  92. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/services/lvol_monitor.py +0 -0
  93. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/services/lvol_stat_collector.py +0 -0
  94. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/services/mgmt_node_monitor.py +0 -0
  95. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/services/port_stat_collector.py +0 -0
  96. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/services/remove_service.sh +0 -0
  97. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/services/service_template.service +0 -0
  98. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/services/storage_node_monitor.py +0 -0
  99. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/services/tasks_runner_migration.py +0 -0
  100. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/services/tasks_runner_restart.py +0 -0
  101. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/shell_utils.py +0 -0
  102. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/snode_client.py +0 -0
  103. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_core/utils.py +0 -0
  104. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_web/__init__.py +0 -0
  105. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_web/app.py +0 -0
  106. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_web/auth_middleware.py +0 -0
  107. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_web/blueprints/__init__.py +0 -0
  108. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_web/blueprints/caching_node_ops.py +0 -0
  109. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_web/blueprints/caching_node_ops_k8s.py +0 -0
  110. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_web/blueprints/node_api_basic.py +0 -0
  111. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_web/blueprints/node_api_caching_docker.py +0 -0
  112. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_web/blueprints/node_api_caching_ks.py +0 -0
  113. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_web/blueprints/snode_ops.py +0 -0
  114. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_web/blueprints/web_api_caching_node.py +0 -0
  115. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_web/blueprints/web_api_cluster.py +0 -0
  116. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_web/blueprints/web_api_device.py +0 -0
  117. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_web/blueprints/web_api_lvol.py +0 -0
  118. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_web/blueprints/web_api_mgmt_node.py +0 -0
  119. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_web/blueprints/web_api_pool.py +0 -0
  120. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_web/blueprints/web_api_snapshot.py +0 -0
  121. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_web/blueprints/web_api_storage_node.py +0 -0
  122. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_web/caching_node_app.py +0 -0
  123. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_web/caching_node_app_k8s.py +0 -0
  124. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_web/node_utils.py +0 -0
  125. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_web/node_webapp.py +0 -0
  126. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_web/snode_app.py +0 -0
  127. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_web/static/delete.py +0 -0
  128. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_web/static/deploy.py +0 -0
  129. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_web/static/deploy_cnode.yaml +0 -0
  130. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_web/static/deploy_spdk.yaml +0 -0
  131. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_web/static/is_up.py +0 -0
  132. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_web/static/list_deps.py +0 -0
  133. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_web/static/rpac.yaml +0 -0
  134. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_web/static/tst.py +0 -0
  135. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_web/templates/deploy_spdk.yaml.j2 +0 -0
  136. {sbcli_pre-1.1.4 → sbcli_pre-1.1.6}/simplyblock_web/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sbcli-pre
3
- Version: 1.1.4
3
+ Version: 1.1.6
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-pre
2
- SIMPLY_BLOCK_VERSION=1.1.4
2
+ SIMPLY_BLOCK_VERSION=1.1.6
3
3
 
4
4
  SIMPLY_BLOCK_DOCKER_IMAGE=simplyblock/simplyblock:pre-release
5
5
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sbcli-pre
3
- Version: 1.1.4
3
+ Version: 1.1.6
4
4
  Summary: CLI for managing SimplyBlock cluster
5
5
  Home-page: https://www.simplyblock.io/
6
6
  Author: Hamdy
@@ -38,9 +38,9 @@ class CLIWrapper:
38
38
  sub_command.add_argument("cluster_id", help='UUID of the cluster to which the node will belong')
39
39
  sub_command.add_argument("node_ip", help='IP of storage node to add')
40
40
  sub_command.add_argument("ifname", help='Management interface name')
41
- sub_command.add_argument("--partitions", help='Number of partitions to create per device', type=int, default=1)
41
+ sub_command.add_argument("--partitions", help='Number of partitions to create per device', type=int, default=0)
42
42
  sub_command.add_argument("--jm-percent", help='Number in percent to use for JM from each device',
43
- type=int, default=3, dest='jm_percent')
43
+ type=int, default=0, dest='jm_percent')
44
44
  sub_command.add_argument("--data-nics", help='Data interface names', nargs='+', dest='data_nics')
45
45
  sub_command.add_argument("--memory", help='SPDK huge memory allocation, default is 4G', dest='spdk_mem')
46
46
  sub_command.add_argument("--spdk-image", help='SPDK image uri', dest='spdk_image')
@@ -630,9 +630,6 @@ class CLIWrapper:
630
630
  elif sub_command == "deploy-cleaner":
631
631
  ret = storage_ops.deploy_cleaner()
632
632
 
633
- elif sub_command == "add":
634
- ret = self.storage_node_add(args)
635
-
636
633
  elif sub_command == "add-node":
637
634
  cluster_id = args.cluster_id
638
635
  node_ip = args.node_ip
@@ -1102,14 +1099,6 @@ class CLIWrapper:
1102
1099
  out = storage_ops.list_storage_nodes(self.db_store, args.json)
1103
1100
  return out
1104
1101
 
1105
- def storage_node_add(self, args):
1106
- cluster_id = args.cluster_id
1107
- ifname = args.ifname
1108
- data_nics = args.data_nics
1109
- # TODO: Validate the inputs
1110
- out = storage_ops.add_storage_node(cluster_id, ifname, data_nics)
1111
- return out
1112
-
1113
1102
  def storage_node_list_devices(self, args):
1114
1103
  node_id = args.node_id
1115
1104
  sort = args.sort
@@ -82,6 +82,7 @@ class JMDevice(BaseModel):
82
82
  "raid_bdev": {"type": str, 'default': ""},
83
83
  "alceml_bdev": {"type": str, 'default': ""},
84
84
  "jm_bdev": {"type": str, 'default': ""},
85
+ "nvme_device": {"type": NVMeDevice, 'default': None},
85
86
 
86
87
  "health_check": {"type": bool, "default": True},
87
88
  "io_error": {"type": bool, 'default': False},
@@ -231,7 +231,7 @@ def _search_for_partitions(rpc_client, nvme_device):
231
231
  return partitioned_devices
232
232
 
233
233
 
234
- def _create_jm_device_stack(rpc_client, jm_nvme_bdevs, snode, after_restart):
234
+ def _create_jm_stack_on_raid(rpc_client, jm_nvme_bdevs, snode, after_restart):
235
235
  raid_bdev = f"raid_jm_{snode.get_id()}"
236
236
  ret = rpc_client.bdev_raid_create(raid_bdev, jm_nvme_bdevs)
237
237
  if not ret:
@@ -265,6 +265,37 @@ def _create_jm_device_stack(rpc_client, jm_nvme_bdevs, snode, after_restart):
265
265
  })
266
266
 
267
267
 
268
+ def _create_jm_stack_on_device(rpc_client, nvme, snode, after_restart):
269
+
270
+ alceml_id = nvme.get_id()
271
+ alceml_name = device_controller.get_alceml_name(alceml_id)
272
+ logger.info(f"adding {alceml_name}")
273
+
274
+ pba_init_mode = 3
275
+ if after_restart:
276
+ pba_init_mode = 2
277
+ ret = rpc_client.bdev_alceml_create(alceml_name, nvme.nvme_bdev, alceml_id, pba_init_mode=pba_init_mode)
278
+ if not ret:
279
+ logger.error(f"Failed to create alceml bdev: {alceml_name}")
280
+ return False
281
+
282
+ jm_bdev = f"jm_{snode.get_id()}"
283
+ ret = rpc_client.bdev_jm_create(jm_bdev, alceml_name)
284
+ if not ret:
285
+ logger.error(f"Failed to create {jm_bdev}")
286
+ return False
287
+
288
+ return JMDevice({
289
+ 'uuid': str(uuid.uuid4()),
290
+ 'device_name': jm_bdev,
291
+ 'nvme_device': nvme,
292
+ 'size': nvme.size,
293
+ 'status': JMDevice.STATUS_ONLINE,
294
+ 'alceml_bdev': alceml_name,
295
+ 'jm_bdev': jm_bdev
296
+ })
297
+
298
+
268
299
  def _create_storage_device_stack(rpc_client, nvme, snode, after_restart):
269
300
  test_name = f"{nvme.nvme_bdev}_test"
270
301
  ret = rpc_client.bdev_passtest_create(test_name, nvme.nvme_bdev)
@@ -322,11 +353,8 @@ def _create_storage_device_stack(rpc_client, nvme, snode, after_restart):
322
353
  nvme.nvmf_ip = IP
323
354
  nvme.nvmf_port = 4420
324
355
  nvme.io_error = False
325
- # old_status = nvme.status
326
356
  nvme.status = NVMeDevice.STATUS_ONLINE
327
357
  return nvme
328
- # device_events.device_status_change(nvme, nvme.status, old_status)
329
- # snode.write_to_db(db_controller.kv_store)
330
358
 
331
359
 
332
360
  def _create_device_partitions(rpc_client, nvme, snode):
@@ -354,7 +382,7 @@ def _create_device_partitions(rpc_client, nvme, snode):
354
382
  return True
355
383
 
356
384
 
357
- def _prepare_cluster_devices_2(snode, devices, after_restart=False):
385
+ def _prepare_cluster_devices_partitions(snode, devices):
358
386
  db_controller = DBController()
359
387
  rpc_client = RPCClient(
360
388
  snode.mgmt_ip, snode.rpc_port,
@@ -374,9 +402,6 @@ def _prepare_cluster_devices_2(snode, devices, after_restart=False):
374
402
  logger.debug(partitioned_devices)
375
403
  if len(partitioned_devices) == (1 + snode.num_partitions_per_dev):
376
404
  logger.info("Partitioned devices found")
377
- elif after_restart:
378
- logger.error("Partitions count mismatch")
379
- return False
380
405
  else:
381
406
  logger.info(f"Creating partitions for {nvme.nvme_bdev}")
382
407
  _create_device_partitions(rpc_client, nvme, snode)
@@ -390,7 +415,7 @@ def _prepare_cluster_devices_2(snode, devices, after_restart=False):
390
415
  jm_devices.append(partitioned_devices.pop(0))
391
416
 
392
417
  for dev in partitioned_devices:
393
- new_device = _create_storage_device_stack(rpc_client, dev, snode, after_restart)
418
+ new_device = _create_storage_device_stack(rpc_client, dev, snode, after_restart=False)
394
419
  if not new_device:
395
420
  logger.error("failed to create dev stack")
396
421
  return False
@@ -403,7 +428,7 @@ def _prepare_cluster_devices_2(snode, devices, after_restart=False):
403
428
 
404
429
  if jm_devices:
405
430
  jm_nvme_bdevs = [dev.nvme_bdev for dev in jm_devices]
406
- jm_device = _create_jm_device_stack(rpc_client, jm_nvme_bdevs, snode, after_restart)
431
+ jm_device = _create_jm_stack_on_raid(rpc_client, jm_nvme_bdevs, snode, after_restart=False)
407
432
  if not jm_device:
408
433
  logger.error(f"Failed to create JM device")
409
434
  return False
@@ -412,6 +437,49 @@ def _prepare_cluster_devices_2(snode, devices, after_restart=False):
412
437
  return True
413
438
 
414
439
 
440
+ def _prepare_cluster_devices_jm_on_dev(snode, devices):
441
+ db_controller = DBController()
442
+
443
+ jm_device = devices[0]
444
+ # Set device cluster order
445
+ dev_order = get_next_cluster_device_order(db_controller, snode.cluster_id)
446
+ for index, nvme in enumerate(devices):
447
+ nvme.cluster_device_order = dev_order
448
+ dev_order += 1
449
+ if nvme.size < jm_device.size:
450
+ jm_device = nvme
451
+ device_events.device_create(nvme)
452
+ jm_device.status = NVMeDevice.STATUS_JM
453
+
454
+ rpc_client = RPCClient(snode.mgmt_ip, snode.rpc_port, snode.rpc_username, snode.rpc_password)
455
+
456
+ new_devices = []
457
+ for index, nvme in enumerate(devices):
458
+ if nvme.status not in [NVMeDevice.STATUS_ONLINE, NVMeDevice.STATUS_UNAVAILABLE,
459
+ NVMeDevice.STATUS_JM, NVMeDevice.STATUS_READONLY]:
460
+ logger.debug(f"Device is not online or unavailable: {nvme.get_id()}, status: {nvme.status}")
461
+ continue
462
+
463
+ if nvme.status == NVMeDevice.STATUS_JM:
464
+ jm_device = _create_jm_stack_on_device(rpc_client, nvme, snode, after_restart=False)
465
+ if not jm_device:
466
+ logger.error(f"Failed to create JM device")
467
+ return False
468
+ snode.jm_device = jm_device
469
+ else:
470
+ new_device = _create_storage_device_stack(rpc_client, nvme, snode, after_restart=False)
471
+ if not new_device:
472
+ logger.error("failed to create dev stack")
473
+ return False
474
+ new_device.cluster_device_order = dev_order
475
+ dev_order += 1
476
+ new_devices.append(new_device)
477
+ device_events.device_create(new_device)
478
+
479
+ snode.nvme_devices = new_devices
480
+ return True
481
+
482
+
415
483
  def _prepare_cluster_devices_on_restart(snode):
416
484
 
417
485
  rpc_client = RPCClient(
@@ -423,11 +491,6 @@ def _prepare_cluster_devices_on_restart(snode):
423
491
  logger.debug(f"Device is skipped: {nvme.get_id()}, status: {nvme.status}")
424
492
  continue
425
493
 
426
- ret = rpc_client.get_bdevs(nvme.nvme_bdev)
427
- if not ret:
428
- logger.error(f"Device partition not found {nvme.nvme_bdev}")
429
- nvme_dict = ret[0]
430
-
431
494
  dev = _create_storage_device_stack(rpc_client, nvme, snode, after_restart=True)
432
495
  if not dev:
433
496
  logger.error(f"Failed to create dev stack {nvme.get_id()}")
@@ -436,17 +499,12 @@ def _prepare_cluster_devices_on_restart(snode):
436
499
 
437
500
  # prepare JM device
438
501
  jm_device = snode.jm_device
439
- ret = rpc_client.bdev_raid_create(jm_device.raid_bdev, jm_device.jm_nvme_bdev_list)
440
- if not ret:
441
- logger.error(f"Failed to create raid_jm_{snode.get_id()}")
442
- return False
443
- ret = rpc_client.bdev_alceml_create(jm_device.alceml_bdev, jm_device.raid_bdev, str(uuid.uuid4()), pba_init_mode=2)
444
- if not ret:
445
- logger.error(f"Failed to create alceml bdev: {jm_device.alceml_bdev}")
446
- return False
447
- ret = rpc_client.bdev_jm_create(jm_device.jm_bdev, jm_device.alceml_bdev)
502
+ if jm_device.jm_nvme_bdev_list:
503
+ ret = _create_jm_stack_on_raid(rpc_client, jm_device.jm_nvme_bdev_list, snode, after_restart=False)
504
+ else:
505
+ ret = _create_jm_stack_on_device(rpc_client, jm_device.nvme_device, snode, after_restart=True)
448
506
  if not ret:
449
- logger.error(f"Failed to create {jm_device.jm_bdev}")
507
+ logger.error(f"Failed to create JM device")
450
508
  return False
451
509
 
452
510
  return True
@@ -732,7 +790,10 @@ def add_node(cluster_id, node_ip, iface_name, data_nics_list,
732
790
  return False
733
791
 
734
792
  # prepare devices
735
- ret = _prepare_cluster_devices_2(snode, nvme_devs, after_restart=False)
793
+ if snode.num_partitions_per_dev == 0 or snode.jm_percent == 0:
794
+ ret = _prepare_cluster_devices_jm_on_dev(snode, nvme_devs)
795
+ else:
796
+ ret = _prepare_cluster_devices_partitions(snode, nvme_devs)
736
797
  if not ret:
737
798
  logger.error("Failed to prepare cluster devices")
738
799
  return False
@@ -799,140 +860,6 @@ def add_node(cluster_id, node_ip, iface_name, data_nics_list,
799
860
  return "Success"
800
861
 
801
862
 
802
- # Deprecated
803
- def add_storage_node(cluster_id, iface_name, data_nics):
804
- db_controller = DBController()
805
- kv_store = db_controller.kv_store
806
-
807
- cluster = db_controller.get_cluster_by_id(cluster_id)
808
- if not cluster:
809
- logger.error("Cluster not found: %s", cluster_id)
810
- return False
811
-
812
- logger.info("Add Storage node")
813
-
814
- hostname = utils.get_hostname()
815
- snode = db_controller.get_storage_node_by_hostname(hostname)
816
- if snode:
817
- logger.error("Node already exists, try remove it first.")
818
- exit(1)
819
- else:
820
- snode = StorageNode()
821
- snode.uuid = str(uuid.uuid4())
822
-
823
- mgmt_ip = _get_if_ip_address(iface_name)
824
- system_id = utils.get_system_id()
825
-
826
- BASE_NQN = cluster.nqn.split(":")[0]
827
- subsystem_nqn = f"{BASE_NQN}:{hostname}"
828
-
829
- if data_nics:
830
- data_nics = _get_data_nics(data_nics)
831
- else:
832
- data_nics = _get_data_nics([iface_name])
833
-
834
- rpc_user, rpc_pass = utils.generate_rpc_user_and_pass()
835
-
836
- # creating storage node object
837
- snode.status = StorageNode.STATUS_IN_CREATION
838
- snode.baseboard_sn = utils.get_baseboard_sn()
839
- snode.system_uuid = system_id
840
- snode.hostname = hostname
841
- snode.host_nqn = subsystem_nqn
842
- snode.subsystem = subsystem_nqn
843
- snode.data_nics = data_nics
844
- snode.mgmt_ip = mgmt_ip
845
- snode.rpc_port = constants.RPC_HTTP_PROXY_PORT
846
- snode.rpc_username = rpc_user
847
- snode.rpc_password = rpc_pass
848
- snode.cluster_id = cluster_id
849
- snode.write_to_db(kv_store)
850
-
851
- # creating RPCClient instance
852
- rpc_client = RPCClient(
853
- snode.mgmt_ip,
854
- snode.rpc_port,
855
- snode.rpc_username,
856
- snode.rpc_password)
857
-
858
- logger.info("Getting nvme devices")
859
- devs = get_nvme_devices()
860
- logger.debug(devs)
861
- pcies = [d[0] for d in devs]
862
- nvme_devs = addNvmeDevices(cluster, rpc_client, pcies, snode)
863
- if not nvme_devs:
864
- logger.error("No NVMe devices was found!")
865
-
866
- logger.debug(nvme_devs)
867
- snode.nvme_devices = nvme_devs
868
-
869
- # Set device cluster order
870
- dev_order = get_next_cluster_device_order(db_controller, cluster_id)
871
- for index, nvme in enumerate(snode.nvme_devices):
872
- nvme.cluster_device_order = dev_order
873
- dev_order += 1
874
- snode.write_to_db(db_controller.kv_store)
875
-
876
- # prepare devices
877
- # _prepare_cluster_devices(snode)
878
-
879
- logger.info("Connecting to remote devices")
880
- remote_devices = _connect_to_remote_devs(snode)
881
- snode.remote_devices = remote_devices
882
-
883
- logger.info("Setting node status to Active")
884
- snode.status = StorageNode.STATUS_ONLINE
885
- snode.write_to_db(kv_store)
886
-
887
- # make other nodes connect to the new devices
888
- logger.info("Make other nodes connect to the new devices")
889
- snodes = db_controller.get_storage_nodes_by_cluster_id(cluster_id)
890
- for node_index, node in enumerate(snodes):
891
- if node.get_id() == snode.get_id():
892
- continue
893
- logger.info(f"Connecting to node: {node.get_id()}")
894
- rpc_client = RPCClient(node.mgmt_ip, node.rpc_port, node.rpc_username, node.rpc_password)
895
- count = 0
896
- for dev in snode.nvme_devices:
897
- name = f"remote_{dev.alceml_bdev}"
898
- ret = rpc_client.bdev_nvme_attach_controller_tcp(name, dev.nvmf_nqn, dev.nvmf_ip, dev.nvmf_port)
899
- if not ret:
900
- logger.error(f"Failed to connect to device: {name}")
901
- continue
902
-
903
- dev.remote_bdev = f"{name}n1"
904
- idx = -1
905
- for i, d in enumerate(node.remote_devices):
906
- if d.get_id() == dev.get_id():
907
- idx = i
908
- break
909
- if idx >= 0:
910
- node.remote_devices[idx] = dev
911
- else:
912
- node.remote_devices.append(dev)
913
- count += 1
914
- node.write_to_db(kv_store)
915
- logger.info(f"connected to devices count: {count}")
916
-
917
- logger.info("Sending cluster map")
918
- ret = distr_controller.send_cluster_map_to_node(snode)
919
- if not ret:
920
- return False, "Failed to send cluster map"
921
- ret = distr_controller.send_cluster_map_add_node(snode)
922
- if not ret:
923
- return False, "Failed to send cluster map add node"
924
- time.sleep(3)
925
-
926
- logger.info("Sending cluster event updates")
927
- distr_controller.send_node_status_event(snode, StorageNode.STATUS_ONLINE)
928
-
929
- for dev in snode.nvme_devices:
930
- distr_controller.send_dev_status_event(dev, NVMeDevice.STATUS_ONLINE)
931
-
932
- logger.info("Done")
933
- return "Success"
934
-
935
-
936
863
  def delete_storage_node(node_id):
937
864
  db_controller = DBController()
938
865
  snode = db_controller.get_storage_node_by_id(node_id)
@@ -1038,7 +965,6 @@ def remove_storage_node(node_id, force_remove=False, force_migrate=False):
1038
965
 
1039
966
  def restart_storage_node(
1040
967
  node_id,
1041
- spdk_cpu_mask=None,
1042
968
  spdk_mem=None,
1043
969
  spdk_image=None,
1044
970
  set_spdk_debug=None,
File without changes
File without changes
File without changes
File without changes