[infinispan-commits] Infinispan SVN: r1955 - in branches/4.1.x: cachestore/jdbc/src/main/java/org/infinispan/loaders/jdbc/binary and 3 other directories.
infinispan-commits at lists.jboss.org
infinispan-commits at lists.jboss.org
Fri Jul 2 05:19:22 EDT 2010
Author: manik.surtani at jboss.com
Date: 2010-07-02 05:19:21 -0400 (Fri, 02 Jul 2010)
New Revision: 1955
Modified:
branches/4.1.x/cachestore/jdbc/src/main/java/org/infinispan/loaders/jdbc/binary/JdbcBinaryCacheStore.java
branches/4.1.x/cachestore/jdbc/src/test/java/org/infinispan/loaders/jdbc/binary/JdbcBinaryCacheStoreTest.java
branches/4.1.x/cachestore/jdbc/src/test/java/org/infinispan/test/fwk/UnitTestDatabaseManager.java
branches/4.1.x/cachestore/pom.xml
branches/4.1.x/core/src/test/java/org/infinispan/loaders/BaseCacheStoreTest.java
Log:
[ISPN-480] (JDBCBinaryCacheStore purgeExpired() SQL statement: not enough params bound)
Modified: branches/4.1.x/cachestore/jdbc/src/main/java/org/infinispan/loaders/jdbc/binary/JdbcBinaryCacheStore.java
===================================================================
--- branches/4.1.x/cachestore/jdbc/src/main/java/org/infinispan/loaders/jdbc/binary/JdbcBinaryCacheStore.java 2010-07-01 20:39:26 UTC (rev 1954)
+++ branches/4.1.x/cachestore/jdbc/src/main/java/org/infinispan/loaders/jdbc/binary/JdbcBinaryCacheStore.java 2010-07-02 09:19:21 UTC (rev 1955)
@@ -319,6 +319,7 @@
ByteBuffer byteBuffer = JdbcUtil.marshall(getMarshaller(), bucket);
ps.setBinaryStream(1, byteBuffer.getStream(), byteBuffer.getLength());
ps.setLong(2, bucket.timestampOfFirstEntryToExpire());
+ ps.setString(3, bucket.getBucketName());
ps.addBatch();
updateCount++;
if (updateCount % batchSize == 0) {
@@ -332,7 +333,8 @@
}
//flush the batch
if (updateCount % batchSize != 0) {
- ps.executeBatch();
+ if (log.isTraceEnabled()) log.trace("Flushing batch, update count is: " + updateCount);
+ ps.executeBatch();
}
if (log.isTraceEnabled()) log.trace("Updated " + updateCount + " buckets.");
} catch (SQLException ex) {
Modified: branches/4.1.x/cachestore/jdbc/src/test/java/org/infinispan/loaders/jdbc/binary/JdbcBinaryCacheStoreTest.java
===================================================================
--- branches/4.1.x/cachestore/jdbc/src/test/java/org/infinispan/loaders/jdbc/binary/JdbcBinaryCacheStoreTest.java 2010-07-01 20:39:26 UTC (rev 1954)
+++ branches/4.1.x/cachestore/jdbc/src/test/java/org/infinispan/loaders/jdbc/binary/JdbcBinaryCacheStoreTest.java 2010-07-02 09:19:21 UTC (rev 1955)
@@ -22,16 +22,23 @@
package org.infinispan.loaders.jdbc.binary;
import static org.easymock.classextension.EasyMock.*;
+
import org.infinispan.CacheDelegate;
+import org.infinispan.container.entries.InternalEntryFactory;
import org.infinispan.loaders.BaseCacheStoreTest;
+import org.infinispan.loaders.CacheLoaderException;
import org.infinispan.loaders.CacheStore;
import org.infinispan.loaders.jdbc.TableManipulation;
import org.infinispan.loaders.jdbc.connectionfactory.ConnectionFactory;
import org.infinispan.loaders.jdbc.connectionfactory.ConnectionFactoryConfig;
import org.infinispan.marshall.TestObjectStreamMarshaller;
+import org.infinispan.test.TestingUtil;
import org.infinispan.test.fwk.UnitTestDatabaseManager;
import org.testng.annotations.Test;
+import java.io.Serializable;
+import java.util.concurrent.TimeUnit;
+
/**
* Tester class for {@link JdbcBinaryCacheStore}
*
@@ -77,4 +84,42 @@
jdbcBucketCacheStore.stop();
verify(tableManipulation, connectionFactory);
}
+
+ public void testPurgeExpiredAllCodepaths() throws CacheLoaderException {
+ FixedHashKey k1 = new FixedHashKey(1, "a");
+ FixedHashKey k2 = new FixedHashKey(1, "b");
+ cs.store(InternalEntryFactory.create(k1, "value"));
+ cs.store(InternalEntryFactory.create(k2, "value", 60000)); // will expire
+ for (int i = 0; i < 120; i++) {
+ cs.store(InternalEntryFactory.create(new FixedHashKey(i + 10, "non-exp k" + i), "value"));
+ cs.store(InternalEntryFactory.create(new FixedHashKey(i + 10, "exp k" + i), "value", 60000)); // will expire
+ }
+ assert cs.containsKey(k1);
+ assert cs.containsKey(k2);
+ TestingUtil.sleepThread(62000);
+ cs.purgeExpired();
+ assert cs.containsKey(k1);
+ assert !cs.containsKey(k2);
+ }
+
+ private static final class FixedHashKey implements Serializable {
+ String s;
+ int i;
+
+ private FixedHashKey(int i, String s) {
+ this.s = s;
+ this.i = i;
+ }
+
+ @Override
+ public int hashCode() {
+ return i;
+ }
+
+ @Override
+ public boolean equals(Object other) {
+ return other instanceof FixedHashKey && s.equals(((FixedHashKey) other).s);
+ }
+ }
+
}
Modified: branches/4.1.x/cachestore/jdbc/src/test/java/org/infinispan/test/fwk/UnitTestDatabaseManager.java
===================================================================
--- branches/4.1.x/cachestore/jdbc/src/test/java/org/infinispan/test/fwk/UnitTestDatabaseManager.java 2010-07-01 20:39:26 UTC (rev 1954)
+++ branches/4.1.x/cachestore/jdbc/src/test/java/org/infinispan/test/fwk/UnitTestDatabaseManager.java 2010-07-02 09:19:21 UTC (rev 1955)
@@ -21,11 +21,14 @@
*/
package org.infinispan.test.fwk;
+import com.mysql.jdbc.Driver;
+import org.infinispan.loaders.jdbc.DatabaseType;
import org.infinispan.loaders.jdbc.JdbcUtil;
import org.infinispan.loaders.jdbc.TableManipulation;
import org.infinispan.loaders.jdbc.connectionfactory.ConnectionFactory;
import org.infinispan.loaders.jdbc.connectionfactory.ConnectionFactoryConfig;
import org.infinispan.loaders.jdbc.connectionfactory.PooledConnectionFactory;
+import org.infinispan.loaders.jdbc.connectionfactory.SimpleConnectionFactory;
import java.sql.Connection;
import java.sql.PreparedStatement;
@@ -47,19 +50,50 @@
private static final ConnectionFactoryConfig realConfig = new ConnectionFactoryConfig();
private static AtomicInteger userIndex = new AtomicInteger(0);
+ private static final String DB_TYPE = System.getProperty("infinispan.jdbc", "H2");
+ private static final String H2_DRIVER = org.h2.Driver.class.getName();
static {
+ String driver = "";
+ DatabaseType dt = DatabaseType.H2;
try {
- Class.forName("org.h2.Driver");
+ if (!DB_TYPE.equalsIgnoreCase("H2")) {
+ if (DB_TYPE.equalsIgnoreCase("mysql")) {
+ driver = Driver.class.getName();
+ dt = DatabaseType.MYSQL;
+ } else {
+ driver = H2_DRIVER;
+ }
+ }
+ try {
+ Class.forName(driver);
+ } catch (ClassNotFoundException e) {
+ driver = H2_DRIVER;
+ Class.forName(H2_DRIVER);
+ }
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
- realConfig.setDriverClass("org.h2.Driver");
- realConfig.setConnectionUrl("jdbc:h2:mem:infinispan;DB_CLOSE_DELAY=-1");
- realConfig.setConnectionFactoryClass(PooledConnectionFactory.class.getName());
- realConfig.setUserName("sa");
+ configure(dt, driver, realConfig);
}
+ private static void configure(DatabaseType dt, String driver, ConnectionFactoryConfig cfg) {
+ cfg.setDriverClass(driver);
+ switch (dt) {
+ case H2:
+ cfg.setConnectionUrl("jdbc:h2:mem:infinispan;DB_CLOSE_DELAY=-1");
+ cfg.setConnectionFactoryClass(PooledConnectionFactory.class.getName());
+ cfg.setUserName("sa");
+ break;
+ case MYSQL:
+ cfg.setConnectionUrl("jdbc:mysql://localhost/infinispan?user=ispn&password=ispn");
+ cfg.setConnectionFactoryClass(SimpleConnectionFactory.class.getName());
+ cfg.setUserName("ispn");
+ cfg.setPassword("ispn");
+ break;
+ }
+ }
+
public static ConnectionFactoryConfig getUniqueConnectionFactoryConfig() {
synchronized (realConfig) {
return returnBasedOnDifferentInstance();
@@ -68,7 +102,6 @@
public static void shutdownInMemoryDatabase(ConnectionFactoryConfig config) {
-
// Connection conn = null;
// Statement st = null;
@@ -144,7 +177,7 @@
public static TableManipulation buildDefaultTableManipulation() {
return new TableManipulation("ID_COLUMN", "VARCHAR(255)", "ISPN_JDBC", "DATA_COLUMN",
- "BLOB", "TIMESTAMP_COLUMN", "BIGINT");
+ "BLOB", "TIMESTAMP_COLUMN", "BIGINT");
}
Modified: branches/4.1.x/cachestore/pom.xml
===================================================================
--- branches/4.1.x/cachestore/pom.xml 2010-07-01 20:39:26 UTC (rev 1954)
+++ branches/4.1.x/cachestore/pom.xml 2010-07-02 09:19:21 UTC (rev 1955)
@@ -27,5 +27,12 @@
<type>test-jar</type>
<scope>test</scope>
</dependency>
+
+ <dependency>
+ <groupId>mysql</groupId>
+ <artifactId>mysql-connector-java</artifactId>
+ <version>5.1.9</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</project>
Modified: branches/4.1.x/core/src/test/java/org/infinispan/loaders/BaseCacheStoreTest.java
===================================================================
--- branches/4.1.x/core/src/test/java/org/infinispan/loaders/BaseCacheStoreTest.java 2010-07-01 20:39:26 UTC (rev 1954)
+++ branches/4.1.x/core/src/test/java/org/infinispan/loaders/BaseCacheStoreTest.java 2010-07-02 09:19:21 UTC (rev 1955)
@@ -81,7 +81,7 @@
}
}
- @AfterMethod
+ @AfterMethod (alwaysRun = false)
public void assertNoLocksHeld() {
//doesn't really make sense to add a subclass for this check only
if (cs instanceof LockSupportCacheStore) {
More information about the infinispan-commits
mailing list