FYI while trying with an AlterConfigPolicy to stop the cleanup.policy being emptied through a AlterConfigOp.OpType.SUBTRACT, I stumbled in this behavior that doesn't allow to block an empty policy in Zookeeper versions of Kafka https://issues.apache.org/jira/browse/KAFKA-19026
On Tue, 13 May 2025 at 07:36, 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 > > > > > > >>>>>>>>>>>>>>>>> > > > > > > >>>>>>>>>>>>>>>>> > > > > > > >>>>>>>>>>>>>>> > > > > > > >>>>>>>>>>>>>> > > > > > > >>>>>>>>>>>> > > > > > > >>>>>>>>>>>> > > > > > > >>>>>>>>>> > > > > > > >>>>>>>>>> > > > > > > >>>>>>>> > > > > > > >>>>>>>> > > > > > > >>>>>> > > > > > > >>>>>> > > > > > > >>>>> > > > > > > >>> > > > > > > >>> > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > >