Skip to content

Commit 1f94705

Browse files
author
Hendrik Muhs
committed
add reason to DataFrameTransformState and add hlrc protocol tests (#40736)
add field "reason" to DataFrameTransformState, add hlrc protocol tests and allow unknown fields for DataFrameTransformState
1 parent f377155 commit 1f94705

File tree

4 files changed

+77
-7
lines changed

4 files changed

+77
-7
lines changed

client/rest-high-level/src/main/java/org/elasticsearch/client/dataframe/transforms/DataFrameTransformState.java

+18-5
Original file line numberDiff line numberDiff line change
@@ -43,14 +43,16 @@ public class DataFrameTransformState {
4343
private static final ParseField TASK_STATE = new ParseField("task_state");
4444
private static final ParseField CURRENT_POSITION = new ParseField("current_position");
4545
private static final ParseField GENERATION = new ParseField("generation");
46+
private static final ParseField REASON = new ParseField("reason");
4647

4748
@SuppressWarnings("unchecked")
4849
public static final ConstructingObjectParser<DataFrameTransformState, Void> PARSER =
49-
new ConstructingObjectParser<>("data_frame_transform_state",
50+
new ConstructingObjectParser<>("data_frame_transform_state", true,
5051
args -> new DataFrameTransformState((DataFrameTransformTaskState) args[0],
5152
(IndexerState) args[1],
5253
(HashMap<String, Object>) args[2],
53-
(long) args[3]));
54+
(long) args[3],
55+
(String) args[4]));
5456

5557
static {
5658
PARSER.declareField(constructorArg(),
@@ -68,6 +70,7 @@ public class DataFrameTransformState {
6870
throw new IllegalArgumentException("Unsupported token [" + p.currentToken() + "]");
6971
}, CURRENT_POSITION, ObjectParser.ValueType.VALUE_OBJECT_ARRAY);
7072
PARSER.declareLong(ConstructingObjectParser.optionalConstructorArg(), GENERATION);
73+
PARSER.declareString(ConstructingObjectParser.optionalConstructorArg(), REASON);
7174
}
7275

7376
public static DataFrameTransformState fromXContent(XContentParser parser) throws IOException {
@@ -78,15 +81,18 @@ public static DataFrameTransformState fromXContent(XContentParser parser) throws
7881
private final IndexerState indexerState;
7982
private final long generation;
8083
private final SortedMap<String, Object> currentPosition;
84+
private final String reason;
8185

8286
public DataFrameTransformState(DataFrameTransformTaskState taskState,
8387
IndexerState indexerState,
8488
@Nullable Map<String, Object> position,
85-
long generation) {
89+
long generation,
90+
@Nullable String reason) {
8691
this.taskState = taskState;
8792
this.indexerState = indexerState;
8893
this.currentPosition = position == null ? null : Collections.unmodifiableSortedMap(new TreeMap<>(position));
8994
this.generation = generation;
95+
this.reason = reason;
9096
}
9197

9298
public IndexerState getIndexerState() {
@@ -106,6 +112,11 @@ public long getGeneration() {
106112
return generation;
107113
}
108114

115+
@Nullable
116+
public String getReason() {
117+
return reason;
118+
}
119+
109120
@Override
110121
public boolean equals(Object other) {
111122
if (this == other) {
@@ -121,11 +132,13 @@ public boolean equals(Object other) {
121132
return Objects.equals(this.taskState, that.taskState) &&
122133
Objects.equals(this.indexerState, that.indexerState) &&
123134
Objects.equals(this.currentPosition, that.currentPosition) &&
124-
this.generation == that.generation;
135+
this.generation == that.generation &&
136+
Objects.equals(this.reason, that.reason);
125137
}
126138

127139
@Override
128140
public int hashCode() {
129-
return Objects.hash(taskState, indexerState, currentPosition, generation);
141+
return Objects.hash(taskState, indexerState, currentPosition, generation, reason);
130142
}
143+
131144
}

client/rest-high-level/src/test/java/org/elasticsearch/client/DataFrameTransformIT.java

+1
Original file line numberDiff line numberDiff line change
@@ -358,6 +358,7 @@ public void testGetStats() throws Exception {
358358
DataFrameTransformStateAndStats stateAndStats = response.getTransformsStateAndStats().get(0);
359359
assertEquals(IndexerState.STARTED, stateAndStats.getTransformState().getIndexerState());
360360
assertEquals(DataFrameTransformTaskState.STARTED, stateAndStats.getTransformState().getTaskState());
361+
assertEquals(null, stateAndStats.getTransformState().getReason());
361362
assertNotEquals(zeroIndexerStats, stateAndStats.getTransformStats());
362363
});
363364
}

client/rest-high-level/src/test/java/org/elasticsearch/client/dataframe/transforms/DataFrameTransformStateTests.java

+7-2
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,17 @@ public void testFromXContent() throws IOException {
3636
DataFrameTransformStateTests::randomDataFrameTransformState,
3737
DataFrameTransformStateTests::toXContent,
3838
DataFrameTransformState::fromXContent)
39-
.supportsUnknownFields(false)
39+
.supportsUnknownFields(true)
40+
.randomFieldsExcludeFilter(field -> field.equals("current_position"))
4041
.test();
4142
}
4243

4344
public static DataFrameTransformState randomDataFrameTransformState() {
4445
return new DataFrameTransformState(randomFrom(DataFrameTransformTaskState.values()),
4546
randomFrom(IndexerState.values()),
4647
randomPositionMap(),
47-
randomLongBetween(0,10));
48+
randomLongBetween(0,10),
49+
randomBoolean() ? null : randomAlphaOfLength(10));
4850
}
4951

