Skip to content

Commit 4d8a2da

Browse files
authored
api: Fix count and item issues returned by list APIs (#3894)
1 parent e269b14 commit 4d8a2da

File tree

24 files changed

+138
-46
lines changed

24 files changed

+138
-46
lines changed

api/src/main/java/com/cloud/projects/Project.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public enum State {
2929
}
3030

3131
public enum ListProjectResourcesCriteria {
32-
ListProjectResourcesOnly, SkipProjectResources
32+
ListProjectResourcesOnly, SkipProjectResources, ListAllIncludingProjectResources
3333
}
3434

3535
String getDisplayText();

api/src/main/java/org/apache/cloudstack/api/command/admin/cluster/ListClustersCmd.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -125,22 +125,22 @@ public String getCommandName() {
125125
return s_name;
126126
}
127127

128-
protected List<ClusterResponse> getClusterResponses() {
128+
protected Pair<List<ClusterResponse>, Integer> getClusterResponses() {
129129
Pair<List<? extends Cluster>, Integer> result = _mgr.searchForClusters(this);
130130
List<ClusterResponse> clusterResponses = new ArrayList<ClusterResponse>();
131131
for (Cluster cluster : result.first()) {
132132
ClusterResponse clusterResponse = _responseGenerator.createClusterResponse(cluster, showCapacities);
133133
clusterResponse.setObjectName("cluster");
134134
clusterResponses.add(clusterResponse);
135135
}
136-
return clusterResponses;
136+
return new Pair<List<ClusterResponse>, Integer>(clusterResponses, result.second());
137137
}
138138

139139
@Override
140140
public void execute() {
141-
List<ClusterResponse> clusterResponses = getClusterResponses();
141+
Pair<List<ClusterResponse>, Integer> clusterResponses = getClusterResponses();
142142
ListResponse<ClusterResponse> response = new ListResponse<ClusterResponse>();
143-
response.setResponses(clusterResponses, clusterResponses.size());
143+
response.setResponses(clusterResponses.first(), clusterResponses.second());
144144
response.setResponseName(getCommandName());
145145
this.setResponseObject(response);
146146
}

engine/schema/src/main/java/com/cloud/host/dao/HostDao.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@
3737
public interface HostDao extends GenericDao<HostVO, Long>, StateDao<Status, Status.Event, Host> {
3838
long countBy(long clusterId, ResourceState... states);
3939

40+
Integer countAllByType(final Host.Type type);
41+
4042
/**
4143
* Mark all hosts associated with a certain management server
4244
* as disconnected.

engine/schema/src/main/java/com/cloud/host/dao/HostDaoImpl.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ public class HostDaoImpl extends GenericDaoBase<HostVO, Long> implements HostDao
105105
protected SearchBuilder<HostVO> UnmanagedDirectConnectSearch;
106106
protected SearchBuilder<HostVO> UnmanagedApplianceSearch;
107107
protected SearchBuilder<HostVO> MaintenanceCountSearch;
108+
protected SearchBuilder<HostVO> HostTypeCountSearch;
108109
protected SearchBuilder<HostVO> ClusterStatusSearch;
109110
protected SearchBuilder<HostVO> TypeNameZoneSearch;
110111
protected SearchBuilder<HostVO> AvailHypevisorInZone;
@@ -159,6 +160,11 @@ public void init() {
159160
MaintenanceCountSearch.and("resourceState", MaintenanceCountSearch.entity().getResourceState(), SearchCriteria.Op.IN);
160161
MaintenanceCountSearch.done();
161162

163+
HostTypeCountSearch = createSearchBuilder();
164+
HostTypeCountSearch.and("type", HostTypeCountSearch.entity().getType(), SearchCriteria.Op.EQ);
165+
HostTypeCountSearch.and("removed", HostTypeCountSearch.entity().getRemoved(), SearchCriteria.Op.NULL);
166+
HostTypeCountSearch.done();
167+
162168
TypePodDcStatusSearch = createSearchBuilder();
163169
HostVO entity = TypePodDcStatusSearch.entity();
164170
TypePodDcStatusSearch.and("type", entity.getType(), SearchCriteria.Op.EQ);
@@ -429,6 +435,13 @@ public long countBy(long clusterId, ResourceState... states) {
429435
return hosts.size();
430436
}
431437

438+
@Override
439+
public Integer countAllByType(final Host.Type type) {
440+
SearchCriteria<HostVO> sc = HostTypeCountSearch.create();
441+
sc.setParameters("type", type);
442+
return getCount(sc);
443+
}
444+
432445
@Override
433446
public List<HostVO> listByDataCenterId(long id) {
434447
SearchCriteria<HostVO> sc = DcSearch.create();

engine/schema/src/main/java/com/cloud/vm/dao/DomainRouterDao.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,13 @@ public interface DomainRouterDao extends GenericDao<DomainRouterVO, Long> {
9696
*/
9797
public List<DomainRouterVO> listRunningByDomain(Long id);
9898

99+
/**
100+
* gets the total count by role
101+
* @Param role Router role
102+
* @return count of resources
103+
*/
104+
Integer countAllByRole(Role role);
105+
99106
List<DomainRouterVO> findBy(long accountId, long dcId, Role role);
100107

101108
List<DomainRouterVO> findByNetwork(long networkId);

engine/schema/src/main/java/com/cloud/vm/dao/DomainRouterDaoImpl.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,14 @@ public List<DomainRouterVO> listByDataCenter(final long dcId) {
185185
return listBy(sc);
186186
}
187187

188+
@Override
189+
public Integer countAllByRole(final Role role) {
190+
final SearchCriteria<DomainRouterVO> sc = createSearchCriteria();
191+
sc.addAnd("role", SearchCriteria.Op.EQ, role);
192+
sc.addAnd("removed", Op.NULL);
193+
return getCount(sc);
194+
}
195+
188196
@Override
189197
public List<DomainRouterVO> findBy(final long accountId, final long dcId) {
190198
final SearchCriteria<DomainRouterVO> sc = AllFieldsSearch.create();

engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/ImageStoreDao.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ public interface ImageStoreDao extends GenericDao<ImageStoreVO, Long> {
3535

3636
List<ImageStoreVO> findImageCacheByScope(ZoneScope scope);
3737

38+
Integer countAllImageStores();
39+
3840
List<ImageStoreVO> listImageStores();
3941

4042
List<ImageStoreVO> listImageCacheStores();

engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/ImageStoreDaoImpl.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,14 @@ public List<ImageStoreVO> findImageCacheByScope(ZoneScope scope) {
110110
return listBy(sc);
111111
}
112112

113+
@Override
114+
public Integer countAllImageStores() {
115+
SearchCriteria<ImageStoreVO> sc = createSearchCriteria();
116+
sc.addAnd("role", SearchCriteria.Op.EQ, DataStoreRole.Image);
117+
sc.addAnd("removed", SearchCriteria.Op.NULL);
118+
return getCount(sc);
119+
}
120+
113121
@Override
114122
public List<ImageStoreVO> listImageStores() {
115123
SearchCriteria<ImageStoreVO> sc = createSearchCriteria();

framework/db/src/main/java/com/cloud/utils/db/GenericDao.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,4 +278,6 @@ public interface GenericDao<T, ID extends Serializable> {
278278
Map<String, Attribute> getAllAttributes();
279279

280280
Pair<List<T>, Integer> searchAndDistinctCount(final SearchCriteria<T> sc, final Filter filter, final String[] distinctColumns);
281+
282+
Integer countAll();
281283
}

framework/db/src/main/java/com/cloud/utils/db/GenericDaoBase.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1996,6 +1996,15 @@ public Integer getDistinctCount(SearchCriteria<T> sc, String[] distinctColumns)
19961996
}
19971997
}
19981998

1999+
public Integer countAll() {
2000+
SearchCriteria<T> sc = null;
2001+
if (_removed != null) {
2002+
sc = createSearchCriteria();
2003+
sc.addAnd(_removed.second().field.getName(), SearchCriteria.Op.NULL);
2004+
}
2005+
return getCount(sc);
2006+
}
2007+
19992008
public Integer getCount(SearchCriteria<T> sc) {
20002009
String clause = sc != null ? sc.getWhereClause() : null;
20012010
if (clause != null && clause.length() == 0) {

0 commit comments

Comments
 (0)