Class QueuedNotificationManager<L,N>
- java.lang.Object
-
- org.opendaylight.yangtools.util.concurrent.QueuedNotificationManager<L,N>
-
- Type Parameters:
L
- the listener typeN
- the notification type
- All Implemented Interfaces:
NotificationManager<L,N>
public final class QueuedNotificationManager<L,N> extends Object implements NotificationManager<L,N>
This class manages queuing and dispatching notifications for multiple listeners concurrently. Notifications are queued on a per-listener basis and dispatched serially to each listener via anExecutor
.This class optimizes its memory footprint by only allocating and maintaining a queue and executor task for a listener when there are pending notifications. On the first notification(s), a queue is created and a task is submitted to the executor to dispatch the queue to the associated listener. Any subsequent notifications that occur before all previous notifications have been dispatched are appended to the existing queue. When all notifications have been dispatched, the queue and task are discarded.
- Author:
- Thomas Pantelis
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interface
QueuedNotificationManager.BatchedInvoker<L,N>
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static <L,N>
QueuedNotificationManager<L,N>create(@NonNull Executor executor, @NonNull QueuedNotificationManager.BatchedInvoker<L,N> listenerInvoker, int maxQueueCapacity, @NonNull String name)
Create a new notification manager.@NonNull Executor
getExecutor()
Returns theExecutor
to used for notification tasks.List<ListenerNotificationQueueStats>
getListenerNotificationQueueStats()
ReturnsListenerNotificationQueueStats
instances for each current listener notification task in progress.int
getMaxQueueCapacity()
Returns the maximum listener queue capacity.@NonNull QueuedNotificationManagerMXBean
getMXBean()
Return anQueuedNotificationManagerMXBean
tied to this instance.void
submitNotification(L listener, N notification)
Submits a notification to be queued and dispatched to the given listener.void
submitNotifications(L listener, Iterable<N> notifications)
Submits notifications to be queued and dispatched to the given listener.
-
-
-
Method Detail
-
create
public static <L,N> QueuedNotificationManager<L,N> create(@NonNull Executor executor, @NonNull QueuedNotificationManager.BatchedInvoker<L,N> listenerInvoker, int maxQueueCapacity, @NonNull String name)
Create a new notification manager.- Parameters:
executor
- theExecutor
to use for notification taskslistenerInvoker
- theQueuedNotificationManager.BatchedInvoker
to use for invoking listenersmaxQueueCapacity
- the capacity of each listener queuename
- the name of this instance for logging info
-
getMaxQueueCapacity
public int getMaxQueueCapacity()
Returns the maximum listener queue capacity.
-
getMXBean
public @NonNull QueuedNotificationManagerMXBean getMXBean()
Return anQueuedNotificationManagerMXBean
tied to this instance.- Returns:
- An QueuedNotificationManagerMXBean object.
-
getExecutor
public @NonNull Executor getExecutor()
Returns theExecutor
to used for notification tasks.
-
submitNotification
public void submitNotification(L listener, N notification)
Description copied from interface:NotificationManager
Submits a notification to be queued and dispatched to the given listener.Note: This method may block if the listener queue is currently full.
- Specified by:
submitNotification
in interfaceNotificationManager<L,N>
- Parameters:
listener
- the listener to notifynotification
- the notification to dispatch
-
submitNotifications
public void submitNotifications(L listener, Iterable<N> notifications)
Description copied from interface:NotificationManager
Submits notifications to be queued and dispatched to the given listener.Note: This method may block if the listener queue is currently full.
- Specified by:
submitNotifications
in interfaceNotificationManager<L,N>
- Parameters:
listener
- the listener to notifynotifications
- the notifications to dispatch
-
getListenerNotificationQueueStats
public List<ListenerNotificationQueueStats> getListenerNotificationQueueStats()
ReturnsListenerNotificationQueueStats
instances for each current listener notification task in progress.
-
-