5052
public static void toXContent(DataFrameTransformState state, XContentBuilder builder) throws IOException {
@@ -55,6 +57,9 @@ public static void toXContent(DataFrameTransformState state, XContentBuilder bui
5557
builder.field("current_position", state.getPosition());
5658
}
5759
builder.field("generation", state.getGeneration());
60+
if (state.getReason() != null) {
61+
builder.field("reason", state.getReason());
62+
}
5863
builder.endObject();
5964
}
6065

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
/*
2+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3+
* or more contributor license agreements. Licensed under the Elastic License;
4+
* you may not use this file except in compliance with the Elastic License.
5+
*/
6+
7+
package org.elasticsearch.xpack.core.dataframe.transforms;
8+
9+
import org.elasticsearch.common.xcontent.XContentParser;
10+
import org.elasticsearch.protocol.AbstractHlrcXContentTestCase;
11+
import org.elasticsearch.xpack.core.indexing.IndexerState;
12+
13+
import java.io.IOException;
14+
import java.util.function.Predicate;
15+
16+
public class DataFrameTransformStateHlrcTests extends AbstractHlrcXContentTestCase<DataFrameTransformState,
17+
org.elasticsearch.client.dataframe.transforms.DataFrameTransformState> {
18+
19+
@Override
20+
public org.elasticsearch.client.dataframe.transforms.DataFrameTransformState doHlrcParseInstance(XContentParser parser)
21+
throws IOException {
22+
return org.elasticsearch.client.dataframe.transforms.DataFrameTransformState.fromXContent(parser);
23+
}
24+
25+
@Override
26+
public DataFrameTransformState convertHlrcToInternal(org.elasticsearch.client.dataframe.transforms.DataFrameTransformState instance) {
27+
return new DataFrameTransformState(DataFrameTransformTaskState.fromString(instance.getTaskState().value()),
28+
IndexerState.fromString(instance.getIndexerState().value()),
29+
instance.getPosition(), instance.getGeneration(), instance.getReason());
30+
}
31+
32+
@Override
33+
protected DataFrameTransformState createTestInstance() {
34+
return DataFrameTransformStateTests.randomDataFrameTransformState();
35+
}
36+
37+
@Override
38+
protected DataFrameTransformState doParseInstance(XContentParser parser) throws IOException {
39+
return DataFrameTransformState.fromXContent(parser);
40+
}
41+
42+
@Override
43+
protected boolean supportsUnknownFields() {
44+
return true;
45+
}
46+
47+
@Override
48+
protected Predicate<String> getRandomFieldsExcludeFilter() {
49+
return field -> field.equals("current_position");
50+
}
51+
}

0 commit comments

Comments
 (0)