trying to fix registry problems (repeatedAdd test not working)
Project: http://git-wip-us.apache.org/repos/asf/marmotta/repo Commit: http://git-wip-us.apache.org/repos/asf/marmotta/commit/4de163b4 Tree: http://git-wip-us.apache.org/repos/asf/marmotta/tree/4de163b4 Diff: http://git-wip-us.apache.org/repos/asf/marmotta/diff/4de163b4 Branch: refs/heads/develop Commit: 4de163b436c4ee75454ea23fdbd24391261aa541 Parents: 8add81f Author: Sebastian Schaffert <[email protected]> Authored: Wed Dec 11 22:52:52 2013 +0100 Committer: Sebastian Schaffert <[email protected]> Committed: Wed Dec 11 22:52:52 2013 +0100 ---------------------------------------------------------------------- .../kiwi/reasoner/engine/ReasoningEngine.java | 4 ++-- .../marmotta/kiwi/model/rdf/KiWiTriple.java | 13 +++++----- .../kiwi/persistence/KiWiConnection.java | 25 ++++---------------- .../kiwi/persistence/KiWiTripleRegistry.java | 2 +- .../marmotta/kiwi/sail/KiWiSailConnection.java | 3 ++- .../marmotta/kiwi/sail/KiWiValueFactory.java | 4 ++-- .../marmotta/kiwi/test/PersistenceTest.java | 2 +- 7 files changed, 19 insertions(+), 34 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/marmotta/blob/4de163b4/libraries/kiwi/kiwi-reasoner/src/main/java/org/apache/marmotta/kiwi/reasoner/engine/ReasoningEngine.java ---------------------------------------------------------------------- diff --git a/libraries/kiwi/kiwi-reasoner/src/main/java/org/apache/marmotta/kiwi/reasoner/engine/ReasoningEngine.java b/libraries/kiwi/kiwi-reasoner/src/main/java/org/apache/marmotta/kiwi/reasoner/engine/ReasoningEngine.java index 8beab0b..33f7ae4 100644 --- a/libraries/kiwi/kiwi-reasoner/src/main/java/org/apache/marmotta/kiwi/reasoner/engine/ReasoningEngine.java +++ b/libraries/kiwi/kiwi-reasoner/src/main/java/org/apache/marmotta/kiwi/reasoner/engine/ReasoningEngine.java @@ -349,9 +349,9 @@ public class ReasoningEngine implements TransactionListener { Set<KiWiTriple> newTriples = StatementCommons.newQuadrupleSet(); for(Statement stmt : data.getAddedTriples()) { KiWiTriple t = (KiWiTriple)stmt; - if(t.isMarkedForReasoning()) { + if(t.isNewTriple()) { newTriples.add(t); - t.setMarkedForReasoning(false); + t.setNewTriple(false); } } http://git-wip-us.apache.org/repos/asf/marmotta/blob/4de163b4/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/model/rdf/KiWiTriple.java ---------------------------------------------------------------------- diff --git a/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/model/rdf/KiWiTriple.java b/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/model/rdf/KiWiTriple.java index 716acb1..7b69309 100644 --- a/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/model/rdf/KiWiTriple.java +++ b/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/model/rdf/KiWiTriple.java @@ -73,8 +73,7 @@ public class KiWiTriple implements Statement, Serializable { private boolean inferred; - //@Transient - private boolean markedForReasoning; + private boolean newTriple; public KiWiTriple() { @@ -85,7 +84,7 @@ public class KiWiTriple implements Statement, Serializable { this.created = created; this.deleted = false; this.inferred = false; - this.markedForReasoning = false; + this.newTriple = false; this.deletedAt = null; } @@ -311,11 +310,11 @@ public class KiWiTriple implements Statement, Serializable { } - public boolean isMarkedForReasoning() { - return markedForReasoning; + public boolean isNewTriple() { + return newTriple; } - public void setMarkedForReasoning(boolean markedForReasoning) { - this.markedForReasoning = markedForReasoning; + public void setNewTriple(boolean newTriple) { + this.newTriple = newTriple; } } http://git-wip-us.apache.org/repos/asf/marmotta/blob/4de163b4/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/persistence/KiWiConnection.java ---------------------------------------------------------------------- diff --git a/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/persistence/KiWiConnection.java b/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/persistence/KiWiConnection.java index b26c493..36dd591 100644 --- a/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/persistence/KiWiConnection.java +++ b/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/persistence/KiWiConnection.java @@ -1047,15 +1047,17 @@ public class KiWiConnection { * @throws NullPointerException in case the subject, predicate, object or context have not been persisted * @return true in case the update added a new triple to the database, false in case the triple already existed */ - public synchronized boolean storeTriple(final KiWiTriple triple) throws SQLException { + public synchronized void storeTriple(final KiWiTriple triple) throws SQLException { // mutual exclusion: prevent parallel adding and removing of the same triple synchronized (triple) { requireJDBCConnection(); - boolean hasId = triple.getId() >= 0; + if(triple.getId() < 0) { + triple.setId(getNextSequence("seq.triples")); + } - if(hasId && deletedStatementsLog.contains(triple.getId())) { + if(deletedStatementsLog.contains(triple.getId())) { // this is a hack for a concurrency problem that may occur in case the triple is removed in the // transaction and then added again; in these cases the createStatement method might return // an expired state of the triple because it uses its own database connection @@ -1063,12 +1065,7 @@ public class KiWiConnection { //deletedStatementsLog.remove(triple.getId()); undeleteTriple(triple); - return true; } else { - // retrieve a new triple ID and set it in the object - if(triple.getId() < 0) { - triple.setId(getNextSequence("seq.triples")); - } if(batchCommit) { commitLock.lock(); @@ -1081,7 +1078,6 @@ public class KiWiConnection { } finally { commitLock.unlock(); } - return !hasId; } else { Preconditions.checkNotNull(triple.getSubject().getId()); Preconditions.checkNotNull(triple.getPredicate().getId()); @@ -1114,8 +1110,6 @@ public class KiWiConnection { } }); - return !hasId; - } catch(SQLException ex) { if("HYT00".equals(ex.getSQLState())) { // H2 table locking timeout throw new ConcurrentModificationException("the same triple was modified in concurrent transactions (triple="+triple+")"); @@ -2150,15 +2144,6 @@ public class KiWiConnection { synchronized (tripleBatch) { for(KiWiTriple triple : tripleBatch) { - // if the triple has been marked as deleted, this can only have been done by another connection - // in this case the triple id is no longer usable (might result in key conflicts), so we set it to - // a new id - if(triple.isDeleted()) { - triple.setId(getNextSequence("seq.triples")); - triple.setDeleted(false); - triple.setDeletedAt(null); - } - // retrieve a new triple ID and set it in the object if(triple.getId() < 0) { triple.setId(getNextSequence("seq.triples")); http://git-wip-us.apache.org/repos/asf/marmotta/blob/4de163b4/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/persistence/KiWiTripleRegistry.java ---------------------------------------------------------------------- diff --git a/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/persistence/KiWiTripleRegistry.java b/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/persistence/KiWiTripleRegistry.java index 72bfcb4..dfdee6b 100644 --- a/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/persistence/KiWiTripleRegistry.java +++ b/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/persistence/KiWiTripleRegistry.java @@ -135,7 +135,7 @@ public class KiWiTripleRegistry { protected void releaseConnection(KiWiConnection con) { try { - con.commit(); + con.getJDBCConnection().commit(); con.close(); } catch (SQLException ex) { log.error("could not release database connection", ex); http://git-wip-us.apache.org/repos/asf/marmotta/blob/4de163b4/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/sail/KiWiSailConnection.java ---------------------------------------------------------------------- diff --git a/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/sail/KiWiSailConnection.java b/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/sail/KiWiSailConnection.java index a8b4aea..23bc680 100644 --- a/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/sail/KiWiSailConnection.java +++ b/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/sail/KiWiSailConnection.java @@ -160,7 +160,8 @@ public class KiWiSailConnection extends NotifyingSailConnectionBase implements I KiWiTriple triple = (KiWiTriple)valueFactory.createStatement(ksubj,kpred,kobj,kcontext, databaseConnection); triple.setInferred(inferred); - if(databaseConnection.storeTriple(triple)) { + databaseConnection.storeTriple(triple); + if(triple.isNewTriple()) { triplesAdded = true; notifyStatementAdded(triple); } http://git-wip-us.apache.org/repos/asf/marmotta/blob/4de163b4/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/sail/KiWiValueFactory.java ---------------------------------------------------------------------- diff --git a/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/sail/KiWiValueFactory.java b/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/sail/KiWiValueFactory.java index dfaff47..495e953 100644 --- a/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/sail/KiWiValueFactory.java +++ b/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/sail/KiWiValueFactory.java @@ -104,7 +104,7 @@ public class KiWiValueFactory implements ValueFactory { protected void releaseConnection(KiWiConnection con) { try { - con.commit(); + con.getJDBCConnection().commit(); con.close(); } catch (SQLException ex) { log.error("could not release database connection", ex); @@ -635,7 +635,7 @@ public class KiWiValueFactory implements ValueFactory { // triple has no id from registry or database, so we create one and flag it for reasoning if(result.getId() < 0) { result.setId(connection.getNextSequence("seq.triples")); - result.setMarkedForReasoning(true); + result.setNewTriple(true); registry.registerKey(cacheKey, connection.getTransactionId(), result.getId()); } http://git-wip-us.apache.org/repos/asf/marmotta/blob/4de163b4/libraries/kiwi/kiwi-triplestore/src/test/java/org/apache/marmotta/kiwi/test/PersistenceTest.java ---------------------------------------------------------------------- diff --git a/libraries/kiwi/kiwi-triplestore/src/test/java/org/apache/marmotta/kiwi/test/PersistenceTest.java b/libraries/kiwi/kiwi-triplestore/src/test/java/org/apache/marmotta/kiwi/test/PersistenceTest.java index e2144bd..70bcaf3 100644 --- a/libraries/kiwi/kiwi-triplestore/src/test/java/org/apache/marmotta/kiwi/test/PersistenceTest.java +++ b/libraries/kiwi/kiwi-triplestore/src/test/java/org/apache/marmotta/kiwi/test/PersistenceTest.java @@ -84,7 +84,7 @@ public class PersistenceTest { KiWiConnection connection = persistence.getConnection(); try { Assert.assertThat(connection.getDatabaseTables(),hasItems("nodes","triples","namespaces")); - Assert.assertEquals(2, connection.getDatabaseVersion()); + Assert.assertEquals(3, connection.getDatabaseVersion()); connection.commit(); } finally {
