Hello Jun, Thanks for the reply.
JR34 ,JR36, JR39: I’ve updated the KIP to reflect these changes. JR38: I clarified the following configurations: early.start.listeners: This config is optional and allows both null and empty lists. log.dirs and plugin.path: These are also optional, but only allow null—empty lists are not permitted. Best Regards, Jiunn-Yang > Jun Rao <j...@confluent.io.INVALID> 於 2025年7月23日 凌晨2:28 寫道: > > Hi, Jiunn-Yang and Chia-Ping, > > Thanks for the reply. > > JR34. Sounds good. > > JR36. Could you document that the default value for > sasl.oauthbearer.expected.audience and ssl.cipher.suites have been changed? > > JR38. My concern wasn't quite addressed. "If the configuration is optional, > we will reject any duplicate values in the list." This implies that if a > config is optional, we allow empty lists. However, for plugin.path, we > reject empty lists. > > JR39. We can remove the fields isEmptyAllowed and isNullAllowed since they > are not public facing. > > Jun > > > On Tue, Jul 22, 2025 at 4:26 AM 黃竣陽 <s7133...@gmail.com> wrote: > >> Hello Jun, Chia, >> >> Thanks for the reply, >> >> JR36: I’ve updated the following configurations: >> - sasl.oauthbearer.expected.audience >> - ssl.cipher.suites >> - ssl.enabled.protocols >> These now allow both empty and non-empty lists. Since the default values >> of >> sasl.oauthbearer.expected.audience and ssl.cipher.suites were previously >> null, >> I’ve updated their defaults to List.of() for consistency. >> >> JR37: A ClassCastException does not occur in MirrorClientConfig and it >> should be none. >> I’ve updated this in the KIP. >> >> JR38 & JR40: I’ve added a note below the table to indicate which >> configurations require special attention. >> >> JR39: Yes, these properties are package-private. >> >> Best Regards, >> Jiunn-Yang >> >>> Chia-Ping Tsai <chia7...@gmail.com> 於 2025年7月22日 下午6:04 寫道: >>> >>> JR34. Hmm, it seems that the code in taskConfigs() could return an empty >>> list for a task if knownSourceTopicPartitions is less than maxTasks, >>> Chia-Ping? >>> >>> >>> Yes, `MirrorSourceConnector#taskConfigs` could return an empty list, >> which >>> means no `MirrorSourceTask` can be created. >>> >>> By contrast, if any `MirrorSourceTask` is created, the configs used by >>> `MirrorSourceTask` must contain `task.assigned.partitions` with a >> non-empty >>> value. >>> >>> Jun Rao <j...@confluent.io.invalid> 於 2025年7月22日 週二 上午5:14寫道: >>> >>>> Hi, Jiunn-Yang and Chia-Ping, >>>> >>>> Thanks for the reply. >>>> >>>> JR34. Hmm, it seems that the code in taskConfigs() could return an empty >>>> list for a task if knownSourceTopicPartitions is less than maxTasks, >>>> Chia-Ping? >>>> >>>> JR36. Sounds good. Could you update the KIP? Also, should we do the same >>>> for ssl.cipher.suites and sasl.oauthbearer.expected.audience? >>>> >>>> JR37. Is it true that MirrorClientConfig.bootstrap.servers returns >>>> ClassCastException for null? It seems that null could be casted to any >>>> class. >>>> >>>> JR38. "If the configuration is optional, we will reject any duplicate >>>> values in the list." Could you clarify this? For example, plugin.path is >>>> optional, but with a default value. We reject duplicates as well as >> empty >>>> lists. >>>> >>>> JR39. isEmptyAllowed and isNullAllowed are not public fields, right? >> They >>>> are only public in the anyNonDuplicateValues() method. >>>> >>>> JR40. It would be useful to mention that if cleanup.policy is empty and >>>> remote.storage.enable is true, the local log segments will be cleaned >> based >>>> on log.local.retention.bytes and log.local.retention.ms. >>>> >>>> Jun >>>> >>>> On Fri, Jul 18, 2025 at 9:52 AM Chia-Ping Tsai <chia7...@gmail.com> >> wrote: >>>> >>>>>> >>>>>> JR34: For these two configurations, setting an empty list feels a bit >>>>>> unintuitive. If an empty list is >>>>>> provided, the consumer will call the unsubscribe method, which doesn't >>>>>> seem appropriate given >>>>>> the documentation states: "Topic-partitions assigned to this task to >>>>>> replicate." >>>>>> >>>>> >>>>> agreed. Additionally, the source code [0] shows that it is not intended >>>> to >>>>> generate empty tps for the source task >>>>> >>>>> [0] >>>>> >>>>> >>>> >> https://github.com/apache/kafka/blob/9b542b6ea21e84677a9292f250fc25f8b4162e6f/connect/mirror/src/main/java/org/apache/kafka/connect/mirror/MirrorSourceConnector.java#L202 >>>>> >>>> >> >>