fixed semi sync format & refactor

This commit is contained in:
agapple
2017-12-27 16:53:09 +08:00
parent c6f4de9f88
commit 9595e6abbd
7 changed files with 81 additions and 90 deletions

View File

@@ -25,7 +25,6 @@ import com.alibaba.otter.canal.parse.support.AuthenticationInfo;
import com.taobao.tddl.dbsync.binlog.LogContext;
import com.taobao.tddl.dbsync.binlog.LogDecoder;
import com.taobao.tddl.dbsync.binlog.LogEvent;
import com.taobao.tddl.dbsync.binlog.event.RotateLogEvent;
public class MysqlConnection implements ErosaConnection {
@@ -37,8 +36,6 @@ public class MysqlConnection implements ErosaConnection {
private BinlogFormat binlogFormat;
private BinlogImage binlogImage;
private String binlogfilename;
// tsdb releated
private AuthenticationInfo authInfo;
protected int connTimeout = 5 * 1000; // 5秒
@@ -145,18 +142,13 @@ public class MysqlConnection implements ErosaConnection {
if (event == null) {
throw new CanalParseException("parse failed");
}
//binlog日志文件发生变化
if(event.getHeader().getType()==LogEvent.ROTATE_EVENT){
binlogfilename=((RotateLogEvent)event).getFilename();
}
if (!func.sink(event)) {
break;
}else{
if(event.getSemival()==1){
sendSemiAck(binlogfilename, binlogPosition);
}
}
if (event.getSemival() == 1) {
sendSemiAck(context.getLogPosition().getFileName(), binlogPosition);
}
}
}
@@ -180,12 +172,12 @@ public class MysqlConnection implements ErosaConnection {
PacketManager.writePkg(connector.getChannel(), binlogDumpHeader.toBytes(), cmdBody);
connector.setDumping(true);
}
private void sendSemiAck(String binlogfilename, Long binlogPosition) throws IOException {
SemiAckCommandPacket semiAckCmd = new SemiAckCommandPacket();
semiAckCmd.binlogFileName = binlogfilename;
semiAckCmd.binlogPosition = binlogPosition;
byte[] cmdBody = semiAckCmd.toBytes();
logger.info("SEMI ACK with position:{}", semiAckCmd);
@@ -193,7 +185,7 @@ public class MysqlConnection implements ErosaConnection {
semiAckHeader.setPacketBodyLength(cmdBody.length);
semiAckHeader.setPacketSequenceNumber((byte) 0x00);
PacketManager.writePkg(connector.getChannel(), semiAckHeader.toBytes(), cmdBody);
}
public MysqlConnection fork() {

View File

@@ -36,8 +36,8 @@ public class DirectLogFetcher extends LogFetcher {
public static final int MAX_PACKET_LENGTH = (256 * 256 * 256 - 1);
private SocketChannel channel;
private boolean issemi=false;
private boolean issemi = false;
// private BufferedInputStream input;
@@ -55,9 +55,9 @@ public class DirectLogFetcher extends LogFetcher {
public void start(SocketChannel channel) throws IOException {
this.channel = channel;
String dbsemi= System.getProperty("db.semi");
if("1".equals(dbsemi)){
issemi=true;
String dbsemi = System.getProperty("db.semi");
if ("1".equals(dbsemi)) {
issemi = true;
}
// 和mysql driver一样,提供buffer机制,提升读取binlog速度
// this.input = new
@@ -111,15 +111,15 @@ public class DirectLogFetcher extends LogFetcher {
+ ", len = " + netlen);
}
}
//if mysql is in semi mode
if(issemi){
//parse semi mark
int semimark=getUint8(NET_HEADER_SIZE+1);
int semival=getUint8(NET_HEADER_SIZE+2);
this.semival=semival;
// if mysql is in semi mode
if (issemi) {
// parse semi mark
int semimark = getUint8(NET_HEADER_SIZE + 1);
int semival = getUint8(NET_HEADER_SIZE + 2);
this.semival = semival;
}
// The first packet is a multi-packet, concatenate the packets.
while (netlen == MAX_PACKET_LENGTH) {
if (!fetch0(0, NET_HEADER_SIZE)) {
@@ -136,10 +136,10 @@ public class DirectLogFetcher extends LogFetcher {
}
// Preparing buffer variables to decoding.
if(issemi){
origin = NET_HEADER_SIZE + 3;
}else{
origin = NET_HEADER_SIZE + 1;
if (issemi) {
origin = NET_HEADER_SIZE + 3;
} else {
origin = NET_HEADER_SIZE + 1;
}
position = origin;
limit -= origin;