Hello Jun,

JR10: The sasl.oauthbearer.expected.audience is optional, that is right, so I 
think
that we can allow null value, but not allow the empty 

JR11: In this KIP, the goal is to address configurations that should not accept 
empty arrays. 
We want to prevent users from passing in an empty list when it's not valid. I 
believe there are two 
main scenarios to consider: 

1. Nullable but not empty: 
The parameter allows either a null value or a non-empty list. In this case, 
if the user provides an empty list, we should throw a ConfigException. 

2. Non-null and non-empty only: The parameter must always contain a non-empty 
list — null is also 
invalid. In this case, if the user provides either a null or an empty list, we 
should throw a ConfigException.

Therefore, I want to prevent scenarios where users can pass in an empty list.

JR12: I’ve updated NonEmptyListValidator to include an allowNull property. This 
allows us to specify 
whether a configuration permits null values or not.

JR13: I have updated the table


> Jun Rao <j...@confluent.io.INVALID> 於 2025年7月1日 清晨6:30 寫道:
> 
> Hi, Jiunn-Yang,
> 
> Sorry for the late reply. A few more comments.
> 
> JR10. The doc for sasl.oauthbearer.expected.audience says that it's
> optional. So an empty list seems to be valid.
> 
> JR11. Thinking a bit more. If we are going to support empty lists in
> general, it's probably more consistent to just allow log.cleanup.policy to
> be empty as Luke suggested, instead of introducing a new option None.
> 
> JR12. NonEmptyListValidator allows the input to be null. It seems that
> only ssl.cipher.suites allows null. The remaining ones shouldn't be null.
> 
> JR13. The table is very helpful. Could you also describe the old/new
> behavior for each config with an empty list or duplicate entry?
> 
> Thanks,
> 
> Jun
> 
> 
> 
> On Mon, Jun 30, 2025 at 6:02 AM 黃竣陽 <s7133...@gmail.com> wrote:
> 
>> Hello all,
>> 
>> I am manually bumping this thread. Any feedback would be appreciated.
>> 
>> Best regards,
>> Jiunn-Yang
>> 
>>> 黃竣陽 <s7133...@gmail.com> 於 2025年5月28日 晚上11:21 寫道:
>>> 
>>> Hello Jun,
>>> 
>>> I have updated the KIP and introduced a new validator,
>> NonEmptyListValidator, which ensures that the
>>> provided list is either null or a non-empty list without duplicate
>> entries. I’ve also listed the configurations that will
>>> be validated using this logic. Please feel free to share any feedback or
>> suggestions.
>>> 
>>> Best Regards,
>>> Jiunn-Yang
>>> 
>>>> Jun Rao <j...@confluent.io.INVALID> 於 2025年5月23日 凌晨2:29 寫道:
>>>> 
>>>> Hi, Jiunn-Yang,
>>>> 
>>>> It seems there are quite a few other configs of type list (e.g. several
>> SSL
>>>> related ones). It would be useful to understand if empty lists are valid
>>>> for them or not.
>>>> 
>>>> Thanks,
>>>> 
>>>> Jun
>>>> 
>>>> On Tue, May 13, 2025 at 10:12 AM Jun Rao <j...@confluent.io> wrote:
>>>> 
>>>>> Hi, Luke,
>>>>> 
>>>>> Thanks for the reply.
>>>>> 
>>>>> "My thought is that this behavior has been existed
>>>>> for years (maybe after "cleanup.policy" was introduced?), there could
>> be
>>>>> users relying on the empty cleanup.policy for a long time. "
>>>>> 
>>>>> If you do a google search on "kafka infinite retention", you will get
>>>>> links like
>>>>> 
>> https://stackoverflow.com/questions/39735036/make-kafka-topic-log-retention-permanent
>>>>> and
>>>>> 
>> https://www.reddit.com/r/apachekafka/comments/mpz4bp/kafka_retention_question/
>> ,
>>>>> both pointing to setting the retention time and retention size to -1 to
>>>>> achieve this goal. So, it seems that if a user intentionally wants
>> infinite
>>>>> retention, it's more likely they will use that approach instead of
>> setting
>>>>> cleanup.policy to empty. On the other hand, our API/tools make it
>> possible
>>>>> for users to make a mistake by inadvertently leaving the config value
>> empty.
>>>>> 
>>>>> Thanks,
>>>>> 
>>>>> Jun
>>>>> 
>>>>> On Mon, May 12, 2025 at 11:38 PM Luke Chen <show...@gmail.com> wrote:
>>>>> 
>>>>>> Hi Jun,
>>>>>> 
>>>>>>> Regarding the motivation, currently, we never documented that an
>> empty
>>>>>> cleanup.policy implies infinite retention. In fact, if one leaves
>>>>>> cleanup.policy empty, it actually breaks remote storage since it will
>> stop
>>>>>> the cleaning based on local retention size and time too. So, leaving
>>>>>> cleanup.policy empty is probably more like a user mistake than an
>>>>>> intentional choice. Based on this assumption, the idea behind the KIP
>> is
>>>>>> to
>>>>>> fail an empty cleanup.policy so that the user is aware of this likely
>>>>>> mistake and provide a new option None for users wanting infinite
>> retention
>>>>>> to opt in explicitly.
>>>>>> 
>>>>>> While we never documented the empty cleanup.policy implies infinite
>>>>>> retention, we also never documented (or failed) the empty
>> cleanup.policy
>>>>>> is
>>>>>> an invalid configuration. My thought is that this behavior has been
>>>>>> existed
>>>>>> for years (maybe after "cleanup.policy" was introduced?), there could
>> be
>>>>>> users relying on the empty cleanup.policy for a long time. It is not
>> good
>>>>>> to break the backward compatibility in a minor release version (ex:
>>>>>> v4.1.0). Even though we think we are fixing a long existing bug, it
>> could
>>>>>> be a surprise to users.
>>>>>> 
>>>>>> 
>>>>>>> We could also consider supporting an empty cleanup.policy by fixing
>> the
>>>>>> issue in remote storage. But then the user may never realize this if
>> it's
>>>>>> a
>>>>>> mistake.
>>>>>> 
>>>>>> Good point! I agree we need to fix it!
>>>>>> 
>>>>>> 
>>>>>> Hi Chia-Ping,
>>>>>> 
>>>>>>> We can print warnings for empty cleanup.policy in 4.x and in 5.0 we
>>>>>> throw
>>>>>> exception directly to make it fail fast
>>>>>> 
>>>>>> This suggestion looks good to me!
>>>>>> 
>>>>>> Thank you.
>>>>>> Luke
>>>>>> 
>>>>>> On Tue, May 13, 2025 at 2:14 PM Chia-Ping Tsai <chia7...@apache.org>
>>>>>> wrote:
>>>>>> 
>>>>>>> hi all,
>>>>>>> 
>>>>>>> Given Luke mentioned the existence of use cases, it is worth
>> considering
>>>>>>> the compatibility issue. In fact, I had previously encountered this
>> use
>>>>>>> case but advised customers to utilize retention configurations
>> instead.
>>>>>>> 
>>>>>>>> We could also consider supporting an empty cleanup.policy by fixing
>>>>>> the
>>>>>>>> issue in remote storage. But then the user may never realize this if
>>>>>>> it's a
>>>>>>>> mistake.
>>>>>>> 
>>>>>>> Good catch! The "empty" or "none" wouldn't make sense for remote
>>>>>> storage.
>>>>>>> I've opened KAFKA-19273 to ensure topics with tiered storage use a
>> valid
>>>>>>> delete policy.
>>>>>>> 
>>>>>>> Best,
>>>>>>> Chia-Ping
>>>>>>> 
>>>>>>> 
>>>>>>> On 2025/05/12 19:06:10 Jun Rao wrote:
>>>>>>>> Hi, Luke,
>>>>>>>> 
>>>>>>>> Regarding the motivation, currently, we never documented that an
>> empty
>>>>>>>> cleanup.policy implies infinite retention. In fact, if one leaves
>>>>>>>> cleanup.policy empty, it actually breaks remote storage since it
>> will
>>>>>>> stop
>>>>>>>> the cleaning based on local retention size and time too. So, leaving
>>>>>>>> cleanup.policy empty is probably more like a user mistake than an
>>>>>>>> intentional choice. Based on this assumption, the idea behind the
>> KIP
>>>>>> is
>>>>>>> to
>>>>>>>> fail an empty cleanup.policy so that the user is aware of this
>> likely
>>>>>>>> mistake and provide a new option None for users wanting infinite
>>>>>>> retention
>>>>>>>> to opt in explicitly.
>>>>>>>> 
>>>>>>>> We could also consider supporting an empty cleanup.policy by fixing
>>>>>> the
>>>>>>>> issue in remote storage. But then the user may never realize this if
>>>>>>> it's a
>>>>>>>> mistake.
>>>>>>>> 
>>>>>>>> Thanks,
>>>>>>>> 
>>>>>>>> Jun
>>>>>>>> 
>>>>>>>> 
>>>>>>>> On Sun, May 11, 2025 at 7:53 PM Luke Chen <show...@gmail.com>
>> wrote:
>>>>>>>> 
>>>>>>>>> Hi Jiunn-Yang,
>>>>>>>>> 
>>>>>>>>> Thanks for the KIP.
>>>>>>>>> 
>>>>>>>>> Comments:
>>>>>>>>> 1. "it is acceptable because an empty cleanup.policy is considered
>>>>>>> invalid
>>>>>>>>> in Kafka. Therefore, this trade-off is justified."
>>>>>>>>> Could you explain more about this? Why is this trade-off justified?
>>>>>>>>> If we think the empty cleanup.policy is invalid in kafka, why do we
>>>>>>> provide
>>>>>>>>> an additional "none" option to users in this KIP?
>>>>>>>>> FYI, there are indeed use cases that need to keep all history data
>>>>>>> without
>>>>>>>>> a cleanup policy.
>>>>>>>>> 
>>>>>>>>> 2. Following (1), I agree we should fail fast for empty
>>>>>>>>> "group.coordinator.rebalance.protocols" and "process.roles" configs
>>>>>>> since
>>>>>>>>> they are invalid.
>>>>>>>>> But about "cleanup.policy", I don't see a persuasive reason why we
>>>>>>> should
>>>>>>>>> break backward compatibility to change it.
>>>>>>>>> "This provides a clear and direct way to configure Kafka to retain
>>>>>> all
>>>>>>> log
>>>>>>>>> segments without any automatic cleanup."
>>>>>>>>> This is the motivation we mentioned in the KIP, but to me, backward
>>>>>>>>> compatibility is much more important than "a clear and direct way
>> to
>>>>>>> config
>>>>>>>>> kafka".
>>>>>>>>> Do we really have to change the "cleanup.policy" config?
>>>>>>>>> 
>>>>>>>>> Thanks.
>>>>>>>>> Luke
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> On Wed, May 7, 2025 at 2:17 AM Jun Rao <j...@confluent.io.invalid>
>>>>>>> wrote:
>>>>>>>>> 
>>>>>>>>>> Hi, Jiunn-Yang,
>>>>>>>>>> 
>>>>>>>>>> Thanks for the updated KIP. It looks good to me.
>>>>>>>>>> 
>>>>>>>>>> Jun
>>>>>>>>>> 
>>>>>>>>>> On Tue, May 6, 2025 at 4:58 AM 黃竣陽 <s7133...@gmail.com> wrote:
>>>>>>>>>> 
>>>>>>>>>>> Hi Jun, chia
>>>>>>>>>>> 
>>>>>>>>>>> Thanks for all the comments. They have all been addressed in the
>>>>>>>>> updated
>>>>>>>>>>> KIP.
>>>>>>>>>>> 
>>>>>>>>>>> I've removed all deprecated-related sections. Additionally, an
>>>>>>>>> exception
>>>>>>>>>>> will now be thrown if a
>>>>>>>>>>> developer passes an empty validStrings list to the inNonEmpty
>>>>>>> method.
>>>>>>>>>>> 
>>>>>>>>>>> Best Regards,
>>>>>>>>>>> Jiunn-Yang
>>>>>>>>>>> 
>>>>>>>>>>>> Chia-Ping Tsai <chia7...@gmail.com> 於 2025年5月6日 凌晨12:46 寫道:
>>>>>>>>>>>> 
>>>>>>>>>>>> hi Jiunn-Yang
>>>>>>>>>>>> 
>>>>>>>>>>>> The `inNonEmpty` is used to prevent users pass empty config,
>>>>>> so
>>>>>>>>> should
>>>>>>>>>> it
>>>>>>>>>>>> be non-empty too?
>>>>>>>>>>>> 
>>>>>>>>>>>> For example, `inNonEmpty()` should throw exception directly.
>>>>>>>>>>>> 
>>>>>>>>>>>> Best,
>>>>>>>>>>>> Chia-Ping
>>>>>>>>>>>> 
>>>>>>>>>>>> Jun Rao <j...@confluent.io.invalid> 於 2025年5月6日 週二 上午12:28寫道:
>>>>>>>>>>>> 
>>>>>>>>>>>>> Hi, Jiunn-Yang,
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Thanks for the reply. There are still references to the
>>>>>>> deprecated
>>>>>>>>>>> method.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> "stop relying on the deprecated methods"
>>>>>>>>>>>>> "Finally, the deprecated method will be removed in Kafka 5.0"
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Jun
>>>>>>>>>>>>> 
>>>>>>>>>>>>> On Sat, May 3, 2025 at 7:42 AM 黃竣陽 <s7133...@gmail.com>
>>>>>> wrote:
>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Hi Jun, chia,
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Thanks for all the comments. They have all been addressed in
>>>>>>> the
>>>>>>>>>>> updated
>>>>>>>>>>>>>> KIP.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Best Regards,
>>>>>>>>>>>>>> Jiunn-Yang
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Chia-Ping Tsai <chia7...@gmail.com> 於 2025年5月3日 凌晨2:03 寫道:
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> hi Jiunn-Yang
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> in the "Compatibility, Deprecation, and Migration Plan",
>>>>>>> could you
>>>>>>>>>> add
>>>>>>>>>>>>>>> description to remind readers that "clean.policy=" should
>>>>>> be
>>>>>>>>>> replaced
>>>>>>>>>>>>> by
>>>>>>>>>>>>>>> "clean.policy=none" if they do want to disable delete and
>>>>>>> compact.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Best,
>>>>>>>>>>>>>>> Chia-Ping
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Jun Rao <j...@confluent.io.invalid> 於 2025年5月3日 週六
>>>>>> 上午1:55寫道:
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> Hi, Jiunn-Yang,
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> It's fine not to deprecate ValidList#in for now. Could you
>>>>>>> update
>>>>>>>>>> the
>>>>>>>>>>>>>> KIP
>>>>>>>>>>>>>>>> completely? There are still references to deprecation.
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> Jun
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> On Fri, May 2, 2025 at 4:59 AM 黃竣陽 <s7133...@gmail.com>
>>>>>>> wrote:
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Hi Jun,
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> I don’t think we should deprecate the ValidList#in
>>>>>> method,
>>>>>>> as
>>>>>>>>>> there
>>>>>>>>>>>>> may
>>>>>>>>>>>>>>>> be
>>>>>>>>>>>>>>>>> future scenarios where we want
>>>>>>>>>>>>>>>>> to allow list configs to be empty. It’s useful to have
>>>>>> both
>>>>>>>>>> methods:
>>>>>>>>>>>>> in
>>>>>>>>>>>>>>>>> (which allows empty lists)
>>>>>>>>>>>>>>>>> and inNonEmpty (which enforces non-empty lists).
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> Just a minor comment. It would be useful to document
>>>>>> that
>>>>>>>>> during
>>>>>>>>>>>>>>>> upgrade,
>>>>>>>>>>>>>>>>>> if cleanup.policy is empty, the broker will fail to
>>>>>> start.
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> I’ve updated the KIP accordingly.
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Best Regards,
>>>>>>>>>>>>>>>>> Jiunn-Yang
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> Jun Rao <j...@confluent.io.INVALID> 於 2025年5月2日 凌晨12:50
>>>>>> 寫道:
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> Hi, Jiunn-Yang,
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> Thanks for the reply. Sounds good.
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> Just a minor comment. It would be useful to document
>>>>>> that
>>>>>>>>> during
>>>>>>>>>>>>>>>> upgrade,
>>>>>>>>>>>>>>>>>> if cleanup.policy is empty, the broker will fail to
>>>>>> start.
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> Jun
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> On Thu, May 1, 2025 at 8:40 AM 黃竣陽 <s7133...@gmail.com>
>>>>>>> wrote:
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> Hello Jun,
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> Since ValidList is a public API, we need to maintain
>>>>>>> backward
>>>>>>>>>>>>>>>>>>> compatibility. Therefore, the isEmptyAllowed flag is
>>>>>>>>> necessary.
>>>>>>>>>>>>>>>>>>> We can update the signature of isNonEmpty() to remove
>>>>>> the
>>>>>>>>>> boolean
>>>>>>>>>>>>>>>>>>> parameter.
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> Best Regards,
>>>>>>>>>>>>>>>>>>> Jiunn-Yang
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> Jun Rao <j...@confluent.io.INVALID> 於 2025年5月1日 凌晨4:17
>>>>>>> 寫道:
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> Hi, Jiunn-Yang,
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> Thanks for the reply.
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> Do we really need isEmptyAllowed? It's awkward since
>>>>>> the
>>>>>>>>> method
>>>>>>>>>>>>> name
>>>>>>>>>>>>>>>> is
>>>>>>>>>>>>>>>>>>>> inNonEmpty. Also, it's not clear when it's set to
>>>>>> true.
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> Jun
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> On Fri, Apr 25, 2025 at 6:26 AM 黃竣陽 <
>>>>>> s7133...@gmail.com>
>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> Hi Jun,
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> Thank you for pointing that out.
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> I have revised the KIP as follows:
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> “In this case, the change does not introduce new
>>>>>> invalid
>>>>>>>>>>>>>>>>> configurations
>>>>>>>>>>>>>>>>>>> or
>>>>>>>>>>>>>>>>>>>>> prevent any currently valid setup.
>>>>>>>>>>>>>>>>>>>>> The main behavioral difference is that we now
>>>>>> explicitly
>>>>>>>>>> throw a
>>>>>>>>>>>>>>>>>>>>> ConfigException  during the storage format validation
>>>>>>> phase
>>>>>>>>>>>>>>>>>>>>> instead of relying on the current behavior.”
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> This reflects the correct behavior.
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> Best Regards,
>>>>>>>>>>>>>>>>>>>>> Jiunn-Yang
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> Jun Rao <j...@confluent.io.INVALID> 於 2025年4月25日
>>>>>>> 凌晨1:17 寫道:
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> Hi, Jiunn-Yang,
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> "The main behavioral difference introduced by this
>>>>>>> change
>>>>>>>>> is
>>>>>>>>>>>>> that
>>>>>>>>>>>>>> a
>>>>>>>>>>>>>>>>>>>>>> ConfigException  will now be thrown during the
>>>>>> storage
>>>>>>>>> format
>>>>>>>>>>>>>>>>>>> validation
>>>>>>>>>>>>>>>>>>>>>> phase, rather than during server startup."
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> It seems that currently formating the storage
>>>>>> already
>>>>>>> fails
>>>>>>>>>> if
>>>>>>>>>>>>>>>>>>>>>> group.coordinator.rebalance.protocols and
>>>>>> process.roles
>>>>>>>>> are
>>>>>>>>>>>>>> empty.
>>>>>>>>>>>>>>>>> It
>>>>>>>>>>>>>>>>>>>>> just
>>>>>>>>>>>>>>>>>>>>>> gets a different exception.
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> Jun
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> On Thu, Apr 24, 2025 at 5:32 AM 黃竣陽 <
>>>>>>> s7133...@gmail.com>
>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> Hi Jun, chia,
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> Thanks for your feedback.
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> I add a new section for this change:
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> - Validation for
>>>>>>> group.coordinator.rebalance.protocols and
>>>>>>>>>>>>>>>>>>> process.roles
>>>>>>>>>>>>>>>>>>>>>>> will be
>>>>>>>>>>>>>>>>>>>>>>> moved from the server startup phase to the storage
>>>>>>> format
>>>>>>>>>>>>> phase.
>>>>>>>>>>>>>>>>>>>>>>> - For cleanup.policy, setting an empty list will
>>>>>> now
>>>>>>> be
>>>>>>>>>>>>>> considered
>>>>>>>>>>>>>>>>>>>>> invalid
>>>>>>>>>>>>>>>>>>>>>>> and will
>>>>>>>>>>>>>>>>>>>>>>> result in a ConfigException during storage format
>>>>>>> phase.
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> Best Regards,
>>>>>>>>>>>>>>>>>>>>>>> Jiunn-Yang
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> Jun Rao <j...@confluent.io.INVALID> 於 2025年4月24日
>>>>>>> 凌晨4:44
>>>>>>>>> 寫道:
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> Hi, Jiunn-Yang,
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> Thanks for the reply.
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> Q2. It's true that
>>>>>>> group.coordinator.rebalance.protocols
>>>>>>>>>> and
>>>>>>>>>>>>>>>>>>>>>>> process.roles
>>>>>>>>>>>>>>>>>>>>>>>> configurations can't be empty right now. With this
>>>>>>> KIP,
>>>>>>>>> the
>>>>>>>>>>>>> user
>>>>>>>>>>>>>>>>> will
>>>>>>>>>>>>>>>>>>>>>>>> probably get a different (and more accurate)
>>>>>>> exception.
>>>>>>>>> It
>>>>>>>>>>>>> will
>>>>>>>>>>>>>>>> be
>>>>>>>>>>>>>>>>>>>>> useful
>>>>>>>>>>>>>>>>>>>>>>>> to document that.
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> Regarding cleanup.policy, I kind of agree with
>>>>>>> Chia-Ping.
>>>>>>>>>> If
>>>>>>>>>>> a
>>>>>>>>>>>>>>>> user
>>>>>>>>>>>>>>>>>>>>>>> leaves
>>>>>>>>>>>>>>>>>>>>>>>> cleanup.policy empty, it's more likely to be a
>>>>>>> mistake
>>>>>>>>> than
>>>>>>>>>>> an
>>>>>>>>>>>>>>>>>>>>> intention.
>>>>>>>>>>>>>>>>>>>>>>>> If we automatically treat it as None, the user
>>>>>> will
>>>>>>> never
>>>>>>>>>>>>>> realize
>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>>>> mistake. Throwing an exception will let the user
>>>>>>> realize
>>>>>>>>>>> there
>>>>>>>>>>>>>>>> is a
>>>>>>>>>>>>>>>>>>>>>>> mistake.
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> Jun
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> On Wed, Apr 23, 2025 at 8:26 AM Chia-Ping Tsai <
>>>>>>>>>>>>>>>> chia7...@gmail.com
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> hi Jiunn-Yang,
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> Thanks for the KIP, and I understand that
>>>>>>> maintaining
>>>>>>>>>>>>>>>>> compatibility
>>>>>>>>>>>>>>>>>>> is
>>>>>>>>>>>>>>>>>>>>>>>>> important.
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> However, according to the documentation, we don't
>>>>>>> allow
>>>>>>>>> an
>>>>>>>>>>>>>> empty
>>>>>>>>>>>>>>>>>>> value
>>>>>>>>>>>>>>>>>>>>>>> for
>>>>>>>>>>>>>>>>>>>>>>>>> the cleanup.policy. Hence, should we consider
>>>>>>> throwing
>>>>>>>>> an
>>>>>>>>>>>>>>>>> exception
>>>>>>>>>>>>>>>>>>>>> for
>>>>>>>>>>>>>>>>>>>>>>> an
>>>>>>>>>>>>>>>>>>>>>>>>> empty value in version 4.x? This could streamline
>>>>>>> the
>>>>>>>>> code
>>>>>>>>>>>>> and
>>>>>>>>>>>>>>>>> avoid
>>>>>>>>>>>>>>>>>>>>> an
>>>>>>>>>>>>>>>>>>>>>>>>> extra deprecation cycle.
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> Best,
>>>>>>>>>>>>>>>>>>>>>>>>> Chia-Ping
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> Jun Rao <j...@confluent.io.invalid> 於 2025年4月23日
>>>>>> 週三
>>>>>>>>>>> 上午6:33寫道:
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> Hi, Jiunn-Yang,
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> Regarding "The none policy will not delete or
>>>>>>> compact
>>>>>>>>> any
>>>>>>>>>>>>>>>>>>> segments",
>>>>>>>>>>>>>>>>>>>>> we
>>>>>>>>>>>>>>>>>>>>>>>>>> should be more accurate. We won't delete
>>>>>> segments
>>>>>>> based
>>>>>>>>>> on
>>>>>>>>>>>>>>>>>>>>>>>>>> log.retention.bytes/log.retention.ms, but we
>>>>>>> should
>>>>>>>>>>>>> continue
>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>>>>> delete
>>>>>>>>>>>>>>>>>>>>>>>>>> segments based on log.local.retention.bytes/
>>>>>>>>>>>>> log.retention.ms.
>>>>>>>>>>>>>>>>>>>>>>> Otherwise,
>>>>>>>>>>>>>>>>>>>>>>>>>> we
>>>>>>>>>>>>>>>>>>>>>>>>>> risk running out of local disk space when remote
>>>>>>>>> storage
>>>>>>>>>> is
>>>>>>>>>>>>>>>>>>> enabled.
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> Jun
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> On Tue, Apr 22, 2025 at 9:45 AM Jun Rao <
>>>>>>>>>> j...@confluent.io>
>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>> Hi, Jiunn-Yang,
>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>> Thanks for the reply.
>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>> Q2. What about existing empty values for
>>>>>>>>>>>>>>>>>>>>>>>>>>> group.coordinator.rebalance.protocols and
>>>>>>>>> process.roles
>>>>>>>>>>>>>> during
>>>>>>>>>>>>>>>>>>>>>>> upgrade?
>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>> Jun
>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>> On Tue, Apr 22, 2025 at 7:29 AM 黃竣陽 <
>>>>>>>>> s7133...@gmail.com
>>>>>>>>>>> 
>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>> Hello Jun,
>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>> Thanks for review this KIP.
>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>> Q1 & Q3:
>>>>>>>>>>>>>>>>>>>>>>>>>>>> I’ve updated the method name accordingly and
>>>>>>> revised
>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>>>>> cleanup.policy
>>>>>>>>>>>>>>>>>>>>>>>>>>>> documentation
>>>>>>>>>>>>>>>>>>>>>>>>>>>> to clarify that the none policy cannot be used
>>>>>>> with
>>>>>>>>> any
>>>>>>>>>>>>>> other
>>>>>>>>>>>>>>>>>>>>> policy.
>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>> Q2:
>>>>>>>>>>>>>>>>>>>>>>>>>>>> For users currently using an empty
>>>>>>> cleanup.policy,
>>>>>>>>> the
>>>>>>>>>>>>>>>> approach
>>>>>>>>>>>>>>>>>>> is
>>>>>>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>>>>>>>>>>>> apply the none policy
>>>>>>>>>>>>>>>>>>>>>>>>>>>> during the preProcessParsedConfig step.
>>>>>>>>> Additionally, a
>>>>>>>>>>>>>>>> warning
>>>>>>>>>>>>>>>>>>>>>>>>> message
>>>>>>>>>>>>>>>>>>>>>>>>>>>> will be emitted to inform users
>>>>>>>>>>>>>>>>>>>>>>>>>>>> of the upcoming change.
>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>> Best Regards,
>>>>>>>>>>>>>>>>>>>>>>>>>>>> Jiunn-Yang
>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Jun Rao <j...@confluent.io.INVALID> 於
>>>>>> 2025年4月22日
>>>>>>>>>> 凌晨4:52
>>>>>>>>>>>>> 寫道:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Hi, Jiunn-Yang,
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Thanks for the KIP. A few comments.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 1. It's fine to introduce a new value None
>>>>>> for
>>>>>>>>>>>>>>>> cleanup.policy.
>>>>>>>>>>>>>>>>>>> But
>>>>>>>>>>>>>>>>>>>>>>>>> now
>>>>>>>>>>>>>>>>>>>>>>>>>>>> not
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> all value combinations are valid. For
>>>>>> example,
>>>>>>> None
>>>>>>>>>>> can't
>>>>>>>>>>>>>> be
>>>>>>>>>>>>>>>>>>> used
>>>>>>>>>>>>>>>>>>>>>>>>> with
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Delete or Compact. It would be useful to
>>>>>>> document
>>>>>>>>>> that.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 2. What's the behavior during upgrade when an
>>>>>>>>> existing
>>>>>>>>>>>>>>>> config
>>>>>>>>>>>>>>>>>>> has
>>>>>>>>>>>>>>>>>>>>> an
>>>>>>>>>>>>>>>>>>>>>>>>>>>> empty
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> list.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 3. inWithEmptyCheck: It's not clear what the
>>>>>>> empty
>>>>>>>>>> check
>>>>>>>>>>>>>>>> does.
>>>>>>>>>>>>>>>>>>> How
>>>>>>>>>>>>>>>>>>>>>>>>>> about
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> sth like inNonEmpty ?
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Jun
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On Tue, Apr 15, 2025 at 8:25 AM 黃竣陽 <
>>>>>>>>>> s7133...@gmail.com
>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Hello everyone,
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I would like to start a discussion on
>>>>>> KIP-1161:
>>>>>>>>>>>>>>>>> cleanup.policy
>>>>>>>>>>>>>>>>>>>>>>>>>>>> shouldn't
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> be empty
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> <
>>>>>> https://cwiki.apache.org/confluence/x/HArXF>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> This proposal aims to improve the
>>>>>>> cleanup.policy
>>>>>>>>>>>>>>>>> configuration.
>>>>>>>>>>>>>>>>>>>>>>>>>>>> Currently,
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> this setting should not be left empty.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Therefore, there are two proposed
>>>>>> improvements:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 1. Update ValidList to validate whether an
>>>>>>> empty
>>>>>>>>> list
>>>>>>>>>>> is
>>>>>>>>>>>>>>>>>>> allowed.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 2. Introduce a new 'none' value for
>>>>>>> cleanup.policy.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Best Regards,
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Jiunn-Yang
>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>> 
>>>>>>>> 
>>>>>>> 
>>>>>> 
>>>>> 
>>> 
>> 
>> 

Reply via email to