Skip to content

Commit 2827876

Browse files
authored
[Fix][Flink] Fix NPE when get null row from upstream transform (#8469)
1 parent 776ac94 commit 2827876

File tree

3 files changed

+61
-9
lines changed

3 files changed

+61
-9
lines changed

Diff for: seatunnel-core/seatunnel-flink-starter/seatunnel-flink-starter-common/src/main/java/org/apache/seatunnel/core/starter/flink/execution/TransformExecuteProcessor.java

+13-9
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
import java.util.LinkedHashMap;
4646
import java.util.List;
4747
import java.util.Map;
48+
import java.util.Objects;
4849
import java.util.Optional;
4950
import java.util.stream.Collectors;
5051

@@ -148,15 +149,18 @@ protected DataStream<SeaTunnelRow> flinkTransform(
148149
}
149150

150151
return stream.transform(
151-
String.format("%s-Transform", transform.getPluginName()),
152-
TypeInformation.of(SeaTunnelRow.class),
153-
new StreamMap<>(
154-
flinkRuntimeEnvironment
155-
.getStreamExecutionEnvironment()
156-
.clean(
157-
row ->
158-
((SeaTunnelMapTransform<SeaTunnelRow>) transform)
159-
.map(row))));
152+
String.format("%s-Transform", transform.getPluginName()),
153+
TypeInformation.of(SeaTunnelRow.class),
154+
new StreamMap<>(
155+
flinkRuntimeEnvironment
156+
.getStreamExecutionEnvironment()
157+
.clean(
158+
row ->
159+
((SeaTunnelMapTransform<SeaTunnelRow>)
160+
transform)
161+
.map(row))))
162+
// null value shouldn't be passed to downstream
163+
.filter(Objects::nonNull);
160164
}
161165

162166
public static class ArrayFlatMap implements FlatMapFunction<SeaTunnelRow, SeaTunnelRow> {

Diff for: seatunnel-e2e/seatunnel-transforms-v2-e2e/seatunnel-transforms-v2-e2e-part-1/src/test/java/org/apache/seatunnel/e2e/transform/TestFilterRowKindIT.java

+4
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,10 @@ public void testFilterRowKind(TestContainer container)
3939
Container.ExecResult execResult3 =
4040
container.executeJob("/filter_row_kind_include_insert.conf");
4141
Assertions.assertEquals(0, execResult3.getExitCode());
42+
43+
Container.ExecResult execResult4 =
44+
container.executeJob("/filter_row_to_next_transform.json");
45+
Assertions.assertEquals(0, execResult4.getExitCode());
4246
}
4347

4448
@TestTemplate
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
{
2+
"env": {
3+
"jobMode": "batch",
4+
"parallelism": 1
5+
},
6+
"source": [
7+
{
8+
"plugin_name": "FakeSource",
9+
"plugin_output": "fake",
10+
"row.num": 5,
11+
"schema": {
12+
"fields": {
13+
"name": "string",
14+
"age": "int",
15+
"card": "int"
16+
}
17+
}
18+
}
19+
],
20+
"transform": [
21+
{
22+
"plugin_name": "FilterRowKind",
23+
"plugin_input": "fake",
24+
"plugin_output": "fake1",
25+
"exclude_kinds": ["INSERT"]
26+
},
27+
{
28+
"plugin_name": "Copy",
29+
"plugin_input": "fake1",
30+
"plugin_output": "fake2",
31+
"fields": {
32+
"name1": "name",
33+
"age1": "age",
34+
"card1": "card"
35+
}
36+
}
37+
],
38+
"sink": [
39+
{
40+
"plugin_name": "Console",
41+
"plugin_input": "fake2"
42+
}
43+
]
44+
}

0 commit comments

Comments
 (0)