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