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