From e53f38a50afe8e998de54073be70984aa1dc0351 Mon Sep 17 00:00:00 2001 From: SJ <48863181+skjindal93@users.noreply.github.com> Date: Fri, 8 Mar 2024 05:13:49 +0530 Subject: [PATCH 1/2] fix(explore): return early, if no entities --- .../converters/QueryAndGatewayDtoConverter.java | 4 ++++ .../gateway/service/explore/RequestHandler.java | 17 ++++++++++++++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/gateway-service-impl/src/main/java/org/hypertrace/gateway/service/common/converters/QueryAndGatewayDtoConverter.java b/gateway-service-impl/src/main/java/org/hypertrace/gateway/service/common/converters/QueryAndGatewayDtoConverter.java index dd4535ff..12256052 100644 --- a/gateway-service-impl/src/main/java/org/hypertrace/gateway/service/common/converters/QueryAndGatewayDtoConverter.java +++ b/gateway-service-impl/src/main/java/org/hypertrace/gateway/service/common/converters/QueryAndGatewayDtoConverter.java @@ -493,6 +493,10 @@ public static Filter addTimeSpaceAndIdFiltersAndConvertToQueryFilter( List entityIdAttributes, org.hypertrace.gateway.service.v1.common.Filter providedFilter) { + if (entityIds.isEmpty()) { + return Filter.getDefaultInstance(); + } + Filter.Builder compositeFilter = Filter.newBuilder().setOperator(Operator.AND); Filter convertedProvidedFilter = isNonDefaultFilter(providedFilter) diff --git a/gateway-service-impl/src/main/java/org/hypertrace/gateway/service/explore/RequestHandler.java b/gateway-service-impl/src/main/java/org/hypertrace/gateway/service/explore/RequestHandler.java index 813b25be..ad32a076 100644 --- a/gateway-service-impl/src/main/java/org/hypertrace/gateway/service/explore/RequestHandler.java +++ b/gateway-service-impl/src/main/java/org/hypertrace/gateway/service/explore/RequestHandler.java @@ -88,16 +88,21 @@ public RequestHandler( @Override public ExploreResponse.Builder handleRequest( ExploreRequestContext requestContext, ExploreRequest request) { - QueryRequest queryRequest = + Optional maybeQueryRequest = buildQueryRequest(requestContext, request, attributeMetadataProvider); + if (maybeQueryRequest.isEmpty()) { + return ExploreResponse.newBuilder(); + } + + QueryRequest queryRequest = maybeQueryRequest.get(); Iterator resultSetChunkIterator = executeQuery(requestContext, queryRequest); return handleQueryServiceResponse( request, requestContext, resultSetChunkIterator, requestContext, attributeMetadataProvider); } - QueryRequest buildQueryRequest( + Optional buildQueryRequest( ExploreRequestContext requestContext, ExploreRequest request, AttributeMetadataProvider attributeMetadataProvider) { @@ -118,7 +123,13 @@ QueryRequest buildQueryRequest( .orElse(request.getFilter()); } + if (entityIds.isEmpty()) { + return Optional.empty(); + } + QueryRequest.Builder builder = QueryRequest.newBuilder(); + + // 1. Add selections. All selections should either be only column or only function, never both. // The validator should catch this. List aggregatedSelections = @@ -160,7 +171,7 @@ QueryRequest buildQueryRequest( // 4. Add order by along with setting limit, offset addSortLimitAndOffset(request, requestContext, builder); - return builder.build(); + return Optional.of(builder.build()); } // This is to get all the entity Ids for the EDS source filter. From 31f244757441a63884b7666c396fe2107430f7db Mon Sep 17 00:00:00 2001 From: SJ <48863181+skjindal93@users.noreply.github.com> Date: Fri, 8 Mar 2024 05:40:22 +0530 Subject: [PATCH 2/2] fixed tests --- .../common/converters/QueryAndGatewayDtoConverter.java | 4 ---- .../gateway/service/explore/RequestHandler.java | 10 +++++----- .../explore/TimeAggregationsRequestHandler.java | 4 ++-- 3 files changed, 7 insertions(+), 11 deletions(-) diff --git a/gateway-service-impl/src/main/java/org/hypertrace/gateway/service/common/converters/QueryAndGatewayDtoConverter.java b/gateway-service-impl/src/main/java/org/hypertrace/gateway/service/common/converters/QueryAndGatewayDtoConverter.java index 12256052..dd4535ff 100644 --- a/gateway-service-impl/src/main/java/org/hypertrace/gateway/service/common/converters/QueryAndGatewayDtoConverter.java +++ b/gateway-service-impl/src/main/java/org/hypertrace/gateway/service/common/converters/QueryAndGatewayDtoConverter.java @@ -493,10 +493,6 @@ public static Filter addTimeSpaceAndIdFiltersAndConvertToQueryFilter( List entityIdAttributes, org.hypertrace.gateway.service.v1.common.Filter providedFilter) { - if (entityIds.isEmpty()) { - return Filter.getDefaultInstance(); - } - Filter.Builder compositeFilter = Filter.newBuilder().setOperator(Operator.AND); Filter convertedProvidedFilter = isNonDefaultFilter(providedFilter) diff --git a/gateway-service-impl/src/main/java/org/hypertrace/gateway/service/explore/RequestHandler.java b/gateway-service-impl/src/main/java/org/hypertrace/gateway/service/explore/RequestHandler.java index ad32a076..4b184246 100644 --- a/gateway-service-impl/src/main/java/org/hypertrace/gateway/service/explore/RequestHandler.java +++ b/gateway-service-impl/src/main/java/org/hypertrace/gateway/service/explore/RequestHandler.java @@ -118,18 +118,18 @@ Optional buildQueryRequest( attributeMetadataProvider.getAttributesMetadata(requestContext, request.getContext()); if (hasOnlyAttributeSource(request.getFilter(), AttributeSource.EDS, attributeMetadataMap)) { entityIds = getEntityIdsToFilterFromSourceEDS(requestContext, request, attributeMetadataMap); + + if (entityIds.isEmpty()) { + return Optional.empty(); + } + qsSourceFilter = buildFilter(request.getFilter(), AttributeSource.QS, attributeMetadataMap) .orElse(request.getFilter()); } - if (entityIds.isEmpty()) { - return Optional.empty(); - } - QueryRequest.Builder builder = QueryRequest.newBuilder(); - // 1. Add selections. All selections should either be only column or only function, never both. // The validator should catch this. List aggregatedSelections = diff --git a/gateway-service-impl/src/main/java/org/hypertrace/gateway/service/explore/TimeAggregationsRequestHandler.java b/gateway-service-impl/src/main/java/org/hypertrace/gateway/service/explore/TimeAggregationsRequestHandler.java index 97f704b9..b4034e0f 100644 --- a/gateway-service-impl/src/main/java/org/hypertrace/gateway/service/explore/TimeAggregationsRequestHandler.java +++ b/gateway-service-impl/src/main/java/org/hypertrace/gateway/service/explore/TimeAggregationsRequestHandler.java @@ -51,7 +51,7 @@ public class TimeAggregationsRequestHandler extends RequestHandler { } @Override - QueryRequest buildQueryRequest( + Optional buildQueryRequest( ExploreRequestContext requestContext, ExploreRequest request, AttributeMetadataProvider attributeMetadataProvider) { @@ -79,7 +79,7 @@ QueryRequest buildQueryRequest( // 6. Set Limit. builder.setLimit(request.getLimit()); - return builder.build(); + return Optional.of(builder.build()); } private void addTimeAggregationsAsSelectionsToRequest(