org.eclipse.viatra.query.runtime.rete.network

## Class ReteContainer

- java.lang.Object
- - org.eclipse.viatra.query.runtime.rete.network.ReteContainer

-     public final class ReteContainer
      extends java.lang.Object

  Since:
    2.2

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected IQueryBackendContext` | `backendContext`
    `protected java.util.LinkedList<Clearable>` | `clearables`
    `protected java.lang.Long` | `clock`
    `protected org.eclipse.viatra.query.runtime.rete.network.ConnectionFactory` | `connectionFactory`
    `protected java.lang.Thread` | `consumerThread`
    `protected java.util.Set<org.eclipse.viatra.query.runtime.rete.network.delayed.DelayedCommand>` | `delayedCommandBuffer`
    `protected java.util.Set<org.eclipse.viatra.query.runtime.rete.network.delayed.DelayedCommand>` | `delayedCommandQueue`
    `protected boolean` | `executingDelayedCommands`
    `protected java.lang.Object` | `externalMessageLock`
    `protected java.util.Deque<org.eclipse.viatra.query.runtime.rete.network.UpdateMessage>` | `externalMessageQueue`
    `protected java.util.Deque<org.eclipse.viatra.query.runtime.rete.network.UpdateMessage>` | `internalMessageQueue`
    `protected boolean` | `killed`
    `protected org.apache.log4j.Logger` | `logger`
    `static java.util.function.Function<Node,java.lang.String>` | `NAME_MAPPER`
    `protected Network` | `network`
    `protected long` | `nextId`
    `protected NodeProvisioner` | `nodeProvisioner`
    `protected java.util.Map<java.lang.Long,Node>` | `nodesById`
    `protected java.util.Map<ReteContainer,java.lang.Long>` | `terminationCriteria`
    `protected TimelyConfiguration` | `timelyConfiguration`
    `protected CommunicationTracker` | `tracker`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `ReteContainer(Network network, boolean threaded)`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `clearAll()` Clears all memory contents in the network.
    `void` | `connect(Supplier supplier, Receiver receiver)` Connects a receiver to a supplier
    `void` | `connectAndSynchronize(Supplier supplier, Receiver receiver)` Connects a receiver to a remote supplier, and synchronizes it to the current contents of the supplier
    `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.
    `void` | `connectRemoteSupplier(Address<? extends Supplier> supplier, Receiver receiver, boolean synchronise)` Establishes connection between a remote supplier and a local receiver node.
    `void` | `deliverMessagesSingleThreaded()` Sends out all pending messages to their receivers.
    `void` | `disconnect(Supplier supplier, Receiver receiver)` Disconnects a receiver from a supplier
    `void` | `disconnectAndDesynchronize(Supplier supplier, Receiver receiver)` Disconnects a receiver from a supplier
    `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.
    `void` | `disconnectRemoteSupplier(Address<? extends Supplier> supplier, Receiver receiver, boolean desynchronise)` Severs connection between a remote supplier and a local receiver node.
    `void` | `executeDelayedCommands()`
    `void` | `flushUpdates()` Finalises all update sequences and returns.
    `java.util.Collection<Node>` | `getAllNodes()` Access all the Rete nodes inside this container.
    `CommunicationTracker` | `getCommunicationTracker()`
    `org.eclipse.viatra.query.runtime.rete.network.ConnectionFactory` | `getConnectionFactory()`
    `java.util.Set<org.eclipse.viatra.query.runtime.rete.network.delayed.DelayedCommand>` | `getDelayedCommandQueue()`
    `InputConnector` | `getInputConnectionFactory()`
    `Network` | `getNetwork()`
    `org.eclipse.viatra.query.runtime.rete.network.NodeFactory` | `getNodeFactory()`
    `NodeProvisioner` | `getProvisioner()`
    `TimelyConfiguration` | `getTimelyConfiguration()`
    `boolean` | `isExecutingDelayedCommands()`
    `boolean` | `isLocal(Address<? extends Node> address)` Checks whether a certain address points to a node at this container.
    `boolean` | `isTimelyEvaluation()`
    `void` | `kill()` Stops this container.
    `<N extends Node> Address<N>` | `makeAddress(N node)` Provides an external address for the selected node.
    `java.util.Collection<Tuple>` | `pullContents(Supplier supplier, boolean flush)` Retrieves a safe copy of the contents of a supplier.
    `java.util.Map<Tuple,Timeline<Timestamp>>` | `pullContentsWithTimeline(Supplier supplier, boolean flush)`
    `java.util.Collection<Tuple>` | `pullPropagatedContents(SingleInputNode supplier, boolean flush)` Retrieves the contents of a SingleInputNode's parentage.
    `java.util.Map<Tuple,Timeline<Timestamp>>` | `pullPropagatedContentsWithTimestamp(SingleInputNode supplier, boolean flush)` Retrieves the timestamp-aware contents of a SingleInputNode's parentage.
    `void` | `registerClearable(Clearable c)` Registers a pattern memory into the rete network.
    `long` | `registerNode(Node n)` Registers a node into the rete network (should be called by constructor).
    `java.util.Map<java.lang.String,java.lang.Integer>` | `remotePosMapping(Address<? extends ProductionNode> production)` Proxies for the getPosMapping() of Production nodes.
    `java.util.Collection<Tuple>` | `remotePull(Address<? extends Supplier> supplier, boolean flush)` Retrieves the contents of a supplier for a remote caller.
    `<N extends Node> N` | `resolveLocal(Address<N> address)` Returns an addressed node at this container.
    `void` | `sendUpdateToRemoteAddress(Address<? extends Receiver> address, Direction direction, Tuple updateElement)` Sends an update message to a node in a different container.
    `java.lang.String` | `toString()`
    `void` | `unregisterClearable(Clearable c)` Unregisters a pattern memory from the rete network.
    `void` | `unregisterNode(Node n)` Unregisters a node from the rete network.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

- - ### Field Detail

    - #### consumerThread

          protected java.lang.Thread consumerThread

    - #### killed

          protected boolean killed

    - #### network

          protected Network network

    - #### clearables

          protected java.util.LinkedList<Clearable> clearables

    - #### nodesById

          protected java.util.Map<java.lang.Long,Node> nodesById

    - #### nextId

          protected long nextId

    - #### connectionFactory

          protected org.eclipse.viatra.query.runtime.rete.network.ConnectionFactory connectionFactory

    - #### nodeProvisioner

          protected NodeProvisioner nodeProvisioner

    - #### internalMessageQueue

          protected java.util.Deque<org.eclipse.viatra.query.runtime.rete.network.UpdateMessage> internalMessageQueue

    - #### externalMessageQueue

          protected java.util.Deque<org.eclipse.viatra.query.runtime.rete.network.UpdateMessage> externalMessageQueue

    - #### externalMessageLock

          protected java.lang.Object externalMessageLock

    - #### clock

          protected java.lang.Long clock

    - #### terminationCriteria

          protected java.util.Map<ReteContainer,java.lang.Long> terminationCriteria

    - #### logger

          protected final org.apache.log4j.Logger logger

    - #### tracker

          protected final CommunicationTracker tracker

    - #### backendContext

          protected final IQueryBackendContext backendContext

    - #### delayedCommandQueue

          protected java.util.Set<org.eclipse.viatra.query.runtime.rete.network.delayed.DelayedCommand> delayedCommandQueue

    - #### delayedCommandBuffer

          protected java.util.Set<org.eclipse.viatra.query.runtime.rete.network.delayed.DelayedCommand> delayedCommandBuffer

    - #### executingDelayedCommands

          protected boolean executingDelayedCommands

    - #### timelyConfiguration

          protected final TimelyConfiguration timelyConfiguration

    - #### NAME_MAPPER

          public static final java.util.function.Function<Node,java.lang.String> NAME_MAPPER

      Since:
        1.6

  - ### Constructor Detail

    - #### ReteContainer

          public ReteContainer(Network network,
                               boolean threaded)

      Parameters:
        `threaded` - false if operating in a single-threaded environment

  - ### Method Detail

    - #### 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 java.util.Set<org.eclipse.viatra.query.runtime.rete.network.delayed.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 java.util.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 java.util.Map<Tuple,Timeline<Timestamp>> pullContentsWithTimeline(Supplier supplier,
                                                                                   boolean flush)

      Since:
        2.4

    - #### pullPropagatedContents

          public java.util.Collection<Tuple> pullPropagatedContents(SingleInputNode supplier,
                                                                    boolean flush)

      Retrieves the contents of a SingleInputNode's parentage.
      Since:
        2.3

    - #### pullPropagatedContentsWithTimestamp

          public java.util.Map<Tuple,Timeline<Timestamp>> pullPropagatedContentsWithTimestamp(SingleInputNode supplier,
                                                                                              boolean flush)

      Retrieves the timestamp-aware contents of a SingleInputNode's parentage.
      Since:
        2.3

    - #### remotePull

          public java.util.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 java.util.Map<java.lang.String,java.lang.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:
        `java.lang.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 org.eclipse.viatra.query.runtime.rete.network.NodeFactory getNodeFactory()

    - #### getConnectionFactory

          public org.eclipse.viatra.query.runtime.rete.network.ConnectionFactory getConnectionFactory()

    - #### getProvisioner

          public NodeProvisioner getProvisioner()

    - #### getNetwork

          public Network getNetwork()

    - #### toString

          public java.lang.String toString()

      Overrides:
        `toString` in class `java.lang.Object`

    - #### getAllNodes

          public java.util.Collection<Node> getAllNodes()

      Access all the Rete nodes inside this container.
      Returns:
        the collection of `Node` instances

    - #### getInputConnectionFactory

          public InputConnector getInputConnectionFactory()