Class ConsensusSimulation

java.lang.Object
org.j7m.middleware.consensus.ConsensusSimulation
All Implemented Interfaces:
AutoCloseable

public final class ConsensusSimulation extends Object implements AutoCloseable
Deterministic local consensus simulation harness.
  • Constructor Summary

    Constructors
    Constructor
    Description
    Creates a simulation.
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    org.j7m.middleware.api.consensus.ConsensusConfiguration
    Returns fixed configuration.
    void
    crash(org.j7m.middleware.api.consensus.ConsensusNodeId nodeId)
    Crashes a node.
    Returns current leader.
    org.j7m.middleware.api.consensus.ConsensusNodeId
    Returns current leader id.
    void
    Delivers all pending messages.
    void
    Drops next sent message.
    void
    Duplicates next sent message.
    org.j7m.middleware.api.consensus.ConsensusState
    elect(org.j7m.middleware.api.consensus.ConsensusNodeId nodeId)
    Starts an election.
    void
    Heals network partition.
    void
    Records stale leader rejection as observed by a scenario.
    node(org.j7m.middleware.api.consensus.ConsensusNodeId nodeId)
    Returns a node.
    Returns all nodes.
    void
    partition(Set<org.j7m.middleware.api.consensus.ConsensusNodeId> majority, Set<org.j7m.middleware.api.consensus.ConsensusNodeId> minority)
    Partitions the network.
    void
    Queues current leader replication messages without delivering them.
    void
    Reorders pending messages.
    void
    restart(org.j7m.middleware.api.consensus.ConsensusNodeId nodeId)
    Restarts a node from durable state.
    org.j7m.middleware.api.consensus.ConsensusSafetyReport
    Runs safety checks.
    org.j7m.middleware.api.consensus.ConsensusSimulationReport
    Returns deterministic simulation report.
    org.j7m.middleware.api.consensus.ConsensusStatus
    Returns status.
    org.j7m.middleware.api.consensus.ConsensusCommandResult
    submit(org.j7m.middleware.api.consensus.ConsensusCommand command)
    Submits a command to the current leader.
    org.j7m.middleware.api.consensus.ConsensusCommandResult
    submitTo(org.j7m.middleware.api.consensus.ConsensusNodeId nodeId, org.j7m.middleware.api.consensus.ConsensusCommand command)
    Submits a command to a specific node.
    threeNode(Path root, long seed)
    Creates a three-node simulation.

    Methods inherited from class Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • ConsensusSimulation

      public ConsensusSimulation(ConsensusConfig config, long seed)
      Creates a simulation.
      Parameters:
      config - configuration
      seed - deterministic seed
  • Method Details

    • threeNode

      public static ConsensusSimulation threeNode(Path root, long seed)
      Creates a three-node simulation.
      Parameters:
      root - storage root
      seed - deterministic seed
      Returns:
      simulation
    • elect

      public org.j7m.middleware.api.consensus.ConsensusState elect(org.j7m.middleware.api.consensus.ConsensusNodeId nodeId)
      Starts an election.
      Parameters:
      nodeId - candidate
      Returns:
      candidate state after delivery
    • submit

      public org.j7m.middleware.api.consensus.ConsensusCommandResult submit(org.j7m.middleware.api.consensus.ConsensusCommand command)
      Submits a command to the current leader.
      Parameters:
      command - command
      Returns:
      result
    • submitTo

      public org.j7m.middleware.api.consensus.ConsensusCommandResult submitTo(org.j7m.middleware.api.consensus.ConsensusNodeId nodeId, org.j7m.middleware.api.consensus.ConsensusCommand command)
      Submits a command to a specific node.
      Parameters:
      nodeId - node id
      command - command
      Returns:
      result
    • dropNextMessage

      public void dropNextMessage()
      Drops next sent message.
    • duplicateNextMessage

      public void duplicateNextMessage()
      Duplicates next sent message.
    • reorderPendingMessages

      public void reorderPendingMessages()
      Reorders pending messages.
    • queueLeaderReplication

      public void queueLeaderReplication()
      Queues current leader replication messages without delivering them.
    • partition

      public void partition(Set<org.j7m.middleware.api.consensus.ConsensusNodeId> majority, Set<org.j7m.middleware.api.consensus.ConsensusNodeId> minority)
      Partitions the network.
      Parameters:
      majority - majority set
      minority - minority set
    • heal

      public void heal()
      Heals network partition.
    • crash

      public void crash(org.j7m.middleware.api.consensus.ConsensusNodeId nodeId)
      Crashes a node.
      Parameters:
      nodeId - node id
    • restart

      public void restart(org.j7m.middleware.api.consensus.ConsensusNodeId nodeId)
      Restarts a node from durable state.
      Parameters:
      nodeId - node id
    • deliverAll

      public void deliverAll()
      Delivers all pending messages.
    • currentLeader

      public ConsensusNode currentLeader()
      Returns current leader.
      Returns:
      leader or null
    • currentLeaderId

      public org.j7m.middleware.api.consensus.ConsensusNodeId currentLeaderId()
      Returns current leader id.
      Returns:
      leader id or null
    • node

      public ConsensusNode node(org.j7m.middleware.api.consensus.ConsensusNodeId nodeId)
      Returns a node.
      Parameters:
      nodeId - node id
      Returns:
      node
    • nodes

      public List<ConsensusNode> nodes()
      Returns all nodes.
      Returns:
      nodes
    • status

      public org.j7m.middleware.api.consensus.ConsensusStatus status()
      Returns status.
      Returns:
      status
    • safetyReport

      public org.j7m.middleware.api.consensus.ConsensusSafetyReport safetyReport()
      Runs safety checks.
      Returns:
      safety report
    • simulationReport

      public org.j7m.middleware.api.consensus.ConsensusSimulationReport simulationReport()
      Returns deterministic simulation report.
      Returns:
      simulation report
    • markStaleLeaderRejectionObserved

      public void markStaleLeaderRejectionObserved()
      Records stale leader rejection as observed by a scenario.
    • configuration

      public org.j7m.middleware.api.consensus.ConsensusConfiguration configuration()
      Returns fixed configuration.
      Returns:
      configuration
    • close

      public void close()
      Specified by:
      close in interface AutoCloseable