Class InMemoryConsensusNetwork

java.lang.Object
org.j7m.middleware.consensus.InMemoryConsensusNetwork

public final class InMemoryConsensusNetwork extends Object
Deterministic in-process network for consensus simulation.
  • Constructor Details

    • InMemoryConsensusNetwork

      public InMemoryConsensusNetwork()
      Creates a network.
    • InMemoryConsensusNetwork

      public InMemoryConsensusNetwork(int pendingMessageLimit)
      Creates a network with an explicit hard cap for pending messages.
      Parameters:
      pendingMessageLimit - maximum number of queued messages
  • Method Details

    • send

      public void send(ConsensusMessage message)
      Sends a message subject to deterministic drop/duplicate/partition rules.
      Parameters:
      message - message
    • sendAll

      public void sendAll(List<ConsensusMessage> outgoing)
      Sends all messages.
      Parameters:
      outgoing - outgoing messages
    • poll

      public ConsensusMessage poll()
      Polls next message.
      Returns:
      next message or null
    • hasMessages

      public boolean hasMessages()
      Returns true when messages are pending.
      Returns:
      true when pending
    • dropNext

      public void dropNext()
      Drops the next sent message.
    • duplicateNext

      public void duplicateNext()
      Duplicates the next sent message.
    • reorderPending

      public void reorderPending()
      Reorders the pending queue by moving the last message to the front.
    • partition

      public void partition(Set<org.j7m.middleware.api.consensus.ConsensusNodeId> majority, Set<org.j7m.middleware.api.consensus.ConsensusNodeId> minority)
      Partitions nodes into majority and minority components.
      Parameters:
      majority - majority ids
      minority - minority ids
    • heal

      public void heal()
      Clears all partitions.
    • purgeDisconnectedMessages

      public void purgeDisconnectedMessages()
      Drops messages currently queued across partitions.
    • sent

      public long sent()
      Returns sent count.
      Returns:
      count
    • dropped

      public long dropped()
      Returns dropped count.
      Returns:
      count
    • duplicated

      public long duplicated()
      Returns duplicated count.
      Returns:
      count
    • reordered

      public long reordered()
      Returns reordered count.
      Returns:
      count
    • partitionedNodes

      public Set<org.j7m.middleware.api.consensus.ConsensusNodeId> partitionedNodes()
      Returns nodes currently in isolated partitions.
      Returns:
      partitioned node ids