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.
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/PKG-INFO +20 -5
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/README.md +19 -4
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/env_var +1 -1
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/sbcli_pre.egg-info/PKG-INFO +20 -5
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/sbcli_pre.egg-info/SOURCES.txt +5 -5
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_cli/cli.py +115 -113
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/cluster_ops.py +238 -141
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/constants.py +7 -5
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/controllers/caching_node_controller.py +6 -8
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/controllers/cluster_events.py +0 -9
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/controllers/device_controller.py +63 -56
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/controllers/events_controller.py +3 -5
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/controllers/health_controller.py +40 -30
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/controllers/lvol_controller.py +36 -42
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/controllers/pool_controller.py +4 -8
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/controllers/snapshot_controller.py +3 -9
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/distr_controller.py +9 -13
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/kv_store.py +29 -47
- sbcli_pre-1.2.5/simplyblock_core/mgmt_node_ops.py +80 -0
- sbcli_pre-1.2.5/simplyblock_core/models/deployer.py +62 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/models/events.py +1 -9
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/models/job_schedule.py +0 -6
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/models/nvme_device.py +4 -42
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/models/storage_node.py +1 -9
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/rpc_client.py +10 -55
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/scripts/__init__.py +4 -0
- 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
- sbcli_pre-1.2.5/simplyblock_core/scripts/apply_dashboard.sh +22 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/scripts/dashboards/cluster.json +1 -1
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/scripts/deploy_stack.sh +0 -2
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/scripts/docker-compose-swarm-monitoring.yml +13 -22
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/scripts/docker-compose-swarm.yml +2 -17
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/scripts/haproxy.cfg +0 -15
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/scripts/install_deps.sh +0 -1
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/services/capacity_and_stats_collector.py +1 -1
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/services/device_monitor.py +44 -3
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/services/distr_event_collector.py +11 -10
- sbcli_pre-1.2.5/simplyblock_core/services/health_check_service.py +136 -0
- 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
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/services/lvol_monitor.py +1 -1
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/services/lvol_stat_collector.py +1 -1
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/services/port_stat_collector.py +1 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/services/storage_node_monitor.py +44 -49
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/snode_client.py +0 -12
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/storage_node_ops.py +336 -525
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/utils.py +1 -46
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/app.py +2 -1
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/blueprints/snode_ops.py +25 -103
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/blueprints/web_api_cluster.py +43 -20
- sbcli_pre-1.2.5/simplyblock_web/blueprints/web_api_deployer.py +394 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/blueprints/web_api_device.py +7 -10
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/blueprints/web_api_lvol.py +5 -9
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/blueprints/web_api_pool.py +5 -14
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/blueprints/web_api_storage_node.py +10 -3
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/node_utils.py +2 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/utils.py +0 -8
- sbcli_pre-1.2.3/simplyblock_core/controllers/tasks_controller.py +0 -103
- sbcli_pre-1.2.3/simplyblock_core/controllers/tasks_events.py +0 -37
- sbcli_pre-1.2.3/simplyblock_core/mgmt_node_ops.py +0 -205
- sbcli_pre-1.2.3/simplyblock_core/services/health_check_service.py +0 -134
- sbcli_pre-1.2.3/simplyblock_core/services/tasks_runner_migration.py +0 -61
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/pyproject.toml +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/sbcli_pre.egg-info/dependency_links.txt +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/sbcli_pre.egg-info/entry_points.txt +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/sbcli_pre.egg-info/requires.txt +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/sbcli_pre.egg-info/top_level.txt +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/setup.cfg +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/setup.py +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_cli/main.py +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/__init__.py +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/cnode_client.py +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/compute_node_ops.py +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/controllers/__init__.py +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/controllers/device_events.py +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/controllers/lvol_events.py +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/controllers/mgmt_events.py +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/controllers/pool_events.py +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/controllers/snapshot_events.py +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/controllers/storage_events.py +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/models/__init__.py +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/models/base_model.py +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/models/caching_node.py +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/models/cluster.py +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/models/compute_node.py +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/models/global_settings.py +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/models/iface.py +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/models/lvol_model.py +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/models/mgmt_node.py +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/models/pool.py +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/models/port_stat.py +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/models/snapshot.py +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/models/stats.py +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/pci_utils.py +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/scripts/alerting/alert_rules.yaml +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/scripts/clean_local_storage_deploy.sh +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/scripts/config_docker.sh +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/scripts/dashboards/devices.json +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/scripts/dashboards/lvols.json +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/scripts/dashboards/node-exporter.json +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/scripts/dashboards/nodes.json +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/scripts/dashboards/pools.json +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/scripts/datasource.yml +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/scripts/db_config_double.sh +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/scripts/db_config_single.sh +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/scripts/prometheus.yml +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/scripts/run_ssh.sh +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/scripts/set_db_config.sh +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/scripts/stack_deploy_wait.sh +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/services/__init__.py +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/services/caching_node_monitor.py +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/services/cap_monitor.py +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/services/install_service.sh +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/services/log_agg_service.py +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/services/mgmt_node_monitor.py +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/services/remove_service.sh +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/services/service_template.service +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_core/shell_utils.py +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/__init__.py +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/auth_middleware.py +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/blueprints/__init__.py +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/blueprints/caching_node_ops.py +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/blueprints/caching_node_ops_k8s.py +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/blueprints/node_api_basic.py +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/blueprints/node_api_caching_docker.py +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/blueprints/node_api_caching_ks.py +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/blueprints/web_api_caching_node.py +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/blueprints/web_api_mgmt_node.py +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/blueprints/web_api_snapshot.py +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/caching_node_app.py +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/caching_node_app_k8s.py +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/node_webapp.py +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/snode_app.py +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/static/delete.py +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/static/deploy.py +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/static/deploy_cnode.yaml +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/static/deploy_spdk.yaml +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/static/is_up.py +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/static/list_deps.py +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/static/rpac.yaml +0 -0
- {sbcli_pre-1.2.3 → sbcli_pre-1.2.5}/simplyblock_web/static/tst.py +0 -0
- {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
|
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
|
-
|
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(
|
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.
|
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(
|
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.
|
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.
|
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.
|
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.
|
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.
|
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
|
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
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
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
|
162
|
-
|
163
|
-
|
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
|
183
|
-
|
184
|
-
|
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
|
276
|
-
return JobSchedule().read_from_db(self.kv_store, id=cluster_id, 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},
|
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
|
-
"
|
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
|
-
|
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
|
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,
|
309
|
+
def ultra21_bdev_pass_create(self, alloc_bdev, vuid, pt_name):
|
310
310
|
params = {
|
311
|
-
"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":
|
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":
|
488
|
-
"fast_io_fail_timeout_sec":
|
489
|
-
"reconnect_delay_sec":
|
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
|
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)
|