Hello Jun,

Thanks for the reply.

JR33, I’ve updated the validator to only allow non-empty lists. 
However, I have a question about the default value: It seems that in Streams, 
the config uses NO_DEFAULT_VALUE and includes a comment saying “required with 
no default value.” 
Should we also consider changing the default from NO_DEFAULT_VALUE to List.of()?

JR34: For these two configurations, setting an empty list feels a bit 
unintuitive. If an empty list is 
provided, the consumer will call the unsubscribe method, which doesn't seem 
appropriate given 
the documentation states: "Topic-partitions assigned to this task to 
replicate." 

JR35: AsyncConsumer doesn’t support this config, I updated it.

JR36: For ssl.enabled.protocols, the value is only accessed in 
DefaultSslEngineFactory[1], 
where null and an empty list result in the same behavior. 
Since users cannot set a null value through a configuration file, I believe we 
can safely disallow 
null values and allow empty lists instead.

[1]https://github.com/apache/kafka/blob/9572d19c5911f401a155741fcce61b69657aae79/clients/src/main/java/org/apache/kafka/common/security/ssl/DefaultSslEngineFactory.java#L146

Best Regards,
Jiunn-Yang

> Jun Rao <j...@confluent.io.INVALID> 於 2025年7月18日 清晨6:32 寫道:
> 
> Hi, Jiunn-Yang,
> 
> Thanks for the reply.
> 
> JR31. This is fine then.
> 
> JR33. StreamsConfig: bootstrap.servers can't be empty.
> bootstrap.controllers is not available in Streams. It's only available in
> AdminClient.
> 
> JR34. If there are more MM instances than partitions, it seems that it's
> possible for task.assigned.partitions to be empty.
> Ditto for task.assigned.groups.
> 
> JR35. partition.assignment.strategy: It's only needed if group.protocol is
> classic. I guess that it's ok for it to be empty.
> 
> JR36. ssl.enabled.protocols: This is interesting. If this is null, it
> implies that all available protocols are enabled. However, since null is
> not the default value, a user can't set it to null through a config file. I
> am wondering if this is ever needed.
> 
> Jun
> 
> On Thu, Jul 17, 2025 at 7:23 AM 黃竣陽 <s7133...@gmail.com> wrote:
> 
>> Hello Jun, Chia-Ping,
>> 
>> Thanks for the reply.
>> 
>> JR28:
>> You're right. If the user passes a null value, it will be converted to an
>> empty list.
>> I’ve updated the KIP accordingly.
>> 
>> JR29:
>> For early.start.listeners, the exception is thrown during Kafka’s internal
>> validation,
>> and it’s not caused by a null or empty list. Therefore, I think we should
>> set the validator to none. I’ve updated the KIP.
>> 
>> JR30 / chia04:
>> Currently, passing a null value results in a NullPointerException. I’ve
>> updated
>> the KIP to reflect this behavior.
>> 
>> JR31:
>> Since the default value of plugin.path is null, it indicates that the user
>> has not set this configuration.
>> Changing it to an empty list might be confusing, as it implies the user
>> explicitly set the config but provided no paths.
>> However, if using an empty list is more appropriate for this config, I’m
>> fine with changing it.
>> We can set the default value to List.of() and disallow null values.
>> 
>> JR32:
>> An empty value for partition.assignment.strategy will result in an
>> IllegalStateException. I’ve updated the KIP.
>> 
>> chia00:
>> This config should not be null. I’ve updated the KIP to reflect that.
>> 
>> chia01 / chia02:
>> These configurations should be both non-null and non-empty.
>> I’ve updated them to only allow non-empty lists.
>> 
>> chia03:
>> Currently, passing a null value will throw a NullPointerException.
>> I’ve updated the KIP accordingly.
>> 
>> Best Regards,
>> Jiunn-Yang
>> 
>>> Chia-Ping Tsai <chia7...@gmail.com> 於 2025年7月17日 凌晨2:37 寫道:
>>> 
>>> hi Jiunn-Yang,
>>> 
>>> chia00. why could `bootstrap.servers` be null in StreamsConfig?
>>> 
>>> chia01. the empty `task.assigned.partitions` is a bit weird. That means
>>> consumer has nothing to seek/poll.
>>> 
>>> chia02. task.assigned.groups has analogous issue.
>>> 
>>> chia03. MirrorCheckpointConfig's `groups` and `groups.exclude` should not
>>> accept null, since they are complied by regular expression.
>>> 
>>> chia04. MirrorSourceConfig's `topics` and `topics.exclude` have similar
>>> issue.
>>> 
>>> Best,
>>> Chia-Ping
>>> 
>>> Jun Rao <j...@confluent.io.invalid> 於 2025年7月17日 週四 上午12:51寫道:
>>> 
>>>> Hi, Jiunn-Yang,
>>>> 
>>>> Thanks for the reply. A few more comments.
>>>> 
>>>> JR28. AdminClientConfig: Currently, bootstrap.servers doesn't throw
>>>> NullPointerException on null value. It's converted to an empty list.
>>>> 
>>>> JR29. The "Before exception" column: It would be useful to add which
>> value
>>>> causes an exception. For example, duplicated values currently don't
>>>> typically cause exceptions. Also, for early.start.listeners, which value
>>>> causes ConfigException currently?
>>>> 
>>>> JR30. Why do we allow the following to be null? In general, null only
>> makes
>>>> sense if it's the default value.
>>>> MirrorSourceConfig: topics, topics.exclude, config.properties.exclude
>>>> 
>>>> JR31. WorkerConfig: plugin.path It seems that we should allow it to be
>>>> empty, but not null?
>>>> 
>>>> JR32. partition.assignment.strategy shouldn't be empty, right?
>>>> 
>>>> Jun
>>>> 
>>>> On Wed, Jul 16, 2025 at 4:32 AM 黃竣陽 <s7133...@gmail.com> wrote:
>>>> 
>>>>> Hi Jun,
>>>>> 
>>>>> Thanks for the reply.
>>>>> 
>>>>> JR26: I’ve addressed this change in the KIP.
>>>>> 
>>>>> JR27:
>>>>> I’ve documented the following configurations in the KIP:
>>>>> 
>>>>> ConsumerConfig
>>>>> partition.assignment.strategy
>>>>> 
>>>>> StreamsConfig
>>>>> bootstrap.servers
>>>>> 
>>>>> MirrorCheckpointConfig
>>>>> groups
>>>>> groups.exclude
>>>>> task.assigned.groups
>>>>> 
>>>>> MirrorSourceConfig
>>>>> topics
>>>>> topics.exclude
>>>>> config.properties.exclude
>>>>> 
>>>>> WorkerConfig
>>>>> plugin.path
>>>>> 
>>>>> RestServerConfig
>>>>> rest.extension.classes
>>>>> 
>>>>> Other configurations already have default values and corresponding
>>>>> validators:
>>>>> 
>>>>> LogConfig
>>>>> leader.replication.throttled.replicas: List.of() →
>>>>> ThrottledReplicaListValidator
>>>>> follower.replication.throttled.replicas: List.of() →
>>>>> ThrottledReplicaListValidator
>>>>> 
>>>>> StreamsConfig
>>>>> rack.aware.assignment.tags: List.of() → atMostOfSize
>>>>> 
>>>>> ConnectorConfig
>>>>> transforms: List.of() → aliasValidator
>>>>> predicates: List.of() → aliasValidator
>>>>> 
>>>>> SourceConnectorConfig
>>>>> topic.creation.groups: List.of() → ConfigDef.CompositeValidator
>>>>> 
>>>>> DistributedConfig
>>>>> inter.worker.verification.algorithms:
>>>>> defaultVerificationAlgorithms(crypto) → ConfigDef.LambdaValidator
>>>>> 
>>>>> RestServerConfig
>>>>> admin.listeners: null → AdminListenersValidator
>>>>> listeners: List.of("http://:8083";) → ListenersValidator
>>>>> 
>>>>> Best Regards,
>>>>> Jiunn-Yang
>>>>> 
>>>>>> Jun Rao <j...@confluent.io.INVALID> 於 2025年7月16日 清晨7:14 寫道:
>>>>>> 
>>>>>> Hi, Jiunn-Yang,
>>>>>> 
>>>>>> Thanks for the reply.
>>>>>> 
>>>>>> JR 26. early.start.listeners and interceptor.classes: It seems that
>>>> both
>>>>>> could be empty?
>>>>>> 
>>>>>> JR27. The following configs of type LIST are missing.
>>>>>> 
>>>>>> ConsumerConfig
>>>>>> partition.assignment.strategy
>>>>>> 
>>>>>> BrokerSecurityConfigs
>>>>>> 
>>>>>> QuorumConfig
>>>>>> 
>>>>>> LogConfig
>>>>>> leader.replication.throttled.replicas
>>>>>> follower.replication.throttled.replicas
>>>>>> 
>>>>>> StreamsConfig
>>>>>> rack.aware.assignment.tags
>>>>>> bootstrap.servers
>>>>>> 
>>>>>> MirrorCheckpointConfig
>>>>>> groups
>>>>>> groups.exclude
>>>>>> 
>>>>>> MirrorCheckpointConfig
>>>>>> task.assigned.groups
>>>>>> 
>>>>>> MirrorSourceConfig
>>>>>> topics
>>>>>> topics.exclude
>>>>>> config.properties.exclude
>>>>>> 
>>>>>> ConnectorConfig
>>>>>> transforms
>>>>>> predicates
>>>>>> 
>>>>>> SourceConnectorConfig
>>>>>> topic.creation.groups
>>>>>> 
>>>>>> WorkerConfig
>>>>>> plugin.path
>>>>>> 
>>>>>> DistributedConfig
>>>>>> inter.worker.verification.algorithms
>>>>>> 
>>>>>> RestServerConfig
>>>>>> rest.extension.classes
>>>>>> admin.listeners
>>>>>> listeners
>>>>>> 
>>>>>> Thanks,
>>>>>> 
>>>>>> Jun
>>>>>> 
>>>>>> On Tue, Jul 15, 2025 at 6:22 AM 黃竣陽 <s7133...@gmail.com> wrote:
>>>>>> 
>>>>>>> Hello Jun Chia,
>>>>>>> 
>>>>>>> Thanks for the reply,
>>>>>>> 
>>>>>>> JR20: This configuration should remain unchanged. I have updated the
>>>>> KIP.
>>>>>>> 
>>>>>>> JR21: For both Consumer and Producer, the default value is an empty
>>>>> list,
>>>>>>> and the
>>>>>>> validator used is NonNullValidator. I think we can change the
>>>> validator
>>>>> to
>>>>>>> ValidList.anyNonDuplicateValues
>>>>>>> with isNullAllowed = false and isEmptyAllowed = false.
>>>>>>> 
>>>>>>> JR23: I’ve addressed this change in the KIP. Although the default
>>>> value
>>>>> of
>>>>>>> early.start.listeners remains
>>>>>>> unchanged, the validator now disallows empty lists.
>>>>>>> 
>>>>>>> JR24: Since log.dirs does not change its default value, I used a dash
>>>>> (-)
>>>>>>> to indicate that the field remains unchanged.
>>>>>>> 
>>>>>>> JR25: I’ve updated the table and aligned similar validators as much
>> as
>>>>>>> possible for consistency.
>>>>>>> 
>>>>>>> Best Regards,
>>>>>>> Jiunn-Yang
>>>>>>> 
>>>>>>>> Chia-Ping Tsai <chia7...@gmail.com> 於 2025年7月15日 下午2:12 寫道:
>>>>>>>> 
>>>>>>>>> JR20. controller.listener.names : It's required on the broker. Is
>> it
>>>>>>>> required on the controller?
>>>>>>>> 
>>>>>>>> there is a small "sugar" in the controller, which we will
>>>>>>>> create listener.security.protocol.map based on
>>>>> controller.listener.names
>>>>>>>> if listener.security.protocol.map is not explicitly set [0]
>>>>>>>> Additionally, `controller.listener.names` is also used to filter out
>>>>> the
>>>>>>>> advertised controller listeners [1]
>>>>>>>> 
>>>>>>>> 
>>>>>>>>> JR22. group.coordinator.rebalance.protocols: Currently, it can be
>>>> set
>>>>> to
>>>>>>>> null, right?
>>>>>>>> 
>>>>>>>> I don't think so. There is no null check after calling
>>>>>>>> 
>>>>>>> 
>>>>> 
>>>> 
>> `getList(GroupCoordinatorConfig.GROUP_COORDINATOR_REBALANCE_PROTOCOLS_CONFIG)`[2],
>>>>>>>> which causes an NPE if getList returns null."
>>>>>>>> 
>>>>>>>> [0]
>>>>>>>> 
>>>>>>> 
>>>>> 
>>>> 
>> https://github.com/apache/kafka/blob/trunk/server/src/main/java/org/apache/kafka/server/config/AbstractKafkaConfig.java#L133
>>>>>>>> [1]
>>>>>>>> 
>>>>>>> 
>>>>> 
>>>> 
>> https://github.com/apache/kafka/blob/7ea32a0e938c22119f11908aa419aaf0ffd9b6d8/core/src/main/scala/kafka/server/KafkaConfig.scala#L459
>>>>>>>> [2]
>>>>>>>> 
>>>>>>> 
>>>>> 
>>>> 
>> https://github.com/apache/kafka/blob/7ea32a0e938c22119f11908aa419aaf0ffd9b6d8/core/src/main/scala/kafka/server/KafkaConfig.scala#L373
>>>>>>>> 
>>>>>>>> Jun Rao <j...@confluent.io.invalid> 於 2025年7月15日 週二 上午6:20寫道:
>>>>>>>> 
>>>>>>>>> Hi, Jiunn-Yang,
>>>>>>>>> 
>>>>>>>>> Thanks for the updated KIP.
>>>>>>>>> 
>>>>>>>>> JR20. controller.listener.names : It's required on the broker. Is
>> it
>>>>>>>>> required on the controller?
>>>>>>>>> 
>>>>>>>>> JR21. bootstrap.servers: Some of them (e.g. in producer/consumer)
>>>>>>> already
>>>>>>>>> require it to be non-null.
>>>>>>>>> 
>>>>>>>>> JR22. group.coordinator.rebalance.protocols: Currently, it can be
>>>> set
>>>>> to
>>>>>>>>> null, right?
>>>>>>>>> 
>>>>>>>>> JR23. early.start.listeners: It allows default value of null, which
>>>>>>> means
>>>>>>>>> that all listeners included in controller.listener.names will also
>>>> be
>>>>>>> early
>>>>>>>>> start listeners.
>>>>>>>>> 
>>>>>>>>> JR24. log.dirs: It currently has a default value of null.
>>>>>>>>> 
>>>>>>>>> JR25. It seems there are quite a few more configs of type list. Do
>>>>> they
>>>>>>>>> need to be changed too?
>>>>>>>>> 
>>>>>>>>> AdminClientConfig: 4
>>>>>>>>> ConsumerConfig: 5
>>>>>>>>> ProducerConfig: 4
>>>>>>>>> SaslConfigs: 1
>>>>>>>>> SslConfigs: 2
>>>>>>>>> BrokerSecurityConfigs: 5
>>>>>>>>> MirrorClientConfig: 1
>>>>>>>>> org.apache.kafka.connect.mirror : 16
>>>>>>>>> org.apache.kafka.connect.runtime : 21
>>>>>>>>> GroupCoordinatorConfig: 3
>>>>>>>>> QuorumConfig: 2
>>>>>>>>> ServerConfigs: 1
>>>>>>>>> KRaftConfigs: 1
>>>>>>>>> ClientMetricsConfigs: 2
>>>>>>>>> MetricConfigs: 2
>>>>>>>>> LogConfig: 4
>>>>>>>>> StreamsConfig: 4
>>>>>>>>> 
>>>>>>>>> Jun
>>>>>>>>> 
>>>>>>>>> On Fri, Jul 11, 2025 at 8:13 PM 黃竣陽 <s7133...@gmail.com> wrote:
>>>>>>>>> 
>>>>>>>>>> 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