Skip to content

Commit 37c52a1

Browse files
committed
address comments
1 parent 0f81e12 commit 37c52a1

5 files changed

Lines changed: 23 additions & 54 deletions

File tree

‎api/src/main/java/org/apache/cloudstack/query/QueryService.java‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -143,9 +143,9 @@ public interface QueryService {
143143
ConfigKey<Boolean> BypassTemplateView = new ConfigKey<>("Advanced", Boolean.class, "template.list.bypass.view",
144144
"false",
145145
"If true, uses an optimized query path for listing templates and ISOs, which can improve performance on " +
146-
"deployments with large numbers of templates. Automatically falls back to the standard query when" +
147-
" filtering by tags, using the shared, featured, or community template filters, or when including" +
148-
" removed templates.", true, ConfigKey.Scope.Global);
146+
"deployments with large numbers of templates. Automatically falls back to the standard query when " +
147+
"filtering by tags, using the shared, featured, or community template filters, or when including " +
148+
"removed templates.", true, ConfigKey.Scope.Global);
149149

150150
ListResponse<UserResponse> searchForUsers(ResponseObject.ResponseView responseView, ListUsersCmd cmd) throws PermissionDeniedException;
151151

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

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -44,14 +44,6 @@
4444
import com.cloud.storage.dao.StoragePoolAndAccessGroupMapDao;
4545
import com.cloud.cluster.ManagementServerHostPeerJoinVO;
4646

47-
import com.cloud.template.VirtualMachineTemplate;
48-
import com.cloud.user.AccountVO;
49-
import com.cloud.user.SSHKeyPairVO;
50-
import com.cloud.user.dao.SSHKeyPairDao;
51-
import com.cloud.vm.InstanceGroupVMMapVO;
52-
import com.cloud.vm.NicVO;
53-
import com.cloud.vm.dao.InstanceGroupVMMapDao;
54-
import com.cloud.vm.dao.NicDao;
5547
import com.cloud.vm.UserVmManager;
5648
import org.apache.cloudstack.acl.ControlledEntity;
5749
import org.apache.cloudstack.acl.ControlledEntity.ACLType;
@@ -337,13 +329,17 @@
337329
import com.cloud.storage.dao.VolumeDao;
338330
import com.cloud.tags.ResourceTagVO;
339331
import com.cloud.tags.dao.ResourceTagDao;
332+
import com.cloud.template.VirtualMachineTemplate;
340333
import com.cloud.template.VirtualMachineTemplate.State;
341334
import com.cloud.template.VirtualMachineTemplate.TemplateFilter;
342335
import com.cloud.user.Account;
343336
import com.cloud.user.AccountManager;
337+
import com.cloud.user.AccountVO;
344338
import com.cloud.user.DomainManager;
339+
import com.cloud.user.SSHKeyPairVO;
345340
import com.cloud.user.User;
346341
import com.cloud.user.dao.AccountDao;
342+
import com.cloud.user.dao.SSHKeyPairDao;
347343
import com.cloud.user.dao.UserDao;
348344
import com.cloud.utils.DateUtil;
349345
import com.cloud.utils.NumbersUtil;
@@ -359,13 +355,17 @@
359355
import com.cloud.utils.db.SearchCriteria.Op;
360356
import com.cloud.utils.exception.CloudRuntimeException;
361357
import com.cloud.vm.DomainRouterVO;
358+
import com.cloud.vm.InstanceGroupVMMapVO;
359+
import com.cloud.vm.NicVO;
362360
import com.cloud.vm.UserVmVO;
363361
import com.cloud.vm.VMInstanceDetailVO;
364362
import com.cloud.vm.VMInstanceVO;
365363
import com.cloud.vm.VirtualMachine;
366364
import com.cloud.vm.VirtualMachineManager;
367365
import com.cloud.vm.VmDetailConstants;
368366
import com.cloud.vm.dao.DomainRouterDao;
367+
import com.cloud.vm.dao.InstanceGroupVMMapDao;
368+
import com.cloud.vm.dao.NicDao;
369369
import com.cloud.vm.dao.UserVmDao;
370370
import com.cloud.vm.dao.VMInstanceDao;
371371
import com.cloud.vm.dao.VMInstanceDetailsDao;

