From 9ffff1358b03d98a3322989434b712c771957f00 Mon Sep 17 00:00:00 2001 From: wenshao Date: Wed, 31 Jul 2013 13:58:12 +0800 Subject: [PATCH] improve sql-wall --- .../com/alibaba/druid/wall/WallProvider.java | 35 +++++++++++-------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/alibaba/druid/wall/WallProvider.java b/src/main/java/com/alibaba/druid/wall/WallProvider.java index c85d182ad5..79ff7e4f04 100644 --- a/src/main/java/com/alibaba/druid/wall/WallProvider.java +++ b/src/main/java/com/alibaba/druid/wall/WallProvider.java @@ -46,17 +46,17 @@ import com.alibaba.druid.wall.violation.SyntaxErrorViolation; public abstract class WallProvider { private LRUCache whiteList; + private LRUCache whiteMergedList; private int MAX_SQL_LENGTH = 2048; // 1k private int whiteSqlMaxSize = 500; // 1k private LRUCache blackList; + private LRUCache blackMergedList; private int blackSqlMaxSize = 100; // 1k - private LRUCache sqlList; - protected final WallConfig config; private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); @@ -222,8 +222,8 @@ public abstract class WallProvider { whiteList = new LRUCache(whiteSqlMaxSize); } - if (sqlList == null) { - sqlList = new LRUCache(blackSqlMaxSize + whiteSqlMaxSize); + if (whiteMergedList == null) { + whiteMergedList = new LRUCache(whiteSqlMaxSize); } WallSqlStat wallStat = whiteList.get(sql); @@ -234,10 +234,10 @@ public abstract class WallProvider { } catch (Exception ex) { mergedSql = sql; } - wallStat = sqlList.get(mergedSql); + wallStat = whiteMergedList.get(mergedSql); if (wallStat == null) { wallStat = new WallSqlStat(tableStats, functionStats, syntaxError); - sqlList.put(mergedSql, wallStat); + whiteMergedList.put(mergedSql, wallStat); } wallStat.incrementAndGetExecuteCount(); @@ -259,8 +259,8 @@ public abstract class WallProvider { blackList = new LRUCache(blackSqlMaxSize); } - if (sqlList == null) { - sqlList = new LRUCache(blackSqlMaxSize + whiteSqlMaxSize); + if (blackMergedList == null) { + blackMergedList = new LRUCache(blackSqlMaxSize); } WallSqlStat wallStat = blackList.get(sql); @@ -271,10 +271,10 @@ public abstract class WallProvider { } catch (Exception ex) { mergedSql = sql; } - wallStat = sqlList.get(mergedSql); + wallStat = blackMergedList.get(mergedSql); if (wallStat == null) { wallStat = new WallSqlStat(tableStats, functionStats, violations, syntaxError); - sqlList.put(mergedSql, wallStat); + blackMergedList.put(mergedSql, wallStat); } wallStat.incrementAndGetExecuteCount(); @@ -305,8 +305,11 @@ public abstract class WallProvider { Set hashSet = new HashSet(); lock.readLock().lock(); try { - if (sqlList != null) { - hashSet.addAll(sqlList.keySet()); + if (whiteMergedList != null) { + hashSet.addAll(whiteMergedList.keySet()); + } + if (blackMergedList != null) { + hashSet.addAll(blackMergedList.keySet()); } } finally { lock.readLock().unlock(); @@ -363,13 +366,15 @@ public abstract class WallProvider { if (whiteList != null) { whiteList = null; } + if (whiteMergedList != null) { + whiteMergedList = null; + } if (blackList != null) { blackList = null; } - - if (sqlList != null) { - sqlList = null; + if (blackMergedList != null) { + blackMergedList = null; } } finally { lock.writeLock().unlock();