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