sbcli-pre 1.2.3__zip → 1.2.5__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 (141) hide show
  1. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/PKG-INFO +20 -5
  2. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/README.md +19 -4
  3. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/env_var +1 -1
  4. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/sbcli_pre.egg-info/PKG-INFO +20 -5
  5. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/sbcli_pre.egg-info/SOURCES.txt +5 -5
  6. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_cli/cli.py +115 -113
  7. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/cluster_ops.py +238 -141
  8. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/constants.py +7 -5
  9. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/controllers/caching_node_controller.py +6 -8
  10. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/controllers/cluster_events.py +0 -9
  11. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/controllers/device_controller.py +63 -56
  12. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/controllers/events_controller.py +3 -5
  13. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/controllers/health_controller.py +40 -30
  14. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/controllers/lvol_controller.py +36 -42
  15. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/controllers/pool_controller.py +4 -8
  16. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/controllers/snapshot_controller.py +3 -9
  17. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/distr_controller.py +9 -13
  18. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/kv_store.py +29 -47
  19. sbcli_pre-1.2.5/simplyblock_core/mgmt_node_ops.py +80 -0
  20. sbcli_pre-1.2.5/simplyblock_core/models/deployer.py +62 -0
  21. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/models/events.py +1 -9
  22. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/models/job_schedule.py +0 -6
  23. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/models/nvme_device.py +4 -42
  24. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/models/storage_node.py +1 -9
  25. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/rpc_client.py +10 -55
  26. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/scripts/__init__.py +4 -0
  27. sbcli_pre-1.2.3/simplyblock_core/scripts/alerting/alert_resources.yaml.j2 → sbcli_pre-1.2.5/simplyblock_core/scripts/alerting/alert_resources.yaml +5 -54
  28. sbcli_pre-1.2.5/simplyblock_core/scripts/apply_dashboard.sh +22 -0
  29. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/scripts/dashboards/cluster.json +1 -1
  30. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/scripts/deploy_stack.sh +0 -2
  31. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/scripts/docker-compose-swarm-monitoring.yml +13 -22
  32. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/scripts/docker-compose-swarm.yml +2 -17
  33. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/scripts/haproxy.cfg +0 -15
  34. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/scripts/install_deps.sh +0 -1
  35. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/services/capacity_and_stats_collector.py +1 -1
  36. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/services/device_monitor.py +44 -3
  37. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/services/distr_event_collector.py +11 -10
  38. sbcli_pre-1.2.5/simplyblock_core/services/health_check_service.py +136 -0
  39. sbcli_pre-1.2.3/simplyblock_core/services/tasks_runner_restart.py → sbcli_pre-1.2.5/simplyblock_core/services/job_tasks.py +46 -93
  40. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/services/lvol_monitor.py +1 -1
  41. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/services/lvol_stat_collector.py +1 -1
  42. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/services/port_stat_collector.py +1 -0
  43. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/services/storage_node_monitor.py +44 -49
  44. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/snode_client.py +0 -12
  45. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/storage_node_ops.py +336 -525
  46. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/utils.py +1 -46
  47. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/app.py +2 -1
  48. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/blueprints/snode_ops.py +25 -103
  49. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/blueprints/web_api_cluster.py +43 -20
  50. sbcli_pre-1.2.5/simplyblock_web/blueprints/web_api_deployer.py +394 -0
  51. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/blueprints/web_api_device.py +7 -10
  52. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/blueprints/web_api_lvol.py +5 -9
  53. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/blueprints/web_api_pool.py +5 -14
  54. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/blueprints/web_api_storage_node.py +10 -3
  55. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/node_utils.py +2 -0
  56. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/utils.py +0 -8
  57. sbcli_pre-1.2.3/simplyblock_core/controllers/tasks_controller.py +0 -103
  58. sbcli_pre-1.2.3/simplyblock_core/controllers/tasks_events.py +0 -37
  59. sbcli_pre-1.2.3/simplyblock_core/mgmt_node_ops.py +0 -205
  60. sbcli_pre-1.2.3/simplyblock_core/services/health_check_service.py +0 -134
  61. sbcli_pre-1.2.3/simplyblock_core/services/tasks_runner_migration.py +0 -61
  62. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/pyproject.toml +0 -0
  63. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/sbcli_pre.egg-info/dependency_links.txt +0 -0
  64. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/sbcli_pre.egg-info/entry_points.txt +0 -0
  65. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/sbcli_pre.egg-info/requires.txt +0 -0
  66. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/sbcli_pre.egg-info/top_level.txt +0 -0
  67. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/setup.cfg +0 -0
  68. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/setup.py +0 -0
  69. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_cli/main.py +0 -0
  70. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/__init__.py +0 -0
  71. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/cnode_client.py +0 -0
  72. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/compute_node_ops.py +0 -0
  73. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/controllers/__init__.py +0 -0
  74. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/controllers/device_events.py +0 -0
  75. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/controllers/lvol_events.py +0 -0
  76. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/controllers/mgmt_events.py +0 -0
  77. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/controllers/pool_events.py +0 -0
  78. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/controllers/snapshot_events.py +0 -0
  79. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/controllers/storage_events.py +0 -0
  80. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/models/__init__.py +0 -0
  81. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/models/base_model.py +0 -0
  82. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/models/caching_node.py +0 -0
  83. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/models/cluster.py +0 -0
  84. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/models/compute_node.py +0 -0
  85. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/models/global_settings.py +0 -0
  86. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/models/iface.py +0 -0
  87. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/models/lvol_model.py +0 -0
  88. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/models/mgmt_node.py +0 -0
  89. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/models/pool.py +0 -0
  90. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/models/port_stat.py +0 -0
  91. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/models/snapshot.py +0 -0
  92. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/models/stats.py +0 -0
  93. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/pci_utils.py +0 -0
  94. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/scripts/alerting/alert_rules.yaml +0 -0
  95. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/scripts/clean_local_storage_deploy.sh +0 -0
  96. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/scripts/config_docker.sh +0 -0
  97. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/scripts/dashboards/devices.json +0 -0
  98. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/scripts/dashboards/lvols.json +0 -0
  99. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/scripts/dashboards/node-exporter.json +0 -0
  100. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/scripts/dashboards/nodes.json +0 -0
  101. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/scripts/dashboards/pools.json +0 -0
  102. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/scripts/datasource.yml +0 -0
  103. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/scripts/db_config_double.sh +0 -0
  104. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/scripts/db_config_single.sh +0 -0
  105. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/scripts/prometheus.yml +0 -0
  106. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/scripts/run_ssh.sh +0 -0
  107. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/scripts/set_db_config.sh +0 -0
  108. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/scripts/stack_deploy_wait.sh +0 -0
  109. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/services/__init__.py +0 -0
  110. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/services/caching_node_monitor.py +0 -0
  111. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/services/cap_monitor.py +0 -0
  112. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/services/install_service.sh +0 -0
  113. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/services/log_agg_service.py +0 -0
  114. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/services/mgmt_node_monitor.py +0 -0
  115. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/services/remove_service.sh +0 -0
  116. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/services/service_template.service +0 -0
  117. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/shell_utils.py +0 -0
  118. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/__init__.py +0 -0
  119. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/auth_middleware.py +0 -0
  120. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/blueprints/__init__.py +0 -0
  121. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/blueprints/caching_node_ops.py +0 -0
  122. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/blueprints/caching_node_ops_k8s.py +0 -0
  123. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/blueprints/node_api_basic.py +0 -0
  124. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/blueprints/node_api_caching_docker.py +0 -0
  125. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/blueprints/node_api_caching_ks.py +0 -0
  126. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/blueprints/web_api_caching_node.py +0 -0
  127. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/blueprints/web_api_mgmt_node.py +0 -0
  128. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/blueprints/web_api_snapshot.py +0 -0
  129. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/caching_node_app.py +0 -0
  130. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/caching_node_app_k8s.py +0 -0
  131. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/node_webapp.py +0 -0
  132. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/snode_app.py +0 -0
  133. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/static/delete.py +0 -0
  134. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/static/deploy.py +0 -0
  135. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/static/deploy_cnode.yaml +0 -0
  136. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/static/deploy_spdk.yaml +0 -0
  137. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/static/is_up.py +0 -0
  138. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/static/list_deps.py +0 -0
  139. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/static/rpac.yaml +0 -0
  140. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/static/tst.py +0 -0
  141. {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/templates/deploy_spdk.yaml.j2 +0 -0
@@ -49,7 +49,7 @@ def add(lvol_id, snapshot_name):
49
49
  ret = rpc_client.bdev_distrib_create(
50
50
  base_name, new_vuid, lvol.ndcs, lvol.npcs, num_blocks,
51
51
  lvol.distr_bs, lvol_controller.get_jm_names(snode), lvol.distr_chunk_bs,
52
- None, None, lvol.distr_page_size, dev_cpu_mask=snode.dev_cpu_mask)
52
+ None, None, lvol.distr_page_size)
53
53
  if not ret:
