Class ReteContainer

java.lang.Object
tools.refinery.interpreter.rete.network.ReteContainer

public final class ReteContainer extends Object
Since:
2.2
  • Field Details

    • consumerThread

      protected Thread consumerThread
    • killed

      protected boolean killed
    • network

      protected Network network
    • clearables

      protected LinkedList<Clearable> clearables
    • nodesById

      protected Map<Long,Node> nodesById
    • nextId

      protected long nextId
    • connectionFactory

      protected tools.refinery.interpreter.rete.network.ConnectionFactory connectionFactory
    • nodeProvisioner

      protected NodeProvisioner nodeProvisioner
    • internalMessageQueue

      protected Deque<tools.refinery.interpreter.rete.network.UpdateMessage> internalMessageQueue
    • externalMessageQueue

      protected Deque<tools.refinery.interpreter.rete.network.UpdateMessage> externalMessageQueue
    • externalMessageLock

      protected Object externalMessageLock
    • clock

      protected Long clock
    • terminationCriteria

      protected Map<ReteContainer,Long> terminationCriteria
    • logger

      protected final org.apache.log4j.Logger logger
    • tracker

      protected final CommunicationTracker tracker
    • backendContext

      protected final IQueryBackendContext backendContext
    • delayedCommandQueue

      protected Set<DelayedCommand> delayedCommandQueue
    • delayedCommandBuffer

      protected Set<DelayedCommand> delayedCommandBuffer
    • executingDelayedCommands

      protected boolean executingDelayedCommands
    • timelyConfiguration

      protected final TimelyConfiguration timelyConfiguration
    • NAME_MAPPER

      public static final Function<Node,String> NAME_MAPPER
      Since:
      1.6
  • Constructor Details

    • ReteContainer

      public ReteContainer(Network network, boolean threaded)
      Parameters:
      threaded - false if operating in a single-threaded environment
  • Method Details

    • isTimelyEvaluation

      public boolean isTimelyEvaluation()
      Since:
      2.4
    • getTimelyConfiguration

      public TimelyConfiguration getTimelyConfiguration()
      Since:
      2.4
    • getCommunicationTracker

      public CommunicationTracker getCommunicationTracker()
      Returns:
      the communication graph of the nodes, incl. message scheduling
      Since:
      1.6
    • kill

      public void kill()
      Stops this container. To be called by Network.kill()
    • connectRemoteNodes

      public void connectRemoteNodes(Address<? extends Supplier> supplier, Address<? extends Receiver> receiver, boolean synchronise)
      Establishes connection between a supplier and a receiver node, regardless which container they are in. Assumption is that this container is the home of the receiver, but it is not strictly necessary.
      Parameters:
      synchronise - indicates whether the receiver should be synchronised to the current contents of the supplier
    • disconnectRemoteNodes

      public void disconnectRemoteNodes(Address<? extends Supplier> supplier, Address<? extends Receiver> receiver, boolean desynchronise)
      Severs connection between a supplier and a receiver node, regardless which container they are in. Assumption is that this container is the home of the receiver, but it is not strictly necessary.
      Parameters:
      desynchronise - indicates whether the current contents of the supplier should be subtracted from the receiver
    • connectRemoteSupplier

      public void connectRemoteSupplier(Address<? extends Supplier> supplier, Receiver receiver, boolean synchronise)
      Establishes connection between a remote supplier and a local receiver node.
      Parameters:
      synchronise - indicates whether the receiver should be synchronised to the current contents of the supplier
    • disconnectRemoteSupplier

      public void disconnectRemoteSupplier(Address<? extends Supplier> supplier, Receiver receiver, boolean desynchronise)
      Severs connection between a remote supplier and a local receiver node.
      Parameters:
      desynchronise - indicates whether the current contents of the supplier should be subtracted from the receiver
    • connect

      public void connect(Supplier supplier, Receiver receiver)
      Connects a receiver to a supplier
    • disconnect

      public void disconnect(Supplier supplier, Receiver receiver)
      Disconnects a receiver from a supplier
    • isExecutingDelayedCommands

      public boolean isExecutingDelayedCommands()
      Since:
      2.3
    • getDelayedCommandQueue

      public Set<DelayedCommand> getDelayedCommandQueue()
      Since:
      2.3
    • connectAndSynchronize

      public void connectAndSynchronize(Supplier supplier, Receiver receiver)
      Connects a receiver to a remote supplier, and synchronizes it to the current contents of the supplier
    • disconnectAndDesynchronize

      public void disconnectAndDesynchronize(Supplier supplier, Receiver receiver)
      Disconnects a receiver from a supplier
    • executeDelayedCommands

      public void executeDelayedCommands()
      Since:
      2.3
    • sendUpdateToRemoteAddress

      public void sendUpdateToRemoteAddress(Address<? extends Receiver> address, Direction direction, Tuple updateElement)
      Sends an update message to a node in a different container. The receiver is indicated by the Address. Designed to be called by RemoteReceivers, DO NOT use in any other way.
      Since:
      2.4
    • flushUpdates

      public void flushUpdates()
      Finalises all update sequences and returns. To be called from user threads (e.g. network construction).
    • pullContents

      public Collection<Tuple> pullContents(Supplier supplier, boolean flush)
      Retrieves a safe copy of the contents of a supplier.

      Note that there may be multiple copies of a Tuple in case of a TrimmerNode, so the result is not always a set.

      Parameters:
      flush - if true, a flush is performed before pulling the contents
      Since:
      2.3
    • pullContentsWithTimeline

      public Map<Tuple,Timeline<Timestamp>> pullContentsWithTimeline(Supplier supplier, boolean flush)
      Since:
      2.4
    • pullPropagatedContents

      public Collection<Tuple> pullPropagatedContents(SingleInputNode supplier, boolean flush)
      Retrieves the contents of a SingleInputNode's parentage.
      Since:
      2.3
    • pullPropagatedContentsWithTimestamp

      public Map<Tuple,Timeline<Timestamp>> pullPropagatedContentsWithTimestamp(SingleInputNode supplier, boolean flush)
      Retrieves the timestamp-aware contents of a SingleInputNode's parentage.
      Since:
      2.3
    • remotePull

      public Collection<Tuple> remotePull(Address<? extends Supplier> supplier, boolean flush)
      Retrieves the contents of a supplier for a remote caller. Assumption is that this container is the home of the supplier, but it is not strictly necessary.
      Parameters:
      supplier - the address of the supplier to be pulled.
      Since:
      2.3
    • remotePosMapping

      public Map<String,Integer> remotePosMapping(Address<? extends ProductionNode> production)
      Proxies for the getPosMapping() of Production nodes. Retrieves the posmapping of a remote or local Production to a remote or local caller.
    • deliverMessagesSingleThreaded

      public void deliverMessagesSingleThreaded()
      Sends out all pending messages to their receivers. The delivery is governed by the communication tracker.
      Since:
      1.6
    • makeAddress

      public <N extends Node> Address<N> makeAddress(N node)
      Provides an external address for the selected node.
    • isLocal

      public boolean isLocal(Address<? extends Node> address)
      Checks whether a certain address points to a node at this container.
    • resolveLocal

      public <N extends Node> N resolveLocal(Address<N> address)
      Returns an addressed node at this container.
      Throws:
      IllegalArgumentException - if address is non-local
    • registerNode

      public long registerNode(Node n)
      Registers a node into the rete network (should be called by constructor). Every node MUST be registered by its constructor.
      Returns:
      the unique nodeId issued to the node.
    • unregisterNode

      public void unregisterNode(Node n)
      Unregisters a node from the rete network. Do NOT call if node is still connected to other Nodes, or Adressed or otherwise referenced.
    • registerClearable

      public void registerClearable(Clearable c)
      Registers a pattern memory into the rete network. Every memory MUST be registered by its owner node.
    • unregisterClearable

      public void unregisterClearable(Clearable c)
      Unregisters a pattern memory from the rete network.
    • clearAll

      public void clearAll()
      Clears all memory contents in the network. Reverts to initial state.
    • getNodeFactory

      public tools.refinery.interpreter.rete.network.NodeFactory getNodeFactory()
    • getConnectionFactory

      public tools.refinery.interpreter.rete.network.ConnectionFactory getConnectionFactory()
    • getProvisioner

      public NodeProvisioner getProvisioner()
    • getNetwork

      public Network getNetwork()
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • getAllNodes

      public Collection<Node> getAllNodes()
      Access all the Rete nodes inside this container.
      Returns:
      the collection of Node instances
    • getInputConnectionFactory

      public InputConnector getInputConnectionFactory()
    • checkCancelled

      public void checkCancelled()