michael-carter-instaclustr commented on a change in pull request #8844:
URL: https://github.com/apache/kafka/pull/8844#discussion_r443387368



##########
File path: 
connect/runtime/src/main/java/org/apache/kafka/connect/runtime/WorkerTask.java
##########
@@ -56,7 +56,7 @@
     private static final String THREAD_NAME_PREFIX = "task-thread-";
 
     protected final ConnectorTaskId id;
-    private final TaskStatus.Listener statusListener;
+    protected final TaskStatus.Listener statusListener;

Review comment:
       Yes, I had the same thought and initially started going down that road. 
The source of the problem as it appeared to me was that the failure methods 
inside the WorkerConnector/WorkerTasks were catching any failure and not 
propagating any exception back up to Worker where it would be able to record 
metrics. Simply allowing the exception to filter back up seemed the way to go, 
but since I needed to differentiate between a failure in startup and a failure 
during regular execution, separating those methods seemed a good way to do it.  
This worked very well for the connector at the time, but got a bit more 
difficult for the tasks because they were being sent to an executor service, so 
there wan’t an obvious exception handler in the Worker class to handle 
problems. (I’ve noticed that since I looked at this, you’ve committed a change 
that makes the connectors use an executor service too, so this probably now 
applies to connectors as well as tasks). I wasn’t entirely certain whether it 
was important or not that the startup code run on the same thread as the 
regular execution, but assumed that it was, so started putting in a chain of 
CompletableFutures where I could check for exceptions in the other thread and 
only go on to submit the execute stage if the initialiseAndStart stage 
completed successfully. But this required there to be two different entry 
points for execution into the WorkerConnector/WorkerTasks which kind of 
defeated the point of them implementing the Runnable interface, and the 
exception checking was a bit ugly anyway. It was at this point that I 
discovered the statusListener and thought that might be a cleaner way to go. 
Not the only way of course, but it seemed to me to be a smaller change. 
Separating those methods would be more easily achieved if the startup phase 
could run on the same thread as the Worker, but that seems to me like more of a 
significant change?




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


Reply via email to