//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#: //ORIGINAL LINE: public org.neo4j.causalclustering.core.consensus.log.RaftLogEntry get(long logIndex) throws java.io.IOException public virtual RaftLogEntry Get(long logIndex) { RaftLogEntry entry = null; if (_useCache) { entry = _inFlightCache.get(logIndex); } if (entry == null) { /* * N.B. * This fallback code is strictly necessary since getUsingCursor() requires * that entries are accessed in strictly increasing order using a single cursor. */ _useCache = false; entry = GetUsingCursor(logIndex); } if (_pruneAfterRead) { _inFlightCache.prune(logIndex); } return(entry); }
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes: //ORIGINAL LINE: @Test public void shouldEncodeAndDecodeAppendEntriesRequest() public virtual void ShouldEncodeAndDecodeAppendEntriesRequest() { // given MemberId member = new MemberId(System.Guid.randomUUID()); RaftLogEntry logEntry = new RaftLogEntry(1, ReplicatedInteger.valueOf(1)); Org.Neo4j.causalclustering.core.consensus.RaftMessages_AppendEntries_Request request = new Org.Neo4j.causalclustering.core.consensus.RaftMessages_AppendEntries_Request(member, 1, 1, 99, new RaftLogEntry[] { logEntry }, 1); // when _channel.writeOutbound(request); object message = _channel.readOutbound(); _channel.writeInbound(message); // then assertEquals(request, _channel.readInbound()); }
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#: //ORIGINAL LINE: private void raftMessageEquals(org.neo4j.causalclustering.core.consensus.RaftMessages_RaftMessage raftMessage, org.neo4j.causalclustering.core.consensus.RaftMessages_RaftMessage message) throws Exception private void RaftMessageEquals(Org.Neo4j.causalclustering.core.consensus.RaftMessages_RaftMessage raftMessage, Org.Neo4j.causalclustering.core.consensus.RaftMessages_RaftMessage message) { if (raftMessage is Org.Neo4j.causalclustering.core.consensus.RaftMessages_NewEntry_Request) { assertEquals(message.From(), raftMessage.From()); assertEquals(message.Type(), raftMessage.Type()); ContentEquals(((Org.Neo4j.causalclustering.core.consensus.RaftMessages_NewEntry_Request)raftMessage).Content(), ((Org.Neo4j.causalclustering.core.consensus.RaftMessages_NewEntry_Request)raftMessage).Content()); } else if (raftMessage is Org.Neo4j.causalclustering.core.consensus.RaftMessages_AppendEntries_Request) { assertEquals(message.From(), raftMessage.From()); assertEquals(message.Type(), raftMessage.Type()); RaftLogEntry[] entries1 = ((Org.Neo4j.causalclustering.core.consensus.RaftMessages_AppendEntries_Request)raftMessage).Entries(); RaftLogEntry[] entries2 = ((Org.Neo4j.causalclustering.core.consensus.RaftMessages_AppendEntries_Request)message).Entries(); for (int i = 0; i < entries1.Length; i++) { RaftLogEntry raftLogEntry1 = entries1[i]; RaftLogEntry raftLogEntry2 = entries2[i]; assertEquals(raftLogEntry1.Term(), raftLogEntry2.Term()); ContentEquals(raftLogEntry1.Content(), raftLogEntry2.Content()); } } }
private void SendRange(long startIndex, long endIndex, LeaderContext leaderContext) { if (startIndex > endIndex) { return; } _lastSentIndex = endIndex; try { int batchSize = ( int )(endIndex - startIndex + 1); RaftLogEntry[] entries = new RaftLogEntry[batchSize]; long prevLogIndex = startIndex - 1; long prevLogTerm = _raftLog.readEntryTerm(prevLogIndex); if (prevLogTerm > leaderContext.Term) { _log.warn("%s aborting send. Not leader anymore? %s, prevLogTerm=%d", StatusAsString(), leaderContext, prevLogTerm); return; } bool entryMissing = false; using (InFlightLogEntryReader logEntrySupplier = new InFlightLogEntryReader(_raftLog, _inFlightCache, false)) { for (int offset = 0; offset < batchSize; offset++) { entries[offset] = logEntrySupplier.Get(startIndex + offset); if (entries[offset] == null) { entryMissing = true; break; } if (entries[offset].Term() > leaderContext.Term) { _log.warn("%s aborting send. Not leader anymore? %s, entryTerm=%d", StatusAsString(), leaderContext, entries[offset].Term()); return; } } } if (entryMissing || DoesNotExistInLog(prevLogIndex, prevLogTerm)) { if (_raftLog.prevIndex() >= prevLogIndex) { SendLogCompactionInfo(leaderContext); } else { _log.error("%s: Could not send compaction info and entries were missing, but log is not behind.", StatusAsString()); } } else { Org.Neo4j.causalclustering.core.consensus.RaftMessages_AppendEntries_Request appendRequest = new Org.Neo4j.causalclustering.core.consensus.RaftMessages_AppendEntries_Request(_leader, leaderContext.Term, prevLogIndex, prevLogTerm, entries, leaderContext.CommitIndex); _outbound.send(_follower, appendRequest); } } catch (IOException e) { _log.warn(StatusAsString() + " exception during batch send", e); } }
public AppendLogEntry(long index, RaftLogEntry entry) { this.Index = index; this.Entry = entry; }