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

Reply via email to