diff --git a/community/kernel/src/main/java/org/neo4j/kernel/api/txstate/TxStateVisitor.java b/community/kernel/src/main/java/org/neo4j/kernel/api/txstate/TxStateVisitor.java index fa48c8fa71aa3..ba0b4fabba532 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/api/txstate/TxStateVisitor.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/api/txstate/TxStateVisitor.java @@ -36,7 +36,7 @@ /** * A visitor for visiting the changes that have been made in a transaction. */ -public interface TxStateVisitor +public interface TxStateVisitor extends AutoCloseable { void visitCreatedNode( long id ); @@ -94,10 +94,8 @@ void visitAddedRelationshipPropertyExistenceConstraint( RelationshipPropertyExis void visitDroppedProcedure( ProcedureDescriptor procedureDescriptor ); - /** - * Must be called Called after all visitor methods, i.e. all changes have been visited. - */ - void done(); + @Override + void close(); class Adapter implements TxStateVisitor { @@ -233,7 +231,7 @@ public void visitDroppedProcedure( ProcedureDescriptor procedureDescriptor ) } @Override - public void done() + public void close() { } } @@ -406,9 +404,9 @@ public void visitDroppedProcedure( ProcedureDescriptor procedureDescriptor ) } @Override - public void done() + public void close() { - actual.done(); + actual.close(); } } } diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/TransactionRepresentationCommitProcess.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/TransactionRepresentationCommitProcess.java index b10e02104a1bb..32662d66959b7 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/TransactionRepresentationCommitProcess.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/TransactionRepresentationCommitProcess.java @@ -148,7 +148,7 @@ private void close( TransactionToApply batch ) { if ( batch.commitment().markedAsCommitted() ) { - batch.commitment().publishAsApplied(); + batch.commitment().publishAsClosed(); } batch = batch.next(); } diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/storageengine/StorageEngine.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/storageengine/StorageEngine.java index ff7016a3159e6..71c52d3452c58 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/storageengine/StorageEngine.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/storageengine/StorageEngine.java @@ -104,7 +104,7 @@ Collection createCommands( /** * Apply a batch of transactions to this storage. Transactions are applied to storage after being committed, * i.e. appended to a log by {@link TransactionAppender}. Implementations should NOT - * {@link Commitment#publishAsApplied() mark transactions as applied}, instead caller is expected to do that. + * {@link Commitment#publishAsClosed() mark transactions as applied}, instead caller is expected to do that. * Caller is typically {@link TransactionCommitProcess}. * * @param batch batch of transactions to apply to storage. diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/storageengine/impl/recordstorage/RecordStorageEngine.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/storageengine/impl/recordstorage/RecordStorageEngine.java index fe1fb2bc92535..e92a07b070a8a 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/storageengine/impl/recordstorage/RecordStorageEngine.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/storageengine/impl/recordstorage/RecordStorageEngine.java @@ -230,6 +230,7 @@ public StoreReadLayer storeReadLayer() return storeLayer; } + @SuppressWarnings( "resource" ) @Override public Collection createCommands( TransactionState txState, @@ -267,8 +268,10 @@ public Collection createCommands( txStateVisitor ); txStateVisitor = new TransactionCountingStateVisitor( txStateVisitor, storeLayer, txState, countsRecordState ); - txState.accept( txStateVisitor ); - txStateVisitor.done(); + try ( TxStateVisitor visitor = txStateVisitor ) + { + txState.accept( txStateVisitor ); + } // Convert record state into commands recordState.extractCommands( commands ); diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/storageengine/impl/recordstorage/TransactionToRecordStateVisitor.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/storageengine/impl/recordstorage/TransactionToRecordStateVisitor.java index e5960d48562f5..400a6fffd7e57 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/storageengine/impl/recordstorage/TransactionToRecordStateVisitor.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/storageengine/impl/recordstorage/TransactionToRecordStateVisitor.java @@ -72,7 +72,7 @@ public TransactionToRecordStateVisitor( TransactionRecordState recordState, Runn } @Override - public void done() + public void close() { try { diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/transaction/log/Commitment.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/transaction/log/Commitment.java index 157d3a5231520..eb84214807f4d 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/transaction/log/Commitment.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/transaction/log/Commitment.java @@ -19,14 +19,15 @@ */ package org.neo4j.kernel.impl.transaction.log; +import org.neo4j.kernel.impl.api.TransactionCommitProcess; +import org.neo4j.kernel.impl.api.TransactionToApply; +import org.neo4j.kernel.impl.transaction.tracing.LogAppendEvent; /** - * A way to mark a transaction as committed after - * {@link TransactionAppender#append(org.neo4j.kernel.impl.transaction.TransactionRepresentation, long) appended} - * and manually {@link TransactionAppender#force() forced} and later closed after - * {@link org.neo4j.kernel.impl.api.TransactionRepresentationStoreApplier#apply( - * org.neo4j.kernel.impl.transaction.TransactionRepresentation, org.neo4j.kernel.impl.api.index.ValidatedIndexUpdates, - * org.neo4j.kernel.impl.locking.LockGroup, long, org.neo4j.kernel.impl.api.TransactionApplicationMode)} . + * Represents a commitment that invoking {@link TransactionAppender#append(TransactionToApply, LogAppendEvent)} + * means. As a transaction is carried through the {@link TransactionCommitProcess} this commitment is updated + * when {@link #publishAsCommitted() committed} (which happens when appending to log), but also + * when {@link #publishAsClosed() closing}. */ public interface Commitment { @@ -38,7 +39,7 @@ public void publishAsCommitted() } @Override - public void publishAsApplied() + public void publishAsClosed() { } @@ -56,20 +57,22 @@ public boolean hasLegacyIndexChanges() }; /** - *

- * Marks the transaction as committed and makes this fact public. - *

+ * Marks the transaction as committed and makes this fact public. */ void publishAsCommitted(); /** - *

- * Marks the transaction as closed and makes this fact public. - *

+ * Marks the transaction as closed and makes this fact public. */ - void publishAsApplied(); + void publishAsClosed(); + /** + * @return whether or not {@link #publishAsCommitted()} have been called. + */ boolean markedAsCommitted(); + /** + * @return whether or not this transaction contains legacy index changes. + */ boolean hasLegacyIndexChanges(); } diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/transaction/log/TransactionAppender.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/transaction/log/TransactionAppender.java index af761af854519..617e253accac7 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/transaction/log/TransactionAppender.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/transaction/log/TransactionAppender.java @@ -39,7 +39,7 @@ public interface TransactionAppender * * Any failure happening inside this method will cause a {@link KernelHealth#panic(Throwable) kernel panic}. * Callers must make sure that successfully appended - * transactions exiting this method are {@link Commitment#publishAsApplied()}}. + * transactions exiting this method are {@link Commitment#publishAsClosed()}}. * * @param batch transactions to append to the log. These transaction instances provide both input arguments * as well as a place to provide output data, namely {@link TransactionToApply#commitment()} and @@ -47,7 +47,7 @@ public interface TransactionAppender * @param logAppendEvent A trace event for the given log append operation. * @return last committed transaction in this batch. The appended (i.e. committed) transactions * will have had their {@link TransactionToApply#commitment()} available and caller is expected to - * {@link Commitment#publishAsApplied() mark them as applied} after they have been applied to storage. + * {@link Commitment#publishAsClosed() mark them as applied} after they have been applied to storage. * Note that {@link Commitment commitments} must be {@link Commitment#publishAsCommitted() marked as committed} * by this method. * @throws IOException if there was a problem appending the transaction. See method javadoc body for diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/transaction/log/TransactionCommitment.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/transaction/log/TransactionCommitment.java index eda74bee5615c..aecfb807d0183 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/transaction/log/TransactionCommitment.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/transaction/log/TransactionCommitment.java @@ -46,7 +46,7 @@ public void publishAsCommitted() } @Override - public void publishAsApplied() + public void publishAsClosed() { transactionIdStore.transactionClosed( transactionId, logPosition.getLogVersion(), logPosition.getByteOffset() ); diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/transaction/log/TransactionIdStore.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/transaction/log/TransactionIdStore.java index 67b67934e1279..8562d78318c52 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/transaction/log/TransactionIdStore.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/transaction/log/TransactionIdStore.java @@ -73,12 +73,16 @@ public interface TransactionIdStore /** * Returns transaction information about the highest committed transaction, i.e. * transaction id as well as checksum. + * + * @return {@link TransactionId} describing the last (i.e. highest) committed transaction. */ TransactionId getLastCommittedTransaction(); /** * Returns transaction information about transaction where the last upgrade was performed, i.e. * transaction id as well as checksum. + * + * @return {@link TransactionId} describing the most recent upgrade transaction. */ TransactionId getUpgradeTransaction(); @@ -90,6 +94,13 @@ public interface TransactionIdStore /** * Returns transaction information about the last committed transaction, i.e. * transaction id as well as the log position following the commit entry in the transaction log. + * + * @return transaction information about the last closed (highest gap-free) transaction. + *
+     * [0]: transaction id
+     * [1]: log version
+     * [2]: byte offset into that log version
+     * 
*/ long[] getLastClosedTransaction(); diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/transaction/log/FakeCommitment.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/transaction/log/FakeCommitment.java index 734ddc936e0fe..4f01354192540 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/transaction/log/FakeCommitment.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/transaction/log/FakeCommitment.java @@ -46,7 +46,7 @@ public void publishAsCommitted() } @Override - public void publishAsApplied() + public void publishAsClosed() { transactionIdStore.transactionClosed( id, 1, 2 ); } diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/transaction/log/StubbedCommitment.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/transaction/log/StubbedCommitment.java index ef7373faa51bc..f879f9e3ed42c 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/transaction/log/StubbedCommitment.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/transaction/log/StubbedCommitment.java @@ -36,7 +36,7 @@ public boolean markedAsCommitted() } @Override - public void publishAsApplied() + public void publishAsClosed() { }