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
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>
> >>>>>>>
> >>>>>>
> >>>>>>
> >>>>
> >>>
> >>
> >
> >
>

Reply via email to