[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