Class CommunicationTracker
java.lang.Object
tools.refinery.interpreter.rete.network.communication.CommunicationTracker
- Direct Known Subclasses:
TimelessCommunicationTracker
,TimelyCommunicationTracker
An instance of this class is associated with every
(1) It allows RETE nodes to register their communication dependencies on-the-fly. These dependencies can be registered or unregistered when nodes are disposed of.
(2) It allows RETE nodes to register their mailboxes as dirty, that is, they can tell the tracker that they have something to send to other nodes in the network. The tracker is then responsible for ordering these messages (more precisely, the mailboxes that contain the messages) for the associated
ReteContainer
. The tracker serves two purposes: (1) It allows RETE nodes to register their communication dependencies on-the-fly. These dependencies can be registered or unregistered when nodes are disposed of.
(2) It allows RETE nodes to register their mailboxes as dirty, that is, they can tell the tracker that they have something to send to other nodes in the network. The tracker is then responsible for ordering these messages (more precisely, the mailboxes that contain the messages) for the associated
ReteContainer
. The ordering is
governed by the strongly connected components in the dependency network and follows a topological sorting scheme;
those mailboxes will be emptied first whose owner nodes do not depend on other undelivered messages.- Since:
- 1.6
-
Field Summary
FieldsModifier and TypeFieldDescriptionThe dependency graph of the communications in the RETE networkprotected final Map
<Node, CommunicationGroup> Precomputed node -> communication group mapprotected final Queue
<CommunicationGroup> Priority queue of active communication groupsprotected int
The maximum group id assigned so farprotected int
The minimum group id assigned so far -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoid
boolean
areInSameGroup
(Node left, Node right) Returns true if the given twoNode
s are in the sameCommunicationGroup
.protected CommunicationGroup
createAndStoreGroup
(Node representative, int index) protected abstract CommunicationGroup
createGroup
(Node representative, int index) void
deactivate
(CommunicationGroup group) getPartition
(Node node) protected Node
getRepresentative
(Node node) protected boolean
hasOutgoingEdges
(Node representative) boolean
isEmpty()
boolean
isInRecursiveGroup
(Node node) Returns true if the givenNode
is in a recursiveCommunicationGroup
, false otherwise.protected boolean
isRecursionCutPoint
(Node source, Node target) Returns true if the given source-target edge in the communication network acts as a recursion cut point.protected boolean
isSingleton
(Node node) protected abstract void
This hook allows concrete tracker implementations to perform tracker-specific post processing on groups.protected abstract void
postProcessNode
(Node node) This hook allows concrete tracker implementations to perform tracker-specific post processing on nodes (cf.abstract IndexerListener
proxifyIndexerListener
(Node requester, IndexerListener original) Creates a proxy for the givenIndexerListener
for the given requesterNode
.abstract Mailbox
proxifyMailbox
(Node requester, Mailbox original) protected abstract void
reconstructQueueContents
(Set<CommunicationGroup> oldActiveGroups) This method is responsible for reconstructing the active queue contents after the network structure has changed.void
registerDependency
(Node source, Node target) void
unregisterDependency
(Node source, Node target) Unregisters a dependency between source and target.
-
Field Details
-
minGroupId
protected int minGroupIdThe minimum group id assigned so far -
maxGroupId
protected int maxGroupIdThe maximum group id assigned so far -
dependencyGraph
The dependency graph of the communications in the RETE network -
groupMap
Precomputed node -> communication group map -
groupQueue
Priority queue of active communication groups
-
-
Constructor Details
-
CommunicationTracker
public CommunicationTracker(org.apache.log4j.Logger logger)
-
-
Method Details
-
getDependencyGraph
-
getGroup
-
getPartition
-
isSingleton
-
getRepresentative
-
hasOutgoingEdges
-
getReducedGraph
-
reconstructQueueContents
This method is responsible for reconstructing the active queue contents after the network structure has changed. It it defined as abstract because the reconstruction logic is specific to eachCommunicationTracker
.- Since:
- 2.4
-
activateUnenqueued
-
deactivate
-
getAndRemoveFirstGroup
-
isEmpty
public boolean isEmpty() -
createGroup
-
createAndStoreGroup
-
registerDependency
Registers the dependency that the targetNode
depends on the sourceNode
. In other words, source may send messages to target in the RETE network. If the dependency edge is already present, this method call is a noop.- Parameters:
source
- the source nodetarget
- the target node
-
isInRecursiveGroup
Returns true if the givenNode
is in a recursiveCommunicationGroup
, false otherwise. -
areInSameGroup
Returns true if the given twoNode
s are in the sameCommunicationGroup
. -
unregisterDependency
Unregisters a dependency between source and target.- Parameters:
source
- the source nodetarget
- the target node
-
isRecursionCutPoint
Returns true if the given source-target edge in the communication network acts as a recursion cut point. The current implementation considers edges leading intoProductionNode
s as cut point iff both source and target belong to the same group.- Parameters:
source
- the source nodetarget
- the target node- Returns:
- true if the edge is a cut point, false otherwise
- Since:
- 2.4
-
postProcessNode
This hook allows concrete tracker implementations to perform tracker-specific post processing on nodes (cf.NetworkStructureChangeSensitiveNode
andBehaviorChangingMailbox
). At the time of the invocation, the network topology has already been updated. -
postProcessGroup
This hook allows concrete tracker implementations to perform tracker-specific post processing on groups. At the time of the invocation, the network topology has already been updated.- Since:
- 2.4
-
proxifyMailbox
Creates a proxy for the givenMailbox
for the given requesterNode
. The proxy creation isCommunicationTracker
-specific and depends on the identity of the requester. This method is primarily used to createTimelyMailboxProxy
s depending on the network topology. There is no guarantee that the same proxy instance is returned when this method is called multiple times with the same arguments. -
proxifyIndexerListener
Creates a proxy for the givenIndexerListener
for the given requesterNode
. The proxy creation isCommunicationTracker
-specific and depends on the identity of the requester. This method is primarily used to createTimelyIndexerListenerProxy
s depending on the network topology. There is no guarantee that the same proxy instance is returned when this method is called multiple times with the same arguments.
-