54
54
  logger.error("Failed to create Distr bdev")
55
55
  return False, "Failed to create Distr bdev"
@@ -119,12 +119,7 @@ def delete(snapshot_uuid):
119
119
  logger.error(f"Snapshot not found {snapshot_uuid}")
120
120
  return False
121
121
 
122
- snode = db_controller.get_storage_node_by_id(snap.lvol.node_id)
123
- if not snode:
124
- logger.error(f"Storage node not found {snap.lvol.node_id}")
125
- return False
126
-
127
- for lvol in db_controller.get_lvols(snode.cluster_id):
122
+ for lvol in db_controller.get_lvols():
128
123
  if lvol.cloned_from_snap and lvol.cloned_from_snap == snapshot_uuid:
129
124
  logger.warning(f"Soft delete snapshot with clones, lvol ID: {lvol.get_id()}")
130
125
  snap.deleted = True
@@ -232,8 +227,7 @@ def clone(snapshot_id, clone_name, new_size=0):
232
227
  name = f"distr_{new_vuid}_1"
233
228
  ret = rpc_client.bdev_distrib_create(
234
229
  name, new_vuid, lvol.ndcs, lvol.npcs, num_blocks,
235
- lvol.distr_bs, jm_names, lvol.distr_chunk_bs, None, None, lvol.distr_page_size,
236
- dev_cpu_mask=snode.dev_cpu_mask)
230
+ lvol.distr_bs, jm_names, lvol.distr_chunk_bs, None, None, lvol.distr_page_size)
237
231
  if not ret:
