private static TransactionToApply Tx(ICollection <StorageCommand> commands) { TransactionToApply tx = new TransactionToApply(transactionRepresentation(commands)); tx.Commitment(NO_COMMITMENT, 0); return(tx); }
private void PublishAsCommitted(TransactionToApply batch) { while (batch != null) { batch.Commitment().publishAsCommitted(); batch = batch.Next(); } }
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#: //ORIGINAL LINE: public long append(org.neo4j.kernel.impl.api.TransactionToApply batch, org.neo4j.kernel.impl.transaction.tracing.LogAppendEvent logAppendEvent) throws java.io.IOException public override long Append(TransactionToApply batch, LogAppendEvent logAppendEvent) { // Assigned base tx id just to make compiler happy long lastTransactionId = TransactionIdStore_Fields.BASE_TX_ID; // Synchronized with logFile to get absolute control over concurrent rotations happening lock ( _logFile ) { // Assert that kernel is healthy before making any changes _databaseHealth.assertHealthy(typeof(IOException)); using (SerializeTransactionEvent serialiseEvent = logAppendEvent.BeginSerializeTransaction()) { // Append all transactions in this batch to the log under the same logFile monitor TransactionToApply tx = batch; while (tx != null) { long transactionId = _transactionIdStore.nextCommittingTransactionId(); // If we're in a scenario where we're merely replicating transactions, i.e. transaction // id have already been generated by another entity we simply check that our id // that we generated match that id. If it doesn't we've run into a problem we can't ´ // really recover from and would point to a bug somewhere. MatchAgainstExpectedTransactionIdIfAny(transactionId, tx); TransactionCommitment commitment = AppendToLog(tx.TransactionRepresentation(), transactionId); tx.Commitment(commitment, transactionId); tx.LogPosition(commitment.LogPosition()); tx = tx.Next(); lastTransactionId = transactionId; } } } // At this point we've appended all transactions in this batch, but we can't mark any of them // as committed since they haven't been forced to disk yet. So here we force, or potentially // piggy-back on another force, but anyway after this call below we can be sure that all our transactions // in this batch exist durably on disk. if (ForceAfterAppend(logAppendEvent)) { // We got lucky and were the one forcing the log. It's enough if ones of all doing concurrent committers // checks the need for log rotation. bool logRotated = _logRotation.rotateLogIfNeeded(logAppendEvent); logAppendEvent.LogRotated = logRotated; } // Mark all transactions as committed PublishAsCommitted(batch); return(lastTransactionId); }
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#: //ORIGINAL LINE: private static org.neo4j.kernel.impl.api.TransactionToApply newTransactionThatFailsWith(Exception error) throws java.io.IOException private static TransactionToApply NewTransactionThatFailsWith(Exception error) { TransactionRepresentation transaction = mock(typeof(TransactionRepresentation)); when(transaction.AdditionalHeader()).thenReturn(new sbyte[0]); // allow to build validated index updates but fail on actual tx application doThrow(error).when(transaction).accept(any()); long txId = ThreadLocalRandom.current().nextLong(0, 1000); TransactionToApply txToApply = new TransactionToApply(transaction); FakeCommitment commitment = new FakeCommitment(txId, mock(typeof(TransactionIdStore))); commitment.HasExplicitIndexChanges = false; txToApply.Commitment(commitment, txId); return(txToApply); }