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