Skip to content

Commit f731fe8

Browse files
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
1 parent 18c3d47 commit f731fe8

File tree

5 files changed

+28
-4
lines changed

5 files changed

+28
-4
lines changed

engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreDriver.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,10 @@ enum QualityOfServiceState { MIGRATION, NO_MIGRATION }
4242

4343
void revokeAccess(DataObject dataObject, Host host, DataStore dataStore);
4444

45+
default boolean requiresAccessForMigration(DataObject dataObject) {
46+
return false;
47+
}
48+
4549
/**
4650
* intended for managed storage (cloud.storage_pool.managed = true)
4751
* if not managed, return volume.getSize()

engine/api/src/main/java/org/apache/cloudstack/engine/subsystem/api/storage/VolumeService.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ public VolumeInfo getVolume() {
5454

5555
void revokeAccess(DataObject dataObject, Host host, DataStore dataStore);
5656

57+
boolean requiresAccessForMigration(DataObject dataObject, DataStore dataStore);
58+
5759
/**
5860
* Creates the volume based on the given criteria
5961
*

engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1228,8 +1228,8 @@ public void release(long vmId, long hostId) {
12281228
DataStore dataStore = dataStoreMgr.getDataStore(volumeForVm.getPoolId(), DataStoreRole.Primary);
12291229
PrimaryDataStore primaryDataStore = (PrimaryDataStore)dataStore;
12301230

1231-
// This might impact other managed storages, grant access for PowerFlex storage pool only
1232-
if (primaryDataStore.isManaged() && primaryDataStore.getPoolType() == Storage.StoragePoolType.PowerFlex) {
1231+
// This might impact other managed storages, enable requires access for migration in relevant datastore driver (currently enabled for PowerFlex storage pool only)
1232+
if (primaryDataStore.isManaged() && volService.requiresAccessForMigration(volumeInfo, dataStore)) {
12331233
volService.revokeAccess(volumeInfo, host, dataStore);
12341234
}
12351235
}
@@ -1507,8 +1507,8 @@ public void prepareForMigration(VirtualMachineProfile vm, DeployDestination dest
15071507
disk.setDetails(getDetails(volumeInfo, dataStore));
15081508

15091509
PrimaryDataStore primaryDataStore = (PrimaryDataStore)dataStore;
1510-
// This might impact other managed storages, grant access for PowerFlex storage pool only
1511-
if (primaryDataStore.isManaged() && primaryDataStore.getPoolType() == Storage.StoragePoolType.PowerFlex) {
1510+
// This might impact other managed storages, enable requires access for migration in relevant datastore driver (currently enabled for PowerFlex storage pool only)
1511+
if (primaryDataStore.isManaged() && volService.requiresAccessForMigration(volumeInfo, dataStore)) {
15121512
volService.grantAccess(volFactory.getVolume(vol.getId()), dest.getHost(), dataStore);
15131513
}
15141514

engine/storage/volume/src/main/java/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,19 @@ public void revokeAccess(DataObject dataObject, Host host, DataStore dataStore)
266266
}
267267
}
268268

269+
@Override
270+
public boolean requiresAccessForMigration(DataObject dataObject, DataStore dataStore) {
271+
DataStoreDriver dataStoreDriver = dataStore != null ? dataStore.getDriver() : null;
272+
if (dataStoreDriver == null) {
273+
return false;
274+
}
275+
276+
if (dataStoreDriver instanceof PrimaryDataStoreDriver) {
277+
return ((PrimaryDataStoreDriver)dataStoreDriver).requiresAccessForMigration(dataObject);
278+
}
279+
return false;
280+
}
281+
269282
@Override
270283
public AsyncCallFuture<VolumeApiResult> createVolumeAsync(VolumeInfo volume, DataStore dataStore) {
271284
AsyncCallFuture<VolumeApiResult> future = new AsyncCallFuture<VolumeApiResult>();

plugins/storage/volume/scaleio/src/main/java/org/apache/cloudstack/storage/datastore/driver/ScaleIOPrimaryDataStoreDriver.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,11 @@ public String getConnectedSdc(long poolId, long hostId) {
302302
return null;
303303
}
304304

305+
@Override
306+
public boolean requiresAccessForMigration(DataObject dataObject) {
307+
return true;
308+
}
309+
305310
@Override
306311
public long getUsedBytes(StoragePool storagePool) {
307312
long usedSpaceBytes = 0;

0 commit comments

Comments
 (0)