This is an automated email from the ASF dual-hosted git repository.
dahn pushed a commit to branch 4.19
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/4.19 by this push:
new 95c24810ab4 linstor: try to delete -rst resource before snapshot
backup (#10443)
95c24810ab4 is described below
commit 95c24810ab43810550ed70b3ebc4ba131082f7d3
Author: Rene Peinthor <[email protected]>
AuthorDate: Mon Mar 10 16:23:01 2025 +0100
linstor: try to delete -rst resource before snapshot backup (#10443)
If a -rst resource wasn't deleted because of a failed copy,
a reoccurring snapshot attempt couldn't be done, because there
was still the "old" -rst resource. To prevent this always
try to remove the -rst resource before, if it doesn't exist it is a noop.
---
plugins/storage/volume/linstor/CHANGELOG.md | 6 +++++
.../driver/LinstorPrimaryDataStoreDriverImpl.java | 29 +++++++++++++---------
2 files changed, 23 insertions(+), 12 deletions(-)
diff --git a/plugins/storage/volume/linstor/CHANGELOG.md
b/plugins/storage/volume/linstor/CHANGELOG.md
index fb247eef5df..e27e521bcd8 100644
--- a/plugins/storage/volume/linstor/CHANGELOG.md
+++ b/plugins/storage/volume/linstor/CHANGELOG.md
@@ -5,6 +5,12 @@ All notable changes to Linstor CloudStack plugin will be
documented in this file
The format is based on [Keep a
Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic
Versioning](https://semver.org/spec/v2.0.0.html).
+## [2025-02-21]
+
+### Fixed
+
+- Always try to delete cs-...-rst resource before doing a snapshot backup
+
## [2025-01-27]
### Fixed
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 22cb4eb8911..a0cb5d17444 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
@@ -1117,6 +1117,8 @@ public class LinstorPrimaryDataStoreDriverImpl implements
PrimaryDataStoreDriver
String snapshotName,
String restoredName) throws ApiException {
final String rscGrp = getRscGrp(storagePoolVO);
+ // try to delete -rst resource, could happen if the copy failed and
noone deleted it.
+ deleteResourceDefinition(storagePoolVO, restoredName);
ResourceDefinitionCreate rdc =
createResourceDefinitionCreate(restoredName, rscGrp);
api.resourceDefinitionCreate(rdc);
@@ -1259,19 +1261,22 @@ public class LinstorPrimaryDataStoreDriverImpl
implements PrimaryDataStoreDriver
throws ApiException {
Answer answer;
String restoreName = rscName + "-rst";
- String devName = restoreResourceFromSnapshot(api, pool, rscName,
snapshotName, restoreName);
-
- Optional<RemoteHostEndPoint> optEPAny = getLinstorEP(api, restoreName);
- if (optEPAny.isPresent()) {
- // patch the src device path to the temporary linstor resource
- snapshotObject.setPath(devName);
- origCmd.setSrcTO(snapshotObject.getTO());
- answer = optEPAny.get().sendMessage(origCmd);
- } else{
- answer = new Answer(origCmd, false, "Unable to get matching
Linstor endpoint.");
+ try {
+ String devName = restoreResourceFromSnapshot(api, pool, rscName,
snapshotName, restoreName);
+
+ Optional<RemoteHostEndPoint> optEPAny = getLinstorEP(api,
restoreName);
+ if (optEPAny.isPresent()) {
+ // patch the src device path to the temporary linstor resource
+ snapshotObject.setPath(devName);
+ origCmd.setSrcTO(snapshotObject.getTO());
+ answer = optEPAny.get().sendMessage(origCmd);
+ } else{
+ answer = new Answer(origCmd, false, "Unable to get matching
Linstor endpoint.");
+ }
+ } finally {
+ // delete the temporary resource, noop if already gone
+ api.resourceDefinitionDelete(restoreName);
}
- // delete the temporary resource, noop if already gone
- api.resourceDefinitionDelete(restoreName);
return answer;
}