Hi Chia, Jun

Thanks for the reply,
I have updated the table in the KIP.

Best Regards,
Jiunn-Yang

> Chia-Ping Tsai <chia7...@gmail.com> 於 2025年7月11日 清晨7:38 寫道:
> 
> Hi, Jun
> 
> Thanks for the reply.
> 
> I think the following configs could use null as the default value and treat
> an "empty list" as an illegal value.
> 
> `sasl.oauthbearer.expected.audience`, `ssl.cipher.suites`,
> `ssl.enabled.protocols`,
> and `log.dirs`
> 
> Jun Rao <j...@confluent.io.invalid> 於 2025年7月11日 週五 上午6:59寫道:
> 
>> Hi, Chia-Ping, Jiunn-Yang,
>> 
>> Thanks for the reply.
>> 
>> As you said, if ssl.cipher.suites is empty, intuitively this means that no
>> cipher is allowed. So, this should be an illegal config. It just happens
>> that our implementation treats it as if the config is not set (meaning the
>> value is null). So, it seems that a more intuitive convention is: if the
>> config is not set, it defaults to all available cipher suites. If it's
>> explicitly set, it can't be empty.
>> 
>> Jun
>> 
>> 
>> 
>> On Wed, Jul 9, 2025 at 8:27 AM 黃竣陽 <s7133...@gmail.com> wrote:
>> 
>>> Hi Jun, Chia
>>> 
>>>>> Also, it would be useful to add a compatibility column in the table.
>> If
>>> a
>>>>> value is formally disallowed, it would be useful to compare the old
>> and
>>> the
>>>>> new behavior (e.g. a different exception is thrown, etc).
>>> I’ve updated the table to show which exceptions will be thrown for each
>>> behavior.
>>> 
>>>>>> I don't understand the point of "5.0". Could you please share more
>>> details?
>>>>>> It seems to me changing the type or default value should be fine in
>>> minor
>>>>>> release if we don't break the existing property files.
>>> I don't think this requires any compatibility considerations, so I’ve
>>> removed the Kafka 5.0 changes section.
>>> 
>>>>>> `max.connections.per.ip.overrides` is parsed as "map" type, so using
>>> `LIST`
>>>>>> instead of `String` does not seems to make sense.
>>> I have removed the config from KIP
>>> 
>>> Best Regards,
>>> Jiunn-Yang
>>> 
>>>> Chia-Ping Tsai <chia7...@apache.org> 於 2025年7月9日 晚上10:26 寫道:
>>>> 
>>>>> For ssl.cipher.suites, changing the default value from null to empty
>> is
>>>>> actually a breaking change. According to the doc, null means that all
>>> the
>>>>> available cipher suites are supported. I am thinking that we should
>>>>> continue to allow null as the default since it could represent a state
>>>>> different from empty.
>>>> 
>>>> "Empty list" seems to be a weird case. It appears to signify that no
>>> cipher suites are accepted. However, in the codebase, an empty list is
>>> handled as if all available cipher suites are supported [0]. We should
>> not
>>> support the case of "no supported cipher suite," as it doesn't make
>> sense.
>>>> 
>>>> In short, changing the default value from null to empty does not break
>>> the behavior.
>>>> 
>>>> [0]
>>> 
>> https://github.com/apache/kafka/blob/dabde76ebf105aaa945db60b7753331c83a8c989/clients/src/main/java/org/apache/kafka/common/security/ssl/DefaultSslEngineFactory.java#L139
>>>> 
>>>> On 2025/07/08 17:01:07 Jun Rao wrote:
>>>>> Hi, Jiunn-Yang,
>>>>> 
>>>>> I agree with Chia-Ping. If we allow cleanup.policy to be empty, we
>> will
>>>>> just continue to allow it in all future releases.
>>>>> 
>>>>> For ssl.cipher.suites, changing the default value from null to empty
>> is
>>>>> actually a breaking change. According to the doc, null means that all
>>> the
>>>>> available cipher suites are supported. I am thinking that we should
>>>>> continue to allow null as the default since it could represent a state
>>>>> different from empty.
>>>>> 
>>>>> Also, it would be useful to add a compatibility column in the table.
>> If
>>> a
>>>>> value is formally disallowed, it would be useful to compare the old
>> and
>>> the
>>>>> new behavior (e.g. a different exception is thrown, etc).
>>>>> 
>>>>> Thanks,
>>>>> 
>>>>> Jun
>>>>> 
>>>>> On Tue, Jul 8, 2025 at 8:36 AM Chia-Ping Tsai <chia7...@gmail.com>
>>> wrote:
>>>>> 
>>>>>> hi Jiunn
>>>>>> 
>>>>>> Thanks for the explanation. I have updated the KIP accordingly: in
>>> Kafka
>>>>>>> 4.x, cleanup.policy
>>>>>>> can be set to an empty list with a warning message emitted; however,
>>> in
>>>>>>> Kafka 5.0, setting an
>>>>>>> empty list for cleanup.policy will no longer be allowed.
>>>>>> 
>>>>>> 
>>>>>> If we agree to support "empty list", the approach of "none" could be
>>>>>> eliminated, right?
>>>>>> 
>>>>>> I don't understand the point of "5.0". Could you please share more
>>> details?
>>>>>> It seems to me changing the type or default value should be fine in
>>> minor
>>>>>> release if we don't break the existing property files.
>>>>>> 
>>>>>> `max.connections.per.ip.overrides` is parsed as "map" type, so using
>>> `LIST`
>>>>>> instead of `String` does not seems to make sense.
>>>>>> 
>>>>>> Best,
>>>>>> Chia-Ping
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 黃竣陽 <s7133...@gmail.com> 於 2025年7月8日 週二 下午11:25寫道:
>>>>>> 
>>>>>>> Hi all,
>>>>>>> 
>>>>>>>>> Null could make sense as the default value, but it just means that
>>> the
>>>>>>>>> config key is not set explicitly.
>>>>>>>>> Given that, it's probably simpler to just allow
>>>>>>>>> log.cleanup.policy to be empty and properly support it?
>>>>>>> Thanks for the explanation. I have updated the KIP accordingly: in
>>> Kafka
>>>>>>> 4.x, cleanup.policy
>>>>>>> can be set to an empty list with a warning message emitted; however,
>>> in
>>>>>>> Kafka 5.0, setting an
>>>>>>> empty list for cleanup.policy will no longer be allowed.
>>>>>>> 
>>>>>>>> For another, there is an additional issue which could be handled by
>>>>>> this
>>>>>>>> KIP. Some configs have "string" type, but they are handled as a
>> LIST.
>>>>>> For
>>>>>>>> example, `early.start.listeners`, `security.providers`. Could we
>>> change
>>>>>>>> their type to LIST to benefit from this KIP? I mean to make them
>>>>>>>> non-nullable.
>>>>>>> I have also updated the KIP to include the tables detailing the
>>> changes
>>>>>>> for LIST-type configuration
>>>>>>> default values and the migration from STRING-type to LIST-type
>>>>>>> configurations.
>>>>>>> 
>>>>>>> Best Regards,
>>>>>>> Jiunn-Yang
>>>>>>> 
>>>>>>>> Chia-Ping Tsai <chia7...@gmail.com> 於 2025年7月8日 清晨7:06 寫道:
>>>>>>>> 
>>>>>>>> hi all,
>>>>>>>> 
>>>>>>>> JR11. There is an existing config interceptor.classes that allows
>> an
>>>>>>> empty
>>>>>>>>> list and it makes intuitive sense. So, it seems that it's ok to
>>>>>> support
>>>>>>>>> empty lists in general. Given that, it's probably simpler to just
>>>>>> allow
>>>>>>>>> log.cleanup.policy to be empty and properly support it?
>>>>>>>> 
>>>>>>>> 
>>>>>>>> yes, that is what I meant before. Additionally, the `LIST` type
>>> should
>>>>>>> not
>>>>>>>> accept "null". Instead, we should use an empty list as the default
>>>>>> value.
>>>>>>>> For example, `sasl.oauthbearer.expected.audience` should never has
>>>>>> "null"
>>>>>>>> value. That could eliminate the null check.
>>>>>>>> 
>>>>>>>> For another, there is an additional issue which could be handled by
>>>>>> this
>>>>>>>> KIP. Some configs have "string" type, but they are handled as a
>> LIST.
>>>>>> For
>>>>>>>> example, `early.start.listeners`, `security.providers`. Could we
>>> change
>>>>>>>> their type to LIST to benefit from this KIP? I mean to make them
>>>>>>>> non-nullable.
>>>>>>>> 
>>>>>>>> Best,
>>>>>>>> Chia-Ping
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> Jun Rao <j...@confluent.io.invalid> 於 2025年7月8日 週二 上午5:56寫道:
>>>>>>>> 
>>>>>>>>> Hi, Jiunn-Yang,
>>>>>>>>> 
>>>>>>>>> Thanks for the reply.
>>>>>>>>> 
>>>>>>>>> JR10. Regarding supporting the null value, I am not sure how one
>>> could
>>>>>>> set
>>>>>>>>> a null value in a config file. For example, if you set the
>> following
>>>>>> in
>>>>>>> a
>>>>>>>>> config file.
>>>>>>>>> configkey=
>>>>>>>>> The value of configkey will be an empty list, instead of null,
>>> right?
>>>>>>>>> 
>>>>>>>>> Null could make sense as the default value, but it just means that
>>> the
>>>>>>>>> config key is not set explicitly.
>>>>>>>>> 
>>>>>>>>> JR11. There is an existing config interceptor.classes that allows
>> an
>>>>>>> empty
>>>>>>>>> list and it makes intuitive sense. So, it seems that it's ok to
>>>>>> support
>>>>>>>>> empty lists in general. Given that, it's probably simpler to just
>>>>>> allow
>>>>>>>>> log.cleanup.policy to be empty and properly support it?
>>>>>>>>> 
>>>>>>>>> Jun
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> On Fri, Jul 4, 2025 at 5:13 AM 黃竣陽 <s7133...@gmail.com> wrote:
>>>>>>>>> 
>>>>>>>>>> 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