238
232
  msg="Failed to create Distr bdev"
239
233
  logger.error(msg)
@@ -10,9 +10,8 @@ from simplyblock_core.kv_store import DBController
10
10
  logger = logging.getLogger()
11
11
 
12
12
 
13
- def send_node_status_event(node, node_status):
13
+ def send_node_status_event(node_id, node_status):
14
14
  db_controller = DBController()
15
- node_id = node.get_id()
16
15
  logging.info(f"Sending event updates, node: {node_id}, status: {node_status}")
17
16
  node_status_event = {
18
17
  "timestamp": datetime.datetime.now().isoformat("T", "seconds") + 'Z',
@@ -21,7 +20,7 @@ def send_node_status_event(node, node_status):
21
20
  "status": node_status}
22
21
  events = {"events": [node_status_event]}
23
22
  logger.debug(node_status_event)
24
- snodes = db_controller.get_storage_nodes_by_cluster_id(node.cluster_id)
23
+ snodes = db_controller.get_storage_nodes()
25
24
  for node in snodes:
26
25
  if node.status != node.STATUS_ONLINE:
27
26
  continue
@@ -30,9 +29,8 @@ def send_node_status_event(node, node_status):
30
29
  ret = rpc_client.distr_status_events_update(events)
31
30
 
32
31
 
33
- def send_dev_status_event(device, dev_status):
32
+ def send_dev_status_event(storage_ID, dev_status):
34
33
  db_controller = DBController()
35
- storage_ID = device.cluster_device_order
36
34
  logging.info(f"Sending event updates, device: {storage_ID}, status: {dev_status}")
37
35
  node_status_event = {
38
36
  "timestamp": datetime.datetime.now().isoformat("T", "seconds") + 'Z',
@@ -41,7 +39,7 @@ def send_dev_status_event(device, dev_status):
41
39
  "status": dev_status}
42
40
  events = {"events": [node_status_event]}
43
41
  logger.debug(node_status_event)
44
- snodes = db_controller.get_storage_nodes_by_cluster_id(device.cluster_id)
42
+ snodes = db_controller.get_storage_nodes()
45
43
  for node in snodes:
46
44
  if node.status != node.STATUS_ONLINE:
47
45
  continue
@@ -54,7 +52,7 @@ def send_dev_status_event(device, dev_status):
54
52
 
55
53
  def disconnect_device(device):
56
54
  db_controller = DBController()
57
- snodes = db_controller.get_storage_nodes_by_cluster_id(device.cluster_id)
55
+ snodes = db_controller.get_storage_nodes()
58
56
  for node in snodes:
59
57
  if node.status != node.STATUS_ONLINE:
60
58
  continue
@@ -97,9 +95,7 @@ def get_distr_cluster_map(snodes, target_node):
97
95
  dev_map[dev.cluster_device_order] = {
98
96
  "UUID": dev.get_id(),
99
97
  "bdev_name": name,
100
- "status": dev.status,
101
- "physical_label": dev.physical_label
102
- }
98
+ "status": dev.status}
103
99
  dev_w_map.append({
104
100
  "weight": dev_w,
105
101
  "id": dev.cluster_device_order})
@@ -162,7 +158,7 @@ def parse_distr_cluster_map(map_string):
162
158
  "Actual Status": "",
163
159
  "Results": "",
164
160
  }
165
- sd = db_controller.get_storage_device_by_id(device_id)
161
+ sd = db_controller.get_storage_devices(device_id)
166
162
  if sd:
167
163
  data["Actual Status"] = sd.status
168
164
  if sd.status == status:
@@ -179,7 +175,7 @@ def parse_distr_cluster_map(map_string):
179
175
 
180
176
  def send_cluster_map_to_node(node):
181
177
  db_controller = DBController()
182
- snodes = db_controller.get_storage_nodes_by_cluster_id(node.cluster_id)
178
+ snodes = db_controller.get_storage_nodes()
183
179
  rpc_client = RPCClient(node.mgmt_ip, node.rpc_port, node.rpc_username, node.rpc_password)
184
180
  cluster_map_data = get_distr_cluster_map(snodes, node)
185
181
  cluster_map_data['UUID_node_target'] = node.get_id()
@@ -193,7 +189,7 @@ def send_cluster_map_to_node(node):
193
189
 
194
190
  def send_cluster_map_add_node(snode):
195
191
  db_controller = DBController()
196
- snodes = db_controller.get_storage_nodes_by_cluster_id(snode.cluster_id)
192
+ snodes = db_controller.get_storage_nodes()
197
193
  for node in snodes:
198
194
  if node.status != node.STATUS_ONLINE:
