From 9bc3b7b98c18821a550133680cd5e4df43200c9e Mon Sep 17 00:00:00 2001 From: Daniel Augusto Veronezi Salvador <38945620+GutoVeronezi@users.noreply.github.com> Date: Tue, 2 Aug 2022 03:50:56 -0300 Subject: [PATCH] List service offerings without host tags when filtering VM which the current service offering has host tags (#6359) Co-authored-by: GutoVeronezi --- .../com/cloud/api/query/QueryManagerImpl.java | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java b/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java index 57c9aa82ca5..19997cc5767 100644 --- a/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java +++ b/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java @@ -3319,17 +3319,22 @@ public class QueryManagerImpl extends MutualExclusiveIdsManagerBase implements Q List hostTags = com.cloud.utils.StringUtils.csvTagsToList(currentVmOffering.getHostTag()); if (!hostTags.isEmpty()) { - SearchBuilder sb = _srvOfferingJoinDao.createSearchBuilder(); + SearchBuilder hostTagsSearchBuilder = _srvOfferingJoinDao.createSearchBuilder(); for(String tag : hostTags) { - sb.and(tag, sb.entity().getHostTag(), Op.FIND_IN_SET); + hostTagsSearchBuilder.and(tag, hostTagsSearchBuilder.entity().getHostTag(), Op.FIND_IN_SET); } - sb.done(); + hostTagsSearchBuilder.done(); - SearchCriteria scc = sb.create(); + SearchCriteria hostTagsSearchCriteria = hostTagsSearchBuilder.create(); for(String tag : hostTags) { - scc.setParameters(tag, tag); + hostTagsSearchCriteria.setParameters(tag, tag); } - sc.addAnd("hostTags", SearchCriteria.Op.SC, scc); + + SearchCriteria finalHostTagsSearchCriteria = _srvOfferingJoinDao.createSearchCriteria(); + finalHostTagsSearchCriteria.addOr("hostTag", Op.NULL); + finalHostTagsSearchCriteria.addOr("hostTag", Op.SC, hostTagsSearchCriteria); + + sc.addAnd("hostTagsConstraint", SearchCriteria.Op.SC, finalHostTagsSearchCriteria); } }