From: fhanik Date: Fri, 10 Jul 2009 21:38:16 +0000 (+0000) Subject: Some more concurrency testing X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=7ea5842a666d7f9979a28edbbc7aa111559742f0;p=tomcat7.0 Some more concurrency testing git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@793116 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/ConnectionPool.java b/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/ConnectionPool.java index b02b06c85..53a765cfc 100644 --- a/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/ConnectionPool.java +++ b/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/ConnectionPool.java @@ -847,7 +847,7 @@ public class ConnectionPool { if (busy.contains(con)) continue; long time = con.getTimestamp(); - if (((now - time) > con.getReleaseTime()) && (getSize()>getPoolProperties().getMinIdle())) { + if ((con.getReleaseTime()>0) && ((now - time) > con.getReleaseTime()) && (getSize()>getPoolProperties().getMinIdle())) { release(con); idle.remove(con); setToNull = true; diff --git a/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/DataSourceFactory.java b/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/DataSourceFactory.java index 6883bd8f9..30f4fc4d7 100644 --- a/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/DataSourceFactory.java +++ b/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/DataSourceFactory.java @@ -108,6 +108,7 @@ public class DataSourceFactory implements ObjectFactory { protected final static String PROP_FAIR_QUEUE = "fairQueue"; protected static final String PROP_USE_EQUALS = "useEquals"; + protected static final String PROP_USE_CON_LOCK = "useLock"; public static final int UNKNOWN_TRANSACTIONISOLATION = -1; @@ -151,7 +152,8 @@ public class DataSourceFactory implements ObjectFactory { PROP_USE_EQUALS, OBJECT_NAME, PROP_ABANDONWHENPERCENTAGEFULL, - PROP_MAXAGE + PROP_MAXAGE, + PROP_USE_CON_LOCK }; // -------------------------------------------------- ObjectFactory Methods @@ -424,6 +426,11 @@ public class DataSourceFactory implements ObjectFactory { poolProperties.setMaxAge(Long.parseLong(value)); } + value = properties.getProperty(PROP_USE_CON_LOCK); + if (value != null) { + poolProperties.setUseLock(Boolean.parseBoolean(value)); + } + return poolProperties; } diff --git a/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/DataSourceProxy.java b/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/DataSourceProxy.java index 17d5ee911..e8d761595 100644 --- a/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/DataSourceProxy.java +++ b/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/DataSourceProxy.java @@ -287,6 +287,10 @@ public class DataSourceProxy { this.getPoolProperties().setFairQueue(fairQueue); } + public void setUseLock(boolean useLock) { + this.getPoolProperties().setUseLock(useLock); + } + public void setDefaultCatalog(String catalog) { this.getPoolProperties().setDefaultCatalog(catalog); } diff --git a/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/PoolProperties.java b/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/PoolProperties.java index 9c7d29b5d..cd01c5c10 100644 --- a/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/PoolProperties.java +++ b/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/PoolProperties.java @@ -72,7 +72,7 @@ public class PoolProperties { protected boolean useEquals = false; protected int abandonWhenPercentageFull = 0; protected long maxAge = 0; - protected boolean useLock = true; + protected boolean useLock = false; private InterceptorDefinition[] interceptors = null; public void setAbandonWhenPercentageFull(int percentage) { diff --git a/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/PooledConnection.java b/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/PooledConnection.java index f01b2a03a..111c97495 100644 --- a/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/PooledConnection.java +++ b/modules/jdbc-pool/java/org/apache/tomcat/jdbc/pool/PooledConnection.java @@ -77,7 +77,7 @@ public class PooledConnection { /** * Timestamp the connection was last 'touched' by the pool */ - private long timestamp; + private volatile long timestamp; /** * Lock for this connection only */ diff --git a/modules/jdbc-pool/test/org/apache/tomcat/jdbc/test/TestConcurrency.java b/modules/jdbc-pool/test/org/apache/tomcat/jdbc/test/TestConcurrency.java index 23b4ef027..7aa29659a 100644 --- a/modules/jdbc-pool/test/org/apache/tomcat/jdbc/test/TestConcurrency.java +++ b/modules/jdbc-pool/test/org/apache/tomcat/jdbc/test/TestConcurrency.java @@ -91,17 +91,16 @@ public class TestConcurrency extends DefaultTestCase { public void testBrutal() throws Exception { ds.getPoolProperties().setRemoveAbandoned(false); - ds.getPoolProperties().setMinEvictableIdleTimeMillis(-1); + ds.getPoolProperties().setMinEvictableIdleTimeMillis(10); ds.getPoolProperties().setTimeBetweenEvictionRunsMillis(-1); ds.getConnection().close(); - final int iter = 1000 * 10; + final int iter = 100000 * 10; final AtomicInteger loopcount = new AtomicInteger(0); final Runnable run = new Runnable() { public void run() { try { while (loopcount.incrementAndGet() < iter) { Connection con = ds.getConnection(); - Thread.sleep(10); con.close(); } }catch (Exception x) { @@ -136,7 +135,7 @@ public class TestConcurrency extends DefaultTestCase { assertEquals("Size comparison:",10, ds.getPool().getSize()); assertEquals("Idle comparison:",10, ds.getPool().getIdle()); assertEquals("Used comparison:",0, ds.getPool().getActive()); - assertEquals("Connect count",10,Driver.connectCount.get()); + assertEquals("Connect count",10,Driver.connectCount.get()-Driver.disconnectCount.get()); }