199
195
  continue
@@ -9,6 +9,7 @@ from simplyblock_core.models.caching_node import CachingNode
9
9
  from simplyblock_core.models.cluster import ClusterMap
10
10
 
11
11
  from simplyblock_core.models.cluster import Cluster
12
+ from simplyblock_core.models.deployer import Deployer
12
13
  from simplyblock_core.models.compute_node import ComputeNode
13
14
  from simplyblock_core.models.job_schedule import JobSchedule
14
15
  from simplyblock_core.models.port_stat import PortStat
@@ -97,19 +98,11 @@ class DBController:
97
98
  nodes.append(n)
98
99
  return sorted(nodes, key=lambda x: x.create_dt)
99
100
 
100
- def get_storage_node_by_system_id(self, system_id):
101
- nodes = StorageNode().read_from_db(self.kv_store)
102
- for node in nodes:
103
- if node.system_uuid == system_id:
104
- return node
105
- return None
106
-
107
101
  def get_storage_node_by_id(self, id):
108
102
  ret = StorageNode().read_from_db(self.kv_store, id)
109
103
  if ret:
110
104
  return ret[0]
111
105
 
112
- # todo: change this function for multi cluster
113
106
  def get_caching_nodes(self):
114
107
  ret = CachingNode().read_from_db(self.kv_store)
115
108
  ret = sorted(ret, key=lambda x: x.create_dt)
@@ -120,12 +113,6 @@ class DBController:
120
113
  if ret:
121
114
  return ret[0]
122
115
 
123
- def get_caching_node_by_system_id(self, system_id):
124
- nodes = CachingNode().read_from_db(self.kv_store)
125
- for node in nodes:
126
- if node.system_uuid == system_id:
127
- return node
128
-
129
116
  def get_caching_node_by_hostname(self, hostname):
130
117
  nodes = self.get_caching_nodes()
131
118
  for node in nodes:
@@ -138,15 +125,20 @@ class DBController:
138
125
  if node.hostname == hostname:
139
126
  return node
140
127
 
141
- def get_storage_device_by_id(self, id):
128
+ def get_storage_devices(self, id=""):
129
+ # workaround because nvme devices are stored inside the node object itself.
142
130
  nodes = self.get_storage_nodes()
131
+ devices = []
132
+ device = None
143
133
  for node in nodes:
144
- for dev in node.nvme_devices:
145
- if dev.get_id() == id:
146
- return dev
147
-
148
- def get_storage_devices(self, id):
149
- return self.get_storage_device_by_id(id)
134
+ if node.nvme_devices:
135
+ devices.extend(node.nvme_devices)
136
+ for dev in node.nvme_devices:
137
+ if dev.get_id() == id:
138
+ device = dev
139
+ if id:
140
+ return device
141
+ return devices
150
142
 
151
143
  # Compute node functions
152
144
  def get_compute_node_by_id(self, id):
@@ -158,15 +150,9 @@ class DBController:
158
150
  ret = ComputeNode().read_from_db(self.kv_store)
159
151
  return ret
160
152
 
161
- def get_pools(self, cluster_id=None):
162
- pools = []
163
- if cluster_id:
164
- for pool in Pool().read_from_db(self.kv_store):
165
- if pool.cluster_id == cluster_id:
166
- pools.append(pool)
167
- else:
168
- pools = Pool().read_from_db(self.kv_store)
169
- return pools
153
+ def get_pools(self):
154
+ ret = Pool().read_from_db(self.kv_store)
155
+ return ret
170
156
 
171
157
  def get_pool_by_id(self, id):
172
158
  ret = Pool().read_from_db(self.kv_store, id)
@@ -179,16 +165,9 @@ class DBController:
179
165
  if pool.pool_name == name:
180
166
  return pool
181
167
 
182
- def get_lvols(self, cluster_id=None):
183
- lvols = []
184
- if cluster_id:
185
- for pool in self.get_pools(cluster_id):
186
- if pool.cluster_id == cluster_id:
187
- for lv_id in pool.lvols:
188
- lvols.append(self.get_lvol_by_id(lv_id))
189
- else:
190
- lvols = LVol().read_from_db(self.kv_store)
191
- return lvols
168
+ def get_lvols(self):
169
+ ret = LVol().read_from_db(self.kv_store)
170
+ return ret
192
171
 
193
172
  def get_snapshots(self):
194
173
  ret = SnapShot().read_from_db(self.kv_store)
@@ -265,6 +244,14 @@ class DBController:
265
244
  if ret:
266
245
  return ret[0]
267
246
 
247
+ def get_deployers(self):
248
+ return Deployer().read_from_db(self.kv_store)
249
+
250
+ def get_deployer_by_id(self, deployer_id):
251
+ ret = Deployer().read_from_db(self.kv_store, id=deployer_id)
252
+ if ret:
253
+ return ret[0]
254
+
268
255
  def get_port_stats(self, node_id, port_id, limit=20):
269
256
  stats = PortStat().read_from_db(self.kv_store, id="%s/%s" % (node_id, port_id), limit=limit, reverse=True)
270
257
  return stats
