From 121a35d6666dd5e22e0e315db5bfe7cab7191809 Mon Sep 17 00:00:00 2001 From: Rene Peinthor Date: Wed, 3 Jul 2024 12:43:16 +0200 Subject: [PATCH 1/2] linstor: do not use the same static ApiClient for all calls (#9326) The client.setBasePath() would overwrite the Linstor controller IP/host for all current client users. This is basically a race condition that triggered as soon as you had configured 2 different primary storages with different Linstor controllers. --- .../apache/cloudstack/storage/datastore/util/LinstorUtil.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/plugins/storage/volume/linstor/src/main/java/org/apache/cloudstack/storage/datastore/util/LinstorUtil.java b/plugins/storage/volume/linstor/src/main/java/org/apache/cloudstack/storage/datastore/util/LinstorUtil.java index a23a26bd9dc..9f4dbae7835 100644 --- a/plugins/storage/volume/linstor/src/main/java/org/apache/cloudstack/storage/datastore/util/LinstorUtil.java +++ b/plugins/storage/volume/linstor/src/main/java/org/apache/cloudstack/storage/datastore/util/LinstorUtil.java @@ -18,7 +18,6 @@ package org.apache.cloudstack.storage.datastore.util; import com.linbit.linstor.api.ApiClient; import com.linbit.linstor.api.ApiException; -import com.linbit.linstor.api.Configuration; import com.linbit.linstor.api.DevelopersApi; import com.linbit.linstor.api.model.ApiCallRc; import com.linbit.linstor.api.model.ApiCallRcList; @@ -46,7 +45,7 @@ public class LinstorUtil { public static final String CLUSTER_DEFAULT_MAX_IOPS = "clusterDefaultMaxIops"; public static DevelopersApi getLinstorAPI(String linstorUrl) { - ApiClient client = Configuration.getDefaultApiClient(); + ApiClient client = new ApiClient(); client.setBasePath(linstorUrl); return new DevelopersApi(client); } From eb1a0ef7f2b34d0ddea062d5feb6ea672f71de31 Mon Sep 17 00:00:00 2001 From: Rene Peinthor Date: Thu, 4 Jul 2024 14:05:01 +0200 Subject: [PATCH 2/2] linstor: deleteAsync fallback to volume UUID if path not set yet (#9325) --- .../datastore/driver/LinstorPrimaryDataStoreDriverImpl.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plugins/storage/volume/linstor/src/main/java/org/apache/cloudstack/storage/datastore/driver/LinstorPrimaryDataStoreDriverImpl.java b/plugins/storage/volume/linstor/src/main/java/org/apache/cloudstack/storage/datastore/driver/LinstorPrimaryDataStoreDriverImpl.java index 8b9b768d2a4..63b6ebce3c8 100644 --- a/plugins/storage/volume/linstor/src/main/java/org/apache/cloudstack/storage/datastore/driver/LinstorPrimaryDataStoreDriverImpl.java +++ b/plugins/storage/volume/linstor/src/main/java/org/apache/cloudstack/storage/datastore/driver/LinstorPrimaryDataStoreDriverImpl.java @@ -242,7 +242,9 @@ public class LinstorPrimaryDataStoreDriverImpl implements PrimaryDataStoreDriver case VOLUME: { final VolumeInfo volumeInfo = (VolumeInfo) dataObject; - final String rscName = LinstorUtil.RSC_PREFIX + volumeInfo.getPath(); + // if volume creation wasn't completely done .setPath wasn't called, so we fallback to vol.getUuid() + final String volUuid = volumeInfo.getPath() != null ? volumeInfo.getPath() : volumeInfo.getUuid(); + final String rscName = LinstorUtil.RSC_PREFIX + volUuid; deleteResourceDefinition(storagePool, rscName); long usedBytes = storagePool.getUsedBytes();