Skip to content

Commit a8c8c18

Browse files
xenserver/xcpng: do not bypass secondary storage when copy volumes between pools (#13750)
1 parent cffa6e3 commit a8c8c18

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
@@ -472,7 +472,15 @@ private boolean canBypassSecondaryStorage(DataObject srcData, DataObject destDat
472472
return true;
473473
}
474474

475+
if (Hypervisor.HypervisorType.XenServer.equals(((VolumeInfo) srcData).getHypervisorType())) {
476+
return false;
477+
}
478+
475479
if (destData instanceof VolumeInfo) {
480+
if (Hypervisor.HypervisorType.XenServer.equals(((VolumeInfo) destData).getHypervisorType())) {
481+
return false;
482+
}
483+
476484
Scope srcDataStoreScope = srcData.getDataStore().getScope();
477485
Scope destDataStoreScope = destData.getDataStore().getScope();
478486
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
@@ -123,6 +123,7 @@ public void testCanBypassSecondaryStorageForDirectDownload() throws NoSuchMethod
123123
@Test
124124
public void testCanBypassSecondaryStorageForUnsupportedDataObject() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
125125
VolumeObject srcVolumeInfo = Mockito.spy(new VolumeObject());
126+
Mockito.doReturn(HypervisorType.KVM).when(srcVolumeInfo).getHypervisorType();
126127

127128
TemplateObject destTemplateInfo = Mockito.spy(new TemplateObject());
128129

@@ -136,12 +137,14 @@ public void testCanBypassSecondaryStorageForUnsupportedDataObject() throws NoSuc
136137
@Test
137138
public void testCanBypassSecondaryStorageForUnsupportedSrcPoolType() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
138139
VolumeObject srcVolumeInfo = Mockito.spy(new VolumeObject());
140+
Mockito.doReturn(HypervisorType.KVM).when(srcVolumeInfo).getHypervisorType();
139141
DataStore srcDataStore = Mockito.mock(DataStore.class);
140142
Mockito.doReturn(new ZoneScope(1L)).when(srcDataStore).getScope();
141143
Mockito.doReturn(srcDataStore).when(srcVolumeInfo).getDataStore();
142144
Mockito.doReturn(Storage.StoragePoolType.PowerFlex).when(srcVolumeInfo).getStoragePoolType();
143145

144146
VolumeObject destVolumeInfo = Mockito.spy(new VolumeObject());
147+
Mockito.doReturn(HypervisorType.KVM).when(destVolumeInfo).getHypervisorType();
145148
DataStore destDataStore = Mockito.mock(DataStore.class);
146149
Mockito.doReturn(new ZoneScope(1L)).when(destDataStore).getScope();
147150
Mockito.doReturn(destDataStore).when(destVolumeInfo).getDataStore();
@@ -157,12 +160,14 @@ public void testCanBypassSecondaryStorageForUnsupportedSrcPoolType() throws NoSu
157160
@Test
158161
public void testCanBypassSecondaryStorageForUnsupportedDestPoolType() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
159162
VolumeObject srcVolumeInfo = Mockito.spy(new VolumeObject());
163+
Mockito.doReturn(HypervisorType.KVM).when(srcVolumeInfo).getHypervisorType();
160164
DataStore srcDataStore = Mockito.mock(DataStore.class);
161165
Mockito.doReturn(new ZoneScope(1L)).when(srcDataStore).getScope();
162166
Mockito.doReturn(srcDataStore).when(srcVolumeInfo).getDataStore();
163167
Mockito.doReturn(Storage.StoragePoolType.NetworkFilesystem).when(srcVolumeInfo).getStoragePoolType();
164168

165169
VolumeObject destVolumeInfo = Mockito.spy(new VolumeObject());
170+
Mockito.doReturn(HypervisorType.KVM).when(destVolumeInfo).getHypervisorType();
166171
DataStore destDataStore = Mockito.mock(DataStore.class);
167172
Mockito.doReturn(new ZoneScope(1L)).when(destDataStore).getScope();
168173
Mockito.doReturn(destDataStore).when(destVolumeInfo).getDataStore();
@@ -178,12 +183,14 @@ public void testCanBypassSecondaryStorageForUnsupportedDestPoolType() throws NoS
178183
@Test
179184
public void testCanBypassSecondaryStorageWithZoneWideNFSPoolsInSameZone() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
180185
VolumeObject srcVolumeInfo = Mockito.spy(new VolumeObject());
186+
Mockito.doReturn(HypervisorType.KVM).when(srcVolumeInfo).getHypervisorType();
181187
DataStore srcDataStore = Mockito.mock(DataStore.class);
182188
Mockito.doReturn(new ZoneScope(1L)).when(srcDataStore).getScope();
183189
Mockito.doReturn(srcDataStore).when(srcVolumeInfo).getDataStore();
184190
Mockito.doReturn(Storage.StoragePoolType.NetworkFilesystem).when(srcVolumeInfo).getStoragePoolType();
185191

186192
VolumeObject destVolumeInfo = Mockito.spy(new VolumeObject());
193+
Mockito.doReturn(HypervisorType.KVM).when(destVolumeInfo).getHypervisorType();
187194
DataStore destDataStore = Mockito.mock(DataStore.class);
188195
Mockito.doReturn(new ZoneScope(1L)).when(destDataStore).getScope();
189196
Mockito.doReturn(destDataStore).when(destVolumeInfo).getDataStore();
@@ -199,12 +206,14 @@ public void testCanBypassSecondaryStorageWithZoneWideNFSPoolsInSameZone() throws
199206
@Test
200207
public void testCanBypassSecondaryStorageWithClusterWideNFSPoolsInSameCluster() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
201208
VolumeObject srcVolumeInfo = Mockito.spy(new VolumeObject());
209+
Mockito.doReturn(HypervisorType.KVM).when(srcVolumeInfo).getHypervisorType();
202210
DataStore srcDataStore = Mockito.mock(DataStore.class);
203211
Mockito.doReturn(new ClusterScope(5L, 2L, 1L)).when(srcDataStore).getScope();
204212
Mockito.doReturn(srcDataStore).when(srcVolumeInfo).getDataStore();
205213
Mockito.doReturn(Storage.StoragePoolType.NetworkFilesystem).when(srcVolumeInfo).getStoragePoolType();
206214

207215
VolumeObject destVolumeInfo = Mockito.spy(new VolumeObject());
216+
Mockito.doReturn(HypervisorType.KVM).when(destVolumeInfo).getHypervisorType();
208217
DataStore destDataStore = Mockito.mock(DataStore.class);
209218
Mockito.doReturn(new ClusterScope(5L, 2L, 1L)).when(destDataStore).getScope();
210219
Mockito.doReturn(destDataStore).when(destVolumeInfo).getDataStore();
@@ -220,12 +229,14 @@ public void testCanBypassSecondaryStorageWithClusterWideNFSPoolsInSameCluster()
220229
@Test
221230
public void testCanBypassSecondaryStorageWithLocalAndClusterWideNFSPoolsInSameCluster() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
222231
VolumeObject srcVolumeInfo = Mockito.spy(new VolumeObject());
232+
Mockito.doReturn(HypervisorType.KVM).when(srcVolumeInfo).getHypervisorType();
223233
DataStore srcDataStore = Mockito.mock(DataStore.class);
224234
Mockito.doReturn(new HostScope(1L, 1L, 1L)).when(srcDataStore).getScope();
225235
Mockito.doReturn(srcDataStore).when(srcVolumeInfo).getDataStore();
226236
Mockito.doReturn(Storage.StoragePoolType.Filesystem).when(srcVolumeInfo).getStoragePoolType();
227237

228238
VolumeObject destVolumeInfo = Mockito.spy(new VolumeObject());
239+
Mockito.doReturn(HypervisorType.KVM).when(destVolumeInfo).getHypervisorType();
229240
DataStore destDataStore = Mockito.mock(DataStore.class);
230241
Mockito.doReturn(new ClusterScope(1L, 1L, 1L)).when(destDataStore).getScope();
231242
Mockito.doReturn(destDataStore).when(destVolumeInfo).getDataStore();
@@ -244,12 +255,14 @@ public void testCanBypassSecondaryStorageWithLocalAndClusterWideNFSPoolsInSameCl
244255
@Test
245256
public void testCanBypassSecondaryStorageWithLocalAndZoneWideNFSPoolsInSameZone() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
246257
VolumeObject srcVolumeInfo = Mockito.spy(new VolumeObject());
258+
Mockito.doReturn(HypervisorType.KVM).when(srcVolumeInfo).getHypervisorType();
247259
DataStore srcDataStore = Mockito.mock(DataStore.class);
248260
Mockito.doReturn(new HostScope(1L, 1L, 1L)).when(srcDataStore).getScope();
249261
Mockito.doReturn(srcDataStore).when(srcVolumeInfo).getDataStore();
250262
Mockito.doReturn(Storage.StoragePoolType.Filesystem).when(srcVolumeInfo).getStoragePoolType();
251263

252264
VolumeObject destVolumeInfo = Mockito.spy(new VolumeObject());
265+
Mockito.doReturn(HypervisorType.KVM).when(destVolumeInfo).getHypervisorType();
253266
DataStore destDataStore = Mockito.mock(DataStore.class);
254267
Mockito.doReturn(new ZoneScope(1L)).when(destDataStore).getScope();
255268
Mockito.doReturn(destDataStore).when(destVolumeInfo).getDataStore();
@@ -268,12 +281,14 @@ public void testCanBypassSecondaryStorageWithLocalAndZoneWideNFSPoolsInSameZone(
268281
@Test
269282
public void testCanBypassSecondaryStorageWithClusterWideNFSAndZoneWideNFSPoolsInSameZone() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
270283
VolumeObject srcVolumeInfo = Mockito.spy(new VolumeObject());
284+
Mockito.doReturn(HypervisorType.KVM).when(srcVolumeInfo).getHypervisorType();
271285
DataStore srcDataStore = Mockito.mock(DataStore.class);
272286
Mockito.doReturn(new ClusterScope(5L, 2L, 1L)).when(srcDataStore).getScope();
273287
Mockito.doReturn(srcDataStore).when(srcVolumeInfo).getDataStore();
274288
Mockito.doReturn(Storage.StoragePoolType.NetworkFilesystem).when(srcVolumeInfo).getStoragePoolType();
275289

276290
VolumeObject destVolumeInfo = Mockito.spy(new VolumeObject());
291+
Mockito.doReturn(HypervisorType.KVM).when(destVolumeInfo).getHypervisorType();
277292
DataStore destDataStore = Mockito.mock(DataStore.class);
278293
Mockito.doReturn(new ZoneScope(1L)).when(destDataStore).getScope();
279294
Mockito.doReturn(destDataStore).when(destVolumeInfo).getDataStore();

0 commit comments

Comments
 (0)