X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-dom-broker%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fmd%2Fsal%2Fdom%2Fbroker%2Fimpl%2FDOMNotificationRouter.java;h=138de6b77068fc06ee9cd4e1dbe160a94f3a92fc;hb=03e639ec0e4b1b2a55a8763b5642b1118e52861c;hp=d623c3ec969fed939fde3b683639837161a9e72b;hpb=8da5b805c9a27699677af56a8fd9926bd63909da;p=controller.git diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMNotificationRouter.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMNotificationRouter.java index d623c3ec96..138de6b770 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMNotificationRouter.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMNotificationRouter.java @@ -81,21 +81,27 @@ public final class DOMNotificationRouter implements AutoCloseable, DOMNotificati private volatile Multimap> listeners = ImmutableMultimap.of(); private final ListenerRegistry subscriptionListeners = ListenerRegistry.create(); - private DOMNotificationRouter(final ExecutorService executor, final Disruptor disruptor) { + @SuppressWarnings("unchecked") + private DOMNotificationRouter(final ExecutorService executor, final int queueDepth, final WaitStrategy strategy) { this.executor = Preconditions.checkNotNull(executor); - this.disruptor = Preconditions.checkNotNull(disruptor); + + disruptor = new Disruptor<>(DOMNotificationRouterEvent.FACTORY, queueDepth, executor, ProducerType.MULTI, strategy); + disruptor.handleEventsWith(DISPATCH_NOTIFICATIONS); + disruptor.after(DISPATCH_NOTIFICATIONS).handleEventsWith(NOTIFY_FUTURE); + disruptor.start(); } - @SuppressWarnings("unchecked") public static DOMNotificationRouter create(final int queueDepth) { final ExecutorService executor = Executors.newCachedThreadPool(); - final Disruptor disruptor = new Disruptor<>(DOMNotificationRouterEvent.FACTORY, queueDepth, executor, ProducerType.MULTI, DEFAULT_STRATEGY); - disruptor.handleEventsWith(DISPATCH_NOTIFICATIONS); - disruptor.after(DISPATCH_NOTIFICATIONS).handleEventsWith(NOTIFY_FUTURE); - disruptor.start(); + return new DOMNotificationRouter(executor, queueDepth, DEFAULT_STRATEGY); + } + + public static DOMNotificationRouter create(final int queueDepth, final long spinTime, final long parkTime, final TimeUnit unit) { + final ExecutorService executor = Executors.newCachedThreadPool(); + final WaitStrategy strategy = PhasedBackoffWaitStrategy.withLock(spinTime, parkTime, unit); - return new DOMNotificationRouter(executor, disruptor); + return new DOMNotificationRouter(executor, queueDepth, strategy); } @Override