Skip to content

Commit af1c8b1

Browse files
authored
Support date math for CPS index resolution (#137998)
Resolves: ES-12858
1 parent 711e445 commit af1c8b1

File tree

3 files changed

+26
-14
lines changed

3 files changed

+26
-14
lines changed

server/src/main/java/org/elasticsearch/search/crossproject/CrossProjectIndexExpressionsRewriter.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -202,9 +202,6 @@ private static void maybeThrowOnUnsupportedResource(String resource) {
202202
if (resource.startsWith(EXCLUSION)) {
203203
throw new IllegalArgumentException("Exclusions are not currently supported but was found in the expression [" + resource + "]");
204204
}
205-
if (resource.startsWith(DATE_MATH)) {
206-
throw new IllegalArgumentException("Date math are not currently supported but was found in the expression [" + resource + "]");
207-
}
208205
if (IndexNameExpressionResolver.hasSelectorSuffix(resource)) {
209206
throw new IllegalArgumentException("Selectors are not currently supported but was found in the expression [" + resource + "]");
210207
}

server/src/test/java/org/elasticsearch/search/crossproject/CrossProjectIndexExpressionsRewriterTests.java

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,16 +29,20 @@ public void testFlatOnlyRewrite() {
2929
createRandomProjectWithAlias("P2"),
3030
createRandomProjectWithAlias("P3")
3131
);
32-
String[] requestedResources = new String[] { "logs*", "metrics*" };
32+
String[] requestedResources = new String[] { "logs*", "metrics*", "<traces-{now/d}>" };
3333

3434
var actual = CrossProjectIndexExpressionsRewriter.rewriteIndexExpressions(origin, linked, requestedResources);
3535

36-
assertThat(actual.keySet(), containsInAnyOrder("logs*", "metrics*"));
36+
assertThat(actual.keySet(), containsInAnyOrder("logs*", "metrics*", "<traces-{now/d}>"));
3737
assertIndexRewriteResultsContains(actual.get("logs*"), containsInAnyOrder("logs*", "P1:logs*", "P2:logs*", "P3:logs*"));
3838
assertIndexRewriteResultsContains(
3939
actual.get("metrics*"),
4040
containsInAnyOrder("metrics*", "P1:metrics*", "P2:metrics*", "P3:metrics*")
4141
);
42+
assertIndexRewriteResultsContains(
43+
actual.get("<traces-{now/d}>"),
44+
containsInAnyOrder("<traces-{now/d}>", "P1:<traces-{now/d}>", "P2:<traces-{now/d}>", "P3:<traces-{now/d}>")
45+
);
4246
}
4347

4448
public void testFlatAndQualifiedRewrite() {
@@ -48,16 +52,17 @@ public void testFlatAndQualifiedRewrite() {
4852
createRandomProjectWithAlias("P2"),
4953
createRandomProjectWithAlias("P3")
5054
);
51-
String[] requestedResources = new String[] { "P1:logs*", "metrics*" };
55+
String[] requestedResources = new String[] { "P1:logs*", "metrics*", "P2:<traces-{now/d}>" };
5256

5357
var actual = CrossProjectIndexExpressionsRewriter.rewriteIndexExpressions(origin, linked, requestedResources);
5458

55-
assertThat(actual.keySet(), containsInAnyOrder("P1:logs*", "metrics*"));
59+
assertThat(actual.keySet(), containsInAnyOrder("P1:logs*", "metrics*", "P2:<traces-{now/d}>"));
5660
assertIndexRewriteResultsContains(actual.get("P1:logs*"), containsInAnyOrder("P1:logs*"));
5761
assertIndexRewriteResultsContains(
5862
actual.get("metrics*"),
5963
containsInAnyOrder("metrics*", "P1:metrics*", "P2:metrics*", "P3:metrics*")
6064
);
65+
assertIndexRewriteResultsContains(actual.get("P2:<traces-{now/d}>"), containsInAnyOrder("P2:<traces-{now/d}>"));
6166
}
6267

6368
public void testQualifiedOnlyRewrite() {
@@ -67,13 +72,14 @@ public void testQualifiedOnlyRewrite() {
6772
createRandomProjectWithAlias("P2"),
6873
createRandomProjectWithAlias("P3")
6974
);
70-
String[] requestedResources = new String[] { "P1:logs*", "P2:metrics*" };
75+
String[] requestedResources = new String[] { "P1:logs*", "P2:metrics*", "P3:<traces-{now/d}>" };
7176

7277
var actual = CrossProjectIndexExpressionsRewriter.rewriteIndexExpressions(origin, linked, requestedResources);
7378

74-
assertThat(actual.keySet(), containsInAnyOrder("P1:logs*", "P2:metrics*"));
79+
assertThat(actual.keySet(), containsInAnyOrder("P1:logs*", "P2:metrics*", "P3:<traces-{now/d}>"));
7580
assertIndexRewriteResultsContains(actual.get("P1:logs*"), containsInAnyOrder("P1:logs*"));
7681
assertIndexRewriteResultsContains(actual.get("P2:metrics*"), containsInAnyOrder("P2:metrics*"));
82+
assertIndexRewriteResultsContains(actual.get("P3:<traces-{now/d}>"), containsInAnyOrder("P3:<traces-{now/d}>"));
7783
}
7884

7985
public void testOriginQualifiedOnlyRewrite() {
@@ -83,13 +89,14 @@ public void testOriginQualifiedOnlyRewrite() {
8389
createRandomProjectWithAlias("P2"),
8490
createRandomProjectWithAlias("P3")
8591
);
86-
String[] requestedResources = new String[] { "_origin:logs*", "_origin:metrics*" };
92+
String[] requestedResources = new String[] { "_origin:logs*", "_origin:metrics*", "_origin:<traces-{now/d}>" };
8793

8894
var actual = CrossProjectIndexExpressionsRewriter.rewriteIndexExpressions(origin, linked, requestedResources);
8995

90-
assertThat(actual.keySet(), containsInAnyOrder("_origin:logs*", "_origin:metrics*"));
96+
assertThat(actual.keySet(), containsInAnyOrder("_origin:logs*", "_origin:metrics*", "_origin:<traces-{now/d}>"));
9197
assertIndexRewriteResultsContains(actual.get("_origin:logs*"), containsInAnyOrder("logs*"));
9298
assertIndexRewriteResultsContains(actual.get("_origin:metrics*"), containsInAnyOrder("metrics*"));
99+
assertIndexRewriteResultsContains(actual.get("_origin:<traces-{now/d}>"), containsInAnyOrder("<traces-{now/d}>"));
93100
}
94101

95102
public void testOriginQualifiedOnlyRewriteWithNoLikedProjects() {
@@ -149,12 +156,16 @@ public void testQualifiedStartsWithProjectWildcardRewrite() {
149156
createRandomProjectWithAlias("Q1"),
150157
createRandomProjectWithAlias("Q2")
151158
);
152-
String[] requestedResources = new String[] { "Q*:metrics*" };
159+
String[] requestedResources = new String[] { "Q*:metrics*", "P*:<traces-{now/d}>" };
153160

154161
var actual = CrossProjectIndexExpressionsRewriter.rewriteIndexExpressions(origin, linked, requestedResources);
155162

156-
assertThat(actual.keySet(), containsInAnyOrder("Q*:metrics*"));
163+
assertThat(actual.keySet(), containsInAnyOrder("Q*:metrics*", "P*:<traces-{now/d}>"));
157164
assertIndexRewriteResultsContains(actual.get("Q*:metrics*"), containsInAnyOrder("Q1:metrics*", "Q2:metrics*"));
165+
assertIndexRewriteResultsContains(
166+
actual.get("P*:<traces-{now/d}>"),
167+
containsInAnyOrder("<traces-{now/d}>", "P1:<traces-{now/d}>", "P2:<traces-{now/d}>")
168+
);
158169
}
159170

160171
public void testQualifiedEndsWithProjectWildcardRewrite() {

test/framework/src/main/java/org/elasticsearch/test/rest/ESRestTestCase.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1230,6 +1230,10 @@ protected static void wipeAllIndices() throws IOException {
12301230
}
12311231

12321232
protected static void wipeAllIndices(boolean preserveSecurityIndices) throws IOException {
1233+
wipeAllIndices(preserveSecurityIndices, cleanupClient());
1234+
}
1235+
1236+
protected static void wipeAllIndices(boolean preserveSecurityIndices, RestClient cleanupClient) throws IOException {
12331237
try {
12341238
// remove all indices except some history indices which can pop up after deleting all data streams but shouldn't interfere
12351239
final List<String> indexPatterns = new ArrayList<>(
@@ -1248,7 +1252,7 @@ protected static void wipeAllIndices(boolean preserveSecurityIndices) throws IOE
12481252
RequestOptions.DEFAULT.toBuilder().setWarningsHandler(ESRestTestCase::ignoreSystemIndexAccessWarnings)
12491253
);
12501254

1251-
final Response response = cleanupClient().performRequest(deleteRequest);
1255+
final Response response = cleanupClient.performRequest(deleteRequest);
12521256
try (InputStream is = response.getEntity().getContent()) {
12531257
assertTrue((boolean) XContentHelper.convertToMap(XContentType.JSON.xContent(), is, true).get("acknowledged"));
12541258
}

0 commit comments

Comments
 (0)