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 suppliervoid
connectAndSynchronize(Supplier supplier, Receiver receiver)
Connects a receiver to a remote supplier, and synchronizes it to the current contents of the suppliervoid
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 suppliervoid
disconnectAndDesynchronize(Supplier supplier, Receiver receiver)
Disconnects a receiver from a suppliervoid
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>
NresolveLocal(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.
-
-
-
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 classjava.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()
-
-