summaryrefslogtreecommitdiffstats
path: root/controller-server
diff options
context:
space:
mode:
authorOla Aunrønning <olaa@verizonmedia.com>2022-08-30 13:31:26 +0200
committerGitHub <noreply@github.com>2022-08-30 13:31:26 +0200
commitdff9f9bc8e47b142b45dd0d8e308e53b11225e88 (patch)
treebd072dc8c95d758a26fb5db3da8492d9afa91eca /controller-server
parent9948d7c72b64f4374fda77fab4179262ea43a078 (diff)
Check filter existence (#23850)
Diffstat (limited to 'controller-server')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/horizon/TsdbQueryRewriter.java20
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/horizon/TsdbQueryRewriterTest.java3
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;