Hello Sophie, Mathias,

Thanks for your comments.

I fully agree with option 2 and will proceed to update the KIP to reflect this 
choice.

Best Regards,
Jiunn-Yang

> Sophie Blee-Goldman <sop...@responsive.dev> 於 2025年4月26日 清晨6:48 寫道:
> 
> Ah thanks Matthias, I was looking at the wrong code earlier whoops. I
> totally agree, the #build static constructor is out of place, as I said
> originally I believe we should follow the same pattern we used in KIP-1092
> 
> As for whether to literally reuse the same CloseOptions object, I'm against
> that, I think Streams should have its own. Streams has different default
> behavior and we may want to extend the close options with streams-specific
> stuff at some point in the future.
> 
> So I'm definitely in favor of option 2. I also think that if we're going to
> deprecate the entire class and add a new one, then we may as well also use
> an enum instead of a boolean for leaveGroup.
> 
> On Fri, Apr 25, 2025 at 3:39 PM Matthias J. Sax <mj...@apache.org> wrote:
> 
>> Thanks for the KIP.
>> 
>> Using `build()` method in not common in the current API. Why do we want
>> to diverge?
>> 
>> It seems more aligned to the current API design to replace `build()`
>> with two static builder methods:
>> 
>>  - withTimeout(Duration)
>>  - withLeaveGropu(boolean)
>> 
>> (Just for to illustrate. I would not use these two method names though.)
>> 
>> The problem I see is, misalignment to the usual naming patterns and
>> KIP-1092
>> (
>> https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=321719077
>> )
>> 
>> We usually use `withXxx(...)` for the non-static method, and other names
>> for the static entry point method. However, the existing `CloseOptions`
>> already uses `timeout(During)` and `leaveGroup(boolean)` so we cannot
>> just change it.
>> 
>> 
>> I think there is two options:
>> 
>> (1) We could just re-use the `CloseOptions` class from KIP-1092, and
>> deprecate `KafkaStreams.close(KakfaStreams.ClosOptions)` in favor of a
>> new one, which accepts the KIP-1092 `CloseOptions` object -- I want to
>> point out, that this idea was discussed on KIP-1092 already, but it was
>> controversial.
>> 
>> (2) If we don't want to do it, we can also deprecate the entire existing
>> (nested) class, `KafkaStreams.CloseOptions`, and create a new (top
>> level) `o.a.k.streams.CloseOptions` and design it in a way that aligns
>> to common naming patterns.
>> 
>> public class CloseOptions {
>>   public static CloseOptions timeout(Duration);
>>   public static CloseOptions leaveGroup(boolean);
>> 
>>   public CloseOptions withTimeout(Duration);
>>   public CloseOptions withLeaveGroup(boolean);
>> }
>> 
>> (Or similar names.)
>> 
>> Btw: Instead of using a `boolean` it could also be beneficial to use an
>> enum a la KIP-1092 with valued DEFAULT, LEAVE_GROUP, REMAIN_IN_GROUP?
>> 
>> 
>> Thoughts?
>> 
>> 
>> -Matthias
>> 
>> 
>> 
>> On 4/25/25 3:05 PM, Sophie Blee-Goldman wrote:
>>> Thanks! I personally think this looks good, as we really just wanted to
>>> remove the public constructor, but I'll ping Matthias to take a look and
>>> make sure this is in line with his understanding
>>> 
>>> If yes I think we can move to a vote
>>> 
>>> On Fri, Apr 25, 2025 at 5:34 AM 黃竣陽 <s7133...@gmail.com> wrote:
>>> 
>>>> Hello Sophie,
>>>> 
>>>> Thanks for your comments,
>>>> 
>>>> I’ve updated the KIP to add a new static `build()` method for
>> initializing
>>>> the CloseOptions object.
>>>> The public constructor has been deprecated, while the existing
>>>> fluent-style methods remain unchanged.
>>>> 
>>>> Best Regards,
>>>> Jiunn-Yang
>>>> 
>>>>> Sophie Blee-Goldman <sop...@responsive.dev> 於 2025年4月25日 清晨5:15 寫道:
>>>>> 
>>>>> Thanks for the KIP!
>>>>> 
>>>>> This looks good but a few comments about the API: I think we actually
>>>> want
>>>>> more of a fluent pattern than a literal builder pattern, to be
>> consistent
>>>>> with other APIs in Kafka Streams. You can criticize Matthias for saying
>>>>> "builder pattern" in the ticket, he means a fluent style :P
>>>>> 
>>>>> In other words instead of introducing a CloseOptions.Builder we should
>>>> just
>>>>> have a static constructor and non-static `.withParam()` methods for all
>>>>> optional parameters. You can actually take a look at the design of the
>>>>> CloseOptions class we just added for the consumer client, which we
>>>> designed
>>>>> specifically to match the style we wanted the Streams CloseOptions to
>>>> have.
>>>>> The parameters are a bit different but the API format should be the
>> same
>>>>> 
>>>>> Cheers,
>>>>> Sophie
>>>>> 
>>>>> On Fri, Apr 11, 2025 at 6:43 PM 黃竣陽 <s7133...@gmail.com> wrote:
>>>>> 
>>>>>> Hello everyone,
>>>>>> 
>>>>>> I would like to start a discussion on KIP-1153: Kafka Streams
>>>>>> `CloseOptions` should not have a public constructor
>>>>>> <https://cwiki.apache.org/confluence/x/QAq9F>
>>>>>> 
>>>>>> This proposal aims to improve KafkaStreams.CloseOptions by adopting a
>>>>>> builder pattern to ensure API consistency.
>>>>>> 
>>>>>> Best Regards,
>>>>>> Jiunn-Yang
>>>> 
>>>> 
>>> 
>> 
>> 

Reply via email to