Updated Branches: refs/heads/develop cb035946e -> 621626539
alternative solution to maintenance lock Project: http://git-wip-us.apache.org/repos/asf/incubator-marmotta/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-marmotta/commit/62162653 Tree: http://git-wip-us.apache.org/repos/asf/incubator-marmotta/tree/62162653 Diff: http://git-wip-us.apache.org/repos/asf/incubator-marmotta/diff/62162653 Branch: refs/heads/develop Commit: 62162653957290aa0a90a10a2019ff45784ad377 Parents: cb03594 Author: Sebastian Schaffert <[email protected]> Authored: Thu Jul 11 15:54:09 2013 +0200 Committer: Sebastian Schaffert <[email protected]> Committed: Thu Jul 11 15:54:09 2013 +0200 ---------------------------------------------------------------------- .../kiwi/persistence/KiWiGarbageCollector.java | 2 +- .../kiwi/persistence/KiWiPersistence.java | 45 ++++++++------------ 2 files changed, 19 insertions(+), 28 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/62162653/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/persistence/KiWiGarbageCollector.java ---------------------------------------------------------------------- diff --git a/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/persistence/KiWiGarbageCollector.java b/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/persistence/KiWiGarbageCollector.java index d167fc1..9ff6edb 100644 --- a/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/persistence/KiWiGarbageCollector.java +++ b/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/persistence/KiWiGarbageCollector.java @@ -149,7 +149,7 @@ public class KiWiGarbageCollector extends Thread { return count; } finally { - persistence.releaseJDBCConnection(con, true); + persistence.releaseJDBCConnection(con); } } http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/62162653/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/persistence/KiWiPersistence.java ---------------------------------------------------------------------- diff --git a/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/persistence/KiWiPersistence.java b/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/persistence/KiWiPersistence.java index 3ef51f1..b35bed7 100644 --- a/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/persistence/KiWiPersistence.java +++ b/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/persistence/KiWiPersistence.java @@ -22,7 +22,6 @@ import org.apache.marmotta.kiwi.config.KiWiConfiguration; import org.apache.marmotta.kiwi.model.rdf.KiWiNode; import org.apache.marmotta.kiwi.model.rdf.KiWiResource; import org.apache.marmotta.kiwi.model.rdf.KiWiUriResource; -import org.apache.marmotta.kiwi.persistence.mysql.MySQLDialect; import org.apache.marmotta.kiwi.persistence.util.ScriptRunner; import org.apache.marmotta.kiwi.sail.KiWiValueFactory; import org.apache.tomcat.jdbc.pool.DataSource; @@ -39,15 +38,10 @@ import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; -import java.util.Collections; import java.util.Map; import java.util.Set; -import java.util.WeakHashMap; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicLong; -import java.util.concurrent.locks.ReadWriteLock; -import java.util.concurrent.locks.ReentrantLock; -import java.util.concurrent.locks.ReentrantReadWriteLock; /** * Add file description here! @@ -95,7 +89,7 @@ public class KiWiPersistence { * grants an exclusive access to the database. This is currently used by the garbage collector, but can also * be used in other situations- */ - private ReadWriteLock maintenanceLock; + private boolean maintenance; @Deprecated @@ -105,7 +99,7 @@ public class KiWiPersistence { public KiWiPersistence(KiWiConfiguration configuration) { this.configuration = configuration; - this.maintenanceLock = new ReentrantReadWriteLock(); + this.maintenance = false; // init JDBC connection pool initConnectionPool(); @@ -227,7 +221,7 @@ public class KiWiPersistence { con.commit(); } } finally { - releaseJDBCConnection(con,true); + releaseJDBCConnection(con); } } catch(SQLException ex) { log.warn("database error: could not initialise in-memory sequences",ex); @@ -405,12 +399,18 @@ public class KiWiPersistence { * @throws SQLException */ public Connection getJDBCConnection(boolean maintenance) throws SQLException { - if(connectionPool != null) { + synchronized (this) { + if(this.maintenance) { + try { + this.wait(); + } catch (InterruptedException e) { } + } if(maintenance) { - maintenanceLock.writeLock().lock(); - } else { - maintenanceLock.readLock().lock(); + this.maintenance = true; } + } + + if(connectionPool != null) { Connection conn = connectionPool.getConnection(); conn.setAutoCommit(false); @@ -428,23 +428,14 @@ public class KiWiPersistence { * @throws SQLException */ public void releaseJDBCConnection(Connection con) throws SQLException { - releaseJDBCConnection(con,false); - } - - /** - * Release the JDBC connection passed as argument. This method will close the connection and release - * any locks that might be held by the caller. - * @param con - * @throws SQLException - */ - public void releaseJDBCConnection(Connection con, boolean maintenance) throws SQLException { try { con.close(); } finally { - if(maintenance) { - maintenanceLock.writeLock().unlock(); - } else { - maintenanceLock.readLock().unlock(); + synchronized (this) { + if(this.maintenance) { + this.maintenance = false; + this.notifyAll(); + } } } }
