Hi team,

The direct runner checks that there's no mutation on elements in a PCollection thanks to ImmutabilityEnforcementFactory. This factory uses CodedValueMutationDetector to detect if an element has been changed or not.

The CodedValueMutationDetector uses equals (in the verifyUnmodifiedThrowingCheckedExceptions() method) for that.

However, in an IO on which I'm working on, the element class doesn't override equals and it fails with:

org.apache.beam.sdk.util.IllegalMutationException: PTransform AmqpIO.Write/ParDo(Write)/ParMultiDo(Write) illegaly mutated value Message{body=AmqpValue{Test 0}} of class class org.apache.qpid.proton.message.impl.MessageImpl. Input values must not be mutated in any way.

So, basically my question is:

1. Do I need to wrap the message in a custom wrapper overriding the equals() method ?
2. Maybe we could improve a bit the checker in the direct runner ?

Thanks
Regards
JB
--
Jean-Baptiste Onofré
[email protected]
http://blog.nanthrax.net
Talend - http://www.talend.com

Reply via email to