From c349b366a6d6f634fef402cc5e86cbb51ebbffab Mon Sep 17 00:00:00 2001 From: Collapsar Date: Wed, 12 May 2021 15:58:46 +0800 Subject: [PATCH] fix bug that keep slow log on, dble may occur oom (#2640) --- .../dble/route/handler/HintShardingNodeHandler.java | 4 ++-- .../actiontech/dble/route/impl/AbstractRouteStrategy.java | 2 +- .../com/actiontech/dble/route/impl/DefaultRouteStrategy.java | 2 -- .../java/com/actiontech/dble/server/NonBlockingSession.java | 1 - .../dble/server/handler/ServerLoadDataInfileHandler.java | 3 ++- .../java/com/actiontech/dble/server/trace/TraceResult.java | 5 +---- .../java/com/actiontech/dble/singleton/RouteService.java | 2 +- 7 files changed, 7 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/actiontech/dble/route/handler/HintShardingNodeHandler.java b/src/main/java/com/actiontech/dble/route/handler/HintShardingNodeHandler.java index c0c724881..e7a778575 100644 --- a/src/main/java/com/actiontech/dble/route/handler/HintShardingNodeHandler.java +++ b/src/main/java/com/actiontech/dble/route/handler/HintShardingNodeHandler.java @@ -10,7 +10,6 @@ import com.actiontech.dble.backend.datasource.ShardingNode; import com.actiontech.dble.config.model.sharding.SchemaConfig; import com.actiontech.dble.route.RouteResultset; import com.actiontech.dble.route.util.RouterUtil; - import com.actiontech.dble.server.parser.ServerParse; import com.actiontech.dble.services.mysqlsharding.ShardingService; import org.slf4j.Logger; @@ -33,7 +32,7 @@ public class HintShardingNodeHandler implements HintHandler { String hintSQLValue, int hintSqlType, Map hintMap) throws SQLNonTransientException { if (LOGGER.isDebugEnabled()) { - LOGGER.debug("route shardingnode sql hint from " + realSQL); + LOGGER.debug("route shardingNode sql hint from " + realSQL); } RouteResultset rrs = new RouteResultset(realSQL, sqlType); @@ -49,6 +48,7 @@ public class HintShardingNodeHandler implements HintHandler { throw new SQLNonTransientException(msg); } + service.getSession2().endParse(); return rrs; } diff --git a/src/main/java/com/actiontech/dble/route/impl/AbstractRouteStrategy.java b/src/main/java/com/actiontech/dble/route/impl/AbstractRouteStrategy.java index f864f8a2c..b525f18db 100644 --- a/src/main/java/com/actiontech/dble/route/impl/AbstractRouteStrategy.java +++ b/src/main/java/com/actiontech/dble/route/impl/AbstractRouteStrategy.java @@ -9,7 +9,6 @@ import com.actiontech.dble.config.model.sharding.SchemaConfig; import com.actiontech.dble.route.RouteResultset; import com.actiontech.dble.route.RouteStrategy; import com.actiontech.dble.route.util.RouterUtil; - import com.actiontech.dble.server.parser.ServerParse; import com.actiontech.dble.services.mysqlsharding.ShardingService; import com.actiontech.dble.sqlengine.mpp.LoadData; @@ -51,6 +50,7 @@ public abstract class AbstractRouteStrategy implements RouteStrategy { } } + service.getSession2().endParse(); return rrs; } diff --git a/src/main/java/com/actiontech/dble/route/impl/DefaultRouteStrategy.java b/src/main/java/com/actiontech/dble/route/impl/DefaultRouteStrategy.java index 798a0c237..82665b1a1 100644 --- a/src/main/java/com/actiontech/dble/route/impl/DefaultRouteStrategy.java +++ b/src/main/java/com/actiontech/dble/route/impl/DefaultRouteStrategy.java @@ -11,7 +11,6 @@ import com.actiontech.dble.route.parser.druid.DruidParser; import com.actiontech.dble.route.parser.druid.DruidParserFactory; import com.actiontech.dble.route.parser.druid.ServerSchemaStatVisitor; import com.actiontech.dble.route.util.RouterUtil; - import com.actiontech.dble.services.mysqlsharding.ShardingService; import com.actiontech.dble.singleton.TraceManager; import com.alibaba.druid.sql.ast.SQLStatement; @@ -89,7 +88,6 @@ public class DefaultRouteStrategy extends AbstractRouteStrategy { rrs.setStatement(originSql); rrs.setSrcStatement(originSql); } - service.getSession2().endParse(); DruidParser druidParser = DruidParserFactory.create(statement, rrs.getSqlType()); TraceManager.TraceObject traceObject = TraceManager.serviceTrace(service, "simple-route-detail"); TraceManager.log(ImmutableMap.of("druidParser", druidParser.getClass().toString()), traceObject); diff --git a/src/main/java/com/actiontech/dble/server/NonBlockingSession.java b/src/main/java/com/actiontech/dble/server/NonBlockingSession.java index 75ac63a82..94e2abede 100644 --- a/src/main/java/com/actiontech/dble/server/NonBlockingSession.java +++ b/src/main/java/com/actiontech/dble/server/NonBlockingSession.java @@ -142,7 +142,6 @@ public class NonBlockingSession extends Session { if (traceEnable || SlowQueryLog.getInstance().isEnableSlowLog()) { requestTime = System.nanoTime(); traceResult.setVeryStartPrepare(requestTime); - traceResult.setRequestStartPrepare(new TraceRecord(requestTime)); } if (SystemConfig.getInstance().getUseCostTimeStat() == 0) { return; diff --git a/src/main/java/com/actiontech/dble/server/handler/ServerLoadDataInfileHandler.java b/src/main/java/com/actiontech/dble/server/handler/ServerLoadDataInfileHandler.java index 7759d5c34..d854def61 100644 --- a/src/main/java/com/actiontech/dble/server/handler/ServerLoadDataInfileHandler.java +++ b/src/main/java/com/actiontech/dble/server/handler/ServerLoadDataInfileHandler.java @@ -8,8 +8,8 @@ package com.actiontech.dble.server.handler; import com.actiontech.dble.DbleServer; import com.actiontech.dble.backend.mysql.CharsetUtil; import com.actiontech.dble.backend.mysql.proto.handler.Impl.MySQLProtoHandlerImpl; -import com.actiontech.dble.backend.mysql.store.fs.FileUtils; import com.actiontech.dble.backend.mysql.proto.handler.ProtoHandler; +import com.actiontech.dble.backend.mysql.store.fs.FileUtils; import com.actiontech.dble.btrace.provider.ClusterDelayProvider; import com.actiontech.dble.config.ErrorCode; import com.actiontech.dble.config.model.SystemConfig; @@ -230,6 +230,7 @@ public final class ServerLoadDataInfileHandler implements LoadDataInfileHandler flushDataToFile(); } ClusterDelayProvider.delayBeforeLoadData(); + service.getSession2().endParse(); service.getSession2().execute(rrs); } } diff --git a/src/main/java/com/actiontech/dble/server/trace/TraceResult.java b/src/main/java/com/actiontech/dble/server/trace/TraceResult.java index f412a6594..2c7db03b7 100644 --- a/src/main/java/com/actiontech/dble/server/trace/TraceResult.java +++ b/src/main/java/com/actiontech/dble/server/trace/TraceResult.java @@ -57,10 +57,7 @@ public class TraceResult implements Cloneable { public void setVeryStartPrepare(long veryStartPrepare) { prepareFinished = false; this.veryStartPrepare = veryStartPrepare; - } - - public void setRequestStartPrepare(TraceRecord requestStartPrepare) { - this.requestStartPrepare = requestStartPrepare; + this.requestStartPrepare = new TraceRecord(veryStartPrepare); } public void setRouteStart(TraceRecord routeStart) { diff --git a/src/main/java/com/actiontech/dble/singleton/RouteService.java b/src/main/java/com/actiontech/dble/singleton/RouteService.java index 4a568d50e..8d7fe799c 100644 --- a/src/main/java/com/actiontech/dble/singleton/RouteService.java +++ b/src/main/java/com/actiontech/dble/singleton/RouteService.java @@ -161,7 +161,7 @@ public final class RouteService { Map hintMap = null; String hintType = null; if (hint.indexOf("=") >= 0) { - //sql/sharddingNode/db_type/db_instance_url=***** + //sql/shardingNode/db_type/db_instance_url=***** hintMap = parseKeyValue(hint, '='); hintType = (String) hintMap.get(HINT_TYPE); hintSql = (String) hintMap.get(hintType);