修正因为SqlStat OOM防止措施导致的空指针问题

This commit is contained in:
wenshao
2011-11-16 10:10:30 +08:00
parent 6ab288b255
commit 8c5bb64929
3 changed files with 45 additions and 16 deletions
@@ -30,6 +30,8 @@ import javax.management.openmbean.TabularData;
import com.alibaba.druid.filter.Filter;
import com.alibaba.druid.filter.FilterChain;
import com.alibaba.druid.filter.FilterEventAdapter;
import com.alibaba.druid.logging.Log;
import com.alibaba.druid.logging.LogFactory;
import com.alibaba.druid.proxy.jdbc.CallableStatementProxy;
import com.alibaba.druid.proxy.jdbc.ConnectionProxy;
import com.alibaba.druid.proxy.jdbc.DataSourceProxy;
@@ -51,6 +53,8 @@ import com.alibaba.druid.util.TransactionInfo;
*/
public class StatFilter extends FilterEventAdapter implements StatFilterMBean {
private final static Log LOG = LogFactory.getLog(StatFilter.class);
public final static String ATTR_SQL = "stat.sql";
public final static String ATTR_UPDATE_COUNT = "stat.updteCount";
public final static String ATTR_TRANSACTION = "stat.tx";
@@ -318,8 +322,10 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean {
statement.getAttributes().put(ATTR_SQL, sqlStat);
}
sqlStat.addExecuteBatchCount(batchSize);
if (sqlStat != null) {
sqlStat.addExecuteBatchCount(batchSize);
}
internalBeforeStatementExecute(statement, sql);
// super.statementExecuteBatchBefore(statement);
@@ -363,8 +369,11 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean {
sqlStat.setName(statContext.getName());
sqlStat.setFile(statContext.getFile());
}
sqlStat.setExecuteLastStartTime(System.currentTimeMillis());
sqlStat.incrementRunningCount();
if (sqlStat != null) {
sqlStat.setExecuteLastStartTime(System.currentTimeMillis());
sqlStat.incrementRunningCount();
}
statement.getAttributes().put(ATTR_UPDATE_COUNT, 0);
}
@@ -400,13 +409,15 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean {
// // SQL
final JdbcSqlStat sqlStat = getSqlStat(statement);
sqlStat.incrementExecuteSuccessCount();
for (int updateCount : updateCountArray) {
sqlStat.addUpdateCount(updateCount);
}
if (sqlStat != null) {
sqlStat.incrementExecuteSuccessCount();
for (int updateCount : updateCountArray) {
sqlStat.addUpdateCount(updateCount);
}
sqlStat.decrementExecutingCount();
sqlStat.addExecuteTime(nanoSpan);
sqlStat.decrementExecutingCount();
sqlStat.addExecuteTime(nanoSpan);
}
if (updateCountArray.length == 1) {
statement.getAttributes().put(ATTR_UPDATE_COUNT, updateCountArray[0]);
@@ -432,8 +443,10 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean {
// SQL
JdbcSqlStat sqlStat = getSqlStat(statement);
sqlStat.error(error);
sqlStat.addExecuteTime(nanoSpan);
if (sqlStat != null) {
sqlStat.error(error);
sqlStat.addExecuteTime(nanoSpan);
}
super.statement_executeErrorAfter(statement, sql, error);
}
@@ -675,7 +688,7 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean {
if (dataSourceStat.getSqlStatMap().size() >= maxSqlStatCount) {
return null;
}
JdbcSqlStat newSqlStat = new JdbcSqlStat(sql);
if (dataSourceStat.getSqlStatMap().putIfAbsent(sql, newSqlStat) == null) {
newSqlStat.setId(JdbcStatManager.getInstance().generateSqlId());
@@ -685,6 +698,10 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean {
sqlStat = dataSourceStat.getSqlStatMap().get(sql);
}
if (sqlStat == null) {
LOG.error("stat is null");
}
return sqlStat;
}