You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@marmotta.apache.org by ss...@apache.org on 2013/07/11 15:54:48 UTC
git commit: alternative solution to maintenance lock
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 <ss...@apache.org>
Authored: Thu Jul 11 15:54:09 2013 +0200
Committer: Sebastian Schaffert <ss...@apache.org>
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();
+ }
}
}
}