From c460d7e3fa87c9d41b5bf2632dde4c5b02e2bbfb Mon Sep 17 00:00:00 2001 From: wmousa Date: Fri, 30 Jan 2026 09:16:52 +0100 Subject: [PATCH 01/23] Fix branch tag --- simplyblock_core/env_var | 2 +- simplyblock_core/scripts/charts/values.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/simplyblock_core/env_var b/simplyblock_core/env_var index 82242064a..23ebbcc76 100644 --- a/simplyblock_core/env_var +++ b/simplyblock_core/env_var @@ -1,5 +1,5 @@ SIMPLY_BLOCK_COMMAND_NAME=sbcli-dev SIMPLY_BLOCK_VERSION=19.2.31 -SIMPLY_BLOCK_DOCKER_IMAGE=public.ecr.aws/simply-block/simplyblock:R25.10-Hotfix +SIMPLY_BLOCK_DOCKER_IMAGE=public.ecr.aws/simply-block/simplyblock:R25.10.5 SIMPLY_BLOCK_SPDK_ULTRA_IMAGE=public.ecr.aws/simply-block/ultra:R25.10-Hotfix-latest diff --git a/simplyblock_core/scripts/charts/values.yaml b/simplyblock_core/scripts/charts/values.yaml index 8d9f34854..b3a46f41e 100644 --- a/simplyblock_core/scripts/charts/values.yaml +++ b/simplyblock_core/scripts/charts/values.yaml @@ -19,7 +19,7 @@ grafana: image: simplyblock: repository: "public.ecr.aws/simply-block/simplyblock" - tag: "R25.10-Hotfix" + tag: "R25.10.5" pullPolicy: "Always" ports: From d25e625927489834c69b25d1d6427f4282aed4e8 Mon Sep 17 00:00:00 2001 From: wmousa Date: Fri, 30 Jan 2026 11:44:31 +0100 Subject: [PATCH 02/23] bind device to spdk before formatting it --- simplyblock_web/api/internal/storage_node/docker.py | 1 + 1 file changed, 1 insertion(+) diff --git a/simplyblock_web/api/internal/storage_node/docker.py b/simplyblock_web/api/internal/storage_node/docker.py index 553cb6826..a1f7de29b 100644 --- a/simplyblock_web/api/internal/storage_node/docker.py +++ b/simplyblock_web/api/internal/storage_node/docker.py @@ -544,6 +544,7 @@ def delete_gpt_partitions_for_dev(body: utils.DeviceParams): @api.post('/format_device_with_4k') def format_device_with_4k(body: utils.DeviceParams): + pci_utils.ensure_driver(body.device_pci, 'nvme') init_utils.format_device_with_4k(body.device_pci) return utils.get_response(True) From e23b1c384a2dc943f0e245ef89b1931fc8be4652 Mon Sep 17 00:00:00 2001 From: wmousa Date: Fri, 30 Jan 2026 13:24:17 +0100 Subject: [PATCH 03/23] Fix type issue --- simplyblock_web/api/v1/storage_node.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/simplyblock_web/api/v1/storage_node.py b/simplyblock_web/api/v1/storage_node.py index 22edab04e..b3f0925bf 100644 --- a/simplyblock_web/api/v1/storage_node.py +++ b/simplyblock_web/api/v1/storage_node.py @@ -252,9 +252,15 @@ def storage_node_add(): ha_jm_count = 3 if 'ha_jm_count' in req_data: ha_jm_count = int(req_data['ha_jm_count']) + format_4k = False - if 'format_4k' in req_data: - format_4k = bool(req_data['format_4k']) + param = req_data.get('format_4k') + if param: + if isinstance(param, bool): + format_4k = param + elif isinstance(param, str): + format_4k = param == "true" + tasks_controller.add_node_add_task(cluster_id, { "cluster_id": cluster_id, From 8c70e170ebd5281f6427e524e25054f4aadc355b Mon Sep 17 00:00:00 2001 From: hamdykhader Date: Fri, 30 Jan 2026 12:23:15 +0300 Subject: [PATCH 04/23] Fix storage node key error on port allow task --- simplyblock_core/services/tasks_runner_port_allow.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/simplyblock_core/services/tasks_runner_port_allow.py b/simplyblock_core/services/tasks_runner_port_allow.py index 1417c3a62..fd706b18a 100644 --- a/simplyblock_core/services/tasks_runner_port_allow.py +++ b/simplyblock_core/services/tasks_runner_port_allow.py @@ -26,9 +26,9 @@ def exec_port_allow_task(task): task.write_to_db(db.kv_store) return - node = db.get_storage_node_by_id(task.node_id) - - if not node: + try: + node = db.get_storage_node_by_id(task.node_id) + except KeyError: task.function_result = "node not found" task.status = JobSchedule.STATUS_DONE task.write_to_db(db.kv_store) From dd32f1789c91c87c194127e9a70f0cf3aeda1bd8 Mon Sep 17 00:00:00 2001 From: hamdykhader Date: Mon, 2 Feb 2026 16:53:37 +0300 Subject: [PATCH 05/23] Handle sync delete errors in tasks_runner_sync_lvol_del.py and update task status accordingly --- simplyblock_core/services/tasks_runner_sync_lvol_del.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/simplyblock_core/services/tasks_runner_sync_lvol_del.py b/simplyblock_core/services/tasks_runner_sync_lvol_del.py index e23d2e99a..7b7e806a0 100644 --- a/simplyblock_core/services/tasks_runner_sync_lvol_del.py +++ b/simplyblock_core/services/tasks_runner_sync_lvol_del.py @@ -81,8 +81,12 @@ def get_primary_node(task) -> Optional[StorageNode]: if "code" in err and err["code"] == -19: logger.error(f"Sync delete completed with error: {err}") else: - logger.error( - f"Failed to sync delete bdev: {lvol_bdev_name} from node: {node.get_id()}") + msg = f"Failed to sync delete bdev: {lvol_bdev_name} from node: {node.get_id()}" + logger.error(msg) + task.function_result = msg + task.status = JobSchedule.STATUS_SUSPENDED + task.write_to_db(db.kv_store) + continue task.function_result = f"bdev {lvol_bdev_name} deleted" task.status = JobSchedule.STATUS_DONE From c1c1568a3a846a7290eba13c534860181883b972 Mon Sep 17 00:00:00 2001 From: hamdykhader Date: Tue, 3 Feb 2026 16:53:45 +0300 Subject: [PATCH 06/23] Enhance event handling in main_distr_event_collector.py to improve controller status checks and error handling --- simplyblock_core/rpc_client.py | 6 ++++++ .../services/main_distr_event_collector.py | 13 +++++++++---- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/simplyblock_core/rpc_client.py b/simplyblock_core/rpc_client.py index faed49ff1..f4ffc63b6 100644 --- a/simplyblock_core/rpc_client.py +++ b/simplyblock_core/rpc_client.py @@ -279,6 +279,12 @@ def bdev_nvme_controller_list(self, name=None): params = {"name": name} return self._request("bdev_nvme_get_controllers", params) + def bdev_nvme_controller_list_2(self, name=None): + params = None + if name: + params = {"name": name} + return self._request2("bdev_nvme_get_controllers", params) + def bdev_nvme_controller_attach(self, name, pci_addr): return self._request3( "bdev_nvme_attach_controller", diff --git a/simplyblock_core/services/main_distr_event_collector.py b/simplyblock_core/services/main_distr_event_collector.py index 93e0ae4df..31846f57c 100644 --- a/simplyblock_core/services/main_distr_event_collector.py +++ b/simplyblock_core/services/main_distr_event_collector.py @@ -52,13 +52,18 @@ def process_device_event(event, logger): ev_time = event.object_dict['timestamp'] time_delta = datetime.now() - datetime.strptime(ev_time, '%Y-%m-%dT%H:%M:%S.%fZ') if time_delta.total_seconds() > 8: - if snode.rpc_client().bdev_nvme_controller_list(device_obj.nvme_controller): + ret, err = snode.rpc_client().bdev_nvme_controller_list_2(device_obj.nvme_controller) + if ret: logger.info(f"event was fired {time_delta.total_seconds()} seconds ago, controller ok, skipping") event.status = f'skipping_late_by_{int(time_delta.total_seconds())}s_but_controller_ok' return - - logger.info(f"event was fired {time_delta.total_seconds()} seconds ago, checking controller filed") - event.status = f'late_by_{int(time_delta.total_seconds())}s' + if err and err['code'] == 22: + logger.info(f"event was fired {time_delta.total_seconds()} seconds ago, checking controller filed") + event.status = f'late_by_{int(time_delta.total_seconds())}s' + else: + logger.info(f"event was fired {time_delta.total_seconds()} seconds ago, error checking controller: {err}, skipping") + event.status = f'late_by_{int(time_delta.total_seconds())}s_skipping' + return if device_obj.is_connection_in_progress_to_node(event_node_obj.get_id()): logger.warning("Connection attempt was found from node to device, sleeping 5 seconds") From 147a661aba5b5af1b897548595778143a1117754 Mon Sep 17 00:00:00 2001 From: hamdykhader Date: Tue, 3 Feb 2026 17:19:42 +0300 Subject: [PATCH 07/23] Fix controller check node source on late events --- simplyblock_core/services/main_distr_event_collector.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/simplyblock_core/services/main_distr_event_collector.py b/simplyblock_core/services/main_distr_event_collector.py index 31846f57c..f7dc4d8d2 100644 --- a/simplyblock_core/services/main_distr_event_collector.py +++ b/simplyblock_core/services/main_distr_event_collector.py @@ -52,7 +52,7 @@ def process_device_event(event, logger): ev_time = event.object_dict['timestamp'] time_delta = datetime.now() - datetime.strptime(ev_time, '%Y-%m-%dT%H:%M:%S.%fZ') if time_delta.total_seconds() > 8: - ret, err = snode.rpc_client().bdev_nvme_controller_list_2(device_obj.nvme_controller) + ret, err = event_node_obj.rpc_client().bdev_nvme_controller_list_2(device_obj.nvme_controller) if ret: logger.info(f"event was fired {time_delta.total_seconds()} seconds ago, controller ok, skipping") event.status = f'skipping_late_by_{int(time_delta.total_seconds())}s_but_controller_ok' From 65e921073a4c4efde3c6903f59461fd3ced0fde5 Mon Sep 17 00:00:00 2001 From: "Hamdy H. Khader" Date: Wed, 4 Feb 2026 13:16:34 +0300 Subject: [PATCH 08/23] Improve sync delete handling for lvol bdevs in lvol_monitor.py (#863) * Improve sync delete handling for lvol bdevs in lvol_monitor.py * fix linter * fix 2 --- simplyblock_core/models/storage_node.py | 2 ++ simplyblock_core/services/lvol_monitor.py | 19 +++++++++++--- simplyblock_core/services/snapshot_monitor.py | 25 ++++++++++++++----- simplyblock_core/storage_node_ops.py | 4 +-- 4 files changed, 39 insertions(+), 11 deletions(-) diff --git a/simplyblock_core/models/storage_node.py b/simplyblock_core/models/storage_node.py index 66e484b00..340211b80 100644 --- a/simplyblock_core/models/storage_node.py +++ b/simplyblock_core/models/storage_node.py @@ -344,6 +344,7 @@ def lvol_del_sync_lock(self) -> bool: lock = NodeLVolDelLock({"uuid": self.uuid}) lock.write_to_db() logger.info(f"Created lvol_del_sync_lock on node: {self.get_id()}") + time.sleep(0.250) return True def lvol_del_sync_lock_reset(self) -> bool: @@ -367,6 +368,7 @@ def lvol_del_sync_lock_reset(self) -> bool: if lock: lock.remove(db_controller.kv_store) logger.info(f"remove lvol_del_sync_lock from node: {self.get_id()}") + time.sleep(0.250) return True diff --git a/simplyblock_core/services/lvol_monitor.py b/simplyblock_core/services/lvol_monitor.py index 79c492a40..4b707a98e 100644 --- a/simplyblock_core/services/lvol_monitor.py +++ b/simplyblock_core/services/lvol_monitor.py @@ -133,9 +133,22 @@ def process_lvol_delete_finish(lvol): if not ret: logger.error(f"Failed to delete lvol from primary_node node: {primary_node.get_id()}") - # 3-2 async delete lvol bdev from secondary - if sec_node and sec_node.status in [StorageNode.STATUS_ONLINE, StorageNode.STATUS_SUSPENDED, StorageNode.STATUS_DOWN, StorageNode.STATUS_UNREACHABLE]: - tasks_controller.add_lvol_sync_del_task(sec_node.cluster_id, sec_node.get_id(), f"{lvol.lvs_name}/{lvol.lvol_bdev}", primary_node.get_id()) + lvol_bdev_name=f"{lvol.lvs_name}/{lvol.lvol_bdev}" + if sec_node: + if sec_node.status in [StorageNode.STATUS_ONLINE]: + logger.info(f"Sync delete bdev: {lvol_bdev_name} from node: {sec_node.get_id()}") + ret, err = sec_node.rpc_client().delete_lvol(lvol_bdev_name, del_async=True) + if not ret: + if "code" in err and err["code"] == -19: + logger.error(f"Sync delete completed with error: {err}") + else: + msg = f"Failed to sync delete bdev: {lvol_bdev_name} from node: {sec_node.get_id()}, ading task..." + logger.error(msg) + tasks_controller.add_lvol_sync_del_task(sec_node.cluster_id, sec_node.get_id(), lvol_bdev_name, + primary_node.get_id()) + elif sec_node.status in [StorageNode.STATUS_SUSPENDED, StorageNode.STATUS_DOWN, StorageNode.STATUS_UNREACHABLE]: + # 3-2 async delete lvol bdev from secondary + tasks_controller.add_lvol_sync_del_task(sec_node.cluster_id, sec_node.get_id(), lvol_bdev_name, primary_node.get_id()) lvol_events.lvol_delete(lvol) lvol.remove(db.kv_store) diff --git a/simplyblock_core/services/snapshot_monitor.py b/simplyblock_core/services/snapshot_monitor.py index 2910df3d6..85f8d5d22 100644 --- a/simplyblock_core/services/snapshot_monitor.py +++ b/simplyblock_core/services/snapshot_monitor.py @@ -75,12 +75,25 @@ def process_snap_delete_finish(snap, leader_node): if not ret: logger.error(f"Failed to delete snap from node: {snode.get_id()}") - # 3-2 async delete lvol bdev from secondary - if non_leader and non_leader.status in [StorageNode.STATUS_ONLINE, StorageNode.STATUS_SUSPENDED, - StorageNode.STATUS_DOWN, StorageNode.STATUS_UNREACHABLE]: - tasks_controller.add_lvol_sync_del_task(non_leader.cluster_id, non_leader.get_id(), snap.snap_bdev, primary_node.get_id()) - snapshot_events.snapshot_delete(snap) - snap.remove(db.kv_store) + lvol_bdev_name = snap.snap_bdev + if non_leader: + if non_leader.status in [StorageNode.STATUS_ONLINE]: + logger.info(f"Sync delete bdev: {lvol_bdev_name} from node: {non_leader.get_id()}") + ret, err = non_leader.rpc_client().delete_lvol(lvol_bdev_name, del_async=True) + if not ret: + if "code" in err and err["code"] == -19: + logger.error(f"Sync delete completed with error: {err}") + else: + msg = f"Failed to sync delete bdev: {lvol_bdev_name} from node: {non_leader.get_id()}, ading task..." + logger.error(msg) + tasks_controller.add_lvol_sync_del_task(non_leader.cluster_id, non_leader.get_id(), lvol_bdev_name, primary_node.get_id()) + + elif non_leader.status in [StorageNode.STATUS_SUSPENDED, StorageNode.STATUS_DOWN, StorageNode.STATUS_UNREACHABLE]: + # 3-2 async delete lvol bdev from secondary + tasks_controller.add_lvol_sync_del_task(non_leader.cluster_id, non_leader.get_id(), lvol_bdev_name, primary_node.get_id()) + snapshot_events.snapshot_delete(snap) + snap.remove(db.kv_store) + def process_snap_delete_try_again(snap): diff --git a/simplyblock_core/storage_node_ops.py b/simplyblock_core/storage_node_ops.py index 7309a65e1..86429577d 100644 --- a/simplyblock_core/storage_node_ops.py +++ b/simplyblock_core/storage_node_ops.py @@ -1785,8 +1785,8 @@ def restart_storage_node( if new_ssd not in snode.ssd_pcie: try: snode_api.bind_device_to_spdk(new_ssd) - except: - pass + except Exception as e: + logger.error(e) snode.ssd_pcie.append(new_ssd) fdb_connection = cluster.db_connection From 85c6b2ad3adcc84083822797660cc6e79ece9980 Mon Sep 17 00:00:00 2001 From: hamdykhader Date: Wed, 4 Feb 2026 13:19:00 +0300 Subject: [PATCH 09/23] set version --- simplyblock_core/env_var | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/simplyblock_core/env_var b/simplyblock_core/env_var index 23ebbcc76..963055a3a 100644 --- a/simplyblock_core/env_var +++ b/simplyblock_core/env_var @@ -1,5 +1,5 @@ SIMPLY_BLOCK_COMMAND_NAME=sbcli-dev -SIMPLY_BLOCK_VERSION=19.2.31 +SIMPLY_BLOCK_VERSION=19.2.40 SIMPLY_BLOCK_DOCKER_IMAGE=public.ecr.aws/simply-block/simplyblock:R25.10.5 -SIMPLY_BLOCK_SPDK_ULTRA_IMAGE=public.ecr.aws/simply-block/ultra:R25.10-Hotfix-latest +SIMPLY_BLOCK_SPDK_ULTRA_IMAGE=public.ecr.aws/simply-block/ultra:R25.10.5-latest From 2ba42ac6bd6f83cb0eba13ea45a2ce82089b744d Mon Sep 17 00:00:00 2001 From: "Hamdy H. Khader" Date: Tue, 27 Jan 2026 15:58:00 +0300 Subject: [PATCH 10/23] Fix sfam-2578 (#852) send device updated to distribs on node status change to online rhather than sending thr whole cluster map --- simplyblock_core/storage_node_ops.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/simplyblock_core/storage_node_ops.py b/simplyblock_core/storage_node_ops.py index 86429577d..cb954a953 100644 --- a/simplyblock_core/storage_node_ops.py +++ b/simplyblock_core/storage_node_ops.py @@ -3054,7 +3054,8 @@ def set_node_status(node_id, status, reconnect_on_online=True): snode.remote_jm_devices = _connect_to_remote_jm_devs(snode) snode.health_check = True snode.write_to_db(db_controller.kv_store) - distr_controller.send_cluster_map_to_node(snode) + for device in snode.nvme_devices: + distr_controller.send_dev_status_event(device, device.status, target_node=snode) for node in db_controller.get_storage_nodes_by_cluster_id(snode.cluster_id): if node.get_id() == snode.get_id(): @@ -3063,7 +3064,8 @@ def set_node_status(node_id, status, reconnect_on_online=True): try: node.remote_devices = _connect_to_remote_devs(node) node.write_to_db() - distr_controller.send_cluster_map_to_node(node) + for device in node.nvme_devices: + distr_controller.send_dev_status_event(device, device.status, target_node=node) except RuntimeError: logger.error(f'Failed to connect to remote devices from node: {node.get_id()}') continue From cadb86e811aa121dc8b5c1a83f0954d4cc8febfe Mon Sep 17 00:00:00 2001 From: hamdykhader Date: Mon, 23 Feb 2026 16:40:03 +0300 Subject: [PATCH 11/23] fix images --- simplyblock_core/env_var | 2 +- simplyblock_core/scripts/charts/values.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/simplyblock_core/env_var b/simplyblock_core/env_var index 963055a3a..3d8cf6017 100644 --- a/simplyblock_core/env_var +++ b/simplyblock_core/env_var @@ -1,5 +1,5 @@ SIMPLY_BLOCK_COMMAND_NAME=sbcli-dev SIMPLY_BLOCK_VERSION=19.2.40 -SIMPLY_BLOCK_DOCKER_IMAGE=public.ecr.aws/simply-block/simplyblock:R25.10.5 +SIMPLY_BLOCK_DOCKER_IMAGE=public.ecr.aws/simply-block/simplyblock:25.10.5 SIMPLY_BLOCK_SPDK_ULTRA_IMAGE=public.ecr.aws/simply-block/ultra:R25.10.5-latest diff --git a/simplyblock_core/scripts/charts/values.yaml b/simplyblock_core/scripts/charts/values.yaml index b3a46f41e..565514f22 100644 --- a/simplyblock_core/scripts/charts/values.yaml +++ b/simplyblock_core/scripts/charts/values.yaml @@ -19,7 +19,7 @@ grafana: image: simplyblock: repository: "public.ecr.aws/simply-block/simplyblock" - tag: "R25.10.5" + tag: "25.10.5" pullPolicy: "Always" ports: From 17f2b43c64dd562c37551c7fe6bbf319a1ce3a1f Mon Sep 17 00:00:00 2001 From: hamdykhader Date: Mon, 23 Feb 2026 16:45:03 +0300 Subject: [PATCH 12/23] fix images --- simplyblock_core/env_var | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/simplyblock_core/env_var b/simplyblock_core/env_var index 3d8cf6017..e05658309 100644 --- a/simplyblock_core/env_var +++ b/simplyblock_core/env_var @@ -2,4 +2,4 @@ SIMPLY_BLOCK_COMMAND_NAME=sbcli-dev SIMPLY_BLOCK_VERSION=19.2.40 SIMPLY_BLOCK_DOCKER_IMAGE=public.ecr.aws/simply-block/simplyblock:25.10.5 -SIMPLY_BLOCK_SPDK_ULTRA_IMAGE=public.ecr.aws/simply-block/ultra:R25.10.5-latest +SIMPLY_BLOCK_SPDK_ULTRA_IMAGE=public.ecr.aws/simply-block/ultra:25.10.5-latest From 0188beb9312e2a78beb66491a54e182012f3a090 Mon Sep 17 00:00:00 2001 From: hamdykhader Date: Mon, 23 Feb 2026 16:47:52 +0300 Subject: [PATCH 13/23] fix images --- simplyblock_core/env_var | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/simplyblock_core/env_var b/simplyblock_core/env_var index e05658309..3d8cf6017 100644 --- a/simplyblock_core/env_var +++ b/simplyblock_core/env_var @@ -2,4 +2,4 @@ SIMPLY_BLOCK_COMMAND_NAME=sbcli-dev SIMPLY_BLOCK_VERSION=19.2.40 SIMPLY_BLOCK_DOCKER_IMAGE=public.ecr.aws/simply-block/simplyblock:25.10.5 -SIMPLY_BLOCK_SPDK_ULTRA_IMAGE=public.ecr.aws/simply-block/ultra:25.10.5-latest +SIMPLY_BLOCK_SPDK_ULTRA_IMAGE=public.ecr.aws/simply-block/ultra:R25.10.5-latest From 45599cb138fe10b5614db09135fa2c4577eb2f7d Mon Sep 17 00:00:00 2001 From: hamdykhader Date: Fri, 27 Feb 2026 20:24:41 +0300 Subject: [PATCH 14/23] Revert "Fix migration device check to allow equal online devices" This reverts commit cf50652f061f2580bbec9bbc5db25bef2b0f9465. --- simplyblock_core/services/tasks_runner_migration.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/simplyblock_core/services/tasks_runner_migration.py b/simplyblock_core/services/tasks_runner_migration.py index 33acc4f77..c1e67d29c 100644 --- a/simplyblock_core/services/tasks_runner_migration.py +++ b/simplyblock_core/services/tasks_runner_migration.py @@ -68,7 +68,7 @@ def task_runner(task): if "migration_devices" in task.function_params: migration_devices = task.function_params["migration_devices"] - if current_online_devices <= migration_devices: + if current_online_devices < migration_devices: task.function_result = f"only {current_online_devices} devices online, waiting for more devices to be online" task.status = JobSchedule.STATUS_SUSPENDED task.retry += 1 From 6a7f3e288fd06dbcb700bfcb40c7d2c2370431ba Mon Sep 17 00:00:00 2001 From: hamdykhader Date: Sun, 1 Mar 2026 15:03:51 +0300 Subject: [PATCH 15/23] Implement fallback ping method in node data nic ping --- simplyblock_core/controllers/health_controller.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/simplyblock_core/controllers/health_controller.py b/simplyblock_core/controllers/health_controller.py index bbfcd02c9..c2d5870d8 100644 --- a/simplyblock_core/controllers/health_controller.py +++ b/simplyblock_core/controllers/health_controller.py @@ -177,7 +177,8 @@ def _check_ping_from_node(ip, ifname, node): return bool(ret) except Exception as e: logger.error(e) - return False + logger.info("using fallback ping method") + return utils.ping_host(ip) def _check_node_hublvol(node: StorageNode, node_bdev_names=None, node_lvols_nqns=None) -> bool: From 59135cd07eabf70675bc38e0f562962a54619b47 Mon Sep 17 00:00:00 2001 From: Geoffrey Israel Date: Fri, 27 Feb 2026 15:54:44 +0100 Subject: [PATCH 16/23] Resize clone newsize greater (#898) * resize clone if new size larger than original size * resize clone if new size larger than original size * avoid name error (cherry picked from commit 9419234e2f5cade7d27ed204d6677dd0ade9a594) --- simplyblock_core/controllers/snapshot_controller.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/simplyblock_core/controllers/snapshot_controller.py b/simplyblock_core/controllers/snapshot_controller.py index 4d560a9a9..f45b0c27d 100644 --- a/simplyblock_core/controllers/snapshot_controller.py +++ b/simplyblock_core/controllers/snapshot_controller.py @@ -505,6 +505,7 @@ def clone(snapshot_id, clone_name, new_size=0, pvc_name=None, pvc_namespace=None lvol.crypto_key1 = snap.lvol.crypto_key1 lvol.crypto_key2 = snap.lvol.crypto_key2 + conv_new_size = None if new_size: conv_new_size = math.ceil(new_size / (1024 * 1024 * 1024)) * 1024 * 1024 * 1024 if snap.lvol.size > conv_new_size: @@ -604,7 +605,7 @@ def clone(snapshot_id, clone_name, new_size=0, pvc_name=None, pvc_namespace=None logger.info("Done") snapshot_events.snapshot_clone(snap, lvol) - if new_size: + if new_size and conv_new_size > snap.lvol.size: lvol_controller.resize_lvol(lvol.get_id(), new_size) return lvol.uuid, False From 78077d8d6e3f5f380d8fafc0a96664338a776eba Mon Sep 17 00:00:00 2001 From: Geoffrey Israel Date: Fri, 27 Feb 2026 16:35:33 +0100 Subject: [PATCH 17/23] avoid updating lvol size during clone rely on resize_lvol func (#900) (cherry picked from commit aed65e357f4540a5248e10cc08e326b1691bd7b0) --- simplyblock_core/controllers/snapshot_controller.py | 1 - 1 file changed, 1 deletion(-) diff --git a/simplyblock_core/controllers/snapshot_controller.py b/simplyblock_core/controllers/snapshot_controller.py index f45b0c27d..95dea7c66 100644 --- a/simplyblock_core/controllers/snapshot_controller.py +++ b/simplyblock_core/controllers/snapshot_controller.py @@ -517,7 +517,6 @@ def clone(snapshot_id, clone_name, new_size=0, pvc_name=None, pvc_namespace=None msg = f"New size {conv_new_size} must be smaller than the max size {snap.lvol.max_size}" logger.error(msg) return False, msg - lvol.size = conv_new_size lvol.write_to_db(db_controller.kv_store) From 4780104d5e8fee991599a3c49345f4e0c0fa177d Mon Sep 17 00:00:00 2001 From: hamdykhader Date: Fri, 27 Feb 2026 18:00:14 +0300 Subject: [PATCH 18/23] fix linter --- simplyblock_core/controllers/snapshot_controller.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/simplyblock_core/controllers/snapshot_controller.py b/simplyblock_core/controllers/snapshot_controller.py index 95dea7c66..2923cc540 100644 --- a/simplyblock_core/controllers/snapshot_controller.py +++ b/simplyblock_core/controllers/snapshot_controller.py @@ -505,7 +505,7 @@ def clone(snapshot_id, clone_name, new_size=0, pvc_name=None, pvc_namespace=None lvol.crypto_key1 = snap.lvol.crypto_key1 lvol.crypto_key2 = snap.lvol.crypto_key2 - conv_new_size = None + conv_new_size = 0 if new_size: conv_new_size = math.ceil(new_size / (1024 * 1024 * 1024)) * 1024 * 1024 * 1024 if snap.lvol.size > conv_new_size: From 7e23d2c6b7c6fc36b4e9d17dadf95afc08ac34f4 Mon Sep 17 00:00:00 2001 From: geoffrey1330 Date: Fri, 15 May 2026 09:55:38 +0100 Subject: [PATCH 19/23] removed init container spdk pod --- simplyblock_web/templates/storage_deploy_spdk.yaml.j2 | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/simplyblock_web/templates/storage_deploy_spdk.yaml.j2 b/simplyblock_web/templates/storage_deploy_spdk.yaml.j2 index 6e801f009..233d73426 100644 --- a/simplyblock_web/templates/storage_deploy_spdk.yaml.j2 +++ b/simplyblock_web/templates/storage_deploy_spdk.yaml.j2 @@ -35,9 +35,6 @@ spec: - name: host-rootfs hostPath: path: / - - name: foundationdb - hostPath: - path: /var/foundationdb - name: etc-simplyblock hostPath: path: /var/simplyblock @@ -59,14 +56,6 @@ spec: hostPath: path: /var/log/pods - initContainers: - - name: copy-script - image: public.ecr.aws/simply-block/busybox - command: ["sh", "-c", "echo \"{{ FDB_CONNECTION }}\" > /etc/foundationdb/fdb.cluster"] - volumeMounts: - - name: foundationdb - mountPath: /etc/foundationdb - containers: - name: spdk-container image: {{ SPDK_IMAGE }} From 7d22d5d46a42985a622b402e523b6649fd3dabf3 Mon Sep 17 00:00:00 2001 From: geoffrey1330 Date: Fri, 15 May 2026 10:00:15 +0100 Subject: [PATCH 20/23] updated dockerfile --- docker/Dockerfile | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index ce1a83ae1..e296d18d7 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,6 +1,10 @@ # syntax=docker/dockerfile:1 FROM simplyblock/simplyblock:base_image +USER root + +RUN dnf install -y iproute procps-ng libcap-2.69-7.el10_1.1 openssh-9.9p1-14.el10_1 systemd-257-13.el10_1.3 + WORKDIR /app COPY requirements.txt . @@ -9,4 +13,10 @@ RUN pip3 install -r requirements.txt COPY . /app -RUN python setup.py install +RUN rm -rf /app/tests + +RUN python3 setup.py install + +RUN chown -R simplyblock:simplyblock /app + +USER simplyblock From ac514275196ce92b33371d226c06b1385eda5a5b Mon Sep 17 00:00:00 2001 From: geoffrey1330 Date: Fri, 15 May 2026 10:22:46 +0100 Subject: [PATCH 21/23] updated image registry --- simplyblock_core/env_var | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/simplyblock_core/env_var b/simplyblock_core/env_var index 3d8cf6017..dc9ceaf10 100644 --- a/simplyblock_core/env_var +++ b/simplyblock_core/env_var @@ -1,5 +1,5 @@ SIMPLY_BLOCK_COMMAND_NAME=sbcli-dev SIMPLY_BLOCK_VERSION=19.2.40 -SIMPLY_BLOCK_DOCKER_IMAGE=public.ecr.aws/simply-block/simplyblock:25.10.5 -SIMPLY_BLOCK_SPDK_ULTRA_IMAGE=public.ecr.aws/simply-block/ultra:R25.10.5-latest +SIMPLY_BLOCK_DOCKER_IMAGE=simplyblock/simplyblock:25.10.5 +SIMPLY_BLOCK_SPDK_ULTRA_IMAGE=simplyblock/spdk:R25.10.5-latest From 680847c760b655812f9163343cd72197ecf5c859 Mon Sep 17 00:00:00 2001 From: geoffrey1330 Date: Fri, 15 May 2026 10:31:24 +0100 Subject: [PATCH 22/23] run spdk proxy with sudo --- simplyblock_web/templates/storage_deploy_spdk.yaml.j2 | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/simplyblock_web/templates/storage_deploy_spdk.yaml.j2 b/simplyblock_web/templates/storage_deploy_spdk.yaml.j2 index 233d73426..91c10aa2b 100644 --- a/simplyblock_web/templates/storage_deploy_spdk.yaml.j2 +++ b/simplyblock_web/templates/storage_deploy_spdk.yaml.j2 @@ -120,7 +120,9 @@ spec: - name: spdk-proxy-container image: {{ SIMPLYBLOCK_DOCKER_IMAGE }} imagePullPolicy: "Always" - command: ["python", "simplyblock_core/services/spdk_http_proxy_server.py"] + command: ["sudo", "-E", "python3", "simplyblock_core/services/spdk_http_proxy_server.py"] + securityContext: + privileged: true volumeMounts: - name: socket-dir mountPath: /mnt/ramdisk From 81143474c192069106ad8a59af50c6b92138cb68 Mon Sep 17 00:00:00 2001 From: geoffrey1330 Date: Fri, 15 May 2026 11:45:55 +0100 Subject: [PATCH 23/23] remove use of sudo --- docker/Dockerfile | 14 ++------------ .../templates/storage_deploy_spdk.yaml.j2 | 4 +--- 2 files changed, 3 insertions(+), 15 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index e296d18d7..f1668e1c1 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,9 +1,5 @@ # syntax=docker/dockerfile:1 -FROM simplyblock/simplyblock:base_image - -USER root - -RUN dnf install -y iproute procps-ng libcap-2.69-7.el10_1.1 openssh-9.9p1-14.el10_1 systemd-257-13.el10_1.3 +FROM simplyblock/simplyblock:base_image_R25 WORKDIR /app @@ -13,10 +9,4 @@ RUN pip3 install -r requirements.txt COPY . /app -RUN rm -rf /app/tests - -RUN python3 setup.py install - -RUN chown -R simplyblock:simplyblock /app - -USER simplyblock +RUN python setup.py install diff --git a/simplyblock_web/templates/storage_deploy_spdk.yaml.j2 b/simplyblock_web/templates/storage_deploy_spdk.yaml.j2 index 91c10aa2b..233d73426 100644 --- a/simplyblock_web/templates/storage_deploy_spdk.yaml.j2 +++ b/simplyblock_web/templates/storage_deploy_spdk.yaml.j2 @@ -120,9 +120,7 @@ spec: - name: spdk-proxy-container image: {{ SIMPLYBLOCK_DOCKER_IMAGE }} imagePullPolicy: "Always" - command: ["sudo", "-E", "python3", "simplyblock_core/services/spdk_http_proxy_server.py"] - securityContext: - privileged: true + command: ["python", "simplyblock_core/services/spdk_http_proxy_server.py"] volumeMounts: - name: socket-dir mountPath: /mnt/ramdisk