@Beta public interface DataTreeService extends DataTreeProducerFactory, BindingService
BindingService
providing access to the conceptual data tree. Interactions with the data
tree are split into data producers and consumers (listeners). Each of them operate on a set of
subtrees, which need to be declared at instantiation time.
Returned instances are not thread-safe and expected to be used by a single thread at a time. Furthermore, producers may not be accessed from consumer callbacks unless they were specified when the listener is registered.
The service maintains a loop-free topology of producers and consumers. What this means is that a consumer is not allowed to access a producer, which affects any of the subtrees it is subscribed to. This restriction is in place to ensure the system does not go into a feedback loop, where it is impossible to block either a producer or a consumer without accumulating excess work in the backlog stemming from its previous activity.
Modifier and Type | Method and Description |
---|---|
<T extends DataTreeListener> |
registerListener(T listener,
Collection<DataTreeIdentifier<?>> subtrees,
boolean allowRxMerges,
Collection<DataTreeProducer> producers)
Register a
DataTreeListener instance. |
createProducer
@Nonnull <T extends DataTreeListener> org.opendaylight.yangtools.concepts.ListenerRegistration<T> registerListener(@Nonnull T listener, @Nonnull Collection<DataTreeIdentifier<?>> subtrees, boolean allowRxMerges, @Nonnull Collection<DataTreeProducer> producers) throws DataTreeLoopException
DataTreeListener
instance. Once registered, the listener will start
receiving changes on the selected subtrees. If the listener cannot keep up with the rate of
changes, and allowRxMerges is set to true, this service is free to merge the changes, so that
a smaller number of them will be reported, possibly hiding some data transitions (like
flaps).
If the listener wants to write into any producer, that producer has to be mentioned in the call to this method. Those producers will be bound exclusively to the registration, so that accessing them outside of this listener's callback will trigger an error. Any producers mentioned must be idle, e.g. they may not have an open transaction at the time this method is invoked.
Each listener instance can be registered at most once. Implementations of this interface have to guarantee that the listener's methods will not be invoked concurrently from multiple threads.
T
- listener typelistener
- DataTreeListener
that is being registeredsubtrees
- Conceptual subtree identifier of subtrees which should be monitored for
changes. May not be null or empty.allowRxMerges
- True if the backend may perform ingress state compression.producers
- DataTreeProducer
instances to bind to the listener.IllegalArgumentException
- if subtrees is empty or the listener is already boundDataTreeLoopException
- if the registration of the listener to the specified subtrees
with specified producers would form a feedback loopCopyright © 2019 OpenDaylight. All rights reserved.