Skip to content

Commit 148c48e

Browse files
committed
server: fix snapshot physical size
Fixes #9660 Signed-off-by: Abhishek Kumar <[email protected]>
1 parent 9967bb3 commit 148c48e

File tree

3 files changed

+63
-55
lines changed

3 files changed

+63
-55
lines changed

server/src/main/java/com/cloud/api/query/QueryManagerImpl.java

Lines changed: 38 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
// under the License.
1717
package com.cloud.api.query;
1818

19+
import static com.cloud.vm.VmDetailConstants.SSH_PUBLIC_KEY;
20+
1921
import java.lang.reflect.InvocationTargetException;
2022
import java.lang.reflect.Method;
2123
import java.util.ArrayList;
@@ -34,39 +36,6 @@
3436

3537
import javax.inject.Inject;
3638

37-
import com.cloud.network.dao.IPAddressDao;
38-
import com.cloud.network.dao.IPAddressVO;
39-
import com.cloud.storage.StoragePool;
40-
import com.cloud.storage.StoragePoolHostVO;
41-
import com.cloud.event.EventVO;
42-
import com.cloud.event.dao.EventDao;
43-
import com.cloud.host.HostVO;
44-
import com.cloud.offering.ServiceOffering;
45-
import com.cloud.service.ServiceOfferingDetailsVO;
46-
import com.cloud.storage.VMTemplateStoragePoolVO;
47-
import com.cloud.storage.dao.StoragePoolHostDao;
48-
import com.cloud.storage.dao.VMTemplatePoolDao;
49-
import com.cloud.host.Host;
50-
import com.cloud.host.dao.HostDao;
51-
import com.cloud.network.as.AutoScaleVmGroupVmMapVO;
52-
import com.cloud.network.as.dao.AutoScaleVmGroupDao;
53-
import com.cloud.network.as.dao.AutoScaleVmGroupVmMapDao;
54-
import com.cloud.network.dao.NetworkDao;
55-
import com.cloud.network.dao.NetworkVO;
56-
import com.cloud.network.dao.PublicIpQuarantineDao;
57-
import com.cloud.network.PublicIpQuarantine;
58-
import com.cloud.network.vo.PublicIpQuarantineVO;
59-
import com.cloud.storage.dao.VolumeDao;
60-
import com.cloud.user.AccountVO;
61-
import com.cloud.user.SSHKeyPairVO;
62-
import com.cloud.user.dao.SSHKeyPairDao;
63-
import com.cloud.vm.InstanceGroupVMMapVO;
64-
import com.cloud.vm.NicVO;
65-
import com.cloud.vm.UserVmDetailVO;
66-
import com.cloud.vm.dao.InstanceGroupVMMapDao;
67-
import com.cloud.vm.dao.NicDao;
68-
import com.cloud.vm.dao.UserVmDetailsDao;
69-
import com.cloud.storage.VolumeVO;
7039
import org.apache.cloudstack.acl.ControlledEntity;
7140
import org.apache.cloudstack.acl.ControlledEntity.ACLType;
7241
import org.apache.cloudstack.acl.SecurityChecker;
@@ -108,6 +77,7 @@
10877
import org.apache.cloudstack.api.command.user.account.ListProjectAccountsCmd;
10978
import org.apache.cloudstack.api.command.user.address.ListQuarantinedIpsCmd;
11079
import org.apache.cloudstack.api.command.user.affinitygroup.ListAffinityGroupsCmd;
80+
import org.apache.cloudstack.api.command.user.bucket.ListBucketsCmd;
11181
import org.apache.cloudstack.api.command.user.event.ListEventsCmd;
11282
import org.apache.cloudstack.api.command.user.iso.ListIsosCmd;
11383
import org.apache.cloudstack.api.command.user.job.ListAsyncJobsCmd;
@@ -129,6 +99,7 @@
12999
import org.apache.cloudstack.api.command.user.zone.ListZonesCmd;
130100
import org.apache.cloudstack.api.response.AccountResponse;
131101
import org.apache.cloudstack.api.response.AsyncJobResponse;
102+
import org.apache.cloudstack.api.response.BucketResponse;
132103
import org.apache.cloudstack.api.response.DetailOptionsResponse;
133104
import org.apache.cloudstack.api.response.DiskOfferingResponse;
134105
import org.apache.cloudstack.api.response.DomainResponse;
@@ -255,22 +226,38 @@
255226
import com.cloud.domain.Domain;
256227
import com.cloud.domain.DomainVO;
257228
import com.cloud.domain.dao.DomainDao;
229+
import com.cloud.event.EventVO;
230+
import com.cloud.event.dao.EventDao;
258231
import com.cloud.event.dao.EventJoinDao;
259232
import com.cloud.exception.CloudAuthenticationException;
260233
import com.cloud.exception.InvalidParameterValueException;
261234
import com.cloud.exception.PermissionDeniedException;
262235
import com.cloud.ha.HighAvailabilityManager;
236+
import com.cloud.host.Host;
237+
import com.cloud.host.HostVO;
238+
import com.cloud.host.dao.HostDao;
263239
import com.cloud.hypervisor.Hypervisor;
264240
import com.cloud.hypervisor.Hypervisor.HypervisorType;
241+
import com.cloud.network.PublicIpQuarantine;
265242
import com.cloud.network.RouterHealthCheckResult;
266243
import com.cloud.network.VNF;
267244
import com.cloud.network.VpcVirtualNetworkApplianceService;
245+
import com.cloud.network.as.AutoScaleVmGroupVmMapVO;
246+
import com.cloud.network.as.dao.AutoScaleVmGroupDao;
247+
import com.cloud.network.as.dao.AutoScaleVmGroupVmMapDao;
248+
import com.cloud.network.dao.IPAddressDao;
249+
import com.cloud.network.dao.IPAddressVO;
250+
import com.cloud.network.dao.NetworkDao;
251+
import com.cloud.network.dao.NetworkVO;
252+
import com.cloud.network.dao.PublicIpQuarantineDao;
268253
import com.cloud.network.dao.RouterHealthCheckResultDao;
269254
import com.cloud.network.dao.RouterHealthCheckResultVO;
270255
import com.cloud.network.router.VirtualNetworkApplianceManager;
271256
import com.cloud.network.security.SecurityGroupVMMapVO;
272257
import com.cloud.network.security.dao.SecurityGroupVMMapDao;
258+
import com.cloud.network.vo.PublicIpQuarantineVO;
273259
import com.cloud.offering.DiskOffering;
260+
import com.cloud.offering.ServiceOffering;
274261
import com.cloud.org.Grouping;
275262
import com.cloud.projects.Project;
276263
import com.cloud.projects.Project.ListProjectResourcesCriteria;
@@ -286,6 +273,7 @@
286273
import com.cloud.server.ResourceMetaDataService;
287274
import com.cloud.server.ResourceTag;
288275
import com.cloud.server.ResourceTag.ResourceObjectType;
276+
import com.cloud.service.ServiceOfferingDetailsVO;
289277
import com.cloud.service.ServiceOfferingVO;
290278
import com.cloud.service.dao.ServiceOfferingDao;
291279
import com.cloud.service.dao.ServiceOfferingDetailsDao;
@@ -298,24 +286,34 @@
298286
import com.cloud.storage.Storage;
299287
import com.cloud.storage.Storage.ImageFormat;
300288
import com.cloud.storage.Storage.TemplateType;
289+
import com.cloud.storage.StoragePool;
290+
import com.cloud.storage.StoragePoolHostVO;
301291
import com.cloud.storage.StoragePoolStatus;
302292
import com.cloud.storage.StoragePoolTagVO;
293+
import com.cloud.storage.VMTemplateStoragePoolVO;
303294
import com.cloud.storage.VMTemplateVO;
304295
import com.cloud.storage.Volume;
305296
import com.cloud.storage.VolumeApiServiceImpl;
297+
import com.cloud.storage.VolumeVO;
306298
import com.cloud.storage.dao.BucketDao;
307299
import com.cloud.storage.dao.DiskOfferingDao;
300+
import com.cloud.storage.dao.StoragePoolHostDao;
308301
import com.cloud.storage.dao.StoragePoolTagsDao;
309302
import com.cloud.storage.dao.VMTemplateDao;
303+
import com.cloud.storage.dao.VMTemplatePoolDao;
304+
import com.cloud.storage.dao.VolumeDao;
310305
import com.cloud.tags.ResourceTagVO;
311306
import com.cloud.tags.dao.ResourceTagDao;
312307
import com.cloud.template.VirtualMachineTemplate.State;
313308
import com.cloud.template.VirtualMachineTemplate.TemplateFilter;
314309
import com.cloud.user.Account;
315310
import com.cloud.user.AccountManager;
311+
import com.cloud.user.AccountVO;
316312
import com.cloud.user.DomainManager;
313+
import com.cloud.user.SSHKeyPairVO;
317314
import com.cloud.user.User;
318315
import com.cloud.user.dao.AccountDao;
316+
import com.cloud.user.dao.SSHKeyPairDao;
319317
import com.cloud.user.dao.UserDao;
320318
import com.cloud.utils.DateUtil;
321319
import com.cloud.utils.NumbersUtil;
@@ -331,18 +329,20 @@
331329
import com.cloud.utils.db.SearchCriteria.Op;
332330
import com.cloud.utils.exception.CloudRuntimeException;
333331
import com.cloud.vm.DomainRouterVO;
332+
import com.cloud.vm.InstanceGroupVMMapVO;
333+
import com.cloud.vm.NicVO;
334+
import com.cloud.vm.UserVmDetailVO;
334335
import com.cloud.vm.UserVmVO;
335336
import com.cloud.vm.VMInstanceVO;
336337
import com.cloud.vm.VirtualMachine;
337338
import com.cloud.vm.VirtualMachineManager;
338339
import com.cloud.vm.VmDetailConstants;
339340
import com.cloud.vm.dao.DomainRouterDao;
341+
import com.cloud.vm.dao.InstanceGroupVMMapDao;
342+
import com.cloud.vm.dao.NicDao;
340343
import com.cloud.vm.dao.UserVmDao;
344+
import com.cloud.vm.dao.UserVmDetailsDao;
341345
import com.cloud.vm.dao.VMInstanceDao;
342-
import org.apache.cloudstack.api.command.user.bucket.ListBucketsCmd;
343-
import org.apache.cloudstack.api.response.BucketResponse;
344-
345-
import static com.cloud.vm.VmDetailConstants.SSH_PUBLIC_KEY;
346346

