Hi everybody, this KIP is looking good to me. Just note that the release version is set to 3.8 and should probably be updated.
Are we ready to open a vote on this one? I do not have any additional comments. Cheers, Lucas On Mon, Jun 24, 2024 at 12:55 AM Shashwat Pandey <shashwat.pandey....@gmail.com> wrote: > > Totally agree on the constructors to pass in key/val/ts/headers. > > I was thinking about adding the method for Record as a helper method if > there was a scenario to test both a processor and fixedkeyprocessor at the > same time. Also, it keeps the same signature as the > InternalFixedKeyRecordFactory as well. > > > Regards, > Shashwat Pandey > > > On Sat, Jun 22, 2024 at 8:25 PM Matthias J. Sax <mj...@apache.org> wrote: > > > Thanks for the update. > > > > About the wiki account. Creating the account was done by Infra, but > > setting permissions is on us. Fixed. > > > > > > About the KIP: > > > > Should we pass-in key/value/ts/headers and mimic the constructors for > > `TestRecord` (ie, have similar createXxx(...) overloads as factory > > methods as the constructor overloads) instead of `Record` and > > `TestRecord`? Or is there some benefit I am missing to pass in > > `Record/TestRecord` ? > > > > > > -Matthias > > > > > > On 6/22/24 9:32 AM, Shashwat Pandey wrote: > > > Hi Matthias, > > > > > > That makes sense to me! I updated the code, definitely want to get your > > > perspective on whether or not we want to support the > > > `createFixedKeyRecord(Record)` method, since we already have the > > > `TestRecord` defined in the utils, it might be cleaner to just support > > the > > > `createFixedKeyRecord(TestRecord)` method. > > > > > > For reference - > > > > > https://github.com/s7pandey/kafka/commit/8ac92509d455d8175381a9b4c83900218941bf05#diff-2a3e6e23894a888e8c2fa486e2330f42b8fb28fe2216ba182e27d3d14958457b > > > > > > Also, looks like I do not have access to update the KIP, my confluence > > > account is active now (s7pandey) but I think I need some permissions on > > the > > > actual KIP page. > > > > > > Shashwat > > > > > > On Wed, Jun 12, 2024 at 8:32 PM Matthias J. Sax <mj...@apache.org> > > wrote: > > > > > >> I believe the class name was picked on purpose, to make clear that it > > >> should not be used -- the problem is, that the class is in a public > > >> package and is by itself public (that's unfortunately require, given how > > >> Java works). > > >> > > >> Of course, it's also in the JavaDocs that the class is internal and > > >> should not be used, but not everyone reads the JavaDocs necessarily, so > > >> making it part of the name makes it much more explicit, what I believe > > >> is a good thing. > > >> > > >> I would consider it a fix/improvement, if we could exclude > > >> `InternalFixedKeyRecordFactory` from JavaDoc generation during the > > >> release build -- but I don't think we need a KIP for this, as I would > > >> rather consider it a bug-fix to exclude an internal class in the > > >> JavaDocs build step. > > >> > > >> > > >> -Matthias > > >> > > >> On 6/12/24 4:47 PM, Shashwat Pandey wrote: > > >>> Hi Matthias, > > >>> > > >>> I think that strategy definitely works, abstracting away changes to > > >>> FixedKeyRecord from users, I can put that new factory class and update > > >> the > > >>> KIP. > > >>> > > >>> This might be a discussion for another KIP, but would it also make > > sense > > >> to > > >>> rename the > > >>> InternalFixedKeyRecordFactory to just FixedKeyRecordFactory also make > > >> sense? > > >>> > > >>> > > >>> Regards, > > >>> Shashwat Pandey > > >>> > > >>> > > >>> On Mon, Jun 10, 2024 at 5:07 PM Matthias J. Sax <mj...@apache.org> > > >> wrote: > > >>> > > >>>> Shaswhat, > > >>>> > > >>>> any updates on this KIP? -- I still think that recommending to use > > >>>> `InternalFixedKeyRecordFactory` is not the best way to write test > > code. > > >>>> Changing `FixedKeyRecord` constructor (as I mentioned in my last > > email) > > >>>> might not be a good solution either. > > >>>> > > >>>> Maybe a cleaner way would be (so sidestep this problem), to add a new > > >>>> public "factory class" into the test package to generate > > >>>> FixedKeyRecords, and this factory could internally use > > >>>> `InternalFixedKeyRecordFactory`? It looks cleaner to me from an API > > POV, > > >>>> and if we change anything how `FixedKeyRecord` can be created, it > > would > > >>>> become a non-user-facing / internal change to the "factory" we > > provide. > > >>>> > > >>>> > > >>>> -Matthias > > >>>> > > >>>> On 5/22/24 12:02 AM, Matthias J. Sax wrote: > > >>>>> I was not aware of `InternalFixedKeyRecordFactory`. As the name > > >>>>> indicates, it's considered an internal class, so not sure if we > > should > > >>>>> recommend to use it in test... > > >>>>> > > >>>>> I understand why this class is required, and why it was put into a > > >>>>> public package; the way Java works, enforces this. Not sure if we > > could > > >>>>> find a better solution. > > >>>>> > > >>>>> Might be good to hear from others. > > >>>>> > > >>>>> > > >>>>> -Matthias > > >>>>> > > >>>>> On 5/21/24 3:57 PM, Shashwat Pandey wrote: > > >>>>>> Looking at the ticket and the sample code, I think it would be > > >>>>>> possible to > > >>>>>> continue using `InternalFixedKeyRecordFactory` as the avenue to > > create > > >>>>>> `FixedKeyRecord`s in tests. As long as there was a > > >>>>>> MockFixedKeyProcessorContext, I think we would be able to test > > >>>>>> FixedKeyProcessors without a Topology. > > >>>>>> > > >>>>>> I created a sample repo with the `MockFixedKeyProcessorContext` here > > >> is > > >>>>>> what I think the tests would look like: > > >>>>>> > > >>>> > > >> > > https://github.com/s7pandey/kafka-processor-tests/blob/main/src/test/java/com/example/demo/MyFixedKeyProcessorTest.java > > >>>>>> > > >>>>>> > > >>>>>> > > >>>>>> On Mon, May 20, 2024 at 9:05 PM Matthias J. Sax <mj...@apache.org> > > >>>> wrote: > > >>>>>> > > >>>>>>> Had a discussion on > > >> https://issues.apache.org/jira/browse/KAFKA-15242 > > >>>>>>> and it was pointed out, that we also need to do something about > > >>>>>>> `FixedKeyRecord`. It does not have a public constructor (what is > > >>>>>>> correct; it should not have one). However, this makes testing > > >>>>>>> `FixedKeyProcessor` impossible w/o extending `FixedKeyRecord` > > >> manually > > >>>>>>> what does not seem to be right (too clumsy). > > >>>>>>> > > >>>>>>> It seems, we either need some helper builder method (but not clear > > to > > >>>> me > > >>>>>>> where to add it in an elegant way) which would provide us with a > > >>>>>>> `FixedKeyRecord`, or add some sub-class to the test-utils module > > >> which > > >>>>>>> would extend `FixedKeyRecord`? -- Or maybe an even better > > solution? I > > >>>>>>> could not think of something else so far. > > >>>>>>> > > >>>>>>> > > >>>>>>> Thoughts? > > >>>>>>> > > >>>>>>> > > >>>>>>> On 5/3/24 9:46 AM, Matthias J. Sax wrote: > > >>>>>>>> Please also update the KIP. > > >>>>>>>> > > >>>>>>>> To get a wiki account created, please request it via a commet on > > >> this > > >>>>>>>> ticket: https://issues.apache.org/jira/browse/INFRA-25451 > > >>>>>>>> > > >>>>>>>> After you have the account, please share your wiki id, and we can > > >> give > > >>>>>>>> you write permission on the wiki. > > >>>>>>>> > > >>>>>>>> > > >>>>>>>> > > >>>>>>>> -Matthias > > >>>>>>>> > > >>>>>>>> On 5/3/24 6:30 AM, Shashwat Pandey wrote: > > >>>>>>>>> Hi Matthias, > > >>>>>>>>> > > >>>>>>>>> Sorry this fell out of my radar for a bit. > > >>>>>>>>> > > >>>>>>>>> Revisiting the topic, I think you’re right and we accept the > > >>>>>>>>> duplicated > > >>>>>>>>> nesting as an appropriate solution to not affect the larger > > public > > >>>>>>>>> API. > > >>>>>>>>> > > >>>>>>>>> I can update my PR with the change. > > >>>>>>>>> > > >>>>>>>>> Regards, > > >>>>>>>>> Shashwat Pandey > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> On Wed, May 1, 2024 at 11:00 PM Matthias J. Sax < > > mj...@apache.org> > > >>>>>>> wrote: > > >>>>>>>>> > > >>>>>>>>>> Any updates on this KIP? > > >>>>>>>>>> > > >>>>>>>>>> On 3/28/24 4:11 AM, Matthias J. Sax wrote: > > >>>>>>>>>>> It seems that `MockRecordMetadata` is a private class, and thus > > >> not > > >>>>>>>>>>> part > > >>>>>>>>>>> of the public API. If there are any changes required, we don't > > >>>>>>>>>>> need to > > >>>>>>>>>>> discuss on the KIP. > > >>>>>>>>>>> > > >>>>>>>>>>> > > >>>>>>>>>>> For `CapturedPunctuator` and `CapturedForward` it's a little > > bit > > >>>>>>>>>>> more > > >>>>>>>>>>> tricky. My gut feeling is, that the classes might not need to > > be > > >>>>>>>>>>> changed, but if we use them within `MockProcessorContext` and > > >>>>>>>>>>> `MockFixedKeyProcessorContext` it might be weird to keep the > > >>>> current > > >>>>>>>>>>> nesting... The problem I see is, that it's not straightforward > > >>>>>>>>>>> how to > > >>>>>>>>>>> move the classes w/o breaking compatibility, nor if we > > duplicate > > >>>>>>>>>>> them as > > >>>>>>>>>>> standalone classes w/o a larger "splash radius". (We would need > > >>>>>>>>>>> to add > > >>>>>>>>>>> new overloads for MockProcessorContext#scheduledPunctuators() > > and > > >>>>>>>>>>> MockProcessorContext#forwarded()). > > >>>>>>>>>>> > > >>>>>>>>>>> Might be good to hear from others if we think it's worth this > > >>>> larger > > >>>>>>>>>>> changes to get rid of the nesting, or just accept the somewhat > > >> not > > >>>>>>>>>>> ideal > > >>>>>>>>>>> nesting as it technically is not a real issue? > > >>>>>>>>>>> > > >>>>>>>>>>> > > >>>>>>>>>>> -Matthias > > >>>>>>>>>>> > > >>>>>>>>>>> > > >>>>>>>>>>> On 3/15/24 1:47 AM, Shashwat Pandey wrote: > > >>>>>>>>>>>> Thanks for the feedback Matthias! > > >>>>>>>>>>>> > > >>>>>>>>>>>> The reason I proposed the extension of MockProcessorContext > > was > > >>>>>>>>>>>> more > > >>>>>>>>>>>> to do > > >>>>>>>>>>>> with the internals of the class (MockRecordMetadata, > > >>>>>>>>>>>> CapturedPunctuator and > > >>>>>>>>>>>> CapturedForward). > > >>>>>>>>>>>> > > >>>>>>>>>>>> However, I do see your point, I would then think to split > > >>>>>>>>>>>> MockProcessorContext and MockFixedKeyProcessorContext, some of > > >> the > > >>>>>>>>>>>> internal > > >>>>>>>>>>>> classes should also be extracted i.e. MockRecordMetadata, > > >>>>>>>>>>>> CapturedPunctuator and probably a new CapturedFixedKeyForward. > > >>>>>>>>>>>> > > >>>>>>>>>>>> Let me know what you think! > > >>>>>>>>>>>> > > >>>>>>>>>>>> > > >>>>>>>>>>>> Regards, > > >>>>>>>>>>>> Shashwat Pandey > > >>>>>>>>>>>> > > >>>>>>>>>>>> > > >>>>>>>>>>>> On Mon, Mar 11, 2024 at 10:09 PM Matthias J. Sax < > > >>>> mj...@apache.org> > > >>>>>>>>>>>> wrote: > > >>>>>>>>>>>> > > >>>>>>>>>>>>> Thanks for the KIP Shashwat. Closing this testing gap is > > great! > > >>>> It > > >>>>>>>>>>>>> did > > >>>>>>>>>>>>> come up a few time already... > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> One question: why do you propose to `extend > > >>>> MockProcessorContext`? > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> Given how the actual runtime context classes are setup, it > > >> seems > > >>>>>>> that > > >>>>>>>>>>>>> the regular context and fixed-key-context are distinct, and > > >> thus > > >>>> I > > >>>>>>>>>>>>> believe both mock-context classes should be distinct, too? > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> What I mean is that FixedKeyProcessorContext does not extend > > >>>>>>>>>>>>> ProcessorContext. Both classes have a common parent > > >>>>>>> ProcessINGContext > > >>>>>>>>>>>>> (note the very similar but different names), but they are > > >>>>>>>>>>>>> "siblings" > > >>>>>>>>>>>>> only, so why make the mock processor a parent-child > > >> relationship? > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> It seems better to do > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> public class MockFixedKeyProcessorContext<KForward, VForward> > > >>>>>>>>>>>>> implements FixedKeyProcessorContext<KForward, > > VForward>, > > >>>>>>>>>>>>> RecordCollector.Supplier > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> Of course, if there is code we can share between both > > >>>> mock-context > > >>>>>>> we > > >>>>>>>>>>>>> should so this, but it should not leak into the public API? > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> -Matthias > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> On 3/11/24 5:21 PM, Shashwat Pandey wrote: > > >>>>>>>>>>>>>> Hi everyone, > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>> I would like to start the discussion on > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>> > > >>>>>>>>>> > > >>>>>>> > > >>>> > > >> > > https://cwiki.apache.org/confluence/display/KAFKA/KIP-1027%3A+Add+MockFixedKeyProcessorContext > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>> This adds MockFixedKeyProcessorContext to the Kafka Streams > > >> Test > > >>>>>>>>>>>>>> Utils > > >>>>>>>>>>>>>> library. > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>> Regards, > > >>>>>>>>>>>>>> Shashwat Pandey > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>> > > >>>>>>>>>>>> > > >>>>>>>>>> > > >>>>>>>>> > > >>>>>>> > > >>>>>> > > >>>>>> > > >>>> > > >>> > > >> > > > > > > > >