Jiang Xin created FLINK-31312: --------------------------------- Summary: EnableObjectReuse cause different behaviors Key: FLINK-31312 URL: https://issues.apache.org/jira/browse/FLINK-31312 Project: Flink Issue Type: Bug Components: API / DataStream Reporter: Jiang Xin
I have the following test code which works well, however, if I remove the `enableObjectReuse`, the test case would fail with the exception `Accessing a field by name is not supported in position-based field mode`. {code:java} public static void main(String[] args) throws Exception { StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); env.setParallelism(1); // The test fails with enableObjectReuse env.getConfig().enableObjectReuse(); final SourceFunction<Row> rowGenerator = new SourceFunction<Row>() { @Override public final void run(SourceContext<Row> ctx) throws Exception { Row row = new Row(1); row.setField(0, "a"); ctx.collect(row); } @Override public void cancel() {} }; final RowTypeInfo typeInfo = new RowTypeInfo(new TypeInformation[] {Types.STRING}, new String[] {"col1"}); DataStream<Row> dataStream = env.addSource(rowGenerator, typeInfo); DataStream<Row> transformedDataStream = dataStream.map( (MapFunction<Row, Row>) value -> Row.of(value.getField("col1")), typeInfo); transformedDataStream.addSink(new PrintSinkFunction<>()); env.execute("Mini Test"); } {code} The `SourceFunction` generates rows without field names, but the return type info is assigned by `env.addSource(rowGenerator, typeInfo)`. With object-reuse enabled, rows would be passed to the mapFunction directly, so the exception raises. While if the object-reuse is disabled, rows would be reconstructed and given field names when passing to the next operator, so the test case works well. -- This message was sent by Atlassian Jira (v8.20.10#820010)