-
+
-
+
diff --git a/client/pom.xml b/client/pom.xml
index 28ca8d27..3d029080 100644
--- a/client/pom.xml
+++ b/client/pom.xml
@@ -3,7 +3,7 @@
com.alibaba.otter
canal
- 1.1.2-SNAPSHOT
+ 1.1.3-SNAPSHOT
../pom.xml
com.alibaba.otter
diff --git a/common/pom.xml b/common/pom.xml
index 9a3c3b22..9d6777b3 100644
--- a/common/pom.xml
+++ b/common/pom.xml
@@ -3,7 +3,7 @@
com.alibaba.otter
canal
- 1.1.2-SNAPSHOT
+ 1.1.3-SNAPSHOT
../pom.xml
canal.common
diff --git a/common/src/main/java/com/alibaba/otter/canal/common/utils/BooleanMutex.java b/common/src/main/java/com/alibaba/otter/canal/common/utils/BooleanMutex.java
index 660181ce..3a2ee258 100644
--- a/common/src/main/java/com/alibaba/otter/canal/common/utils/BooleanMutex.java
+++ b/common/src/main/java/com/alibaba/otter/canal/common/utils/BooleanMutex.java
@@ -5,7 +5,7 @@ import java.util.concurrent.TimeoutException;
import java.util.concurrent.locks.AbstractQueuedSynchronizer;
/**
- * 实现一个互斥实现,基于Cocurrent中的AbstractQueuedSynchronizer实现了自己的sync
+ * 实现一个互斥实现,基于Cocurrent中的AQS实现了自己的sync
* 应用场景:系统初始化/授权控制,没权限时阻塞等待。有权限时所有线程都可以快速通过
*
*
diff --git a/dbsync/pom.xml b/dbsync/pom.xml
index 9aa0fa68..4b027523 100644
--- a/dbsync/pom.xml
+++ b/dbsync/pom.xml
@@ -3,7 +3,7 @@
com.alibaba.otter
canal
- 1.1.2-SNAPSHOT
+ 1.1.3-SNAPSHOT
../pom.xml
com.alibaba.otter
diff --git a/deployer/pom.xml b/deployer/pom.xml
index 25d0c6e3..d7de9395 100644
--- a/deployer/pom.xml
+++ b/deployer/pom.xml
@@ -3,7 +3,7 @@
com.alibaba.otter
canal
- 1.1.2-SNAPSHOT
+ 1.1.3-SNAPSHOT
../pom.xml
com.alibaba.otter
diff --git a/deployer/src/main/java/com/alibaba/otter/canal/deployer/CanalConstants.java b/deployer/src/main/java/com/alibaba/otter/canal/deployer/CanalConstants.java
index d21348bf..ba39bde0 100644
--- a/deployer/src/main/java/com/alibaba/otter/canal/deployer/CanalConstants.java
+++ b/deployer/src/main/java/com/alibaba/otter/canal/deployer/CanalConstants.java
@@ -41,6 +41,7 @@ public class CanalConstants {
public static final String CANAL_MQ_RETRIES = ROOT + "." + "mq.retries";
public static final String CANAL_MQ_BATCHSIZE = ROOT + "." + "mq.batchSize";
public static final String CANAL_MQ_LINGERMS = ROOT + "." + "mq.lingerMs";
+ public static final String CANAL_MQ_MAXREQUESTSIZE = ROOT + "." + "mq.maxRequestSize";
public static final String CANAL_MQ_BUFFERMEMORY = ROOT + "." + "mq.bufferMemory";
public static final String CANAL_MQ_CANALBATCHSIZE = ROOT + "." + "mq.canalBatchSize";
public static final String CANAL_MQ_CANALGETTIMEOUT = ROOT + "." + "mq.canalGetTimeout";
diff --git a/deployer/src/main/java/com/alibaba/otter/canal/deployer/CanalLauncher.java b/deployer/src/main/java/com/alibaba/otter/canal/deployer/CanalLauncher.java
index 24d0ec5b..aa7f53b0 100644
--- a/deployer/src/main/java/com/alibaba/otter/canal/deployer/CanalLauncher.java
+++ b/deployer/src/main/java/com/alibaba/otter/canal/deployer/CanalLauncher.java
@@ -101,6 +101,10 @@ public class CanalLauncher {
if (!StringUtils.isEmpty(lingerMs)) {
mqProperties.setLingerMs(Integer.valueOf(lingerMs));
}
+ String maxRequestSize = CanalController.getProperty(properties, CanalConstants.CANAL_MQ_MAXREQUESTSIZE);
+ if (!StringUtils.isEmpty(maxRequestSize)) {
+ mqProperties.setMaxRequestSize(Integer.valueOf(maxRequestSize));
+ }
String bufferMemory = CanalController.getProperty(properties, CanalConstants.CANAL_MQ_BUFFERMEMORY);
if (!StringUtils.isEmpty(bufferMemory)) {
mqProperties.setBufferMemory(Long.valueOf(bufferMemory));
diff --git a/deployer/src/main/resources/canal.properties b/deployer/src/main/resources/canal.properties
index 78343b43..5d7b9d06 100644
--- a/deployer/src/main/resources/canal.properties
+++ b/deployer/src/main/resources/canal.properties
@@ -104,6 +104,7 @@ canal.instance.global.spring.xml = classpath:spring/file-instance.xml
canal.mq.servers = 127.0.0.1:6667
canal.mq.retries = 0
canal.mq.batchSize = 16384
+canal.mq.maxRequestSize = 1048576
canal.mq.lingerMs = 1
canal.mq.bufferMemory = 33554432
canal.mq.canalBatchSize = 50
diff --git a/driver/pom.xml b/driver/pom.xml
index b7db03fe..05baa5ac 100644
--- a/driver/pom.xml
+++ b/driver/pom.xml
@@ -3,7 +3,7 @@
com.alibaba.otter
canal
- 1.1.2-SNAPSHOT
+ 1.1.3-SNAPSHOT
../pom.xml
com.alibaba.otter
diff --git a/example/pom.xml b/example/pom.xml
index ae040df6..819b4b12 100644
--- a/example/pom.xml
+++ b/example/pom.xml
@@ -3,7 +3,7 @@
com.alibaba.otter
canal
- 1.1.2-SNAPSHOT
+ 1.1.3-SNAPSHOT
../pom.xml
com.alibaba.otter
diff --git a/filter/pom.xml b/filter/pom.xml
index e9a2f60c..6fc6ba88 100644
--- a/filter/pom.xml
+++ b/filter/pom.xml
@@ -3,7 +3,7 @@
com.alibaba.otter
canal
- 1.1.2-SNAPSHOT
+ 1.1.3-SNAPSHOT
../pom.xml
com.alibaba.otter
diff --git a/instance/core/pom.xml b/instance/core/pom.xml
index c96d8ce5..a7346fc8 100644
--- a/instance/core/pom.xml
+++ b/instance/core/pom.xml
@@ -3,7 +3,7 @@
com.alibaba.otter
canal
- 1.1.2-SNAPSHOT
+ 1.1.3-SNAPSHOT
../../pom.xml
canal.instance.core
diff --git a/instance/manager/pom.xml b/instance/manager/pom.xml
index 0710dbd1..ef5c987e 100644
--- a/instance/manager/pom.xml
+++ b/instance/manager/pom.xml
@@ -3,7 +3,7 @@
com.alibaba.otter
canal
- 1.1.2-SNAPSHOT
+ 1.1.3-SNAPSHOT
../../pom.xml
com.alibaba.otter
diff --git a/instance/pom.xml b/instance/pom.xml
index 3ccf7ebd..2a4da45c 100644
--- a/instance/pom.xml
+++ b/instance/pom.xml
@@ -3,7 +3,7 @@
com.alibaba.otter
canal
- 1.1.2-SNAPSHOT
+ 1.1.3-SNAPSHOT
../pom.xml
com.alibaba.otter
diff --git a/instance/spring/pom.xml b/instance/spring/pom.xml
index 3d5526d4..bea5d37d 100644
--- a/instance/spring/pom.xml
+++ b/instance/spring/pom.xml
@@ -3,7 +3,7 @@
com.alibaba.otter
canal
- 1.1.2-SNAPSHOT
+ 1.1.3-SNAPSHOT
../../pom.xml
com.alibaba.otter
diff --git a/meta/pom.xml b/meta/pom.xml
index 8683e8e7..002f6231 100644
--- a/meta/pom.xml
+++ b/meta/pom.xml
@@ -3,7 +3,7 @@
com.alibaba.otter
canal
- 1.1.2-SNAPSHOT
+ 1.1.3-SNAPSHOT
../pom.xml
com.alibaba.otter
diff --git a/parse/pom.xml b/parse/pom.xml
index d610838d..985d5de9 100644
--- a/parse/pom.xml
+++ b/parse/pom.xml
@@ -3,7 +3,7 @@
com.alibaba.otter
canal
- 1.1.2-SNAPSHOT
+ 1.1.3-SNAPSHOT
../pom.xml
canal.parse
diff --git a/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/AbstractMysqlEventParser.java b/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/AbstractMysqlEventParser.java
index 5e94e40b..af792ec8 100644
--- a/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/AbstractMysqlEventParser.java
+++ b/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/AbstractMysqlEventParser.java
@@ -3,9 +3,6 @@ package com.alibaba.otter.canal.parse.inbound.mysql;
import java.nio.charset.Charset;
import java.util.concurrent.atomic.AtomicLong;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
import com.alibaba.otter.canal.filter.CanalEventFilter;
import com.alibaba.otter.canal.filter.aviater.AviaterRegexFilter;
import com.alibaba.otter.canal.parse.CanalEventParser;
@@ -21,7 +18,6 @@ import com.alibaba.otter.canal.protocol.position.EntryPosition;
public abstract class AbstractMysqlEventParser extends AbstractEventParser {
- protected final Logger logger = LoggerFactory.getLogger(this.getClass());
protected static final long BINLOG_START_OFFEST = 4L;
protected TableMetaTSDBFactory tableMetaTSDBFactory = new DefaultTableMetaTSDBFactory();
diff --git a/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/MysqlEventParser.java b/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/MysqlEventParser.java
index 0528d19c..35e98f73 100644
--- a/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/MysqlEventParser.java
+++ b/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/MysqlEventParser.java
@@ -135,6 +135,10 @@ public class MysqlEventParser extends AbstractMysqlEventParser implements CanalE
protected void afterDump(ErosaConnection connection) {
super.afterDump(connection);
+ if (connection == null) {
+ throw new CanalParseException("illegal connection is null");
+ }
+
if (!(connection instanceof MysqlConnection)) {
throw new CanalParseException("Unsupported connection type : " + connection.getClass().getSimpleName());
}
diff --git a/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/tsdb/DatabaseTableMeta.java b/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/tsdb/DatabaseTableMeta.java
index e9bdc2ad..033dcae5 100644
--- a/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/tsdb/DatabaseTableMeta.java
+++ b/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/tsdb/DatabaseTableMeta.java
@@ -76,7 +76,7 @@ public class DatabaseTableMeta implements TableMetaTSDB {
private int snapshotInterval = 24;
private int snapshotExpire = 360;
private ScheduledFuture> scheduleSnapshotFuture;
-
+
public DatabaseTableMeta(){
}
@@ -207,8 +207,8 @@ public class DatabaseTableMeta implements TableMetaTSDB {
packet = connection.query("show full tables from `" + schema + "` where Table_type = 'BASE TABLE'");
List tables = new ArrayList();
for (String table : packet.getFieldValues()) {
- if("BASE TABLE".equalsIgnoreCase(table)){
- continue;
+ if ("BASE TABLE".equalsIgnoreCase(table)) {
+ continue;
}
String fullName = schema + "." + table;
if (blackFilter == null || !blackFilter.filter(fullName)) {
@@ -310,11 +310,19 @@ public class DatabaseTableMeta implements TableMetaTSDB {
boolean compareAll = true;
for (Schema schema : tmpMemoryTableMeta.getRepository().getSchemas()) {
for (String table : schema.showTables()) {
- if (!compareTableMetaDbAndMemory(connection, tmpMemoryTableMeta, schema.getName(), table)) {
- compareAll = false;
+ String fullName = schema + "." + table;
+ if (blackFilter == null || !blackFilter.filter(fullName)) {
+ if (filter == null || filter.filter(fullName)) {
+ // issue : https://github.com/alibaba/canal/issues/1168
+ // 在生成snapshot时重新过滤一遍
+ if (!compareTableMetaDbAndMemory(connection, tmpMemoryTableMeta, schema.getName(), table)) {
+ compareAll = false;
+ }
+ }
}
}
}
+
if (compareAll) {
Map content = new HashMap();
content.put("destination", destination);
@@ -513,7 +521,7 @@ public class DatabaseTableMeta implements TableMetaTSDB {
String sign = sourceField.isUnsigned() ? "unsigned" : "signed";
String sourceColumnType = StringUtils.removeEndIgnoreCase(sourceField.getColumnType(), sign).trim();
String targetColumnType = StringUtils.removeEndIgnoreCase(targetField.getColumnType(), sign).trim();
-
+
boolean columnTypeCompare = false;
columnTypeCompare |= StringUtils.containsIgnoreCase(sourceColumnType, targetColumnType);
columnTypeCompare |= StringUtils.containsIgnoreCase(targetColumnType, sourceColumnType);
diff --git a/parse/src/test/java/com/alibaba/otter/canal/parse/DirectLogFetcherTest.java b/parse/src/test/java/com/alibaba/otter/canal/parse/DirectLogFetcherTest.java
index 719e86dd..089163d3 100644
--- a/parse/src/test/java/com/alibaba/otter/canal/parse/DirectLogFetcherTest.java
+++ b/parse/src/test/java/com/alibaba/otter/canal/parse/DirectLogFetcherTest.java
@@ -1,5 +1,7 @@
package com.alibaba.otter.canal.parse;
+import static com.alibaba.otter.canal.parse.inbound.mysql.dbsync.DirectLogFetcher.MASTER_HEARTBEAT_PERIOD_SECONDS;
+
import java.io.IOException;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
@@ -7,6 +9,7 @@ import java.net.InetSocketAddress;
import java.nio.charset.Charset;
import java.util.BitSet;
import java.util.List;
+import java.util.concurrent.TimeUnit;
import org.apache.commons.lang.StringUtils;
import org.junit.Assert;
@@ -213,6 +216,13 @@ public class DirectLogFetcherTest {
} catch (Exception e) {
logger.warn("update mariadb_slave_capability failed", e);
}
+
+ try {
+ long period = TimeUnit.SECONDS.toNanos(MASTER_HEARTBEAT_PERIOD_SECONDS);
+ update("SET @master_heartbeat_period=" + period, connector);
+ } catch (Exception e) {
+ logger.warn("update master_heartbeat_period failed", e);
+ }
}
private void loadBinlogChecksum(MysqlConnector connector) {
diff --git a/pom.xml b/pom.xml
index 92d8a530..e5ba86c9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
canal
pom
canal module for otter ${project.version}
- 1.1.2-SNAPSHOT
+ 1.1.3-SNAPSHOT
https://github.com/alibaba/canal
org.sonatype.oss
@@ -381,7 +381,6 @@
-