diff --git a/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/AbstractEventParser.java b/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/AbstractEventParser.java index e1f80d76..dbb40287 100644 --- a/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/AbstractEventParser.java +++ b/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/AbstractEventParser.java @@ -317,10 +317,10 @@ public abstract class AbstractEventParser extends AbstractCanalLifeCycle eventSink.interrupt(); transactionBuffer.reset();// 重置一下缓冲队列,重新记录数据 binlogParser.reset();// 重新置位 - if (multiStageCoprocessor != null) { + if (multiStageCoprocessor != null && multiStageCoprocessor.isStart()) { // 处理 RejectedExecutionException try { - multiStageCoprocessor.reset(); + multiStageCoprocessor.stop(); } catch (Throwable t) { logger.debug("multi processor rejected:", t); } diff --git a/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/MysqlMultiStageCoprocessor.java b/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/MysqlMultiStageCoprocessor.java index 2e200e2f..23f399c1 100644 --- a/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/MysqlMultiStageCoprocessor.java +++ b/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/MysqlMultiStageCoprocessor.java @@ -138,6 +138,10 @@ public class MysqlMultiStageCoprocessor extends AbstractCanalLifeCycle implement try { parserExecutor.shutdownNow(); while (!parserExecutor.awaitTermination(1, TimeUnit.SECONDS)) { + if (parserExecutor.isShutdown() || parserExecutor.isTerminated()) { + break; + } + parserExecutor.shutdownNow(); } } catch (Throwable e) { @@ -147,6 +151,10 @@ public class MysqlMultiStageCoprocessor extends AbstractCanalLifeCycle implement try { stageExecutor.shutdownNow(); while (!stageExecutor.awaitTermination(1, TimeUnit.SECONDS)) { + if (stageExecutor.isShutdown() || stageExecutor.isTerminated()) { + break; + } + stageExecutor.shutdownNow(); } } catch (Throwable e) {