diff --git a/src/main/java/com/actiontech/dble/services/mysqlsharding/LoadDataProtoHandlerImpl.java b/src/main/java/com/actiontech/dble/services/mysqlsharding/LoadDataProtoHandlerImpl.java index 3ec548cdb..086f2364b 100644 --- a/src/main/java/com/actiontech/dble/services/mysqlsharding/LoadDataProtoHandlerImpl.java +++ b/src/main/java/com/actiontech/dble/services/mysqlsharding/LoadDataProtoHandlerImpl.java @@ -51,7 +51,8 @@ public class LoadDataProtoHandlerImpl implements ProtoHandler { return mySQLProtoHandler; } - private boolean isEndOfDataFile(byte[] data) { + public static boolean isEndOfDataFile(byte[] data) { + // Load Data's empty package return (data.length == 4 && data[0] == 0 && data[1] == 0 && data[2] == 0); } } diff --git a/src/main/java/com/actiontech/dble/services/rwsplit/RWSplitService.java b/src/main/java/com/actiontech/dble/services/rwsplit/RWSplitService.java index 7c172db6f..a1551ede8 100644 --- a/src/main/java/com/actiontech/dble/services/rwsplit/RWSplitService.java +++ b/src/main/java/com/actiontech/dble/services/rwsplit/RWSplitService.java @@ -26,6 +26,7 @@ import com.actiontech.dble.server.variables.MysqlVariable; import com.actiontech.dble.server.variables.VariableType; import com.actiontech.dble.services.BusinessService; import com.actiontech.dble.services.mysqlauthenticate.MySQLChangeUserService; +import com.actiontech.dble.services.mysqlsharding.LoadDataProtoHandlerImpl; import com.actiontech.dble.services.rwsplit.handle.PreparedStatementHolder; import com.actiontech.dble.singleton.TraceManager; import com.actiontech.dble.singleton.TsQueriesCounter; @@ -115,7 +116,12 @@ public class RWSplitService extends BusinessService { protected boolean beforeHandlingTask(@NotNull ServiceTask task) { TraceManager.sessionStart(this, "rwSplit-server-start"); if (task.getType() == ServiceTaskType.NORMAL) { - final int packetType = ((NormalServiceTask) task).getPacketType(); + NormalServiceTask task0 = ((NormalServiceTask) task); + // Filter Load Data's empty package + if (this.isInLoadData() && LoadDataProtoHandlerImpl.isEndOfDataFile(task0.getOrgData())) + return true; + + final int packetType = task0.getPacketType(); if (packetType == MySQLPacket.COM_STMT_PREPARE || packetType == MySQLPacket.COM_STMT_EXECUTE || packetType == MySQLPacket.COM_QUERY) { StatisticListener.getInstance().record(session, r -> r.onFrontendSqlStart()); }