Hi

Thanks a lot - it's clear now.

Maybe the behavior of what happens if

* no config is returned
* more config > maxTasks is returned

Can be added to API docu 😉

http://localhost:8083/connectors?expand=info&expand=status

If here the task factory also reflects some "WAITING_FOR_TASK_CONFIG" - that 
would be awesome 😉

Thanks
Michael

-----Ursprüngliche Nachricht-----
Von: Chris Egerton <chr...@aiven.io.INVALID>
Gesendet: Donnerstag, 2. März 2023 17:33
An: dev@kafka.apache.org
Betreff: Re: Problems with Kafka Connector Base classes

[You don't often get email from chr...@aiven.io.invalid. Learn why this is 
important at https://aka.ms/LearnAboutSenderIdentification ]

Hi Michael,

The purpose of the Connector::taskConfigs method is to specify (implicitly) the 
number of tasks that need to be run for the connector, and (explicitly) how 
each task should be configured. The former is provided implicitly by the size 
of the list returned from that method; for each element in that list, one task 
will be brought up for the connector, regardless of whether the map for that 
element is actually just empty.

The reason your for-loop was necessary is that, although we do distinguish 
between an empty list of task configs and a non-empty list, we do not 
distinguish on a per-element basis between an empty task config (i.e., the 
Map<String, String> inside the task configs list) and a non-empty task config. 
So, by adding the for-loop, you signaled to the runtime that you wanted the 
number of tasks brought up for your connector to be `maxTasks`.

We choose to allow connectors to return an empty list of task configs to 
facilitate the use case of Connector implementations that may decide not to 
generate any tasks, which could be useful if, for example, there are no tables 
that match a given allow/block list to be read from in the database at the 
moment. This is also why we do not fail connectors when they generate an empty 
set of task configs (or throw an exception in some API call that the connector 
may make of the runtime).

I hope this helps clear things up for you.

Cheers,

Chris

On Thu, Mar 2, 2023 at 11:14 AM Michael Vodep < michael.vo...@bearingpoint.com> 
wrote:

> Hi
>
> I'm using:  org.apache.kafka:connect-api:3.4.0
>
> I have a simple connector:
>
> ======
> public class SimpleSinkConnector extends SinkConnector {
>
>     @Override
>     public List<Map<String, String>> taskConfigs(int maxTasks) {
>         ArrayList<Map<String, String>> configs = new ArrayList<>();
>
>         for (int i = 0; i < maxTasks; i++) {
>             configs.add(new HashMap<>());
>         }
>
>         return configs;
>     }
> ======
>
> I don't have config params (POC). So, for testing purposes I just
> returned the ArrayList. It took me now 2 hours to figure out why no
> Task was created. At the end of the day: I added the for loop - then it 
> worked.
> Reproduced the behavior several times.
>
> Can anybody conform this strange behavior? I would expect an exception
> if something is expected ...
>
> Thanks
> Michael
> ________________________________
> BearingPoint GmbH
> Sitz: Wien
> Firmenbuchgericht: Handelsgericht Wien
> Firmenbuchnummer: FN 175524z
>
> The information in this email is confidential and may be legally
> privileged. If you are not the intended recipient of this message, any
> review, disclosure, copying, distribution, retention, or any action
> taken or omitted to be taken in reliance on it is prohibited and may be 
> unlawful.
> If you are not the intended recipient, please reply to or forward a
> copy of this message to the sender and delete the message, any
> attachments, and any copies thereof from your system.
>
________________________________
 BearingPoint GmbH
Sitz: Wien
Firmenbuchgericht: Handelsgericht Wien
Firmenbuchnummer: FN 175524z


The information in this email is confidential and may be legally privileged. If 
you are not the intended recipient of this message, any review, disclosure, 
copying, distribution, retention, or any action taken or omitted to be taken in 
reliance on it is prohibited and may be unlawful. If you are not the intended 
recipient, please reply to or forward a copy of this message to the sender and 
delete the message, any attachments, and any copies thereof from your system.

Reply via email to