From 004bcc240b1e404954638733f932ca3fc5dd3efa Mon Sep 17 00:00:00 2001 From: Peng Guanwen Date: Sun, 26 Sep 2021 15:05:02 +0800 Subject: [PATCH 1/3] All keepTiKVToImportMode after stopped Signed-off-by: Peng Guanwen --- .../common/importer/SwitchTiKVModeClient.java | 22 ++++++++++--------- .../common/importer/SwitchTiKVModeTest.java | 10 +++++---- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/src/main/java/org/tikv/common/importer/SwitchTiKVModeClient.java b/src/main/java/org/tikv/common/importer/SwitchTiKVModeClient.java index e230217e435..cc328573a29 100644 --- a/src/main/java/org/tikv/common/importer/SwitchTiKVModeClient.java +++ b/src/main/java/org/tikv/common/importer/SwitchTiKVModeClient.java @@ -36,19 +36,12 @@ public class SwitchTiKVModeClient { private final PDClient pdClient; private final ImporterStoreClient.ImporterStoreClientBuilder builder; - private final ScheduledExecutorService ingestScheduledExecutorService; + private ScheduledExecutorService ingestScheduledExecutorService; public SwitchTiKVModeClient( PDClient pdClient, ImporterStoreClient.ImporterStoreClientBuilder builder) { this.pdClient = pdClient; this.builder = builder; - - this.ingestScheduledExecutorService = - Executors.newSingleThreadScheduledExecutor( - new ThreadFactoryBuilder() - .setNameFormat("switch-tikv-mode-pool-%d") - .setDaemon(true) - .build()); } public void switchTiKVToNormalMode() { @@ -56,12 +49,21 @@ public void switchTiKVToNormalMode() { } public void keepTiKVToImportMode() { - ingestScheduledExecutorService.scheduleAtFixedRate( - this::switchTiKVToImportMode, 0, KEEP_TIKV_TO_IMPORT_MODE_PERIOD, TimeUnit.SECONDS); + if (ingestScheduledExecutorService == null) { + ingestScheduledExecutorService = + Executors.newSingleThreadScheduledExecutor( + new ThreadFactoryBuilder() + .setNameFormat("switch-tikv-mode-pool-%d") + .setDaemon(true) + .build()); + ingestScheduledExecutorService.scheduleAtFixedRate( + this::switchTiKVToImportMode, 0, KEEP_TIKV_TO_IMPORT_MODE_PERIOD, TimeUnit.SECONDS); + } } public void stopKeepTiKVToImportMode() { ingestScheduledExecutorService.shutdown(); + ingestScheduledExecutorService = null; } private void switchTiKVToImportMode() { diff --git a/src/test/java/org/tikv/common/importer/SwitchTiKVModeTest.java b/src/test/java/org/tikv/common/importer/SwitchTiKVModeTest.java index ad5a8a69cbd..c0bbaf57604 100644 --- a/src/test/java/org/tikv/common/importer/SwitchTiKVModeTest.java +++ b/src/test/java/org/tikv/common/importer/SwitchTiKVModeTest.java @@ -26,9 +26,11 @@ public void tearDown() throws Exception { @Test public void switchTiKVModeTest() throws InterruptedException { SwitchTiKVModeClient switchTiKVModeClient = session.getSwitchTiKVModeClient(); - switchTiKVModeClient.keepTiKVToImportMode(); - Thread.sleep(6000); - switchTiKVModeClient.stopKeepTiKVToImportMode(); - switchTiKVModeClient.switchTiKVToNormalMode(); + for (int i = 0; i < 2; i++) { + switchTiKVModeClient.keepTiKVToImportMode(); + Thread.sleep(6000); + switchTiKVModeClient.stopKeepTiKVToImportMode(); + switchTiKVModeClient.switchTiKVToNormalMode(); + } } } From 97dab6e221edb928835f531357e2cce0cb6f6288 Mon Sep 17 00:00:00 2001 From: Peng Guanwen Date: Tue, 28 Sep 2021 11:31:22 +0800 Subject: [PATCH 2/3] make function synchronized Signed-off-by: Peng Guanwen --- .../java/org/tikv/common/importer/SwitchTiKVModeClient.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/tikv/common/importer/SwitchTiKVModeClient.java b/src/main/java/org/tikv/common/importer/SwitchTiKVModeClient.java index cc328573a29..30efa462ae5 100644 --- a/src/main/java/org/tikv/common/importer/SwitchTiKVModeClient.java +++ b/src/main/java/org/tikv/common/importer/SwitchTiKVModeClient.java @@ -48,7 +48,7 @@ public void switchTiKVToNormalMode() { doSwitchTiKVMode(ImportSstpb.SwitchMode.Normal); } - public void keepTiKVToImportMode() { + public synchronized void keepTiKVToImportMode() { if (ingestScheduledExecutorService == null) { ingestScheduledExecutorService = Executors.newSingleThreadScheduledExecutor( @@ -61,7 +61,7 @@ public void keepTiKVToImportMode() { } } - public void stopKeepTiKVToImportMode() { + public synchronized void stopKeepTiKVToImportMode() { ingestScheduledExecutorService.shutdown(); ingestScheduledExecutorService = null; } From 8388c5b9ba6468f2efacb69715a1ddfe613c1b2f Mon Sep 17 00:00:00 2001 From: Peng Guanwen Date: Wed, 29 Sep 2021 16:31:13 +0800 Subject: [PATCH 3/3] funciton can be called multiple times Signed-off-by: Peng Guanwen --- .../java/org/tikv/common/importer/SwitchTiKVModeClient.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/tikv/common/importer/SwitchTiKVModeClient.java b/src/main/java/org/tikv/common/importer/SwitchTiKVModeClient.java index 30efa462ae5..6e6d1732cfd 100644 --- a/src/main/java/org/tikv/common/importer/SwitchTiKVModeClient.java +++ b/src/main/java/org/tikv/common/importer/SwitchTiKVModeClient.java @@ -62,8 +62,10 @@ public synchronized void keepTiKVToImportMode() { } public synchronized void stopKeepTiKVToImportMode() { - ingestScheduledExecutorService.shutdown(); - ingestScheduledExecutorService = null; + if (ingestScheduledExecutorService != null) { + ingestScheduledExecutorService.shutdown(); + ingestScheduledExecutorService = null; + } } private void switchTiKVToImportMode() {