davidzollo commented on issue #10942:
URL: https://github.com/apache/seatunnel/issues/10942#issuecomment-4534326415
Here is a reference
```
public class SeaTunnelTransformCollector implements Collector<Record<?>> {
private final List<OneInputFlowLifeCycle<Record<?>>> outputs;
// Cached at construction; outputs list is fixed for the lifetime of
this collector.
private final boolean fanOut;
public
SeaTunnelTransformCollector(List<OneInputFlowLifeCycle<Record<?>>> outputs) {
this.outputs = outputs;
this.fanOut = outputs.size() > 1;
}
@Override
public void collect(Record<?> record) {
if (!fanOut) {
// Fast path: single downstream, no copy, no loop overhead.
if (!outputs.isEmpty()) {
try {
outputs.get(0).received(record);
} catch (IOException e) {
throw new TaskRuntimeException(e);
}
}
return;
}
// Fan-out path: each branch gets its own row copy to prevent
cross-branch mutation.
for (OneInputFlowLifeCycle<Record<?>> output : outputs) {
try {
output.received(copyRecord(record));
} catch (IOException e) {
throw new TaskRuntimeException(e);
}
}
}
private static Record<?> copyRecord(Record<?> record) {
Object data = record.getData();
if (data instanceof SeaTunnelRow) {
return new Record<>(((SeaTunnelRow) data).copy());
}
// Barrier and SchemaChangeEvent are immutable coordination objects;
no copy needed.
return record;
}
@Override
public void close() {}
}
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]