Skip to content

Commit

Permalink
Removes transaction batching during recovery
Browse files Browse the repository at this point in the history
Since there's no performance gain in it. The main reason to batch transactions
would be to get an indexing refresh piggy-backing. Recovery doesn't suffer
from this problem anyway.

This results in lower memory usage (not less churn) during recovery.
  • Loading branch information
tinwelint committed Dec 12, 2017
1 parent 40d5612 commit 22a8490
Showing 1 changed file with 9 additions and 10 deletions.
Expand Up @@ -24,7 +24,6 @@
import org.neo4j.helpers.collection.Visitor;
import org.neo4j.io.fs.FileSystemAbstraction;
import org.neo4j.io.pagecache.IOLimiter;
import org.neo4j.kernel.impl.api.TransactionQueue;
import org.neo4j.kernel.impl.api.TransactionToApply;
import org.neo4j.kernel.impl.transaction.CommittedTransactionRepresentation;
import org.neo4j.kernel.impl.transaction.TransactionRepresentation;
Expand All @@ -36,6 +35,7 @@
import org.neo4j.kernel.impl.transaction.log.TransactionIdStore;
import org.neo4j.kernel.impl.transaction.log.entry.LogEntryStart;
import org.neo4j.storageengine.api.StorageEngine;
import org.neo4j.storageengine.api.TransactionApplicationMode;

import static org.neo4j.kernel.impl.transaction.log.Commitment.NO_COMMITMENT;
import static org.neo4j.storageengine.api.TransactionApplicationMode.RECOVERY;
Expand All @@ -50,7 +50,6 @@ public class DefaultRecoverySPI implements Recovery.SPI
private final TransactionIdStore transactionIdStore;
private final LogicalTransactionStore logicalTransactionStore;
private Visitor<CommittedTransactionRepresentation,Exception> recoveryVisitor;
private TransactionQueue transactionsToApply;

public DefaultRecoverySPI(
StorageEngine storageEngine,
Expand Down Expand Up @@ -91,9 +90,7 @@ public Visitor<CommittedTransactionRepresentation,Exception> startRecovery()
// Go and read more at {@link CommonAbstractStore#deleteIdGenerator()}
storageEngine.prepareForRecoveryRequired();

transactionsToApply = new TransactionQueue( 100, (first,last) -> storageEngine.apply( first, RECOVERY ) );
recoveryVisitor = new RecoveryVisitor( transactionsToApply );

recoveryVisitor = new RecoveryVisitor( storageEngine, RECOVERY );
return recoveryVisitor;
}

Expand All @@ -109,7 +106,6 @@ public void allTransactionsRecovered( CommittedTransactionRepresentation lastRec
{
if ( lastRecoveredTransaction != null )
{
transactionsToApply.empty();
transactionIdStore.setLastCommittedAndClosedTransactionId(
lastRecoveredTransaction.getCommitEntry().getTxId(),
LogEntryStart.checksum( lastRecoveredTransaction.getStartEntry() ),
Expand All @@ -124,11 +120,13 @@ public void allTransactionsRecovered( CommittedTransactionRepresentation lastRec

static class RecoveryVisitor implements Visitor<CommittedTransactionRepresentation,Exception>
{
private final TransactionQueue transactionsToApply;
private final StorageEngine storageEngine;
private final TransactionApplicationMode mode;

RecoveryVisitor( TransactionQueue transactionsToApply )
RecoveryVisitor( StorageEngine storageEngine, TransactionApplicationMode mode )
{
this.transactionsToApply = transactionsToApply;
this.storageEngine = storageEngine;
this.mode = mode;
}

@Override
Expand All @@ -139,7 +137,8 @@ public boolean visit( CommittedTransactionRepresentation transaction ) throws Ex
TransactionToApply tx = new TransactionToApply( txRepresentation, txId );
tx.commitment( NO_COMMITMENT, txId );
tx.logPosition( transaction.getStartEntry().getStartPosition() );
transactionsToApply.queue( tx );
storageEngine.apply( tx, mode );

return false;
}
}
Expand Down

0 comments on commit 22a8490

Please sign in to comment.