Skip to content

Commit 057118b

Browse files
committed
Merge branch 'master' into feat/sql-multivalue
2 parents 64b1287 + 2e36ba1 commit 057118b

File tree

8 files changed

+46
-40
lines changed

8 files changed

+46
-40
lines changed

x-pack/plugin/eql/src/test/java/org/elasticsearch/xpack/eql/StringUtilsTests.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,14 @@ public class StringUtilsTests extends ESTestCase {
1919

2020
public void testLikePatternNoPattern() throws Exception {
2121
String string = "abc123";
22-
assertEquals(string, toLikePattern(string).asString());
22+
assertEquals(string, toLikePattern(string).exactMatch());
2323
}
2424

2525
public void testLikePatternLikeChars() throws Exception {
2626
String string = "a%bc%%12_3__";
2727
String escape = Character.toString(1);
2828
LikePattern pattern = toLikePattern(string);
29-
assertEquals(string, pattern.asString());
29+
assertEquals(string, pattern.exactMatch());
3030
assertEquals("a" + escape + "%bc" + escape + "%" + escape + "%" +
3131
"12" + escape + "_" + "3" + escape + "_" + escape + "_", pattern.pattern());
3232
assertEquals(string, pattern.asLuceneWildcard());
@@ -35,7 +35,7 @@ public void testLikePatternLikeChars() throws Exception {
3535
public void testLikePatternEqlChars() throws Exception {
3636
String string = "abc*123?";
3737
LikePattern pattern = toLikePattern(string);
38-
assertEquals("abc%123_", pattern.asString());
38+
assertNull(pattern.exactMatch());
3939
assertEquals("abc%123_", pattern.pattern());
4040
assertEquals(string, pattern.asLuceneWildcard());
4141
}
@@ -44,24 +44,25 @@ public void testLikePatternMixEqlAndLikeChars() throws Exception {
4444
String string = "abc*%123?_";
4545
String escape = Character.toString(1);
4646
LikePattern pattern = toLikePattern(string);
47-
assertEquals("abc%%123__", pattern.asString());
47+
assertNull(pattern.exactMatch());
4848
assertEquals("abc%" + escape + "%123_" + escape + "_", pattern.pattern());
4949
assertEquals(string, pattern.asLuceneWildcard());
5050
}
5151

5252
public void testIsExactMatch() throws Exception {
5353
List<String> list = asList("abc%123", "abc_123", "abc%%123__");
54-
for (String string : list) {
54+
for (int i = 0; i < list.size(); i++) {
55+
String string = list.get(i);
5556
LikePattern pattern = toLikePattern(string);
56-
assertTrue(pattern.isExactMatch());
57+
assertEquals(string, pattern.exactMatch());
5758
}
5859
}
5960

6061
public void testIsNonExactMatch() throws Exception {
6162
List<String> list = asList("abc*123", "abc?123", "abc**123??");
6263
for (String string : list) {
6364
LikePattern pattern = toLikePattern(string);
64-
assertFalse(pattern.isExactMatch());
65+
assertNull(pattern.exactMatch());
6566
}
6667
}
6768
}

x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/job/task/OpenJobPersistentTasksExecutor.java

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import org.elasticsearch.xpack.core.ml.job.config.JobState;
4141
import org.elasticsearch.xpack.core.ml.job.config.JobTaskState;
4242
import org.elasticsearch.xpack.core.ml.job.persistence.AnomalyDetectorsIndex;
43+
import org.elasticsearch.xpack.core.ml.job.persistence.ElasticsearchMappings;
4344
import org.elasticsearch.xpack.core.ml.job.process.autodetect.state.ModelSnapshot;
4445
import org.elasticsearch.xpack.core.ml.utils.ExceptionsHelper;
4546
import org.elasticsearch.xpack.ml.MachineLearning;
@@ -195,13 +196,27 @@ protected void nodeOperation(AllocatedPersistentTask task, OpenJobAction.JobPara
195196
jobTask.setAutodetectProcessManager(autodetectProcessManager);
196197
JobTaskState jobTaskState = (JobTaskState) state;
197198
JobState jobState = jobTaskState == null ? null : jobTaskState.getState();
198-
jobResultsProvider.setRunningForecastsToFailed(params.getJobId(), ActionListener.wrap(
199-
r -> runJob(jobTask, jobState, params),
199+
ActionListener<Boolean> resultsMappingUpdateHandler = ActionListener.wrap(
200+
mappingsUpdate -> jobResultsProvider.setRunningForecastsToFailed(params.getJobId(), ActionListener.wrap(
201+
r -> runJob(jobTask, jobState, params),
202+
e -> {
203+
logger.warn(new ParameterizedMessage("[{}] failed to set forecasts to failed", params.getJobId()), e);
204+
runJob(jobTask, jobState, params);
205+
}
206+
)),
200207
e -> {
201-
logger.warn(new ParameterizedMessage("[{}] failed to set forecasts to failed", params.getJobId()), e);
202-
runJob(jobTask, jobState, params);
208+
logger.error(new ParameterizedMessage("[{}] Failed to update results mapping", params.getJobId()), e);
209+
jobTask.markAsFailed(e);
203210
}
204-
));
211+
);
212+
// We need to update the results index as we MAY update the current forecast results, setting the running forcasts to failed
213+
// This writes to the results index, which might need updating
214+
ElasticsearchMappings.addDocMappingIfMissing(
215+
AnomalyDetectorsIndex.jobResultsAliasedName(params.getJobId()),
216+
AnomalyDetectorsIndex::resultsMapping,
217+
client,
218+
clusterState,
219+
resultsMappingUpdateHandler);
205220
}
206221

207222
private void runJob(JobTask jobTask, JobState jobState, OpenJobAction.JobParams params) {

x-pack/plugin/ql/src/main/java/org/elasticsearch/xpack/ql/expression/predicate/regex/AbstractStringPattern.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77

88
package org.elasticsearch.xpack.ql.expression.predicate.regex;
99

10+
import org.apache.lucene.util.IntsRef;
11+
import org.apache.lucene.util.UnicodeUtil;
1012
import org.apache.lucene.util.automaton.Automaton;
1113
import org.apache.lucene.util.automaton.Operations;
1214

@@ -29,7 +31,8 @@ public boolean matchesAll() {
2931
}
3032

3133
@Override
32-
public boolean isExactMatch() {
33-
return Operations.getCommonPrefix(automaton()).equals(asString());
34+
public String exactMatch() {
35+
IntsRef singleton = Operations.getSingleton(automaton());
36+
return singleton != null ? UnicodeUtil.newString(singleton.ints, singleton.offset, singleton.length) : null;
3437
}
3538
}

x-pack/plugin/ql/src/main/java/org/elasticsearch/xpack/ql/expression/predicate/regex/LikePattern.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ public class LikePattern extends AbstractStringPattern {
3131
private final String regex;
3232
private final String wildcard;
3333
private final String indexNameWildcard;
34-
private final String string;
3534

3635
public LikePattern(String pattern, char escape) {
3736
this.pattern = pattern;
@@ -40,7 +39,6 @@ public LikePattern(String pattern, char escape) {
4039
this.regex = StringUtils.likeToJavaPattern(pattern, escape);
4140
this.wildcard = StringUtils.likeToLuceneWildcard(pattern, escape);
4241
this.indexNameWildcard = StringUtils.likeToIndexWildcard(pattern, escape);
43-
this.string = pattern.replace(Character.toString(escape), StringUtils.EMPTY);
4442
}
4543

4644
public String pattern() {
@@ -62,11 +60,6 @@ public String asJavaRegex() {
6260
return regex;
6361
}
6462

65-
@Override
66-
public String asString() {
67-
return string;
68-
}
69-
7063
/**
7164
* Returns the pattern in (Lucene) wildcard format.
7265
*/

x-pack/plugin/ql/src/main/java/org/elasticsearch/xpack/ql/expression/predicate/regex/RLikePattern.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,6 @@ Automaton createAutomaton() {
2222
return new RegExp(regexpPattern).toAutomaton();
2323
}
2424

25-
@Override
26-
public String asString() {
27-
return regexpPattern;
28-
}
29-
3025
@Override
3126
public String asJavaRegex() {
3227
return regexpPattern;

x-pack/plugin/ql/src/main/java/org/elasticsearch/xpack/ql/expression/predicate/regex/StringPattern.java

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,6 @@ public interface StringPattern {
1212
*/
1313
String asJavaRegex();
1414

15-
/**
16-
* Returns the pattern as a string. Should handle escaping.
17-
*/
18-
String asString();
19-
2015
/**
2116
* Hint method on whether this pattern matches everything or not.
2217
*/
@@ -25,10 +20,9 @@ default boolean matchesAll() {
2520
}
2621

2722
/**
28-
* Hint method on whether this pattern is exact, that is has no wildcard
23+
* Returns the match if this pattern is exact, that is has no wildcard
2924
* or other patterns inside.
25+
* If the pattern is not exact, null is returned.
3026
*/
31-
default boolean isExactMatch() {
32-
return false;
33-
}
27+
String exactMatch();
3428
}

x-pack/plugin/ql/src/main/java/org/elasticsearch/xpack/ql/optimizer/OptimizerRules.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1471,9 +1471,12 @@ protected Expression rule(Expression e) {
14711471
StringPattern pattern = regexMatch.pattern();
14721472
if (pattern.matchesAll()) {
14731473
e = new IsNotNull(e.source(), regexMatch.field());
1474-
} else if (pattern.isExactMatch()) {
1475-
Literal literal = new Literal(regexMatch.source(), regexMatch.pattern().asString(), DataTypes.KEYWORD);
1476-
e = new Equals(e.source(), regexMatch.field(), literal);
1474+
} else {
1475+
String match = pattern.exactMatch();
1476+
if (match != null) {
1477+
Literal literal = new Literal(regexMatch.source(), match, DataTypes.KEYWORD);
1478+
e = new Equals(e.source(), regexMatch.field(), literal);
1479+
}
14771480
}
14781481
}
14791482
return e;

x-pack/plugin/ql/src/test/java/org/elasticsearch/xpack/ql/expression/predicate/regex/StringPatternTests.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
package org.elasticsearch.xpack.ql.expression.predicate.regex;
99

1010
import org.elasticsearch.test.ESTestCase;
11+
import org.elasticsearch.xpack.ql.util.StringUtils;
1112

1213
public class StringPatternTests extends ESTestCase {
1314

@@ -24,15 +25,16 @@ private boolean matchesAll(String pattern, char escape) {
2425
}
2526

2627
private boolean exactMatch(String pattern, char escape) {
27-
return like(pattern, escape).isExactMatch();
28+
String escaped = pattern.replace(Character.toString(escape), StringUtils.EMPTY);
29+
return escaped.equals(like(pattern, escape).exactMatch());
2830
}
2931

3032
private boolean matchesAll(String pattern) {
3133
return rlike(pattern).matchesAll();
3234
}
3335

3436
private boolean exactMatch(String pattern) {
35-
return rlike(pattern).isExactMatch();
37+
return pattern.equals(rlike(pattern).exactMatch());
3638
}
3739

3840
public void testWildcardMatchAll() throws Exception {

0 commit comments

Comments
 (0)