From b7572d5c0884db36a087b6824d6ac1709b7f9dbd Mon Sep 17 00:00:00 2001 From: J M Date: Thu, 15 Jan 2026 12:00:37 +0800 Subject: [PATCH] [storage]: bypass space helper when multi space not support use factory for different storage later Resolves: ZSTAC-81333 Change-Id: I746c646a6974627a636c7a6b7362736378627876 --- .../addon/primary/ExternalPrimaryStorage.java | 14 ++++++++++---- .../ExternalPrimaryStorageSpaceCapacityHelper.java | 10 ++++++---- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/storage/src/main/java/org/zstack/storage/addon/primary/ExternalPrimaryStorage.java b/storage/src/main/java/org/zstack/storage/addon/primary/ExternalPrimaryStorage.java index 689c2510d9..1a0102c697 100644 --- a/storage/src/main/java/org/zstack/storage/addon/primary/ExternalPrimaryStorage.java +++ b/storage/src/main/java/org/zstack/storage/addon/primary/ExternalPrimaryStorage.java @@ -1594,8 +1594,11 @@ protected void handle(DeleteVolumeOnPrimaryStorageMsg msg) { trashVolume(msg.getVolume().getInstallPath(), msg.getVolume().getProtocol(), force, new Completion(msg) { @Override public void success() { - ExternalPrimaryStorageSpaceCapacityHelper helper = new ExternalPrimaryStorageSpaceCapacityHelper(self.getUuid(), controller.getIdentity()); - helper.releaseAvailableCapWithRatio(msg.getVolume().getInstallPath(), msg.getVolume().getSize()); + if (controller.reportCapabilities().isSupportMultiSpace()) { + ExternalPrimaryStorageSpaceCapacityHelper helper = new ExternalPrimaryStorageSpaceCapacityHelper(self.getUuid(), controller.getIdentity()); + helper.releaseAvailableCapWithRatio(msg.getVolume().getInstallPath(), msg.getVolume().getSize()); + } + bus.reply(msg, reply); } @@ -1808,8 +1811,11 @@ protected void handle(DeleteSnapshotOnPrimaryStorageMsg msg) { controller.deleteSnapshot(msg.getSnapshot().getPrimaryStorageInstallPath(), new Completion(msg) { @Override public void success() { - ExternalPrimaryStorageSpaceCapacityHelper helper = new ExternalPrimaryStorageSpaceCapacityHelper(self.getUuid(), controller.getIdentity()); - helper.releaseAvailableCapacity(msg.getSnapshot().getPrimaryStorageInstallPath(), msg.getSnapshot().getSize()); + if (controller.reportCapabilities().isSupportMultiSpace()) { + ExternalPrimaryStorageSpaceCapacityHelper helper = new ExternalPrimaryStorageSpaceCapacityHelper(self.getUuid(), controller.getIdentity()); + helper.releaseAvailableCapacity(msg.getSnapshot().getPrimaryStorageInstallPath(), msg.getSnapshot().getSize()); + } + bus.reply(msg, reply); } diff --git a/storage/src/main/java/org/zstack/storage/addon/primary/ExternalPrimaryStorageSpaceCapacityHelper.java b/storage/src/main/java/org/zstack/storage/addon/primary/ExternalPrimaryStorageSpaceCapacityHelper.java index b766789fc4..6bacc9dbfe 100644 --- a/storage/src/main/java/org/zstack/storage/addon/primary/ExternalPrimaryStorageSpaceCapacityHelper.java +++ b/storage/src/main/java/org/zstack/storage/addon/primary/ExternalPrimaryStorageSpaceCapacityHelper.java @@ -51,12 +51,16 @@ public class ExternalPrimaryStorageSpaceCapacityHelper extends ExternalPrimarySt private String spaceName; private Map storageSpacesByUrl; + // TODO: use factory to create helper, diff capabilities helper for diff types + @Deprecated public ExternalPrimaryStorageSpaceCapacityHelper(ExternalPrimaryStorageVO ps) { super(ps); this.primaryStorageUuid = ps.getUuid(); this.spaceName = ps.getIdentity(); } + // TODO: use factory to create helper, diff capabilities helper for diff types + @Deprecated public ExternalPrimaryStorageSpaceCapacityHelper(String psUuid, String identity) { super(psUuid, identity); this.primaryStorageUuid = psUuid; @@ -116,10 +120,8 @@ protected void updateStorageSpace(StorageCapacity cap) { } private ExternalPrimaryStorageSpaceVO getSpaceFromInstallUrl(String installPath) { - Map spacesByUrl = getStorageSpacesByUrl(); - String spaceUrl = spacesByUrl.keySet().stream().filter(installPath::startsWith) - .findFirst().orElseThrow(() -> new OperationFailureException(operr(ORG_ZSTACK_STORAGE_ADDON_PRIMARY_10002, "cannot find storage space for installPath[%s]", installPath))); - return spacesByUrl.get(spaceUrl); + String spaceUrl = getLocationSpaceUrl(installPath); + return getStorageSpacesByUrl().get(spaceUrl); } @DeadlockAutoRestart