@@ -272,10 +259,5 @@ class DBController:
272
259
  def get_events(self, event_id=""):
273
260
  return EventObj().read_from_db(self.kv_store, id=event_id)
274
261
 
275
- def get_job_tasks(self, cluster_id, reverse=True):
276
- return JobSchedule().read_from_db(self.kv_store, id=cluster_id, reverse=reverse)
277
-
278
- def get_task_by_id(self, task_id):
279
- for task in self.get_job_tasks(""):
280
- if task.uuid == task_id:
281
- return task
262
+ def get_job_tasks(self, cluster_id):
263
+ return JobSchedule().read_from_db(self.kv_store, id=cluster_id, reverse=True)
@@ -0,0 +1,80 @@
1
+ # coding=utf-8
2
+ import json
3
+ import logging
4
+ import uuid
5
+
6
+ import docker
7
+
8
+ from simplyblock_core import utils
9
+ from simplyblock_core.controllers import mgmt_events
10
+ from simplyblock_core.kv_store import DBController
11
+ from simplyblock_core.models.mgmt_node import MgmtNode
12
+
13
+ logger = logging.getLogger()
14
+
15
+
16
+ def add_mgmt_node(mgmt_ip, cluster_id=None):
17
+ db_controller = DBController()
18
+ hostname = utils.get_hostname()
19
+ node = db_controller.get_mgmt_node_by_hostname(hostname)
20
+ if node:
21
+ logger.error("Node already exists in the cluster")
22
+ return False
23
+
24
+ node = MgmtNode()
25
+ node.uuid = str(uuid.uuid4())
26
+ node.hostname = hostname
27
+ node.docker_ip_port = f"{mgmt_ip}:2375"
28
+ node.cluster_id = cluster_id
29
+ node.mgmt_ip = mgmt_ip
30
+ node.status = MgmtNode.STATUS_ONLINE
31
+ node.write_to_db(db_controller.kv_store)
32
+
33
+ mgmt_events.mgmt_add(node)
34
+ logger.info("Done")
35
+ return True
36
+
37
+
38
+ def list_mgmt_nodes(is_json):
39
+ db_controller = DBController()
40
+ nodes = db_controller.get_mgmt_nodes()
41
+ data = []
42
+ output = ""
43
+
44
+ for node in nodes:
45
+ logging.debug(node)
46
+ logging.debug("*" * 20)
47
+ data.append({
48
+ "UUID": node.get_id(),
49
+ "Hostname": node.hostname,
50
+ "IP": node.mgmt_ip,
51
+ "Status": node.status,
52
+ })
53
+
54
+ if not data:
55
+ return output
56
+
57
+ if is_json:
58
+ output = json.dumps(data, indent=2)
59
+ else:
60
+ output = utils.print_table(data)
61
+ return output
62
+
63
+
64
+ def remove_mgmt_node(uuid):
65
+ db_controller = DBController()
66
+ snode = db_controller.get_mgmt_node_by_id(uuid)
67
+ if not snode:
68
+ logger.error("can not find node")
69
+ return False
70
+
71
+ logging.info("Removing mgmt node")
72
+ snode.remove(db_controller.kv_store)
73
+
74
+ logger.info("Leaving swarm...")
75
+ node_docker = docker.DockerClient(base_url=f"tcp://{snode.docker_ip_port}", version="auto")
76
+ node_docker.swarm.leave()
77
+
78
+ mgmt_events.mgmt_remove(snode)
79
+ logging.info("done")
80
+
@@ -0,0 +1,62 @@
1
+ # coding=utf-8
2
+ from simplyblock_core.models.base_model import BaseModel
3
+
4
+ class Deployer(BaseModel):
5
+
6
+ STATUS_ACTIVE = "active"
7
+ STATUS_READONLY = 'read_only'
8
+ STATUS_INACTIVE = "inactive"
9
+ STATUS_SUSPENDED = "suspended"
10
+ STATUS_DEGRADED = "degraded"
11
+
12
+ DOCKER_PULL = "dockerpull"
13
+ TF_STATE_INIT = "tfstate_init"
14
+ TF_PLAN = "tfplan"
15
+ TF_APPLY = "tfapply"
16
+
17
+ STATUS_CODE_MAP = {
18
+ DOCKER_PULL: 0,
19
+ TF_STATE_INIT: 1,
20
+ TF_PLAN: 2,
21
+ TF_APPLY: 3,
22
+ }
23
+
24
+ attributes = {
25
+ "uuid": {"type": str, 'default': ""},
26
+ "region": {"type": str, 'default': ""},
27
+ "availability_zone": {"type": str, 'default': ""},
28
+ "sbcli_cmd": {"type": str, 'default': ""},
29
+ "sbcli_pkg_version": {"type": str, 'default': ""},
30
+ "whitelist_ips": {"type": str, 'default': ""}, # todo: make this a list
31
+ "mgmt_nodes": {"type": int, 'default': 0},
32
+ "storage_nodes": {"type": int, 'default': 0},
33
+ "extra_nodes": {"type": int, 'default': 0},
34
+ "mgmt_nodes_instance_type": {"type": str, 'default': ""},
35
+ "storage_nodes_instance_type": {"type": str, 'default': ""},
36
+ "extra_nodes_instance_type": {"type": str, 'default': ""},
37
+ "storage_nodes_ebs_size1": {"type": int, 'default': 0}, # size in GB
38
+ "storage_nodes_ebs_size2": {"type": int, 'default': 0}, # size in GB
39
+ "volumes_per_storage_nodes": {"type": int, 'default': 0},
40
+ "nr_hugepages": {"type": int, 'default': 0},
41
+ "tf_state_bucket_name": {"type": str, 'default': ""},
42
+ "tf_state_bucket_region": {"type": str, 'default': ""},
43
+ "tf_workspace": {"type": str, 'default': ""},
44
+ "status": {"type": str, 'default': ""},
45
+ "tf_logs_bucket_name": {"type": str, 'default': ""},
46
+ "ecr_account_id": {"type": str, 'default': ""},
47
+ "ecr_region": {"type": str, 'default': ""},
48
+ "ecr_repository_name": {"type": str, 'default': ""},
49
+ "ecr_image_tag": {"type": str, 'default': ""},
50
+ "tf_output": {"type": str, 'default': ""},
51
+ }
52
+
53
+ def __init__(self, data=None):
54
+ super(Deployer, self).__init__()
55
+ self.set_attrs(self.attributes, data)
56
+ self.object_type = "object"
57
+
58
+ def get_id(self):
59
+ return self.uuid
60
+
61
+ def get_status_code(self):
62
+ return self.status
@@ -1,6 +1,4 @@
1
1
  # coding=utf-8
