From: Stephen Kitt Date: Tue, 16 May 2017 15:51:37 +0000 (+0200) Subject: sal-dom-broker: use lambdas X-Git-Tag: release/nitrogen~235 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=4d4d6663416b8aa05b17e6b3176c2d530bfa6cc4 sal-dom-broker: use lambdas This series of patches uses lambdas instead of anonymous classes for functional interfaces when possible. Lambdas are replaced with method references when appropriate. Change-Id: I99d0a505511aa0deaf675ff3c149fdce40bfb552 Signed-off-by: Stephen Kitt --- diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/AbstractDOMRpcRoutingTableEntry.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/AbstractDOMRpcRoutingTableEntry.java index 0cce2f1d80..b346c4e093 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/AbstractDOMRpcRoutingTableEntry.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/AbstractDOMRpcRoutingTableEntry.java @@ -13,6 +13,7 @@ import com.google.common.collect.ImmutableMap.Builder; import com.google.common.collect.Maps; import com.google.common.util.concurrent.CheckedFuture; import java.util.ArrayList; +import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -72,7 +73,7 @@ abstract class AbstractDOMRpcRoutingTableEntry { // New implementation is at the end, this will move it to be the last among implementations // with equal cost -- relying on sort() being stable. - i.sort((a, b) -> Long.compare(a.invocationCost(), b.invocationCost())); + i.sort(Comparator.comparingLong(DOMRpcImplementation::invocationCost)); vb.put(ve.getKey(), i); } else { vb.put(ve); 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 41dfcb9549..2dc1d24369 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 @@ -8,7 +8,6 @@ package org.opendaylight.controller.md.sal.dom.broker.impl; import com.google.common.base.Preconditions; -import com.google.common.base.Predicate; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMultimap; import com.google.common.collect.ImmutableMultimap.Builder; @@ -62,19 +61,10 @@ public final class DOMNotificationRouter implements AutoCloseable, DOMNotificati private static final Logger LOG = LoggerFactory.getLogger(DOMNotificationRouter.class); private static final ListenableFuture NO_LISTENERS = Futures.immediateFuture(null); private static final WaitStrategy DEFAULT_STRATEGY = PhasedBackoffWaitStrategy.withLock(1L, 30L, TimeUnit.MILLISECONDS); - private static final EventHandler DISPATCH_NOTIFICATIONS = new EventHandler() { - @Override - public void onEvent(final DOMNotificationRouterEvent event, final long sequence, final boolean endOfBatch) throws Exception { - event.deliverNotification(); - - } - }; - private static final EventHandler NOTIFY_FUTURE = new EventHandler() { - @Override - public void onEvent(final DOMNotificationRouterEvent event, final long sequence, final boolean endOfBatch) { - event.setFuture(); - } - }; + private static final EventHandler DISPATCH_NOTIFICATIONS = + (event, sequence, endOfBatch) -> event.deliverNotification(); + private static final EventHandler NOTIFY_FUTURE = + (event, sequence, endOfBatch) -> event.setFuture(); private final Disruptor disruptor; private final ExecutorService executor; @@ -114,12 +104,7 @@ public final class DOMNotificationRouter implements AutoCloseable, DOMNotificati final ListenerRegistration me = this; synchronized (DOMNotificationRouter.this) { - replaceListeners(ImmutableMultimap.copyOf(Multimaps.filterValues(listeners, new Predicate>() { - @Override - public boolean apply(final ListenerRegistration input) { - return input != me; - } - }))); + replaceListeners(ImmutableMultimap.copyOf(Multimaps.filterValues(listeners, input -> input != me))); } } }; @@ -156,16 +141,12 @@ public final class DOMNotificationRouter implements AutoCloseable, DOMNotificati private void notifyListenerTypesChanged(final Set typesAfter) { final List> listenersAfter =ImmutableList.copyOf(subscriptionListeners.getListeners()); - executor.submit(new Runnable() { - - @Override - public void run() { - for (final ListenerRegistration subListener : listenersAfter) { - try { - subListener.getInstance().onSubscriptionChanged(typesAfter); - } catch (final Exception e) { - LOG.warn("Uncaught exception during invoking listener {}", subListener.getInstance(), e); - } + executor.submit(() -> { + for (final ListenerRegistration subListener : listenersAfter) { + try { + subListener.getInstance().onSubscriptionChanged(typesAfter); + } catch (final Exception e) { + LOG.warn("Uncaught exception during invoking listener {}", subListener.getInstance(), e); } } }); @@ -175,13 +156,7 @@ public final class DOMNotificationRouter implements AutoCloseable, DOMNotificati public ListenerRegistration registerSubscriptionListener( final L listener) { final Set initialTypes = listeners.keySet(); - executor.submit(new Runnable() { - - @Override - public void run() { - listener.onSubscriptionChanged(initialTypes); - } - }); + executor.submit(() -> listener.onSubscriptionChanged(initialTypes)); return subscriptionListeners.registerWithType(listener); } diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMNotificationRouterEvent.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMNotificationRouterEvent.java index 0367cab382..5d0fcd6926 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMNotificationRouterEvent.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMNotificationRouterEvent.java @@ -24,12 +24,7 @@ import org.slf4j.LoggerFactory; */ final class DOMNotificationRouterEvent { private static final Logger LOG = LoggerFactory.getLogger(DOMNotificationRouterEvent.class); - public static final EventFactory FACTORY = new EventFactory() { - @Override - public DOMNotificationRouterEvent newInstance() { - return new DOMNotificationRouterEvent(); - } - }; + public static final EventFactory FACTORY = DOMNotificationRouterEvent::new; private Collection> subscribers; private DOMNotification notification; diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMRpcRouter.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMRpcRouter.java index 3c28d30786..02d2710862 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMRpcRouter.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMRpcRouter.java @@ -127,7 +127,7 @@ public final class DOMRpcRouter implements AutoCloseable, DOMRpcService, DOMRpcP b.add(ret); listeners = b.build(); - listenerNotifier.execute(() -> ret.initialTable()); + listenerNotifier.execute(ret::initialTable); return ret; } diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/util/YangSchemaUtils.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/util/YangSchemaUtils.java index ad759a7976..27630fbce8 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/util/YangSchemaUtils.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/util/YangSchemaUtils.java @@ -39,15 +39,11 @@ import org.opendaylight.yangtools.yang.model.api.UsesNode; public final class YangSchemaUtils { - private static final Function QNAME_FROM_PATH_ARGUMENT = new Function(){ - - @Override - public QName apply(final PathArgument input) { - if(input == null) { - return null; - } - return input.getNodeType(); + private static final Function QNAME_FROM_PATH_ARGUMENT = input -> { + if (input == null) { + return null; } + return input.getNodeType(); }; private YangSchemaUtils() { diff --git a/opendaylight/md-sal/sal-dom-broker/src/test/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMBrokerPerformanceTest.java b/opendaylight/md-sal/sal-dom-broker/src/test/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMBrokerPerformanceTest.java index 41c906d356..81af5f3033 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/test/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMBrokerPerformanceTest.java +++ b/opendaylight/md-sal/sal-dom-broker/src/test/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMBrokerPerformanceTest.java @@ -85,198 +85,142 @@ public class DOMBrokerPerformanceTest { @Test public void testPerformance() throws Exception { - measure("Test Suite (all tests)", new Callable() { - - @Override - public Void call() throws Exception { - smallTestSuite(10, 1000); - //smallTestSuite(10, 100); - smallTestSuite(100, 100); - //smallTestSuite(100, 100); - //smallTestSuite(1000, 10); - smallTestSuite(1000, 10); - //smallTestSuite(1000, 1000); - return null; - } + measure("Test Suite (all tests)", (Callable) () -> { + smallTestSuite(10, 1000); + //smallTestSuite(10, 100); + smallTestSuite(100, 100); + //smallTestSuite(100, 100); + //smallTestSuite(1000, 10); + smallTestSuite(1000, 10); + //smallTestSuite(1000, 1000); + return null; }); } private void smallTestSuite(final int txNum, final int innerListWriteNum) throws Exception { - measure("TestSuite (Txs:" + txNum + " innerWrites:" + innerListWriteNum + ")", new Callable() { - - @Override - public Void call() throws Exception { - measureOneTransactionTopContainer(); - measureSeparateWritesOneLevel(txNum, innerListWriteNum); - return null; - } + measure("TestSuite (Txs:" + txNum + " innerWrites:" + innerListWriteNum + ")", (Callable) () -> { + measureOneTransactionTopContainer(); + measureSeparateWritesOneLevel(txNum, innerListWriteNum); + return null; }); } private void measureSeparateWritesOneLevel(final int txNum, final int innerNum) throws Exception { final List transactions = measure("Txs:"+ txNum + " Allocate", - new Callable>() { - @Override - public List call() throws Exception { - List builder = new ArrayList<>(txNum); - for (int i = 0; i < txNum; i++) { - DOMDataReadWriteTransaction writeTx = domBroker.newReadWriteTransaction(); - builder.add(writeTx); - } - return builder; + () -> { + List builder = new ArrayList<>(txNum); + for (int i = 0; i < txNum; i++) { + DOMDataReadWriteTransaction writeTx = domBroker.newReadWriteTransaction(); + builder.add(writeTx); } + return builder; }); assertEquals(txNum, transactions.size()); - measure("Txs:"+ txNum + " Writes:1", new Callable() { - @Override - public Void call() throws Exception { - int i = 0; - for (DOMDataReadWriteTransaction writeTx :transactions) { - // Writes /test/outer-list/i in writeTx - writeTx.put(OPERATIONAL, outerListPath(i), outerList(i)); - i++; - } - return null; + measure("Txs:"+ txNum + " Writes:1", (Callable) () -> { + int i = 0; + for (DOMDataReadWriteTransaction writeTx :transactions) { + // Writes /test/outer-list/i in writeTx + writeTx.put(OPERATIONAL, outerListPath(i), outerList(i)); + i++; } + return null; }); - measure("Txs:"+ txNum + " Writes:" + innerNum, new Callable() { - @Override - public Void call() throws Exception { - int i = 0; - for (DOMDataReadWriteTransaction writeTx :transactions) { - // Writes /test/outer-list/i in writeTx - YangInstanceIdentifier path = YangInstanceIdentifier.builder(outerListPath(i)) - .node(TestModel.INNER_LIST_QNAME).build(); - writeTx.put(OPERATIONAL, path, ImmutableNodes.mapNodeBuilder(TestModel.INNER_LIST_QNAME).build()); - for (int j = 0; j < innerNum; j++) { - YangInstanceIdentifier innerPath = YangInstanceIdentifier.builder(path) - .nodeWithKey(TestModel.INNER_LIST_QNAME, TestModel.NAME_QNAME, String.valueOf(j)) - .build(); - writeTx.put( - OPERATIONAL, - innerPath, - ImmutableNodes.mapEntry(TestModel.INNER_LIST_QNAME, TestModel.NAME_QNAME, - String.valueOf(j))); - } - i++; + measure("Txs:"+ txNum + " Writes:" + innerNum, (Callable) () -> { + int i = 0; + for (DOMDataReadWriteTransaction writeTx :transactions) { + // Writes /test/outer-list/i in writeTx + YangInstanceIdentifier path = YangInstanceIdentifier.builder(outerListPath(i)) + .node(TestModel.INNER_LIST_QNAME).build(); + writeTx.put(OPERATIONAL, path, ImmutableNodes.mapNodeBuilder(TestModel.INNER_LIST_QNAME).build()); + for (int j = 0; j < innerNum; j++) { + YangInstanceIdentifier innerPath = YangInstanceIdentifier.builder(path) + .nodeWithKey(TestModel.INNER_LIST_QNAME, TestModel.NAME_QNAME, String.valueOf(j)) + .build(); + writeTx.put( + OPERATIONAL, + innerPath, + ImmutableNodes.mapEntry(TestModel.INNER_LIST_QNAME, TestModel.NAME_QNAME, + String.valueOf(j))); } - return null; + i++; } + return null; }); - measure("Txs:" + txNum + " Submit, Finish", new Callable() { - @Override - public Void call() throws Exception { - List> allFutures = measure(txNum + " Submits", - new Callable>>() { - @Override - public List> call() throws Exception { - List> builder = new ArrayList<>(txNum); - for (DOMDataReadWriteTransaction tx :transactions) { - builder.add(tx.submit()); - } - return builder; - } - }); - Futures.allAsList(allFutures).get(); - return null; - } + measure("Txs:" + txNum + " Submit, Finish", (Callable) () -> { + List> allFutures = measure(txNum + " Submits", + () -> { + List> builder = new ArrayList<>(txNum); + for (DOMDataReadWriteTransaction tx :transactions) { + builder.add(tx.submit()); + } + return builder; + }); + Futures.allAsList(allFutures).get(); + return null; }); - final DOMDataReadTransaction readTx = measure("Txs:1 (ro), Allocate", new Callable() { - @Override - public DOMDataReadTransaction call() throws Exception { - return domBroker.newReadOnlyTransaction(); - - } - }); + final DOMDataReadTransaction readTx = measure("Txs:1 (ro), Allocate", + (Callable) () -> domBroker.newReadOnlyTransaction()); - measure("Txs:1 (ro) Reads:" + txNum + " (1-level)" , new Callable() { - @Override - public Void call() throws Exception { - for (int i = 0; i < txNum; i++) { - ListenableFuture>> potential = readTx.read(OPERATIONAL, - outerListPath(i)); - assertTrue("outerList/" + i, potential.get().isPresent()); - } - return null; + measure("Txs:1 (ro) Reads:" + txNum + " (1-level)" , (Callable) () -> { + for (int i = 0; i < txNum; i++) { + ListenableFuture>> potential = readTx.read(OPERATIONAL, + outerListPath(i)); + assertTrue("outerList/" + i, potential.get().isPresent()); } + return null; }); - measure("Txs:1 (ro) Reads:" + txNum * innerNum + " (2-level)", new Callable() { - @Override - public Void call() throws Exception { - for (int i = 0; i < txNum; i++) { - for (int j = 0; j < innerNum; j++) { - YangInstanceIdentifier path = YangInstanceIdentifier - .builder(outerListPath(i)) - // - .node(TestModel.INNER_LIST_QNAME) - .nodeWithKey(TestModel.INNER_LIST_QNAME, TestModel.NAME_QNAME, String.valueOf(j)) - .build(); - ListenableFuture>> potential = readTx.read(OPERATIONAL, path); - assertTrue("outer-list/" + i + "/inner-list/" + j, potential.get().isPresent()); - } + measure("Txs:1 (ro) Reads:" + txNum * innerNum + " (2-level)", (Callable) () -> { + for (int i = 0; i < txNum; i++) { + for (int j = 0; j < innerNum; j++) { + YangInstanceIdentifier path = YangInstanceIdentifier + .builder(outerListPath(i)) + // + .node(TestModel.INNER_LIST_QNAME) + .nodeWithKey(TestModel.INNER_LIST_QNAME, TestModel.NAME_QNAME, String.valueOf(j)) + .build(); + ListenableFuture>> potential = readTx.read(OPERATIONAL, path); + assertTrue("outer-list/" + i + "/inner-list/" + j, potential.get().isPresent()); } - return null; } + return null; }); } private void measureOneTransactionTopContainer() throws Exception { - final DOMDataReadWriteTransaction writeTx = measure("Txs:1 Allocate", new Callable() { - @Override - public DOMDataReadWriteTransaction call() throws Exception { - return domBroker.newReadWriteTransaction(); - } - }); + final DOMDataReadWriteTransaction writeTx = measure("Txs:1 Allocate", () -> domBroker.newReadWriteTransaction()); - measure("Txs:1 Write", new Callable() { - @Override - public Void call() throws Exception { - writeTx.put(OPERATIONAL, TestModel.TEST_PATH, ImmutableNodes.containerNode(TestModel.TEST_QNAME)); - writeTx.put(OPERATIONAL, TestModel.OUTER_LIST_PATH, - ImmutableNodes.mapNodeBuilder(TestModel.OUTER_LIST_QNAME).build()); - return null; - } + measure("Txs:1 Write", (Callable) () -> { + writeTx.put(OPERATIONAL, TestModel.TEST_PATH, ImmutableNodes.containerNode(TestModel.TEST_QNAME)); + writeTx.put(OPERATIONAL, TestModel.OUTER_LIST_PATH, + ImmutableNodes.mapNodeBuilder(TestModel.OUTER_LIST_QNAME).build()); + return null; }); - measure("Txs:1 Reads:1", new Callable() { - @Override - public Void call() throws Exception { - // Reads /test in writeTx - ListenableFuture>> writeTxContainer = writeTx.read(OPERATIONAL, - TestModel.TEST_PATH); - assertTrue(writeTxContainer.get().isPresent()); - return null; - } + measure("Txs:1 Reads:1", (Callable) () -> { + // Reads /test in writeTx + ListenableFuture>> writeTxContainer = writeTx.read(OPERATIONAL, + TestModel.TEST_PATH); + assertTrue(writeTxContainer.get().isPresent()); + return null; }); - measure("Txs:1 Reads:1", new Callable() { - @Override - public Void call() throws Exception { - // Reads /test in writeTx - ListenableFuture>> writeTxContainer = writeTx.read(OPERATIONAL, - TestModel.TEST_PATH); - assertTrue(writeTxContainer.get().isPresent()); - return null; - } + measure("Txs:1 Reads:1", (Callable) () -> { + // Reads /test in writeTx + ListenableFuture>> writeTxContainer = writeTx.read(OPERATIONAL, + TestModel.TEST_PATH); + assertTrue(writeTxContainer.get().isPresent()); + return null; }); - measure("Txs:1 Submit, Finish", new Callable() { - @Override - public Void call() throws Exception { - measure("Txs:1 Submit", new Callable>() { - @Override - public ListenableFuture call() throws Exception { - return writeTx.submit(); - } - }).get(); - return null; - } + measure("Txs:1 Submit, Finish", (Callable) () -> { + measure("Txs:1 Submit", (Callable>) () -> writeTx.submit()).get(); + return null; }); } } diff --git a/opendaylight/md-sal/sal-dom-broker/src/test/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMBrokerTest.java b/opendaylight/md-sal/sal-dom-broker/src/test/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMBrokerTest.java index b3107153eb..be07a458b2 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/test/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMBrokerTest.java +++ b/opendaylight/md-sal/sal-dom-broker/src/test/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMBrokerTest.java @@ -316,18 +316,13 @@ public class DOMBrokerTest { AtomicReference submitTxAsync( final DOMDataWriteTransaction writeTx ) { final AtomicReference caughtEx = new AtomicReference<>(); - new Thread() { - @Override - public void run() { - - try { - writeTx.submit(); - } catch( Throwable e ) { - caughtEx.set( e ); - } + new Thread(() -> { + try { + writeTx.submit(); + } catch (Throwable e) { + caughtEx.set(e); } - - }.start(); + }).start(); return caughtEx; }