347347
@Component
348348
public class QueryManagerImpl extends MutualExclusiveIdsManagerBase implements QueryService, Configurable {
@@ -5626,17 +5626,15 @@ private Pair<List<SnapshotJoinVO>, Integer> searchForSnapshotsWithParams(final L
56265626

56275627
Integer count = snapshotDataPair.second();
56285628
if (count == 0) {
5629-
// empty result
56305629
return snapshotDataPair;
56315630
}
56325631
List<SnapshotJoinVO> snapshotData = snapshotDataPair.first();
56335632
List<SnapshotJoinVO> snapshots;
5634-
if (isShowUnique) {
5633+
if (isShowUnique) {c69ad926e2
56355634
snapshots = snapshotJoinDao.findByDistinctIds(zoneId, snapshotData.stream().map(SnapshotJoinVO::getId).toArray(Long[]::new));
56365635
} else {
56375636
snapshots = snapshotJoinDao.searchBySnapshotStorePair(snapshotData.stream().map(SnapshotJoinVO::getSnapshotStorePair).toArray(String[]::new));
56385637
}
5639-
56405638
return new Pair<>(snapshots, count);
56415639
}
56425640

server/src/main/java/com/cloud/api/query/dao/SnapshotJoinDao.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,19 +23,15 @@
2323
import org.apache.cloudstack.api.response.SnapshotResponse;
2424

2525
import com.cloud.api.query.vo.SnapshotJoinVO;
26-
import com.cloud.utils.Pair;
27-
import com.cloud.utils.db.Filter;
2826
import com.cloud.utils.db.GenericDao;
29-
import com.cloud.utils.db.SearchCriteria;
3027

3128
public interface SnapshotJoinDao extends GenericDao<SnapshotJoinVO, Long> {
3229

3330
SnapshotResponse newSnapshotResponse(ResponseObject.ResponseView view, boolean isShowUnique, SnapshotJoinVO snapshotJoinVO);
3431

3532
SnapshotResponse setSnapshotResponse(SnapshotResponse snapshotResponse, SnapshotJoinVO snapshot);
3633

37-
Pair<List<SnapshotJoinVO>, Integer> searchIncludingRemovedAndCount(final SearchCriteria<SnapshotJoinVO> sc, final Filter filter);
38-
3934
List<SnapshotJoinVO> searchBySnapshotStorePair(String... pairs);
35+
4036
List<SnapshotJoinVO> findByDistinctIds(Long zoneId, Long... ids);
4137
}

server/src/main/java/com/cloud/api/query/dao/SnapshotJoinDaoImpl.java

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
package com.cloud.api.query.dao;
1919

2020
import java.util.ArrayList;
21+
import java.util.Collections;
22+
import java.util.Comparator;
2123
import java.util.HashMap;
2224
import java.util.List;
2325
import java.util.Map;
@@ -33,6 +35,7 @@
3335
import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotInfo;
3436
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
3537
import org.apache.cloudstack.query.QueryService;
38+
import org.apache.commons.collections.CollectionUtils;
3639
import org.apache.log4j.Logger;
3740

3841
import com.cloud.api.ApiDBUtils;
@@ -45,7 +48,6 @@
4548
import com.cloud.storage.VolumeVO;
4649
import com.cloud.user.Account;
4750
import com.cloud.user.AccountService;
48-
import com.cloud.utils.Pair;
4951
import com.cloud.utils.db.Filter;
5052
import com.cloud.utils.db.SearchBuilder;
5153
import com.cloud.utils.db.SearchCriteria;
@@ -195,13 +197,6 @@ public SnapshotResponse setSnapshotResponse(SnapshotResponse snapshotResponse, S
195197
return snapshotResponse;
196198
}
197199

198-
@Override
199-
public Pair<List<SnapshotJoinVO>, Integer> searchIncludingRemovedAndCount(final SearchCriteria<SnapshotJoinVO> sc, final Filter filter) {
200-
List<SnapshotJoinVO> objects = searchIncludingRemoved(sc, filter, null, false);
201-
Integer count = getDistinctCount(sc);
202-
return new Pair<>(objects, count);
203-
}
204-
205200
@Override
206201
public List<SnapshotJoinVO> searchBySnapshotStorePair(String... pairs) {
207202
// set detail batch query size
@@ -246,14 +241,33 @@ public List<SnapshotJoinVO> searchBySnapshotStorePair(String... pairs) {
246241
return uvList;
247242
}
248243

244+
private List<SnapshotJoinVO> findById(Long zoneId, long id) {
245+
SearchBuilder<SnapshotJoinVO> sb = createSearchBuilder();
246+
sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
247+
sb.and("zone_id", sb.entity().getDataCenterId(), SearchCriteria.Op.EQ);
248+
sb.done();
249+
SearchCriteria<SnapshotJoinVO> sc = sb.create();
250+
sc.setParameters("id", id);
251+
if (zoneId != null) {
252+
sc.setParameters("zoneId", zoneId);
253+
}
254+
List<SnapshotJoinVO> snapshotJoinVOS = search(sc, null);
255+
if (CollectionUtils.isEmpty(snapshotJoinVOS)) {
256+
return null;
257+
}
258+
snapshotJoinVOS.sort(Comparator.comparing(SnapshotJoinVO::getSnapshotStorePair));
259+
return Collections.singletonList(snapshotJoinVOS.get(0));
260+
}
261+
249262
@Override
250263
public List<SnapshotJoinVO> findByDistinctIds(Long zoneId, Long... ids) {
251264
if (ids == null || ids.length == 0) {
252265
return new ArrayList<>();
253266
}
254-
267+
if (ids.length == 1) {
268+
return findById(zoneId, ids[0]);
269+
}
255270
Filter searchFilter = new Filter(SnapshotJoinVO.class, "snapshotStorePair", QueryService.SortKeyAscending.value(), null, null);
256-
257271
SearchCriteria<SnapshotJoinVO> sc = snapshotIdsSearch.create();
258272
if (zoneId != null) {
259273
sc.setParameters("zoneId", zoneId);

0 commit comments

Comments
 (0)