2
- from datetime import datetime
3
-
4
2
  from simplyblock_core.models.base_model import BaseModel
5
3
 
6
4
 
@@ -27,7 +25,7 @@ class EventObj(BaseModel):
27
25
  "uuid": {"type": str, 'default': ""},
28
26
  "cluster_uuid": {"type": str, 'default': ""},
29
27
  "node_id": {"type": str, 'default': ""},
30
- "date": {"type": int, 'default': 0}, # in milliseconds
28
+ "date": {"type": int, 'default': 0},
31
29
 
32
30
  "event_level": {"type": str, 'default': LEVEL_INFO},
33
31
 
@@ -51,9 +49,3 @@ class EventObj(BaseModel):
51
49
 
52
50
  def get_id(self):
53
51
  return "%s/%s/%s" % (self.cluster_uuid, self.date, self.uuid)
54
-
55
- def get_date_string(self):
56
- if self.date > 1e10:
57
- return str(datetime.fromtimestamp(self.date/1000))
58
- else:
59
- return str(datetime.fromtimestamp(self.date))
@@ -8,10 +8,6 @@ class JobSchedule(BaseModel):
8
8
  STATUS_RUNNING = 'running'
9
9
  STATUS_DONE = 'done'
10
10
 
11
- FN_DEV_RESTART = "device_restart"
12
- FN_NODE_RESTART = "node_restart"
13
- FN_DEV_MIG = "device_migration"
14
-
15
11
  attributes = {
16
12
  "uuid": {"type": str, 'default': ""},
17
13
  "cluster_id": {"type": str, 'default': ""},
@@ -19,8 +15,6 @@ class JobSchedule(BaseModel):
19
15
  "device_id": {"type": str, 'default': ""},
20
16
  "date": {"type": int, 'default': 0},
21
17
 
22
- "canceled": {"type": bool, 'default': False},
23
-
24
18
  "function_name": {"type": str, 'default': ""},
25
19
  "function_params": {"type": dict, 'default': {}},
26
20
  "function_result": {"type": str, 'default': ""},
@@ -28,7 +28,7 @@ class NVMeDevice(BaseModel):
28
28
  "serial_number": {"type": str, 'default': ""},
29
29
  "overload_percentage": {"type": int, 'default': 0},
30
30
  "nvme_bdev": {"type": str, 'default': ""},
31
- "nvme_controller": {"type": str, 'default': ""},
31
+ "alloc_bdev": {"type": str, 'default': ""},
32
32
  "alceml_bdev": {"type": str, 'default': ""},
33
33
  "node_id": {"type": str, 'default': ""},
34
34
  "pt_bdev": {"type": str, 'default': ""},
@@ -37,6 +37,7 @@ class NVMeDevice(BaseModel):
37
37
  "nvmf_port": {"type": int, 'default': 0},
38
38
  "remote_bdev": {"type": str, 'default': ""},
39
39
  "testing_bdev": {"type": str, 'default': ""},
40
+ "jm_bdev": {"type": str, 'default': ""},
40
41
  "cluster_device_order": {"type": int, 'default': 0},
41
42
  "health_check": {"type": bool, "default": True},
42
43
  "cluster_id": {"type": str, 'default': ""},
@@ -46,13 +47,6 @@ class NVMeDevice(BaseModel):
46
47
  "io_error": {"type": bool, 'default': False},
47
48
  "retries_exhausted": {"type": bool, 'default': False},
48
49
 
49
- "partition_main_bdev": {"type": str, 'default': ""},
50
- "partition_main_size": {"type": int, 'default': 0},
51
- "partition_jm_bdev": {"type": str, 'default': ""},
52
- "partition_jm_size": {"type": int, 'default': 0},
53
-
54
- "physical_label": {"type": int, 'default': 0},
55
-
56
50
  }
