Class ReteContainer


  • public final class ReteContainer
    extends java.lang.Object
    Since:
    2.2
    • 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
      • 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
      • 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
      • 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
      • 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 NodeAddress<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()
      • 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()