Package 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 | 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 | Description
    --- | ---
    `ReteContainer​(Network network, boolean threaded)` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | 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()