Skip to content

Commit a6abcce

Browse files
committed
xenserver/xcpng: do not bypass secondary storage when copy volumes between pools
1 parent be38fcc commit a6abcce

2 files changed

Lines changed: 23 additions & 0 deletions

File tree

engine/storage/datamotion/src/main/java/org/apache/cloudstack/storage/motion/AncientDataMotionStrategy.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -556,7 +556,15 @@ private boolean canBypassSecondaryStorage(DataObject srcData, DataObject destDat
556556
return true;
557557
}
558558

559+
if (Hypervisor.HypervisorType.XenServer.equals(((VolumeInfo) srcData).getHypervisorType())) {
560+
return false;
561+
}
562+
559563
if (destData instanceof VolumeInfo) {
564+
if (Hypervisor.HypervisorType.XenServer.equals(((VolumeInfo) destData).getHypervisorType())) {
565+
return false;
566+
}
567+
560568
Scope srcDataStoreScope = srcData.getDataStore().getScope();
561569
Scope destDataStoreScope = destData.getDataStore().getScope();
562570
logger.info("srcDataStoreScope: {}, srcData pool type: {}; destDataStoreScope: {}, destData pool type: {}",

engine/storage/datamotion/src/test/java/org/apache/cloudstack/storage/motion/AncientDataMotionStrategyTest.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ public void testCanBypassSecondaryStorageForDirectDownload() throws NoSuchMethod
143143
@Test
144144
public void testCanBypassSecondaryStorageForUnsupportedDataObject() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
145145
VolumeObject srcVolumeInfo = Mockito.spy(new VolumeObject());
146+
Mockito.doReturn(HypervisorType.KVM).when(srcVolumeInfo).getHypervisorType();
146147

147148
TemplateObject destTemplateInfo = Mockito.spy(new TemplateObject());
148149

@@ -156,12 +157,14 @@ public void testCanBypassSecondaryStorageForUnsupportedDataObject() throws NoSuc
156157
@Test
157158
public void testCanBypassSecondaryStorageForUnsupportedSrcPoolType() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
158159
VolumeObject srcVolumeInfo = Mockito.spy(new VolumeObject());
160+
Mockito.doReturn(HypervisorType.KVM).when(srcVolumeInfo).getHypervisorType();
159161
DataStore srcDataStore = Mockito.mock(DataStore.class);
160162
Mockito.doReturn(new ZoneScope(1L)).when(srcDataStore).getScope();
161163
Mockito.doReturn(srcDataStore).when(srcVolumeInfo).getDataStore();
162164
Mockito.doReturn(Storage.StoragePoolType.PowerFlex).when(srcVolumeInfo).getStoragePoolType();
163165

164166
VolumeObject destVolumeInfo = Mockito.spy(new VolumeObject());
167+
Mockito.doReturn(HypervisorType.KVM).when(destVolumeInfo).getHypervisorType();
165168
DataStore destDataStore = Mockito.mock(DataStore.class);
166169
Mockito.doReturn(new ZoneScope(1L)).when(destDataStore).getScope();
167170
Mockito.doReturn(destDataStore).when(destVolumeInfo).getDataStore();
@@ -177,12 +180,14 @@ public void testCanBypassSecondaryStorageForUnsupportedSrcPoolType() throws NoSu
177180
@Test
178181
public void testCanBypassSecondaryStorageForUnsupportedDestPoolType() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
179182
VolumeObject srcVolumeInfo = Mockito.spy(new VolumeObject());
183+
Mockito.doReturn(HypervisorType.KVM).when(srcVolumeInfo).getHypervisorType();
180184
DataStore srcDataStore = Mockito.mock(DataStore.class);
181185
Mockito.doReturn(new ZoneScope(1L)).when(srcDataStore).getScope();
182186
Mockito.doReturn(srcDataStore).when(srcVolumeInfo).getDataStore();
183187
Mockito.doReturn(Storage.StoragePoolType.NetworkFilesystem).when(srcVolumeInfo).getStoragePoolType();
184188

185189
VolumeObject destVolumeInfo = Mockito.spy(new VolumeObject());
190+
Mockito.doReturn(HypervisorType.KVM).when(destVolumeInfo).getHypervisorType();
186191
DataStore destDataStore = Mockito.mock(DataStore.class);
187192
Mockito.doReturn(new ZoneScope(1L)).when(destDataStore).getScope();
188193
Mockito.doReturn(destDataStore).when(destVolumeInfo).getDataStore();
@@ -198,12 +203,14 @@ public void testCanBypassSecondaryStorageForUnsupportedDestPoolType() throws NoS
198203
@Test
199204
public void testCanBypassSecondaryStorageWithZoneWideNFSPoolsInSameZone() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
200205
VolumeObject srcVolumeInfo = Mockito.spy(new VolumeObject());
206+
Mockito.doReturn(HypervisorType.KVM).when(srcVolumeInfo).getHypervisorType();
201207
DataStore srcDataStore = Mockito.mock(DataStore.class);
202208
Mockito.doReturn(new ZoneScope(1L)).when(srcDataStore).getScope();
203209
Mockito.doReturn(srcDataStore).when(srcVolumeInfo).getDataStore();
204210
Mockito.doReturn(Storage.StoragePoolType.NetworkFilesystem).when(srcVolumeInfo).getStoragePoolType();
205211

206212
VolumeObject destVolumeInfo = Mockito.spy(new VolumeObject());
213+
Mockito.doReturn(HypervisorType.KVM).when(destVolumeInfo).getHypervisorType();
207214
DataStore destDataStore = Mockito.mock(DataStore.class);
208215
Mockito.doReturn(new ZoneScope(1L)).when(destDataStore).getScope();
209216
Mockito.doReturn(destDataStore).when(destVolumeInfo).getDataStore();
@@ -219,12 +226,14 @@ public void testCanBypassSecondaryStorageWithZoneWideNFSPoolsInSameZone() throws
219226
@Test
220227
public void testCanBypassSecondaryStorageWithClusterWideNFSPoolsInSameCluster() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
221228
VolumeObject srcVolumeInfo = Mockito.spy(new VolumeObject());
229+
Mockito.doReturn(HypervisorType.KVM).when(srcVolumeInfo).getHypervisorType();
222230
DataStore srcDataStore = Mockito.mock(DataStore.class);
223231
Mockito.doReturn(new ClusterScope(5L, 2L, 1L)).when(srcDataStore).getScope();
224232
Mockito.doReturn(srcDataStore).when(srcVolumeInfo).getDataStore();
225233
Mockito.doReturn(Storage.StoragePoolType.NetworkFilesystem).when(srcVolumeInfo).getStoragePoolType();
226234

227235
VolumeObject destVolumeInfo = Mockito.spy(new VolumeObject());
236+
Mockito.doReturn(HypervisorType.KVM).when(destVolumeInfo).getHypervisorType();
228237
DataStore destDataStore = Mockito.mock(DataStore.class);
229238
Mockito.doReturn(new ClusterScope(5L, 2L, 1L)).when(destDataStore).getScope();
230239
Mockito.doReturn(destDataStore).when(destVolumeInfo).getDataStore();
@@ -240,12 +249,14 @@ public void testCanBypassSecondaryStorageWithClusterWideNFSPoolsInSameCluster()
240249
@Test
241250
public void testCanBypassSecondaryStorageWithLocalAndClusterWideNFSPoolsInSameCluster() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
242251
VolumeObject srcVolumeInfo = Mockito.spy(new VolumeObject());
252+
Mockito.doReturn(HypervisorType.KVM).when(srcVolumeInfo).getHypervisorType();
243253
DataStore srcDataStore = Mockito.mock(DataStore.class);
244254
Mockito.doReturn(new HostScope(1L, 1L, 1L)).when(srcDataStore).getScope();
245255
Mockito.doReturn(srcDataStore).when(srcVolumeInfo).getDataStore();
246256
Mockito.doReturn(Storage.StoragePoolType.Filesystem).when(srcVolumeInfo).getStoragePoolType();
247257

248258
VolumeObject destVolumeInfo = Mockito.spy(new VolumeObject());
259+
Mockito.doReturn(HypervisorType.KVM).when(destVolumeInfo).getHypervisorType();
249260
DataStore destDataStore = Mockito.mock(DataStore.class);
250261
Mockito.doReturn(new ClusterScope(1L, 1L, 1L)).when(destDataStore).getScope();
251262
Mockito.doReturn(destDataStore).when(destVolumeInfo).getDataStore();
@@ -264,12 +275,14 @@ public void testCanBypassSecondaryStorageWithLocalAndClusterWideNFSPoolsInSameCl
264275
@Test
265276
public void testCanBypassSecondaryStorageWithLocalAndZoneWideNFSPoolsInSameZone() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
266277
VolumeObject srcVolumeInfo = Mockito.spy(new VolumeObject());
278+
Mockito.doReturn(HypervisorType.KVM).when(srcVolumeInfo).getHypervisorType();
267279
DataStore srcDataStore = Mockito.mock(DataStore.class);
268280
Mockito.doReturn(new HostScope(1L, 1L, 1L)).when(srcDataStore).getScope();
269281
Mockito.doReturn(srcDataStore).when(srcVolumeInfo).getDataStore();
270282
Mockito.doReturn(Storage.StoragePoolType.Filesystem).when(srcVolumeInfo).getStoragePoolType();
271283

272284
VolumeObject destVolumeInfo = Mockito.spy(new VolumeObject());
285+
Mockito.doReturn(HypervisorType.KVM).when(destVolumeInfo).getHypervisorType();
273286
DataStore destDataStore = Mockito.mock(DataStore.class);
274287
Mockito.doReturn(new ZoneScope(1L)).when(destDataStore).getScope();
275288
Mockito.doReturn(destDataStore).when(destVolumeInfo).getDataStore();
@@ -288,12 +301,14 @@ public void testCanBypassSecondaryStorageWithLocalAndZoneWideNFSPoolsInSameZone(
288301
@Test
289302
public void testCanBypassSecondaryStorageWithClusterWideNFSAndZoneWideNFSPoolsInSameZone() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
290303
VolumeObject srcVolumeInfo = Mockito.spy(new VolumeObject());
304+
Mockito.doReturn(HypervisorType.KVM).when(srcVolumeInfo).getHypervisorType();
291305
DataStore srcDataStore = Mockito.mock(DataStore.class);
292306
Mockito.doReturn(new ClusterScope(5L, 2L, 1L)).when(srcDataStore).getScope();
293307
Mockito.doReturn(srcDataStore).when(srcVolumeInfo).getDataStore();
294308
Mockito.doReturn(Storage.StoragePoolType.NetworkFilesystem).when(srcVolumeInfo).getStoragePoolType();
295309

296310
VolumeObject destVolumeInfo = Mockito.spy(new VolumeObject());
311+
Mockito.doReturn(HypervisorType.KVM).when(destVolumeInfo).getHypervisorType();
297312
DataStore destDataStore = Mockito.mock(DataStore.class);
298313
Mockito.doReturn(new ZoneScope(1L)).when(destDataStore).getScope();
299314
Mockito.doReturn(destDataStore).when(destVolumeInfo).getDataStore();

0 commit comments

Comments
 (0)