Browse Source

ETL整个destination,同步开关无效的问题

machey 6 years ago
parent
commit
c27d5fa162

+ 14 - 4
client-adapter/launcher/src/main/java/com/alibaba/otter/canal/adapter/launcher/rest/CommonRest.java

@@ -67,10 +67,18 @@ public class CommonRest {
         try {
         try {
             OuterAdapter adapter = loader.getExtension(type);
             OuterAdapter adapter = loader.getExtension(type);
             String destination = adapter.getDestination(task);
             String destination = adapter.getDestination(task);
-            Boolean oriSwithcStatus = null;
+            Boolean oriSwitchStatus;
             if (destination != null) {
             if (destination != null) {
-                oriSwithcStatus = syncSwitch.status(destination);
-                syncSwitch.off(destination);
+                oriSwitchStatus = syncSwitch.status(destination);
+                if (oriSwitchStatus != null && oriSwitchStatus) {
+                    syncSwitch.off(destination);
+                }
+            } else {
+                // task可能为destination,直接锁task
+                oriSwitchStatus = syncSwitch.status(task);
+                if (oriSwitchStatus != null && oriSwitchStatus) {
+                    syncSwitch.off(task);
+                }
             }
             }
             try {
             try {
                 List<String> paramArr = null;
                 List<String> paramArr = null;
@@ -80,8 +88,10 @@ public class CommonRest {
                 }
                 }
                 return adapter.etl(task, paramArr);
                 return adapter.etl(task, paramArr);
             } finally {
             } finally {
-                if (destination != null && oriSwithcStatus != null && oriSwithcStatus) {
+                if (destination != null && oriSwitchStatus != null && oriSwitchStatus) {
                     syncSwitch.on(destination);
                     syncSwitch.on(destination);
+                } else if (destination == null && oriSwitchStatus != null && oriSwitchStatus) {
+                    syncSwitch.on(task);
                 }
                 }
             }
             }
         } finally {
         } finally {