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