Skip to content

Commit 001d144

Browse files
committed
linstor: implement missing deleteDatastore
Somehow deleteDatastore was never implemented, that meant: templates haven't been cleaned up on datastore delete and also agents have never been informed about storage pool removal.
1 parent 95c2481 commit 001d144

File tree

2 files changed

+41
-0
lines changed

2 files changed

+41
-0
lines changed

plugins/storage/volume/linstor/CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,12 @@ All notable changes to Linstor CloudStack plugin will be documented in this file
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [2025-03-13]
9+
10+
### Fixed
11+
12+
- Implemented missing delete datastore, to correctly cleanup on datastore removal
13+
814
## [2025-02-21]
915

1016
### Fixed

plugins/storage/volume/linstor/src/main/java/org/apache/cloudstack/storage/datastore/lifecycle/LinstorPrimaryDataStoreLifeCycleImpl.java

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import com.cloud.agent.AgentManager;
2828
import com.cloud.agent.api.Answer;
2929
import com.cloud.agent.api.CreateStoragePoolCommand;
30+
import com.cloud.agent.api.DeleteStoragePoolCommand;
3031
import com.cloud.agent.api.StoragePoolInfo;
3132
import com.cloud.capacity.CapacityManager;
3233
import com.cloud.dc.ClusterVO;
@@ -39,6 +40,10 @@
3940
import com.cloud.storage.StorageManager;
4041
import com.cloud.storage.StoragePool;
4142
import com.cloud.storage.StoragePoolAutomation;
43+
import com.cloud.storage.StoragePoolHostVO;
44+
import com.cloud.storage.VMTemplateStoragePoolVO;
45+
import com.cloud.storage.VMTemplateStorageResourceAssoc;
46+
import com.cloud.template.TemplateManager;
4247
import com.cloud.utils.exception.CloudRuntimeException;
4348
import org.apache.cloudstack.engine.subsystem.api.storage.ClusterScope;
4449
import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
@@ -71,6 +76,8 @@ public class LinstorPrimaryDataStoreLifeCycleImpl extends BasePrimaryDataStoreLi
7176
@Inject
7277
private CapacityManager _capacityMgr;
7378
@Inject
79+
private TemplateManager templateMgr;
80+
@Inject
7481
AgentManager _agentMgr;
7582

7683
public LinstorPrimaryDataStoreLifeCycleImpl()
@@ -289,6 +296,34 @@ public boolean cancelMaintain(DataStore store) {
289296

290297
@Override
291298
public boolean deleteDataStore(DataStore store) {
299+
StoragePool storagePool = (StoragePool)store;
300+
StoragePoolVO storagePoolVO = _primaryDataStoreDao.findById(storagePool.getId());
301+
if (storagePoolVO == null) {
302+
return false;
303+
}
304+
305+
List<VMTemplateStoragePoolVO> unusedTemplatesInPool = templateMgr.getUnusedTemplatesInPool(storagePoolVO);
306+
for (VMTemplateStoragePoolVO templatePoolVO : unusedTemplatesInPool) {
307+
if (templatePoolVO.getDownloadState() == VMTemplateStorageResourceAssoc.Status.DOWNLOADED) {
308+
templateMgr.evictTemplateFromStoragePool(templatePoolVO);
309+
}
310+
}
311+
312+
List<StoragePoolHostVO> poolHostVOs = storagePoolHostDao.listByPoolId(store.getId());
313+
for (StoragePoolHostVO poolHostVO : poolHostVOs) {
314+
DeleteStoragePoolCommand deleteStoragePoolCommand = new DeleteStoragePoolCommand(storagePool);
315+
final Answer answer = agentMgr.easySend(poolHostVO.getHostId(), deleteStoragePoolCommand);
316+
if (answer != null && answer.getResult()) {
317+
s_logger.info("Successfully deleted storage pool: " + storagePool.getId() + " from host: " + poolHostVO.getHostId());
318+
} else {
319+
if (answer != null) {
320+
s_logger.error("Failed to delete storage pool: " + storagePool.getId() + " from host: " + poolHostVO.getHostId() + " , result: " + answer.getResult());
321+
} else {
322+
s_logger.error("Failed to delete storage pool: " + storagePool.getId() + " from host: " + poolHostVO.getHostId());
323+
}
324+
}
325+
}
326+
292327
return dataStoreHelper.deletePrimaryDataStore(store);
293328
}
294329

0 commit comments

Comments
 (0)