{"record":{"id":"c6085f92e0ff322e","repo":"apache/seatunnel","slug":"interrupted-while-waiting-for-kudu-client-executor","errorCode":null,"errorMessage":"Interrupted while waiting for Kudu client executor to terminate.","messagePattern":"Interrupted while waiting for Kudu client executor to terminate\\.","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"seatunnel-connectors-v2/connector-kudu/src/main/java/org/apache/seatunnel/connectors/seatunnel/kudu/kuduclient/KuduClientResource.java","lineNumber":79,"sourceCode":"\n    private void awaitExecutorTermination() {\n        executorService.shutdown();\n        try {\n            if (executorService.awaitTermination(\n                    GRACEFUL_SHUTDOWN_TIMEOUT_SECONDS, TimeUnit.SECONDS)) {\n                return;\n            }\n\n            log.warn(\"Kudu client executor did not terminate gracefully, forcing shutdown.\");\n            executorService.shutdownNow();\n            if (!executorService.awaitTermination(\n                    FORCED_SHUTDOWN_TIMEOUT_SECONDS, TimeUnit.SECONDS)) {\n                log.warn(\"Kudu client executor did not terminate after forced shutdown.\");\n            }\n        } catch (InterruptedException e) {\n            executorService.shutdownNow();\n            Thread.currentThread().interrupt();\n            log.warn(\"Interrupted while waiting for Kudu client executor to terminate.\", e);\n        }\n    }\n}\n","sourceCodeStart":61,"sourceCodeEnd":83,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-kudu/src/main/java/org/apache/seatunnel/connectors/seatunnel/kudu/kuduclient/KuduClientResource.java#L61-L83","documentation":"KuduClientResource logs this warning when the thread waiting for the Kudu client's internal executor to shut down is interrupted during resource close. It responds by forcing executor shutdown via shutdownNow() and re-interrupting the current thread so upstream cancellation logic sees the interruption.","triggerScenarios":"close() calls awaitExecutorTermination() which blocks on executorService.awaitTermination(); if the thread is interrupted while blocked (task cancellation, job teardown, process shutdown), the catch (InterruptedException) branch logs the message.","commonSituations":"Job cancellation while a Kudu sink/source is being closed; Zeta engine task-thread interruption during checkpoint failover; JVM shutdown hook racing resource cleanup.","solutions":["No action usually needed — the resource correctly shuts down and preserves the interrupt flag; treat as informational during cancellation.","If seen unexpectedly, check why close() is blocking: ensure no in-flight Kudu operations keep the executor busy; call client.close() promptly after use.","Avoid canceling/interrupting the thread that owns the client close; shut down jobs through the engine's normal cancel API.","Upgrade the connector if repeated interruption leaves threads alive; verify executor termination with jstack/thread dumps."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try { awaitTermination(...) } catch (InterruptedException e) { executorService.shutdownNow(); Thread.currentThread().interrupt(); }","preventionTips":["Close Kudu clients promptly when no longer used","Cancel jobs via the engine cancel API instead of raw thread interruption","Avoid long-lived operations on the thread that owns client close"],"tags":["kudu","interrupt","executor","shutdown"],"backgroundTag":"thread-interrupted","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}