57
51
 
58
52
  def __init__(self, data=None):
@@ -63,37 +57,5 @@ class NVMeDevice(BaseModel):
63
57
  def get_id(self):
64
58
  return self.uuid
65
59
 
66
-
67
- class JMDevice(BaseModel):
68
-
69
- STATUS_ONLINE = 'online'
70
- STATUS_UNAVAILABLE = 'unavailable'
71
- STATUS_REMOVED = 'removed'
72
- STATUS_FAILED = 'failed'
73
- STATUS_READONLY = 'read_only'
74
-
75
- attributes = {
76
- "uuid": {"type": str, 'default': ""},
77
- "device_name": {"type": str, 'default': ""},
78
- "status": {"type": str, 'default': ""},
79
- "size": {"type": int, 'default': -1},
80
-
81
- "jm_nvme_bdev_list": {"type": List[str], 'default': []},
82
- "raid_bdev": {"type": str, 'default': ""},
83
- "nvme_bdev": {"type": str, 'default': ""},
84
- "alceml_bdev": {"type": str, 'default': ""},
85
- "jm_bdev": {"type": str, 'default': ""},
86
-
87
-
88
- "health_check": {"type": bool, "default": True},
89
- "io_error": {"type": bool, 'default': False},
90
- }
91
-
92
- def __init__(self, data=None):
93
- super(JMDevice, self).__init__()
94
- self.set_attrs(self.attributes, data)
95
- self.object_type = "object"
96
-
97
- def get_id(self):
98
- return self.uuid
99
-
60
+ def get_capacity_percentage(self):
61
+ return ((self.size - self.capacity) / self.size) * 100
@@ -5,7 +5,7 @@ from typing import List
5
5
 
6
6
  from simplyblock_core.models.base_model import BaseModel
7
7
  from simplyblock_core.models.iface import IFace
8
- from simplyblock_core.models.nvme_device import NVMeDevice, JMDevice
8
+ from simplyblock_core.models.nvme_device import NVMeDevice
9
9
 
10
10
 
11
11
  class StorageNode(BaseModel):
@@ -70,10 +70,6 @@ class StorageNode(BaseModel):
70
70
 
71
71
  # spdk params
72
72
  "spdk_cpu_mask": {"type": str, "default": ""},
73
- "app_thread_mask": {"type": str, "default": ""},
74
- "pollers_mask": {"type": str, "default": ""},
75
- "os_cores": {"type": str, "default": []},
76
- "dev_cpu_mask": {"type": str, "default": ""},
77
73
  "spdk_mem": {"type": int, "default": 0},
78
74
  "spdk_image": {"type": str, "default": ""},
79
75
  "spdk_debug": {"type": bool, "default": False},
@@ -88,10 +84,6 @@ class StorageNode(BaseModel):
88
84
  "iobuf_small_bufsize": {"type": int, "default": 0},
89
85
  "iobuf_large_bufsize": {"type": int, "default": 0},
90
86
 
91
- "num_partitions_per_dev": {"type": int, "default": 1},
92
- "jm_percent": {"type": int, "default": 3},
93
- "jm_device": {"type": JMDevice, "default": None},
94
-
95
87
  }
96
88
 
97
89
  def __init__(self, data=None):
@@ -306,9 +306,9 @@ class RPCClient:
306
306
  params = {"name": name}
307
307
  return self._request("bdev_compress_delete", params)
308
308
 
309
- def ultra21_bdev_pass_create(self, base_bdev, vuid, pt_name):
309
+ def ultra21_bdev_pass_create(self, alloc_bdev, vuid, pt_name):
310
310
  params = {
311
- "base_bdev": base_bdev,
311
+ "base_bdev": alloc_bdev,
312
312
  "vuid": vuid,
313
313
  "pt_bdev": pt_name
314
314
  }
@@ -318,8 +318,7 @@ class RPCClient:
318
318
  params = {"name": name}
319
319
  return self._request2("ultra21_bdev_pass_delete", params)
320
320
 
321
- def bdev_alceml_create(self, alceml_name, nvme_name, uuid, pba_init_mode=3,
322
- dev_cpu_mask=""):
321
+ def bdev_alceml_create(self, alceml_name, nvme_name, uuid, pba_init_mode=3):
323
322
  params = {
324
323
  "name": alceml_name,
325
324
  "cntr_path": nvme_name,
@@ -335,13 +334,10 @@ class RPCClient:
335
334
  "use_optimized": True,
336
335
  "pba_nbalign": 4096
337
336
  }
338
- if dev_cpu_mask:
339
- params["bdb_lcpu_mask"] = int(dev_cpu_mask,16)
340
337
  return self._request("bdev_alceml_create", params)
341
338
 
