From 9c868911e11969bec3aa6f13174f67eb1b775dd8 Mon Sep 17 00:00:00 2001 From: YueGuobin Date: Wed, 6 May 2026 00:19:55 +0800 Subject: [PATCH] Fix: Use _computes instead of _project_created_on_compute for deletion check The initial fix used _project_created_on_compute to check for disconnected computes before deletion, but this set gets reset during project.open(), causing the check to fail. Now uses self._computes which is loaded from the topology file and persists through the open() call. Related: #2703 Co-Authored-By: Claude Sonnet 4.6 --- gns3server/controller/project.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/gns3server/controller/project.py b/gns3server/controller/project.py index 9cf43d215..cab967a99 100644 --- a/gns3server/controller/project.py +++ b/gns3server/controller/project.py @@ -1031,10 +1031,19 @@ class Project: log.warning(f"Conflict while deleting project: {e}") # Check if all computes used by this project are connected before deletion + # We need to check from the topology file because _project_created_on_compute + # gets reset during open() disconnected_computes = [] - for compute in self._project_created_on_compute: - if not compute.connected: - disconnected_computes.append(compute) + for compute_id in self._computes: + try: + compute = self._controller.get_compute(compute_id) + if not compute.connected: + disconnected_computes.append(compute) + except ControllerError: + # Compute doesn't exist anymore, consider it disconnected + log.warning(f"Compute '{compute_id}' not found in controller") + # We can't add it to disconnected_computes without the compute object + pass if disconnected_computes: compute_names = ", ".join([f"'{c.name}'" for c in disconnected_computes])