This is an automated email from the ASF dual-hosted git repository.
rohit pushed a commit to branch 4.18
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/4.18 by this push:
new f731fe882c5 Storage plugin support to check if volume on datastore
requires access for migration (#8655)
f731fe882c5 is described below
commit f731fe882c5b8459a14da9a13269a8360df2743e
Author: Suresh Kumar Anaparti <[email protected]>
AuthorDate: Mon Feb 26 20:16:31 2024 +0530
Storage plugin support to check if volume on datastore requires access for
migration (#8655)
* Check if volume on datastore requires access for migration, and
grant/revoke volume access if requires
* Updated default implementation for requiresAccessForMigration method in
PrimaryDataStoreDriver
---
.../subsystem/api/storage/PrimaryDataStoreDriver.java | 4 ++++
.../engine/subsystem/api/storage/VolumeService.java | 2 ++
.../cloudstack/engine/orchestration/VolumeOrchestrator.java | 8 ++++----
.../apache/cloudstack/storage/volume/VolumeServiceImpl.java | 13 +++++++++++++
.../datastore/driver/ScaleIOPrimaryDataStoreDriver.java | 5 +++++
5 files changed, 28 insertions(+), 4 deletions(-)
diff --git
a/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreDriver.java
b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreDriver.java
index 540d4f6673a..4ab88c19316 100644
---
a/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreDriver.java
+++
b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreDriver.java
@@ -42,6 +42,10 @@ public interface PrimaryDataStoreDriver extends
DataStoreDriver {
void revokeAccess(DataObject dataObject, Host host, DataStore dataStore);
+ default boolean requiresAccessForMigration(DataObject dataObject) {
+ return false;
+ }
+
/**
* intended for managed storage (cloud.storage_pool.managed = true)
* if not managed, return volume.getSize()
diff --git
a/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/VolumeService.java
b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/VolumeService.java
index 2c12b70e9eb..a6ebf95a99c 100644
---
a/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/VolumeService.java
+++
b/engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/VolumeService.java
@@ -54,6 +54,8 @@ public interface VolumeService {
void revokeAccess(DataObject dataObject, Host host, DataStore dataStore);
+ boolean requiresAccessForMigration(DataObject dataObject, DataStore
dataStore);
+
/**
* Creates the volume based on the given criteria
*
diff --git
a/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java
b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java
index c3908795f7c..ec10c344157 100644
---
a/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java
+++
b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java
@@ -1228,8 +1228,8 @@ public class VolumeOrchestrator extends ManagerBase
implements VolumeOrchestrati
DataStore dataStore =
dataStoreMgr.getDataStore(volumeForVm.getPoolId(), DataStoreRole.Primary);
PrimaryDataStore primaryDataStore =
(PrimaryDataStore)dataStore;
- // This might impact other managed storages, grant access for
PowerFlex storage pool only
- if (primaryDataStore.isManaged() &&
primaryDataStore.getPoolType() == Storage.StoragePoolType.PowerFlex) {
+ // This might impact other managed storages, enable requires
access for migration in relevant datastore driver (currently enabled for
PowerFlex storage pool only)
+ if (primaryDataStore.isManaged() &&
volService.requiresAccessForMigration(volumeInfo, dataStore)) {
volService.revokeAccess(volumeInfo, host, dataStore);
}
}
@@ -1507,8 +1507,8 @@ public class VolumeOrchestrator extends ManagerBase
implements VolumeOrchestrati
disk.setDetails(getDetails(volumeInfo, dataStore));
PrimaryDataStore primaryDataStore = (PrimaryDataStore)dataStore;
- // This might impact other managed storages, grant access for
PowerFlex storage pool only
- if (primaryDataStore.isManaged() && primaryDataStore.getPoolType()
== Storage.StoragePoolType.PowerFlex) {
+ // This might impact other managed storages, enable requires
access for migration in relevant datastore driver (currently enabled for
PowerFlex storage pool only)
+ if (primaryDataStore.isManaged() &&
volService.requiresAccessForMigration(volumeInfo, dataStore)) {
volService.grantAccess(volFactory.getVolume(vol.getId()),
dest.getHost(), dataStore);
}
diff --git
a/engine/storage/volume/src/main/java/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java
b/engine/storage/volume/src/main/java/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java
index 47577cc52b2..03460d0d1e5 100644
---
a/engine/storage/volume/src/main/java/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java
+++
b/engine/storage/volume/src/main/java/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java
@@ -266,6 +266,19 @@ public class VolumeServiceImpl implements VolumeService {
}
}
+ @Override
+ public boolean requiresAccessForMigration(DataObject dataObject, DataStore
dataStore) {
+ DataStoreDriver dataStoreDriver = dataStore != null ?
dataStore.getDriver() : null;
+ if (dataStoreDriver == null) {
+ return false;
+ }
+
+ if (dataStoreDriver instanceof PrimaryDataStoreDriver) {
+ return
((PrimaryDataStoreDriver)dataStoreDriver).requiresAccessForMigration(dataObject);
+ }
+ return false;
+ }
+
@Override
public AsyncCallFuture<VolumeApiResult> createVolumeAsync(VolumeInfo
volume, DataStore dataStore) {
AsyncCallFuture<VolumeApiResult> future = new
AsyncCallFuture<VolumeApiResult>();
diff --git
a/plugins/storage/volume/scaleio/src/main/java/org/apache/cloudstack/storage/datastore/driver/ScaleIOPrimaryDataStoreDriver.java
b/plugins/storage/volume/scaleio/src/main/java/org/apache/cloudstack/storage/datastore/driver/ScaleIOPrimaryDataStoreDriver.java
index cad88dcdd15..431fddb566f 100644
---
a/plugins/storage/volume/scaleio/src/main/java/org/apache/cloudstack/storage/datastore/driver/ScaleIOPrimaryDataStoreDriver.java
+++
b/plugins/storage/volume/scaleio/src/main/java/org/apache/cloudstack/storage/datastore/driver/ScaleIOPrimaryDataStoreDriver.java
@@ -302,6 +302,11 @@ public class ScaleIOPrimaryDataStoreDriver implements
PrimaryDataStoreDriver {
return null;
}
+ @Override
+ public boolean requiresAccessForMigration(DataObject dataObject) {
+ return true;
+ }
+
@Override
public long getUsedBytes(StoragePool storagePool) {
long usedSpaceBytes = 0;