‎server/src/main/java/com/cloud/api/query/dao/TemplateJoinDaoImpl.java‎

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

19-
import java.lang.reflect.Field;
2019
import java.sql.PreparedStatement;
2120
import java.sql.ResultSet;
2221
import java.sql.SQLException;
@@ -711,45 +710,7 @@ public Pair<List<TemplateJoinVO>, Integer> searchIncludingRemovedAndCount(final
711710
return new Pair<List<TemplateJoinVO>, Integer>(objects, count);
712711
}
713712

714-
// ============================================================================
715-
// The standard Phase 1 path runs `SELECT DISTINCT temp_zone_pair FROM
716-
// template_view WHERE ...` against a 13-table view.
717-
//
718-
// This bypass path issues hand-tuned SQL against only the 6 tables needed
719-
// to compute the (template_id, data_center_id) pair: vm_template, account,
720-
// template_store_ref, image_store, template_zone_ref, data_center. The OR
721-
// join is replaced with COALESCE.
722-
//
723-
// Hard filters (tags, sharedAccountIds, featured/community
724-
// domain hierarchy) are not implemented here — TemplateListFilter#canBypass()
725-
// returns false in those cases and the dispatcher falls back to the
726-
// SearchBuilder path.
727-
728-
private static final Field TEMPLATE_JOIN_ID_FIELD;
729-
private static final Field TEMPLATE_JOIN_PAIR_FIELD;
730-
731-
static {
732-
try {
733-
TEMPLATE_JOIN_ID_FIELD = findFieldUpHierarchy(TemplateJoinVO.class, "id");
734-
TEMPLATE_JOIN_PAIR_FIELD = findFieldUpHierarchy(TemplateJoinVO.class, "tempZonePair");
735-
TEMPLATE_JOIN_ID_FIELD.setAccessible(true);
736-
TEMPLATE_JOIN_PAIR_FIELD.setAccessible(true);
737-
} catch (NoSuchFieldException e) {
738-
throw new ExceptionInInitializerError(e);
739-
}
740-
}
741-
742-
private static Field findFieldUpHierarchy(Class<?> clazz, String name) throws NoSuchFieldException {
743-
Class<?> c = clazz;
744-
while (c != null) {
745-
try {
746-
return c.getDeclaredField(name);
747-
} catch (NoSuchFieldException ignored) {
748-
c = c.getSuperclass();
749-
}
750-
}
751-
throw new NoSuchFieldException(name + " on " + clazz);
752-
}
713+
// Bypass path: queries only the 6 tables needed for the (template, zone) pair instead of template_view.
753714

754715
@Override
755716
public Pair<List<TemplateJoinVO>, Integer> findDistinctTempZonePairs(TemplateListFilter filter) {
@@ -977,14 +938,14 @@ private List<TemplateJoinVO> executeDistinctQuery(String sql, List<Object> param
977938
while (rs.next()) {
978939
TemplateJoinVO vo = new TemplateJoinVO();
979940
if (showUnique) {
980-
TEMPLATE_JOIN_ID_FIELD.setLong(vo, rs.getLong(1));
941+
vo.setId(rs.getLong(1));
981942
} else {
982-
TEMPLATE_JOIN_PAIR_FIELD.set(vo, rs.getString(1));
943+
vo.setTempZonePair(rs.getString(1));
983944
}
984945
out.add(vo);
985946
}
986947
}
987-
} catch (SQLException | IllegalAccessException e) {
948+
} catch (SQLException e) {
988949
throw new CloudRuntimeException("findDistinctTempZonePairs data query failed: " + sql, e);
989950
}
990951
return out;

‎server/src/main/java/com/cloud/api/query/vo/BaseViewWithTagInformationVO.java‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,4 +180,8 @@ public long getId() {
180180
return id;
181181
}
182182

183+
public void setId(long id) {
184+
this.id = id;
185+
}
186+
183187
}

‎server/src/main/java/com/cloud/api/query/vo/TemplateJoinVO.java‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -520,6 +520,10 @@ public String getTempZonePair() {
520520
return tempZonePair;
521521
}
522522

523+
public void setTempZonePair(String tempZonePair) {
524+
this.tempZonePair = tempZonePair;
525+
}
526+
523527
public State getTemplateState() {
524528
return templateState;
525529
}

0 commit comments

Comments
 (0)