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

Reply via email to