342
339
  def bdev_distrib_create(self, name, vuid, ndcs, npcs, num_blocks, block_size, jm_names,
343
- chunk_size, ha_comm_addrs=None, ha_inode_self=None, pba_page_size=2097152,
344
- dev_cpu_mask=""):
340
+ chunk_size, ha_comm_addrs=None, ha_inode_self=None, pba_page_size=2097152):
345
341
  """"
346
342
  // Optional (not specified = no HA)
347
343
  // Comma-separated communication addresses, for each node, e.g. "192.168.10.1:45001,192.168.10.1:32768".
@@ -367,8 +363,6 @@ class RPCClient:
367
363
  if ha_comm_addrs:
368
364
  params['ha_comm_addrs'] = ha_comm_addrs
369
365
  params['ha_inode_self'] = ha_inode_self
370
- if dev_cpu_mask:
371
- params["bdb_lcpu_mask"] = int(dev_cpu_mask, 16)
372
366
 
373
367
  return self._request("bdev_distrib_create", params)
374
368
 
@@ -392,7 +386,7 @@ class RPCClient:
392
386
  params = {
393
387
  "name": name,
394
388
  "raid_level": "0",
395
- "strip_size_kb": 4,
389
+ "strip_size_kb": 4 * len(bdevs_list),
396
390
  "base_bdevs": bdevs_list
397
391
  }
398
392
  return self._request("bdev_raid_create", params)
@@ -434,9 +428,8 @@ class RPCClient:
434
428
  "trsvcid": str(port),
435
429
  "subnqn": nqn,
436
430
  "fabrics_connect_timeout_us": 100000,
437
- "fast_io_fail_timeout_sec": 1,
431
+ "fast_io_fail_timeout_sec": 0,
438
432
  "num_io_queues": 16384,
439
- "ctrlr_loss_timeout_sec": 2,
440
433
  }
441
434
  return self._request("bdev_nvme_attach_controller", params)
442
435
 
@@ -484,9 +477,9 @@ class RPCClient:
484
477
  params = {
485
478
  "bdev_retry_count": 0,
486
479
  "transport_retry_count": 0,
487
- "ctrlr_loss_timeout_sec": 2,
488
- "fast_io_fail_timeout_sec": 1,
489
- "reconnect_delay_sec": 1,
480
+ "ctrlr_loss_timeout_sec": -1,
481
+ "fast_io_fail_timeout_sec": 5,
482
+ "reconnect_delay_sec": 5,
490
483
  "keep_alive_timeout_ms": 200,
491
484
  "transport_ack_timeout": 7,
492
485
  "timeout_us": 100000
@@ -590,14 +583,12 @@ class RPCClient:
590
583
  }
591
584
  return self._request("ultra21_lvol_dismount", params)
592
585
 
593
- def bdev_jm_create(self, name, name_storage1, block_size=4096, dev_cpu_mask=""):
586
+ def bdev_jm_create(self, name, name_storage1, block_size=4096):
594
587
  params = {
595
588
  "name": name,
596
589
  "name_storage1": name_storage1,
597
590
  "block_size": block_size
598
591
  }
599
- if dev_cpu_mask:
600
- params["bdb_lcpu_mask"] = int(dev_cpu_mask, 16)
601
592
  return self._request("bdev_jm_create", params)
602
593
 
603
594
  def bdev_jm_delete(self, name):
@@ -629,42 +620,6 @@ class RPCClient:
629
620
  def framework_start_init(self):
630
621
  return self._request("framework_start_init")
631
622
 
632
- def bdev_examine(self, name):
633
- params = {"name": name}
634
- return self._request("bdev_examine", params)
635
-
636
- def nbd_start_disk(self, bdev_name, nbd_device="/dev/nbd0"):
637
- params = {
638
- "bdev_name": bdev_name,
639
- "nbd_device": nbd_device,
640
- }
641
- return self._request("nbd_start_disk", params)
642
-
643
- def nbd_stop_disk(self, nbd_device):
644
- params = {
645
- "nbd_device": nbd_device
646
- }
647
- return self._request("nbd_stop_disk", params)
648
-
649
-
650
623
  def bdev_jm_unmap_vuid(self, name, vuid):
651
624
  params = {"name": name, "vuid": vuid}
652
625
  return self._request("bdev_jm_unmap_vuid", params)
653
-
654
- def sock_impl_set_options(self):
655
- method = "sock_impl_set_options"
656
- params = {"impl_name": "posix", "enable_quickack": True,
657
- "enable_zerocopy_send_server": True,
658
- "enable_zerocopy_send_client": True}
659
- return self._request(method, params)
660
-
661
- def nvmf_set_config(self, poll_groups_mask):
662
- params = {"poll_groups_mask": poll_groups_mask}
663
- return self._request("nvmf_set_config", params)
664
-
665
- def thread_get_stats(self):
666
- return self._request("thread_get_stats")
667
-
668
- def thread_set_cpumask(self, app_thread_process_id, app_thread_mask):
669
- params = {"id": app_thread_process_id, "cpumask": app_thread_mask}
670
- return self._request("thread_set_cpumask", params)