2222
2323import javax .inject .Inject ;
2424
25- import com .cloud .dc .dao .DataCenterDao ;
2625import org .apache .cloudstack .engine .subsystem .api .storage .ClusterScope ;
2726import org .apache .cloudstack .engine .subsystem .api .storage .DataStore ;
27+ import org .apache .cloudstack .storage .datastore .db .PrimaryDataStoreDao ;
28+ import org .apache .cloudstack .storage .datastore .db .StoragePoolVO ;
2829import org .apache .cloudstack .storage .volume .datastore .PrimaryDataStoreHelper ;
2930
3031import com .cloud .agent .AgentManager ;
3132import com .cloud .agent .api .Answer ;
3233import com .cloud .agent .api .DeleteStoragePoolCommand ;
34+ import com .cloud .dc .dao .DataCenterDao ;
3335import com .cloud .host .HostVO ;
3436import com .cloud .host .dao .HostDao ;
3537import com .cloud .hypervisor .Hypervisor .HypervisorType ;
3638import com .cloud .resource .ResourceManager ;
3739import com .cloud .storage .StorageManager ;
3840import com .cloud .storage .StoragePool ;
3941import com .cloud .storage .StoragePoolHostVO ;
42+ import com .cloud .storage .VMTemplateStoragePoolVO ;
43+ import com .cloud .storage .VMTemplateStorageResourceAssoc ;
4044import com .cloud .storage .dao .StoragePoolHostDao ;
45+ import com .cloud .template .TemplateManager ;
4146import com .cloud .utils .Pair ;
47+
4248import org .apache .logging .log4j .LogManager ;
4349import org .apache .logging .log4j .Logger ;
4450
@@ -59,6 +65,10 @@ public class BasePrimaryDataStoreLifeCycleImpl {
5965 protected DataCenterDao zoneDao ;
6066 @ Inject
6167 protected StoragePoolHostDao storagePoolHostDao ;
68+ @ Inject
69+ private PrimaryDataStoreDao primaryDataStoreDao ;
70+ @ Inject
71+ private TemplateManager templateMgr ;
6272
6373 private List <HostVO > getPoolHostsList (ClusterScope clusterScope , HypervisorType hypervisorType ) {
6474 List <HostVO > hosts ;
@@ -81,7 +91,7 @@ public void changeStoragePoolScopeToZone(DataStore store, ClusterScope clusterSc
8191 try {
8292 storageMgr .connectHostToSharedPool (host , store .getId ());
8393 } catch (Exception e ) {
84- logger .warn ("Unable to establish a connection between " + host + " and " + store , e );
94+ logger .warn ("Unable to establish a connection between {} and {}" , host , store , e );
8595 }
8696 }
8797 }
@@ -99,7 +109,7 @@ public void changeStoragePoolScopeToCluster(DataStore store, ClusterScope cluste
99109
100110 if (answer != null ) {
101111 if (!answer .getResult ()) {
102- logger .debug ("Failed to delete storage pool: " + answer .getResult ());
112+ logger .debug ("Failed to delete storage pool: {}" , answer .getResult ());
103113 } else if (HypervisorType .KVM != hypervisorType ) {
104114 break ;
105115 }
@@ -108,4 +118,42 @@ public void changeStoragePoolScopeToCluster(DataStore store, ClusterScope cluste
108118 }
109119 dataStoreHelper .switchToCluster (store , clusterScope );
110120 }
121+
122+ private void evictTemplates (StoragePoolVO storagePoolVO ) {
123+ List <VMTemplateStoragePoolVO > unusedTemplatesInPool = templateMgr .getUnusedTemplatesInPool (storagePoolVO );
124+ for (VMTemplateStoragePoolVO templatePoolVO : unusedTemplatesInPool ) {
125+ if (templatePoolVO .getDownloadState () == VMTemplateStorageResourceAssoc .Status .DOWNLOADED ) {
126+ templateMgr .evictTemplateFromStoragePool (templatePoolVO );
127+ }
128+ }
129+ }
130+
131+ private void deleteAgentStoragePools (StoragePool storagePool ) {
132+ List <StoragePoolHostVO > poolHostVOs = storagePoolHostDao .listByPoolId (storagePool .getId ());
133+ for (StoragePoolHostVO poolHostVO : poolHostVOs ) {
134+ DeleteStoragePoolCommand deleteStoragePoolCommand = new DeleteStoragePoolCommand (storagePool );
135+ final Answer answer = agentMgr .easySend (poolHostVO .getHostId (), deleteStoragePoolCommand );
136+ if (answer != null && answer .getResult ()) {
137+ logger .info ("Successfully deleted storage pool: {} from host: {}" , storagePool .getId (), poolHostVO .getHostId ());
138+ } else {
139+ if (answer != null ) {
140+ logger .error ("Failed to delete storage pool: {} from host: {} , result: {}" , storagePool .getId (), poolHostVO .getHostId (), answer .getResult ());
141+ } else {
142+ logger .error ("Failed to delete storage pool: {} from host: {}" , storagePool .getId (), poolHostVO .getHostId ());
143+ }
144+ }
145+ }
146+ }
147+
148+ protected boolean cleanupDatastore (DataStore store ) {
149+ StoragePool storagePool = (StoragePool )store ;
150+ StoragePoolVO storagePoolVO = primaryDataStoreDao .findById (storagePool .getId ());
151+ if (storagePoolVO == null ) {
152+ return false ;
153+ }
154+
155+ evictTemplates (storagePoolVO );
156+ deleteAgentStoragePools (storagePool );
157+ return true ;
158+ }
111159}
0 commit comments