fixed PR format

This commit is contained in:
jianghang.loujh
2023-07-28 13:20:56 +08:00
parent b8c2a757a0
commit 97aa441bca
11 changed files with 62 additions and 67 deletions

View File

@@ -13,11 +13,7 @@ import com.alibaba.otter.canal.parse.driver.mysql.packets.HeaderPacket;
import com.alibaba.otter.canal.parse.driver.mysql.packets.client.AuthSwitchResponsePacket; import com.alibaba.otter.canal.parse.driver.mysql.packets.client.AuthSwitchResponsePacket;
import com.alibaba.otter.canal.parse.driver.mysql.packets.client.ClientAuthenticationPacket; import com.alibaba.otter.canal.parse.driver.mysql.packets.client.ClientAuthenticationPacket;
import com.alibaba.otter.canal.parse.driver.mysql.packets.client.QuitCommandPacket; import com.alibaba.otter.canal.parse.driver.mysql.packets.client.QuitCommandPacket;
import com.alibaba.otter.canal.parse.driver.mysql.packets.server.AuthSwitchRequestMoreData; import com.alibaba.otter.canal.parse.driver.mysql.packets.server.*;
import com.alibaba.otter.canal.parse.driver.mysql.packets.server.AuthSwitchRequestPacket;
import com.alibaba.otter.canal.parse.driver.mysql.packets.server.ErrorPacket;
import com.alibaba.otter.canal.parse.driver.mysql.packets.server.HandshakeInitializationPacket;
import com.alibaba.otter.canal.parse.driver.mysql.packets.server.Reply323Packet;
import com.alibaba.otter.canal.parse.driver.mysql.socket.SocketChannel; import com.alibaba.otter.canal.parse.driver.mysql.socket.SocketChannel;
import com.alibaba.otter.canal.parse.driver.mysql.socket.SocketChannelPool; import com.alibaba.otter.canal.parse.driver.mysql.socket.SocketChannelPool;
import com.alibaba.otter.canal.parse.driver.mysql.utils.MSC; import com.alibaba.otter.canal.parse.driver.mysql.utils.MSC;
@@ -247,6 +243,7 @@ public class MysqlConnector {
body = PacketManager.readBytes(channel, header.getPacketBodyLength(), timeout); body = PacketManager.readBytes(channel, header.getPacketBodyLength(), timeout);
assert body != null; assert body != null;
if (body[0] == 0x01 && body[1] == 0x04) { if (body[0] == 0x01 && body[1] == 0x04) {
// fixed issue https://github.com/alibaba/canal/pull/4767, support mysql 8.0.30+
header = cachingSha2PasswordFullAuth(channel, header, getPassword().getBytes(), scramble); header = cachingSha2PasswordFullAuth(channel, header, getPassword().getBytes(), scramble);
body = PacketManager.readBytes(channel, header.getPacketBodyLength(), timeout); body = PacketManager.readBytes(channel, header.getPacketBodyLength(), timeout);
} else { } else {

View File

@@ -1,13 +1,9 @@
package com.alibaba.otter.canal.parse.driver.mysql.utils; package com.alibaba.otter.canal.parse.driver.mysql.utils;
import java.security.DigestException; import java.security.*;
import java.security.InvalidKeyException;
import java.security.KeyFactory;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.PublicKey;
import java.security.spec.InvalidKeySpecException; import java.security.spec.InvalidKeySpecException;
import java.security.spec.X509EncodedKeySpec; import java.security.spec.X509EncodedKeySpec;
import javax.crypto.BadPaddingException; import javax.crypto.BadPaddingException;
import javax.crypto.Cipher; import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException; import javax.crypto.IllegalBlockSizeException;

View File

@@ -13,21 +13,14 @@ import org.springframework.util.CollectionUtils;
import com.alibaba.otter.canal.client.CanalConnector; import com.alibaba.otter.canal.client.CanalConnector;
import com.alibaba.otter.canal.protocol.CanalEntry; import com.alibaba.otter.canal.protocol.CanalEntry;
import com.alibaba.otter.canal.protocol.CanalEntry.Column;
import com.alibaba.otter.canal.protocol.CanalEntry.Entry;
import com.alibaba.otter.canal.protocol.CanalEntry.EntryType;
import com.alibaba.otter.canal.protocol.CanalEntry.EventType;
import com.alibaba.otter.canal.protocol.CanalEntry.Pair;
import com.alibaba.otter.canal.protocol.CanalEntry.RowChange;
import com.alibaba.otter.canal.protocol.CanalEntry.RowData;
import com.alibaba.otter.canal.protocol.CanalEntry.TransactionBegin;
import com.alibaba.otter.canal.protocol.CanalEntry.TransactionEnd;
import com.alibaba.otter.canal.protocol.Message; import com.alibaba.otter.canal.protocol.Message;
import com.alibaba.otter.canal.protocol.CanalEntry.*;
import com.google.protobuf.InvalidProtocolBufferException; import com.google.protobuf.InvalidProtocolBufferException;
public class BaseCanalClientTest { public class BaseCanalClientTest {
protected final static Logger logger = LoggerFactory.getLogger(AbstractCanalClientTest.class); protected final static Logger logger = LoggerFactory
.getLogger(AbstractCanalClientTest.class);
protected static final String SEP = SystemUtils.LINE_SEPARATOR; protected static final String SEP = SystemUtils.LINE_SEPARATOR;
protected static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss"; protected static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
protected volatile boolean running = false; protected volatile boolean running = false;
@@ -51,8 +44,7 @@ public class BaseCanalClientTest {
+ "----------------> binlog[{}:{}] , name[{},{}] , eventType : {} , executeTime : {}({}) , gtid : ({}) , delay : {} ms" + "----------------> binlog[{}:{}] , name[{},{}] , eventType : {} , executeTime : {}({}) , gtid : ({}) , delay : {} ms"
+ SEP; + SEP;
transaction_format = SEP transaction_format = SEP + "================> binlog[{}:{}] , executeTime : {}({}) , gtid : ({}) , delay : {}ms"
+ "================> binlog[{}:{}] , executeTime : {}({}) , gtid : ({}) , delay : {}ms"
+ SEP; + SEP;
} }
@@ -71,8 +63,8 @@ public class BaseCanalClientTest {
} }
SimpleDateFormat format = new SimpleDateFormat(DATE_FORMAT); SimpleDateFormat format = new SimpleDateFormat(DATE_FORMAT);
logger.info(context_format, new Object[] { batchId, size, memsize, format.format(new Date()), startPosition, logger.info(context_format,
endPosition }); new Object[] { batchId, size, memsize, format.format(new Date()), startPosition, endPosition });
} }
protected String buildPositionForDump(Entry entry) { protected String buildPositionForDump(Entry entry) {
@@ -94,7 +86,8 @@ public class BaseCanalClientTest {
Date date = new Date(entry.getHeader().getExecuteTime()); Date date = new Date(entry.getHeader().getExecuteTime());
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
if (entry.getEntryType() == EntryType.TRANSACTIONBEGIN || entry.getEntryType() == EntryType.TRANSACTIONEND) { if (entry.getEntryType() == EntryType.TRANSACTIONBEGIN
|| entry.getEntryType() == EntryType.TRANSACTIONEND) {
if (entry.getEntryType() == EntryType.TRANSACTIONBEGIN) { if (entry.getEntryType() == EntryType.TRANSACTIONBEGIN) {
TransactionBegin begin = null; TransactionBegin begin = null;
try { try {
@@ -106,8 +99,9 @@ public class BaseCanalClientTest {
logger.info(transaction_format, logger.info(transaction_format,
new Object[] { entry.getHeader().getLogfileName(), new Object[] { entry.getHeader().getLogfileName(),
String.valueOf(entry.getHeader().getLogfileOffset()), String.valueOf(entry.getHeader().getLogfileOffset()),
String.valueOf(entry.getHeader().getExecuteTime()), simpleDateFormat.format(date), String.valueOf(entry.getHeader().getExecuteTime()),
entry.getHeader().getGtid(), String.valueOf(delayTime) }); simpleDateFormat.format(date), entry.getHeader().getGtid(),
String.valueOf(delayTime) });
logger.info(" BEGIN ----> Thread id: {}", begin.getThreadId()); logger.info(" BEGIN ----> Thread id: {}", begin.getThreadId());
printXAInfo(begin.getPropsList()); printXAInfo(begin.getPropsList());
} else if (entry.getEntryType() == EntryType.TRANSACTIONEND) { } else if (entry.getEntryType() == EntryType.TRANSACTIONEND) {
@@ -124,8 +118,9 @@ public class BaseCanalClientTest {
logger.info(transaction_format, logger.info(transaction_format,
new Object[] { entry.getHeader().getLogfileName(), new Object[] { entry.getHeader().getLogfileName(),
String.valueOf(entry.getHeader().getLogfileOffset()), String.valueOf(entry.getHeader().getLogfileOffset()),
String.valueOf(entry.getHeader().getExecuteTime()), simpleDateFormat.format(date), String.valueOf(entry.getHeader().getExecuteTime()),
entry.getHeader().getGtid(), String.valueOf(delayTime) }); simpleDateFormat.format(date), entry.getHeader().getGtid(),
String.valueOf(delayTime) });
} }
continue; continue;
@@ -143,8 +138,8 @@ public class BaseCanalClientTest {
logger.info(row_format, logger.info(row_format,
new Object[] { entry.getHeader().getLogfileName(), new Object[] { entry.getHeader().getLogfileName(),
String.valueOf(entry.getHeader().getLogfileOffset()), entry.getHeader().getSchemaName(), String.valueOf(entry.getHeader().getLogfileOffset()),
entry.getHeader().getTableName(), eventType, entry.getHeader().getSchemaName(), entry.getHeader().getTableName(), eventType,
String.valueOf(entry.getHeader().getExecuteTime()), simpleDateFormat.format(date), String.valueOf(entry.getHeader().getExecuteTime()), simpleDateFormat.format(date),
entry.getHeader().getGtid(), String.valueOf(delayTime) }); entry.getHeader().getGtid(), String.valueOf(delayTime) });
@@ -174,8 +169,8 @@ public class BaseCanalClientTest {
if (StringUtils.containsIgnoreCase(column.getMysqlType(), "BLOB") if (StringUtils.containsIgnoreCase(column.getMysqlType(), "BLOB")
|| StringUtils.containsIgnoreCase(column.getMysqlType(), "BINARY")) { || StringUtils.containsIgnoreCase(column.getMysqlType(), "BINARY")) {
// get value bytes // get value bytes
builder.append(column.getName() + " : " builder.append(
+ new String(column.getValue().getBytes("ISO-8859-1"), "UTF-8")); column.getName() + " : " + new String(column.getValue().getBytes("ISO-8859-1"), "UTF-8"));
} else { } else {
builder.append(column.getName() + " : " + column.getValue()); builder.append(column.getName() + " : " + column.getValue());
} }

View File

@@ -22,10 +22,8 @@ public class SimpleCanalClientPermanceTest {
long end = 0; long end = 0;
final ArrayBlockingQueue<Long> queue = new ArrayBlockingQueue<>(100); final ArrayBlockingQueue<Long> queue = new ArrayBlockingQueue<>(100);
try { try {
final CanalConnector connector = CanalConnectors.newSingleConnector(new InetSocketAddress(ip, 11111), final CanalConnector connector = CanalConnectors
destination, .newSingleConnector(new InetSocketAddress(ip, 11111), destination, "canal", "canal");
"canal",
"canal");
Thread ackThread = new Thread(() -> { Thread ackThread = new Thread(() -> {
while (true) { while (true) {

View File

@@ -22,10 +22,8 @@ public class SimpleCanalClientTest extends AbstractCanalClientTest {
// 根据ip,直接创建链接,无HA的功能 // 根据ip,直接创建链接,无HA的功能
String destination = "example"; String destination = "example";
String ip = AddressUtils.getHostIp(); String ip = AddressUtils.getHostIp();
CanalConnector connector = CanalConnectors.newSingleConnector(new InetSocketAddress(ip, 11111), CanalConnector connector = CanalConnectors
destination, .newSingleConnector(new InetSocketAddress(ip, 11111), destination, "canal", "canal");
"canal",
"canal");
final SimpleCanalClientTest clientTest = new SimpleCanalClientTest(destination); final SimpleCanalClientTest clientTest = new SimpleCanalClientTest(destination);
clientTest.setConnector(connector); clientTest.setConnector(connector);

View File

@@ -34,7 +34,8 @@ public class CanalKafkaClientExample {
public static void main(String[] args) { public static void main(String[] args) {
try { try {
final CanalKafkaClientExample kafkaCanalClientExample = new CanalKafkaClientExample(AbstractKafkaTest.zkServers, final CanalKafkaClientExample kafkaCanalClientExample = new CanalKafkaClientExample(
AbstractKafkaTest.zkServers,
AbstractKafkaTest.servers, AbstractKafkaTest.servers,
AbstractKafkaTest.topic, AbstractKafkaTest.topic,
AbstractKafkaTest.partition, AbstractKafkaTest.partition,

View File

@@ -35,7 +35,8 @@ public class CanalKafkaClientFlatMessageExample {
public static void main(String[] args) { public static void main(String[] args) {
try { try {
final CanalKafkaClientFlatMessageExample kafkaCanalClientExample = new CanalKafkaClientFlatMessageExample(AbstractKafkaTest.zkServers, final CanalKafkaClientFlatMessageExample kafkaCanalClientExample = new CanalKafkaClientFlatMessageExample(
AbstractKafkaTest.zkServers,
AbstractKafkaTest.servers, AbstractKafkaTest.servers,
AbstractKafkaTest.topic, AbstractKafkaTest.topic,
AbstractKafkaTest.partition, AbstractKafkaTest.partition,

View File

@@ -43,7 +43,8 @@ public class CanalKafkaOffsetClientExample {
public static void main(String[] args) { public static void main(String[] args) {
try { try {
final CanalKafkaOffsetClientExample kafkaCanalClientExample = new CanalKafkaOffsetClientExample(AbstractKafkaTest.servers, final CanalKafkaOffsetClientExample kafkaCanalClientExample = new CanalKafkaOffsetClientExample(
AbstractKafkaTest.servers,
AbstractKafkaTest.topic, AbstractKafkaTest.topic,
AbstractKafkaTest.partition, AbstractKafkaTest.partition,
AbstractKafkaTest.groupId); AbstractKafkaTest.groupId);

View File

@@ -1,13 +1,15 @@
package com.alibaba.otter.canal.example.rocketmq; package com.alibaba.otter.canal.example.rocketmq;
import com.alibaba.otter.canal.client.rocketmq.RocketMQCanalConnector;
import com.alibaba.otter.canal.protocol.Message;
import java.util.List; import java.util.List;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.util.Assert; import org.springframework.util.Assert;
import com.alibaba.otter.canal.client.rocketmq.RocketMQCanalConnector;
import com.alibaba.otter.canal.protocol.Message;
/** /**
* RocketMQ client example * RocketMQ client example
* *
@@ -32,9 +34,17 @@ public class CanalRocketMQClientExample extends AbstractRocektMQTest {
public CanalRocketMQClientExample(String nameServers, String topic, String groupId, boolean enableMessageTrace, public CanalRocketMQClientExample(String nameServers, String topic, String groupId, boolean enableMessageTrace,
String accessKey, String secretKey, String accessChannel, String namespace){ String accessKey, String secretKey, String accessChannel, String namespace){
connector = new RocketMQCanalConnector(nameServers, topic, groupId, accessKey, connector = new RocketMQCanalConnector(nameServers,
secretKey, -1, false, enableMessageTrace, topic,
null, accessChannel, namespace); groupId,
accessKey,
secretKey,
-1,
false,
enableMessageTrace,
null,
accessChannel,
namespace);
} }
public static void main(String[] args) { public static void main(String[] args) {

View File

@@ -18,7 +18,8 @@ import com.alibaba.otter.canal.protocol.FlatMessage;
*/ */
public class CanalRocketMQClientFlatMessageExample extends AbstractRocektMQTest { public class CanalRocketMQClientFlatMessageExample extends AbstractRocektMQTest {
protected final static Logger logger = LoggerFactory.getLogger(CanalRocketMQClientFlatMessageExample.class); protected final static Logger logger = LoggerFactory
.getLogger(CanalRocketMQClientFlatMessageExample.class);
private RocketMQCanalConnector connector; private RocketMQCanalConnector connector;
@@ -34,7 +35,8 @@ public class CanalRocketMQClientFlatMessageExample extends AbstractRocektMQTest
public static void main(String[] args) { public static void main(String[] args) {
try { try {
final CanalRocketMQClientFlatMessageExample rocketMQClientExample = new CanalRocketMQClientFlatMessageExample(nameServers, final CanalRocketMQClientFlatMessageExample rocketMQClientExample = new CanalRocketMQClientFlatMessageExample(
nameServers,
topic, topic,
groupId); groupId);
logger.info("## Start the rocketmq consumer: {}-{}", topic, groupId); logger.info("## Start the rocketmq consumer: {}-{}", topic, groupId);

View File

@@ -1,12 +1,6 @@
package com.alibaba.otter.canal.parse.inbound.mysql.rds; package com.alibaba.otter.canal.parse.inbound.mysql.rds;
import io.netty.handler.codec.http.HttpResponseStatus; import java.io.*;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Comparator; import java.util.Comparator;
import java.util.Iterator; import java.util.Iterator;
import java.util.LinkedList; import java.util.LinkedList;
@@ -41,6 +35,8 @@ import org.slf4j.LoggerFactory;
import com.alibaba.otter.canal.parse.exception.CanalParseException; import com.alibaba.otter.canal.parse.exception.CanalParseException;
import com.alibaba.otter.canal.parse.inbound.mysql.rds.data.BinlogFile; import com.alibaba.otter.canal.parse.inbound.mysql.rds.data.BinlogFile;
import io.netty.handler.codec.http.HttpResponseStatus;
/** /**
* @author chengjin.lyf on 2018/8/7 下午3:10 * @author chengjin.lyf on 2018/8/7 下午3:10
* @since 1.0.25 * @since 1.0.25
@@ -212,7 +208,7 @@ public class BinlogDownloadQueue {
InputStream is = response.getEntity().getContent(); InputStream is = response.getEntity().getContent();
boolean isChunked = response.getEntity().isChunked(); boolean isChunked = response.getEntity().isChunked();
Header contentLengthHeader = response.getFirstHeader("Content-Length"); Header contentLengthHeader = response.getFirstHeader("Content-Length");
long totalSize = isChunked || contentLengthHeader == null ? 0 : Long.parseLong(contentLengthHeader.getValue()); long totalSize = (isChunked || contentLengthHeader == null) ? 0 : Long.parseLong(contentLengthHeader.getValue());
if (response.getFirstHeader("Content-Disposition") != null) { if (response.getFirstHeader("Content-Disposition") != null) {
fileName = response.getFirstHeader("Content-Disposition").getValue(); fileName = response.getFirstHeader("Content-Disposition").getValue();
fileName = StringUtils.substringAfter(fileName, "filename="); fileName = StringUtils.substringAfter(fileName, "filename=");