sbcli-pre 1.2.5__zip → 1.2.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.
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/PKG-INFO +1 -1
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/env_var +1 -1
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/sbcli_pre.egg-info/PKG-INFO +1 -1
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/sbcli_pre.egg-info/SOURCES.txt +5 -3
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_cli/cli.py +113 -115
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/cluster_ops.py +138 -235
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/constants.py +5 -7
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/controllers/caching_node_controller.py +8 -6
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/controllers/cluster_events.py +9 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/controllers/device_controller.py +56 -63
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/controllers/events_controller.py +5 -3
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/controllers/health_controller.py +30 -40
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/controllers/lvol_controller.py +51 -38
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/controllers/pool_controller.py +8 -4
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/controllers/snapshot_controller.py +9 -3
- sbcli_pre-1.2.6/simplyblock_core/controllers/tasks_controller.py +103 -0
- sbcli_pre-1.2.6/simplyblock_core/controllers/tasks_events.py +37 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/distr_controller.py +13 -9
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/kv_store.py +47 -20
- sbcli_pre-1.2.6/simplyblock_core/mgmt_node_ops.py +205 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/models/events.py +9 -1
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/models/job_schedule.py +6 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/models/nvme_device.py +42 -4
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/models/storage_node.py +9 -1
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/rpc_client.py +55 -10
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/scripts/__init__.py +0 -4
- sbcli_pre-1.2.5/simplyblock_core/scripts/alerting/alert_resources.yaml → sbcli_pre-1.2.6/simplyblock_core/scripts/alerting/alert_resources.yaml.j2 +54 -5
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/scripts/dashboards/cluster.json +1 -1
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/scripts/deploy_stack.sh +9 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/scripts/docker-compose-swarm-monitoring.yml +32 -15
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/scripts/docker-compose-swarm.yml +17 -2
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/scripts/haproxy.cfg +15 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/scripts/install_deps.sh +3 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/scripts/stack_deploy_wait.sh +1 -1
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/services/capacity_and_stats_collector.py +1 -1
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/services/device_monitor.py +5 -46
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/services/distr_event_collector.py +10 -11
- sbcli_pre-1.2.6/simplyblock_core/services/health_check_service.py +134 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/services/lvol_monitor.py +1 -1
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/services/lvol_stat_collector.py +1 -1
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/services/port_stat_collector.py +0 -1
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/services/storage_node_monitor.py +49 -44
- sbcli_pre-1.2.6/simplyblock_core/services/tasks_runner_migration.py +61 -0
- sbcli_pre-1.2.5/simplyblock_core/services/job_tasks.py → sbcli_pre-1.2.6/simplyblock_core/services/tasks_runner_restart.py +95 -46
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/snode_client.py +12 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/storage_node_ops.py +525 -336
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/utils.py +46 -1
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_web/blueprints/snode_ops.py +103 -25
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_web/blueprints/web_api_cluster.py +20 -43
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_web/blueprints/web_api_device.py +10 -7
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_web/blueprints/web_api_lvol.py +9 -5
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_web/blueprints/web_api_pool.py +14 -5
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_web/blueprints/web_api_storage_node.py +3 -10
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_web/node_utils.py +0 -2
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_web/utils.py +8 -0
- sbcli_pre-1.2.5/simplyblock_core/mgmt_node_ops.py +0 -80
- sbcli_pre-1.2.5/simplyblock_core/scripts/apply_dashboard.sh +0 -22
- sbcli_pre-1.2.5/simplyblock_core/services/health_check_service.py +0 -136
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/README.md +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/pyproject.toml +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/sbcli_pre.egg-info/dependency_links.txt +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/sbcli_pre.egg-info/entry_points.txt +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/sbcli_pre.egg-info/requires.txt +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/sbcli_pre.egg-info/top_level.txt +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/setup.cfg +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/setup.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_cli/main.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/__init__.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/cnode_client.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/compute_node_ops.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/controllers/__init__.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/controllers/device_events.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/controllers/lvol_events.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/controllers/mgmt_events.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/controllers/pool_events.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/controllers/snapshot_events.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/controllers/storage_events.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/models/__init__.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/models/base_model.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/models/caching_node.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/models/cluster.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/models/compute_node.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/models/deployer.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/models/global_settings.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/models/iface.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/models/lvol_model.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/models/mgmt_node.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/models/pool.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/models/port_stat.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/models/snapshot.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/models/stats.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/pci_utils.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/scripts/alerting/alert_rules.yaml +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/scripts/clean_local_storage_deploy.sh +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/scripts/config_docker.sh +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/scripts/dashboards/devices.json +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/scripts/dashboards/lvols.json +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/scripts/dashboards/node-exporter.json +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/scripts/dashboards/nodes.json +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/scripts/dashboards/pools.json +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/scripts/datasource.yml +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/scripts/db_config_double.sh +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/scripts/db_config_single.sh +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/scripts/prometheus.yml +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/scripts/run_ssh.sh +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/scripts/set_db_config.sh +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/services/__init__.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/services/caching_node_monitor.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/services/cap_monitor.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/services/install_service.sh +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/services/log_agg_service.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/services/mgmt_node_monitor.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/services/remove_service.sh +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/services/service_template.service +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/shell_utils.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_web/__init__.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_web/app.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_web/auth_middleware.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_web/blueprints/__init__.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_web/blueprints/caching_node_ops.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_web/blueprints/caching_node_ops_k8s.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_web/blueprints/node_api_basic.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_web/blueprints/node_api_caching_docker.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_web/blueprints/node_api_caching_ks.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_web/blueprints/web_api_caching_node.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_web/blueprints/web_api_deployer.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_web/blueprints/web_api_mgmt_node.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_web/blueprints/web_api_snapshot.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_web/caching_node_app.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_web/caching_node_app_k8s.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_web/node_webapp.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_web/snode_app.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_web/static/delete.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_web/static/deploy.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_web/static/deploy_cnode.yaml +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_web/static/deploy_spdk.yaml +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_web/static/is_up.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_web/static/list_deps.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_web/static/rpac.yaml +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_web/static/tst.py +0 -0
- {sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_web/templates/deploy_spdk.yaml.j2 +0 -0
@@ -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
|
+
"nvme_controller": {"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,7 +37,6 @@ 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': ""},
|
41
40
|
"cluster_device_order": {"type": int, 'default': 0},
|
42
41
|
"health_check": {"type": bool, "default": True},
|
43
42
|
"cluster_id": {"type": str, 'default': ""},
|
@@ -47,6 +46,13 @@ class NVMeDevice(BaseModel):
|
|
47
46
|
"io_error": {"type": bool, 'default': False},
|
48
47
|
"retries_exhausted": {"type": bool, 'default': False},
|
49
48
|
|
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
|
+
|
50
56
|
}
|
51
57
|
|
52
58
|
def __init__(self, data=None):
|
@@ -57,5 +63,37 @@ class NVMeDevice(BaseModel):
|
|
57
63
|
def get_id(self):
|
58
64
|
return self.uuid
|
59
65
|
|
60
|
-
|
61
|
-
|
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
|
+
|
@@ -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, JMDevice
|
9
9
|
|
10
10
|
|
11
11
|
class StorageNode(BaseModel):
|
@@ -70,6 +70,10 @@ 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": ""},
|
73
77
|
"spdk_mem": {"type": int, "default": 0},
|
74
78
|
"spdk_image": {"type": str, "default": ""},
|
75
79
|
"spdk_debug": {"type": bool, "default": False},
|
@@ -84,6 +88,10 @@ class StorageNode(BaseModel):
|
|
84
88
|
"iobuf_small_bufsize": {"type": int, "default": 0},
|
85
89
|
"iobuf_large_bufsize": {"type": int, "default": 0},
|
86
90
|
|
91
|
+
"num_partitions_per_dev": {"type": int, "default": 1},
|
92
|
+
"jm_percent": {"type": int, "default": 3},
|
93
|
+
"jm_device": {"type": JMDevice, "default": None},
|
94
|
+
|
87
95
|
}
|
88
96
|
|
89
97
|
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, base_bdev, vuid, pt_name):
|
310
310
|
params = {
|
311
|
-
"base_bdev":
|
311
|
+
"base_bdev": base_bdev,
|
312
312
|
"vuid": vuid,
|
313
313
|
"pt_bdev": pt_name
|
314
314
|
}
|
@@ -318,7 +318,8 @@ 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
|
321
|
+
def bdev_alceml_create(self, alceml_name, nvme_name, uuid, pba_init_mode=3,
|
322
|
+
dev_cpu_mask=""):
|
322
323
|
params = {
|
323
324
|
"name": alceml_name,
|
324
325
|
"cntr_path": nvme_name,
|
@@ -334,10 +335,13 @@ class RPCClient:
|
|
334
335
|
"use_optimized": True,
|
335
336
|
"pba_nbalign": 4096
|
336
337
|
}
|
338
|
+
if dev_cpu_mask:
|
339
|
+
params["bdb_lcpu_mask"] = int(dev_cpu_mask,16)
|
337
340
|
return self._request("bdev_alceml_create", params)
|
338
341
|
|
339
342
|
def bdev_distrib_create(self, name, vuid, ndcs, npcs, num_blocks, block_size, jm_names,
|
340
|
-
chunk_size, ha_comm_addrs=None, ha_inode_self=None, pba_page_size=2097152
|
343
|
+
chunk_size, ha_comm_addrs=None, ha_inode_self=None, pba_page_size=2097152,
|
344
|
+
dev_cpu_mask=""):
|
341
345
|
""""
|
342
346
|
// Optional (not specified = no HA)
|
343
347
|
// Comma-separated communication addresses, for each node, e.g. "192.168.10.1:45001,192.168.10.1:32768".
|
@@ -363,6 +367,8 @@ class RPCClient:
|
|
363
367
|
if ha_comm_addrs:
|
364
368
|
params['ha_comm_addrs'] = ha_comm_addrs
|
365
369
|
params['ha_inode_self'] = ha_inode_self
|
370
|
+
if dev_cpu_mask:
|
371
|
+
params["bdb_lcpu_mask"] = int(dev_cpu_mask, 16)
|
366
372
|
|
367
373
|
return self._request("bdev_distrib_create", params)
|
368
374
|
|
@@ -386,7 +392,7 @@ class RPCClient:
|
|
386
392
|
params = {
|
387
393
|
"name": name,
|
388
394
|
"raid_level": "0",
|
389
|
-
"strip_size_kb": 4
|
395
|
+
"strip_size_kb": 4,
|
390
396
|
"base_bdevs": bdevs_list
|
391
397
|
}
|
392
398
|
return self._request("bdev_raid_create", params)
|
@@ -428,8 +434,9 @@ class RPCClient:
|
|
428
434
|
"trsvcid": str(port),
|
429
435
|
"subnqn": nqn,
|
430
436
|
"fabrics_connect_timeout_us": 100000,
|
431
|
-
"fast_io_fail_timeout_sec":
|
437
|
+
"fast_io_fail_timeout_sec": 1,
|
432
438
|
"num_io_queues": 16384,
|
439
|
+
"ctrlr_loss_timeout_sec": 2,
|
433
440
|
}
|
434
441
|
return self._request("bdev_nvme_attach_controller", params)
|
435
442
|
|
@@ -477,9 +484,9 @@ class RPCClient:
|
|
477
484
|
params = {
|
478
485
|
"bdev_retry_count": 0,
|
479
486
|
"transport_retry_count": 0,
|
480
|
-
"ctrlr_loss_timeout_sec":
|
481
|
-
"fast_io_fail_timeout_sec":
|
482
|
-
"reconnect_delay_sec":
|
487
|
+
"ctrlr_loss_timeout_sec": 2,
|
488
|
+
"fast_io_fail_timeout_sec": 1,
|
489
|
+
"reconnect_delay_sec": 1,
|
483
490
|
"keep_alive_timeout_ms": 200,
|
484
491
|
"transport_ack_timeout": 7,
|
485
492
|
"timeout_us": 100000
|
@@ -583,12 +590,14 @@ class RPCClient:
|
|
583
590
|
}
|
584
591
|
return self._request("ultra21_lvol_dismount", params)
|
585
592
|
|
586
|
-
def bdev_jm_create(self, name, name_storage1, block_size=4096):
|
593
|
+
def bdev_jm_create(self, name, name_storage1, block_size=4096, dev_cpu_mask=""):
|
587
594
|
params = {
|
588
595
|
"name": name,
|
589
596
|
"name_storage1": name_storage1,
|
590
597
|
"block_size": block_size
|
591
598
|
}
|
599
|
+
if dev_cpu_mask:
|
600
|
+
params["bdb_lcpu_mask"] = int(dev_cpu_mask, 16)
|
592
601
|
return self._request("bdev_jm_create", params)
|
593
602
|
|
594
603
|
def bdev_jm_delete(self, name):
|
@@ -620,6 +629,42 @@ class RPCClient:
|
|
620
629
|
def framework_start_init(self):
|
621
630
|
return self._request("framework_start_init")
|
622
631
|
|
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
|
+
|
623
650
|
def bdev_jm_unmap_vuid(self, name, vuid):
|
624
651
|
params = {"name": name, "vuid": vuid}
|
625
652
|
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)
|
@@ -35,10 +35,6 @@ def deploy_stack(cli_pass, dev_ip, image_name, graylog_password, cluster_id, log
|
|
35
35
|
return __run_script(
|
36
36
|
['sudo', 'bash', '-x', os.path.join(DIR_PATH, 'deploy_stack.sh'), cli_pass, dev_ip, image_name, pass_hash, graylog_password, cluster_id, log_del_interval, metrics_retention_period])
|
37
37
|
|
38
|
-
def apply_dashboard(grafanaPassword):
|
39
|
-
return __run_script(
|
40
|
-
['sudo', 'bash', '-x', os.path.join(DIR_PATH, 'apply_dashboard.sh'), grafanaPassword])
|
41
|
-
|
42
38
|
|
43
39
|
def deploy_cleaner():
|
44
40
|
return __run_script(['sudo', 'bash', '-x', os.path.join(DIR_PATH, 'clean_local_storage_deploy.sh')])
|
@@ -12,15 +12,26 @@ contactPoints:
|
|
12
12
|
name: grafana-alerts
|
13
13
|
receivers:
|
14
14
|
- uid: grafana
|
15
|
-
type:
|
15
|
+
type: {{ ALERT_TYPE }}
|
16
|
+
{% if ALERT_TYPE == 'slack' %}
|
16
17
|
settings:
|
17
18
|
username: grafana_bot
|
18
|
-
url: '
|
19
|
+
url: '{{ CONTACT_POINT }}'
|
19
20
|
title: |
|
20
|
-
{{ template "slack.title" . }}
|
21
|
+
{{ '{{' }} template "slack.title" . {{ '}}' }}
|
21
22
|
text: |
|
22
|
-
{{ template "slack.message" . }}
|
23
|
+
{{ '{{' }} template "slack.message" . {{ '}}' }}
|
24
|
+
{% else %}
|
25
|
+
settings:
|
26
|
+
addresses: '{{ CONTACT_POINT }}'
|
27
|
+
subject: |
|
28
|
+
{{ '{{' }} template "email.subject" . {{ '}}' }}
|
29
|
+
body: |
|
30
|
+
{{ '{{' }} template "email.body" . {{ '}}' }}
|
31
|
+
{% endif %}
|
23
32
|
|
33
|
+
{% if ALERT_TYPE == 'slack' %}
|
34
|
+
{% raw %}
|
24
35
|
templates:
|
25
36
|
- orgId: 1
|
26
37
|
name: slack.title
|
@@ -38,7 +49,9 @@ templates:
|
|
38
49
|
*Description*: {{ .Annotations.description }}
|
39
50
|
{{ end -}}
|
40
51
|
*Log message*: {{ index .Labels "message" }}
|
41
|
-
|
52
|
+
{% endraw %}
|
53
|
+
*Explore logs:* {{ GRAFANA_ENDPOINT }}
|
54
|
+
{% raw %}
|
42
55
|
{{ if .DashboardURL -}}
|
43
56
|
*Go to dashboard:* {{ .DashboardURL }}
|
44
57
|
{{- end }}
|
@@ -65,3 +78,39 @@ templates:
|
|
65
78
|
{{ end }}
|
66
79
|
|
67
80
|
{{- end }}
|
81
|
+
{% endraw %}
|
82
|
+
{% else %}
|
83
|
+
{% raw %}
|
84
|
+
- orgId: 1
|
85
|
+
name: email.subject
|
86
|
+
template: |-
|
87
|
+
{{ define "email.subject" -}}
|
88
|
+
[{{ .Status | toUpper }}] Grafana Alert
|
89
|
+
{{- end -}}
|
90
|
+
- orgId: 1
|
91
|
+
name: email.body
|
92
|
+
template: |-
|
93
|
+
{{ define "email.body" -}}
|
94
|
+
Alert: {{ .Labels.alertname }}
|
95
|
+
{{ if .Annotations -}}
|
96
|
+
Summary: {{ .Annotations.summary}}
|
97
|
+
Description: {{ .Annotations.description }}
|
98
|
+
{{ end -}}
|
99
|
+
Log message: {{ index .Labels "message" }}
|
100
|
+
Explore logs: {{ GRAFANA_ENDPOINT }}
|
101
|
+
{{ if .DashboardURL -}}
|
102
|
+
Go to dashboard: {{ .DashboardURL }}
|
103
|
+
{{- end }}
|
104
|
+
{{ if .PanelURL -}}
|
105
|
+
Go to panel: {{ .PanelURL }}
|
106
|
+
{{- end }}
|
107
|
+
Details:
|
108
|
+
{{ range .Labels.SortedPairs -}}
|
109
|
+
- {{ .Name }}: `{{ .Value }}`
|
110
|
+
{{ end -}}
|
111
|
+
{{ if .SilenceURL -}}
|
112
|
+
Silence this alert: {{ .SilenceURL }}
|
113
|
+
{{- end }}
|
114
|
+
{{- end }}
|
115
|
+
{% endraw %}
|
116
|
+
{% endif %}
|
@@ -19,6 +19,15 @@ then
|
|
19
19
|
export FDB_CLUSTER_FILE_CONTENTS=$FDB_CLUSTER_FILE_CONTENTS
|
20
20
|
fi
|
21
21
|
|
22
|
+
docker network create monitoring-net -d overlay --attachable
|
23
|
+
|
24
|
+
INSTANCE_ID=$(curl -s http://169.254.169.254/latest/meta-data/instance-id)
|
25
|
+
|
26
|
+
if [ -n "$INSTANCE_ID" ]
|
27
|
+
then
|
28
|
+
export USE_EFS="rexray/efs"
|
29
|
+
fi
|
30
|
+
|
22
31
|
docker stack deploy --compose-file="$DIR"/docker-compose-swarm-monitoring.yml monitoring
|
23
32
|
|
24
33
|
# wait for the services to become online
|
{sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/scripts/docker-compose-swarm-monitoring.yml
RENAMED
@@ -9,6 +9,8 @@ services:
|
|
9
9
|
deploy:
|
10
10
|
placement:
|
11
11
|
constraints: [node.role == manager]
|
12
|
+
networks:
|
13
|
+
- monitoring-net
|
12
14
|
|
13
15
|
opensearch:
|
14
16
|
image: "opensearchproject/opensearch:2.4.0"
|
@@ -24,6 +26,8 @@ services:
|
|
24
26
|
deploy:
|
25
27
|
placement:
|
26
28
|
constraints: [node.role == manager]
|
29
|
+
networks:
|
30
|
+
- monitoring-net
|
27
31
|
|
28
32
|
graylog:
|
29
33
|
hostname: "server"
|
@@ -34,16 +38,16 @@ services:
|
|
34
38
|
GRAYLOG_PASSWORD_SECRET: "${GRAYLOG_PASSWORD_SECRET}"
|
35
39
|
GRAYLOG_ROOT_PASSWORD_SHA2: "${GRAYLOG_ROOT_PASSWORD_SHA2}"
|
36
40
|
GRAYLOG_HTTP_BIND_ADDRESS: "0.0.0.0:9000"
|
37
|
-
GRAYLOG_HTTP_EXTERNAL_URI: "http://localhost
|
41
|
+
GRAYLOG_HTTP_EXTERNAL_URI: "http://localhost/graylog/"
|
38
42
|
GRAYLOG_ELASTICSEARCH_HOSTS: "http://opensearch:9200"
|
39
43
|
GRAYLOG_MONGODB_URI: "mongodb://mongodb:27017/graylog"
|
44
|
+
GRAYLOG_SKIP_PREFLIGHT_CHECKS: "true"
|
40
45
|
ports:
|
41
46
|
- "5044:5044/tcp" # Beats
|
42
47
|
- "5140:5140/udp" # Syslog
|
43
48
|
- "5140:5140/tcp" # Syslog
|
44
49
|
- "5555:5555/tcp" # RAW TCP
|
45
50
|
- "5555:5555/udp" # RAW TCP
|
46
|
-
- "9000:9000/tcp" # Server API
|
47
51
|
- "12201:12201/tcp" # GELF TCP
|
48
52
|
- "12201:12201/udp" # GELF UDP
|
49
53
|
- "13301:13301/tcp" # Forwarder data
|
@@ -54,22 +58,28 @@ services:
|
|
54
58
|
deploy:
|
55
59
|
placement:
|
56
60
|
constraints: [node.role == manager]
|
61
|
+
networks:
|
62
|
+
- monitoring-net
|
57
63
|
|
58
64
|
promagent:
|
59
65
|
image: simplyblock/promagent
|
60
66
|
environment:
|
61
67
|
ClusterID: "${CLUSTER_ID}"
|
62
|
-
ClusterIP: "
|
68
|
+
ClusterIP: "HAProxy"
|
63
69
|
ClusterSecret: "${CLUSTER_SECRET}"
|
64
70
|
deploy:
|
65
71
|
placement:
|
66
72
|
constraints: [node.role == manager]
|
73
|
+
networks:
|
74
|
+
- monitoring-net
|
67
75
|
|
68
76
|
pushgateway:
|
69
77
|
image: prom/pushgateway
|
70
78
|
deploy:
|
71
79
|
placement:
|
72
80
|
constraints: [node.role == manager]
|
81
|
+
networks:
|
82
|
+
- monitoring-net
|
73
83
|
|
74
84
|
prometheus:
|
75
85
|
image: prom/prometheus:v2.44.0
|
@@ -85,6 +95,8 @@ services:
|
|
85
95
|
deploy:
|
86
96
|
placement:
|
87
97
|
constraints: [node.role == manager]
|
98
|
+
networks:
|
99
|
+
- monitoring-net
|
88
100
|
|
89
101
|
node-exporter:
|
90
102
|
image: prom/node-exporter:v1.7.0
|
@@ -105,7 +117,9 @@ services:
|
|
105
117
|
mode: global
|
106
118
|
placement:
|
107
119
|
constraints: [node.role == worker]
|
108
|
-
|
120
|
+
networks:
|
121
|
+
- monitoring-net
|
122
|
+
|
109
123
|
grafana:
|
110
124
|
image: grafana/grafana:10.0.12
|
111
125
|
environment:
|
@@ -114,19 +128,16 @@ services:
|
|
114
128
|
GF_ALERTING_ENABLED: "true"
|
115
129
|
GF_PATHS_PROVISIONING: "/etc/grafana/provisioning"
|
116
130
|
GF_INSTALL_PLUGINS: "grafana-opensearch-datasource"
|
131
|
+
GF_SERVER_ROOT_URL: "http://localhost/grafana/"
|
117
132
|
volumes:
|
118
133
|
- ./datasource.yml:/etc/grafana/provisioning/datasources/datasource.yaml
|
119
134
|
- grafana_data:/var/lib/grafana
|
120
135
|
- ./alerting:/etc/grafana/provisioning/alerting
|
121
|
-
restart: "always"
|
122
|
-
ports:
|
123
|
-
- target: 3000
|
124
|
-
published: 3000
|
125
|
-
protocol: tcp
|
126
|
-
mode: host
|
127
136
|
deploy:
|
128
137
|
placement:
|
129
138
|
constraints: [node.role == manager]
|
139
|
+
networks:
|
140
|
+
- monitoring-net
|
130
141
|
|
131
142
|
CleanupGraylog:
|
132
143
|
image: $SIMPLYBLOCK_DOCKER_IMAGE
|
@@ -136,19 +147,25 @@ services:
|
|
136
147
|
deploy:
|
137
148
|
placement:
|
138
149
|
constraints: [node.role == manager]
|
139
|
-
|
140
|
-
|
150
|
+
networks:
|
151
|
+
- monitoring-net
|
141
152
|
|
142
153
|
volumes:
|
143
154
|
mongodb_data:
|
155
|
+
driver: ${USE_EFS:-local}
|
144
156
|
os_data:
|
157
|
+
driver: ${USE_EFS:-local}
|
145
158
|
graylog_data:
|
159
|
+
driver: ${USE_EFS:-local}
|
146
160
|
graylog_journal:
|
161
|
+
driver: ${USE_EFS:-local}
|
147
162
|
grafana_data:
|
163
|
+
driver: ${USE_EFS:-local}
|
164
|
+
graylog_config:
|
165
|
+
driver: ${USE_EFS:-local}
|
148
166
|
prometheus_data:
|
149
|
-
|
167
|
+
driver: ${USE_EFS:-local}
|
150
168
|
|
151
169
|
networks:
|
152
|
-
|
170
|
+
monitoring-net:
|
153
171
|
external: true
|
154
|
-
name: host
|
@@ -114,6 +114,7 @@ services:
|
|
114
114
|
- 8404:8404
|
115
115
|
networks:
|
116
116
|
- localnet
|
117
|
+
- monitoring-net
|
117
118
|
volumes:
|
118
119
|
- "$DIR/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg"
|
119
120
|
|
@@ -185,9 +186,20 @@ services:
|
|
185
186
|
networks:
|
186
187
|
- hostnet
|
187
188
|
|
188
|
-
|
189
|
+
TasksRunnerRestart:
|
189
190
|
image: $SIMPLYBLOCK_DOCKER_IMAGE
|
190
|
-
command: "python simplyblock_core/services/
|
191
|
+
command: "python simplyblock_core/services/tasks_runner_restart.py"
|
192
|
+
deploy:
|
193
|
+
placement:
|
194
|
+
constraints: [node.role == manager]
|
195
|
+
volumes:
|
196
|
+
- "/etc/foundationdb:/etc/foundationdb"
|
197
|
+
networks:
|
198
|
+
- hostnet
|
199
|
+
|
200
|
+
TasksRunnerMigration:
|
201
|
+
image: $SIMPLYBLOCK_DOCKER_IMAGE
|
202
|
+
command: "python simplyblock_core/services/tasks_runner_migration.py"
|
191
203
|
deploy:
|
192
204
|
placement:
|
193
205
|
constraints: [node.role == manager]
|
@@ -200,6 +212,9 @@ volumes:
|
|
200
212
|
os_data:
|
201
213
|
|
202
214
|
networks:
|
215
|
+
monitoring-net:
|
216
|
+
external: true
|
217
|
+
|
203
218
|
hostnet:
|
204
219
|
external: true
|
205
220
|
name: host
|
@@ -42,6 +42,16 @@ backend wep_api_services
|
|
42
42
|
balance roundrobin
|
43
43
|
server-template webapi- 3 WebAppAPI:5000 check resolvers docker init-addr libc,none
|
44
44
|
|
45
|
+
backend grafana_services
|
46
|
+
balance roundrobin
|
47
|
+
http-request set-path %[path,regsub(^/grafana/?,/)]
|
48
|
+
server-template grafana- 1 grafana:3000 check resolvers docker init-addr libc,none
|
49
|
+
|
50
|
+
backend graylog_services
|
51
|
+
balance roundrobin
|
52
|
+
http-request set-path %[path,regsub(^/graylog/?,/)]
|
53
|
+
server-template graylog- 1 graylog:9000 check resolvers docker init-addr libc,none
|
54
|
+
|
45
55
|
frontend stats_front
|
46
56
|
bind *:8404
|
47
57
|
stats enable
|
@@ -52,4 +62,9 @@ frontend stats_front
|
|
52
62
|
|
53
63
|
frontend web_api_front
|
54
64
|
bind *:80
|
65
|
+
|
66
|
+
use_backend grafana_services if { path /grafana } || { path_beg /grafana/ }
|
67
|
+
use_backend graylog_services if { path /graylog } || { path_beg /graylog/ }
|
68
|
+
|
55
69
|
default_backend wep_api_services
|
70
|
+
|
@@ -15,6 +15,8 @@ sudo yum install hostname pkg-config git wget python3-pip yum-utils docker-ce do
|
|
15
15
|
sudo systemctl enable docker
|
16
16
|
sudo systemctl start docker
|
17
17
|
|
18
|
+
sudo docker plugin install --grant-all-permissions rexray/efs REXRAY_PREEMPT=true
|
19
|
+
|
18
20
|
wget https://github.com/apple/foundationdb/releases/download/7.3.3/foundationdb-clients-7.3.3-1.el7.x86_64.rpm -q
|
19
21
|
sudo rpm -U foundationdb-clients-7.3.3-1.el7.x86_64.rpm --quiet --reinstall
|
20
22
|
rm -f foundationdb-clients-7.3.3-1.el7.x86_64.rpm
|
@@ -29,6 +31,7 @@ sudo sed -i 's/#X11UseLocalhost yes/X11UseLocalhost no/g' /etc/ssh/sshd_config
|
|
29
31
|
|
30
32
|
sudo service sshd restart
|
31
33
|
sudo modprobe nvme-tcp
|
34
|
+
sudo modprobe nbd
|
32
35
|
|
33
36
|
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
|
34
37
|
|
{sbcli_pre-1.2.5 → sbcli_pre-1.2.6}/simplyblock_core/services/capacity_and_stats_collector.py
RENAMED
@@ -193,7 +193,7 @@ while True:
|
|
193
193
|
logger.info(f"Device is skipped: {device.get_id()} status: {device.status}")
|
194
194
|
continue
|
195
195
|
capacity_dict = rpc_client.alceml_get_capacity(device.alceml_bdev)
|
196
|
-
stats_dict = rpc_client.get_device_stats(device.
|
196
|
+
stats_dict = rpc_client.get_device_stats(device.nvme_bdev)
|
197
197
|
record = add_device_stats(cl, device, capacity_dict, stats_dict)
|
198
198
|
if record:
|
199
199
|
devices_records.append(record)
|
@@ -5,7 +5,7 @@ import sys
|
|
5
5
|
import uuid
|
6
6
|
|
7
7
|
from simplyblock_core import constants, kv_store
|
8
|
-
from simplyblock_core.
|
8
|
+
from simplyblock_core.controllers import tasks_controller
|
9
9
|
from simplyblock_core.models.nvme_device import NVMeDevice
|
10
10
|
from simplyblock_core.models.storage_node import StorageNode
|
11
11
|
|
@@ -27,47 +27,6 @@ db_store = kv_store.KVStore()
|
|
27
27
|
db_controller = kv_store.DBController()
|
28
28
|
|
29
29
|
|
30
|
-
def add_device_to_auto_restart(device):
|
31
|
-
tasks = db_controller.get_job_tasks(device.cluster_id)
|
32
|
-
for task in tasks:
|
33
|
-
if task.device_id == device.get_id():
|
34
|
-
if task.status != JobSchedule.STATUS_DONE:
|
35
|
-
logger.info(f"Task found, skip adding new task: {task.get_id()}")
|
36
|
-
return
|
37
|
-
|
38
|
-
ds = JobSchedule()
|
39
|
-
ds.uuid = str(uuid.uuid4())
|
40
|
-
ds.cluster_id = device.cluster_id
|
41
|
-
ds.node_id = device.node_id
|
42
|
-
ds.device_id = device.get_id()
|
43
|
-
ds.date = int(time.time())
|
44
|
-
ds.function_name = "device_restart"
|
45
|
-
ds.status = 'new'
|
46
|
-
|
47
|
-
ds.write_to_db(db_store)
|
48
|
-
return ds.get_id()
|
49
|
-
|
50
|
-
|
51
|
-
def add_node_to_auto_restart(node):
|
52
|
-
tasks = db_controller.get_job_tasks(node.cluster_id)
|
53
|
-
for task in tasks:
|
54
|
-
if task.node_id == node.get_id():
|
55
|
-
if task.status != JobSchedule.STATUS_DONE:
|
56
|
-
logger.info(f"Task found, skip adding new task: {task.get_id()}")
|
57
|
-
return
|
58
|
-
|
59
|
-
ds = JobSchedule()
|
60
|
-
ds.uuid = str(uuid.uuid4())
|
61
|
-
ds.cluster_id = node.cluster_id
|
62
|
-
ds.node_id = node.get_id()
|
63
|
-
ds.date = int(time.time())
|
64
|
-
ds.function_name = "node_restart"
|
65
|
-
ds.status = 'new'
|
66
|
-
|
67
|
-
ds.write_to_db(db_store)
|
68
|
-
return ds.get_id()
|
69
|
-
|
70
|
-
|
71
30
|
logger.info("Starting Device monitor...")
|
72
31
|
while True:
|
73
32
|
nodes = db_controller.get_storage_nodes()
|
@@ -89,9 +48,9 @@ while True:
|
|
89
48
|
logger.info("Adding device to auto restart")
|
90
49
|
auto_restart_devices.append(dev)
|
91
50
|
|
92
|
-
if len(auto_restart_devices) ==
|
93
|
-
|
94
|
-
elif len(auto_restart_devices)
|
95
|
-
|
51
|
+
if len(auto_restart_devices) >= 2 or len(online_devices) == 0:
|
52
|
+
tasks_controller.add_node_to_auto_restart(node)
|
53
|
+
elif len(auto_restart_devices) == 1:
|
54
|
+
tasks_controller.add_device_to_auto_restart(auto_restart_devices[0])
|
96
55
|
|
97
56
|
time.sleep(constants.DEV_MONITOR_INTERVAL_SEC)
|