Wait, just one more thing--are there any other SMTs that could benefit from this? Wouldn't ValueToKey [1] be applicable as well, for example?
[1] - https://github.com/apache/kafka/blob/2a5efe4a334611fc7c15f76b322482bad0942db0/connect/transforms/src/main/java/org/apache/kafka/connect/transforms/ValueToKey.java#L106 On Wed, May 8, 2024 at 11:46 AM Chris Egerton <chr...@aiven.io> wrote: > Hi Mario, > > I think we could have something like `copy` and `copyWithoutDefaults` to > get around that, but now that you bring up compatibility, I think it's best > to hold off on this. I'm forced to recall that anything we add to the > Connect API may be used by plugin developers who write for the bleeding > edge of the Connect runtime, but deployed by users who are running on > (possibly much) older versions. In that scenario, any use of new Struct > methods would cause issues at runtime caused by compatibility clashes > between the newer API that the plugin was written for, and the older API > that's provided by the runtime it's running on. > > Anyway, thanks for humoring me. The KIP looks good to me 👍 > > Cheers, > > Chris > > On Wed, May 8, 2024 at 10:50 AM Mario Fiore Vitale <mvit...@redhat.com> > wrote: > >> Hi Chris, >> >> Thanks for reviewing this. >> >> > It seems like the pattern of "copy the contents of this Struct into >> another >> one for the purpose of mutation" could be fairly common in user code bases >> in addition to the core Connect SMTs. Do you think there's a way to >> simplify this with, e.g., a Struct.putAll(Struct destination) or >> Struct.copy(Schema destinationSchema) method? >> >> The only concern that I see is backward compatibility. Suppose that you >> are >> not using the JsonConvert but another convert that does't support the >> 'replace.null.with.default', when you use the current 'InsertField' smt >> the null values will be replace by default values. If we replace the >> "copy" >> logic with a method in the Struct we remove this behavior. >> >> Isn't it? >> >> Mario. >> >> On Wed, May 8, 2024 at 2:14 PM Chris Egerton <chr...@aiven.io.invalid> >> wrote: >> >> > Hi Mario, >> > >> > Thanks for the KIP! Looks good overall. One quick thought--it wasn't >> > immediately obvious to me why we had to touch on InsertField for this. >> It >> > looks like the reason is that we use Struct::get [1] to create a clone >> of >> > the input value [2], instead of Struct::getWithoutDefault [3]. >> > >> > It seems like the pattern of "copy the contents of this Struct into >> another >> > one for the purpose of mutation" could be fairly common in user code >> bases >> > in addition to the core Connect SMTs. Do you think there's a way to >> > simplify this with, e.g., a Struct.putAll(Struct destination) or >> > Struct.copy(Schema destinationSchema) method? >> > >> > [1] - >> > >> > >> https://github.com/apache/kafka/blob/f74f596bc7d35fcea97edcd83244e5d6aee308d2/connect/api/src/main/java/org/apache/kafka/connect/data/Struct.java#L78-L91 >> > [2] - >> > >> > >> https://github.com/apache/kafka/blob/f74f596bc7d35fcea97edcd83244e5d6aee308d2/connect/transforms/src/main/java/org/apache/kafka/connect/transforms/InsertField.java#L179-L183 >> > [3] - >> > >> > >> https://github.com/apache/kafka/blob/f74f596bc7d35fcea97edcd83244e5d6aee308d2/connect/api/src/main/java/org/apache/kafka/connect/data/Struct.java#L93-L101 >> > >> > Cheers, >> > >> > Chris >> > >> > On Wed, May 8, 2024 at 3:40 AM Mario Fiore Vitale <mvit...@redhat.com> >> > wrote: >> > >> > > Hi All, >> > > >> > > I have created (through Mickael Maison's account since there was an >> issue >> > > creating a new one for me) KIP-1040[1] to improve handling of nullable >> > > values in InsertField/ExtractField transformations, this is required >> > after >> > > the introduction of KIP-581[2] that introduced the configuration >> property >> > > *replace.null.with.default* to *JsonConverter* to choose whether to >> > replace >> > > fields that have a default value and that are null to the default >> value. >> > > >> > > [1] >> > > >> > >> https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=303794677 >> > > [2] >> > > >> > > >> > >> https://cwiki.apache.org/confluence/display/KAFKA/KIP-581%3A+Value+of+optional+null+field+which+has+default+value >> > > >> > > Feedback and suggestions are welcome. >> > > >> > > Regards, >> > > Mario. >> > > -- >> > > >> > > Mario Fiore Vitale >> > > >> > > Senior Software Engineer >> > > >> > > Red Hat <https://www.redhat.com/> >> > > <https://www.redhat.com/> >> > > >> > >> >> >> -- >> >> Mario Fiore Vitale >> >> Senior Software Engineer >> >> Red Hat <https://www.redhat.com/> >> <https://www.redhat.com/> >> >