diff options
author | Ola Aunrønning <olaa@verizonmedia.com> | 2022-08-30 13:31:26 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-30 13:31:26 +0200 |
commit | dff9f9bc8e47b142b45dd0d8e308e53b11225e88 (patch) | |
tree | bd072dc8c95d758a26fb5db3da8492d9afa91eca /controller-server | |
parent | 9948d7c72b64f4374fda77fab4179262ea43a078 (diff) |
Check filter existence (#23850)
Diffstat (limited to 'controller-server')
2 files changed, 16 insertions, 7 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/horizon/TsdbQueryRewriter.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/horizon/TsdbQueryRewriter.java index d6a0e785b43..2211e83c51a 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/horizon/TsdbQueryRewriter.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/horizon/TsdbQueryRewriter.java @@ -9,9 +9,11 @@ import com.yahoo.config.provision.SystemName; import com.yahoo.config.provision.TenantName; import java.io.IOException; +import java.util.Objects; import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; +import java.util.stream.IntStream; /** * @author valerijf @@ -24,21 +26,21 @@ public class TsdbQueryRewriter { JsonNode root = mapper.readTree(data); requireLegalType(root); getField(root, "executionGraph", ArrayNode.class) - .ifPresent(graph -> rewriteQueryGraph(graph, authorizedTenants, operator, systemName)); + .ifPresent(graph -> rewriteQueryGraph(root, graph, authorizedTenants, operator, systemName)); getField(root, "filters", ArrayNode.class) .ifPresent(filters -> rewriteFilters(filters, authorizedTenants, operator, systemName)); getField(root, "queries", ArrayNode.class) - .ifPresent(graph -> rewriteQueryGraph(graph, authorizedTenants, operator, systemName)); + .ifPresent(graph -> rewriteQueryGraph(root, graph, authorizedTenants, operator, systemName)); return mapper.writeValueAsBytes(root); } - private static void rewriteQueryGraph(ArrayNode executionGraph, Set<TenantName> tenantNames, boolean operator, SystemName systemName) { + private static void rewriteQueryGraph(JsonNode root, ArrayNode executionGraph, Set<TenantName> tenantNames, boolean operator, SystemName systemName) { for (int i = 0; i < executionGraph.size(); i++) { JsonNode execution = executionGraph.get(i); // Will be handled by rewriteFilters() - if (execution.has("filterId")) continue; + if (execution.has("filterId") && filterExists(root, execution.get("filterId").asText())) continue; rewriteFilter((ObjectNode) execution, tenantNames, operator, systemName); } @@ -80,6 +82,16 @@ public class TsdbQueryRewriter { } } + private static boolean filterExists(JsonNode root, String filterId) { + return getField(root, "filters", ArrayNode.class).stream() + .flatMap(filters -> IntStream.range(0, filters.size()) + .mapToObj(i -> filters.get(i).get("id"))) + .filter(Objects::nonNull) + .filter(JsonNode::isTextual) + .map(JsonNode::asText) + .anyMatch(filterId::equals); + } + private static void requireLegalType(JsonNode root) { Optional.ofNullable(root.get("type")) .map(JsonNode::asText) diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/horizon/TsdbQueryRewriterTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/horizon/TsdbQueryRewriterTest.java index d0d169720d0..7f826566ebc 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/horizon/TsdbQueryRewriterTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/horizon/TsdbQueryRewriterTest.java @@ -3,11 +3,8 @@ package com.yahoo.vespa.hosted.controller.restapi.horizon; import com.yahoo.config.provision.SystemName; import com.yahoo.config.provision.TenantName; -import com.yahoo.slime.JsonFormat; -import com.yahoo.slime.SlimeUtils; import org.junit.jupiter.api.Test; -import java.io.ByteArrayOutputStream; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; |