From b2aee9607bf989c1bcff3f931ee5238215ee3073 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Wed, 10 Jul 2019 16:02:30 +0200 Subject: [PATCH] Use OptionalLong in AbstractClientConnection This removes the need for boxing longs. Change-Id: I73a6c0be7f9a662f9e1df884f46adbc0fc121fb1 Signed-off-by: Robert Varga --- .../client/AbstractClientConnection.java | 15 +++++----- .../client/AbstractClientConnectionTest.java | 26 +++++++++-------- .../client/ConnectedClientConnectionTest.java | 8 ++---- .../ConnectingClientConnectionTest.java | 28 ++++++++----------- .../ReconnectingClientConnectionTest.java | 14 ++++++---- 5 files changed, 44 insertions(+), 47 deletions(-) diff --git a/opendaylight/md-sal/cds-access-client/src/main/java/org/opendaylight/controller/cluster/access/client/AbstractClientConnection.java b/opendaylight/md-sal/cds-access-client/src/main/java/org/opendaylight/controller/cluster/access/client/AbstractClientConnection.java index 0d45dd5c69..9c290df13d 100644 --- a/opendaylight/md-sal/cds-access-client/src/main/java/org/opendaylight/controller/cluster/access/client/AbstractClientConnection.java +++ b/opendaylight/md-sal/cds-access-client/src/main/java/org/opendaylight/controller/cluster/access/client/AbstractClientConnection.java @@ -17,6 +17,7 @@ import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.util.Collection; import java.util.List; import java.util.Optional; +import java.util.OptionalLong; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import java.util.concurrent.locks.Lock; @@ -334,7 +335,7 @@ public abstract class AbstractClientConnection { // Requests are always scheduled in sequence, hence checking for timeout is relatively straightforward. // Note we use also inquire about the delay, so we can re-schedule if needed, hence the unusual // tri-state return convention. - final Optional delay = lockedCheckTimeout(now); + final OptionalLong delay = lockedCheckTimeout(now); if (delay == null) { // We have timed out. There is no point in scheduling a timer LOG.debug("{}: connection {} timed out", context.persistenceId(), this); @@ -344,7 +345,7 @@ public abstract class AbstractClientConnection { if (delay.isPresent()) { // If there is new delay, schedule a timer - scheduleTimer(delay.get()); + scheduleTimer(delay.getAsLong()); } else { LOG.debug("{}: not scheduling timeout on {}", context.persistenceId(), this); } @@ -366,7 +367,7 @@ public abstract class AbstractClientConnection { } @VisibleForTesting - final Optional checkTimeout(final long now) { + final OptionalLong checkTimeout(final long now) { lock.lock(); try { return lockedCheckTimeout(now); @@ -388,10 +389,10 @@ public abstract class AbstractClientConnection { @SuppressFBWarnings(value = "NP_OPTIONAL_RETURN_NULL", justification = "Returning null Optional is documented in the API contract.") @GuardedBy("lock") - private Optional lockedCheckTimeout(final long now) { + private OptionalLong lockedCheckTimeout(final long now) { if (queue.isEmpty()) { LOG.debug("{}: connection {} is empty", context.persistenceId(), this); - return Optional.empty(); + return OptionalLong.empty(); } final long backendSilentTicks = backendSilentTicks(now); @@ -406,7 +407,7 @@ public abstract class AbstractClientConnection { final long beenOpen = now - head.getEnqueuedTicks(); final long requestTimeout = context.config().getRequestTimeout(); if (beenOpen < requestTimeout) { - return Optional.of(requestTimeout - beenOpen); + return OptionalLong.of(requestTimeout - beenOpen); } tasksTimedOut++; @@ -421,7 +422,7 @@ public abstract class AbstractClientConnection { queue.tryTransmit(now); } - return Optional.empty(); + return OptionalLong.empty(); } private void timeoutEntry(final ConnectionEntry entry, final long beenOpen) { diff --git a/opendaylight/md-sal/cds-access-client/src/test/java/org/opendaylight/controller/cluster/access/client/AbstractClientConnectionTest.java b/opendaylight/md-sal/cds-access-client/src/test/java/org/opendaylight/controller/cluster/access/client/AbstractClientConnectionTest.java index 59930ca024..1d38b62b8d 100644 --- a/opendaylight/md-sal/cds-access-client/src/test/java/org/opendaylight/controller/cluster/access/client/AbstractClientConnectionTest.java +++ b/opendaylight/md-sal/cds-access-client/src/test/java/org/opendaylight/controller/cluster/access/client/AbstractClientConnectionTest.java @@ -8,7 +8,11 @@ package org.opendaylight.controller.cluster.access.client; import static org.hamcrest.CoreMatchers.hasItems; -import static org.mockito.Matchers.isA; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.isA; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.timeout; import static org.mockito.Mockito.verify; @@ -19,10 +23,9 @@ import akka.actor.ActorSystem; import akka.testkit.TestProbe; import akka.testkit.javadsl.TestKit; import com.google.common.collect.Iterables; -import java.util.Optional; +import java.util.OptionalLong; import java.util.function.Consumer; import org.junit.After; -import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.mockito.MockitoAnnotations; @@ -75,7 +78,7 @@ public abstract class AbstractClientConnectionTest request = createRequest(replyToProbe.ref()); connection.sendRequest(request, callback); final RequestEnvelope requestEnvelope = backendProbe.expectMsgClass(RequestEnvelope.class); - Assert.assertEquals(request, requestEnvelope.getMessage()); + assertEquals(request, requestEnvelope.getMessage()); final LocalHistoryIdentifier historyId = new LocalHistoryIdentifier(CLIENT_ID, 0L); final RequestSuccess message = new TransactionAbortSuccess(new TransactionIdentifier(historyId, 0L), 0L); final ResponseEnvelope envelope = new SuccessEnvelope(message, 0L, 0L, 0L); @@ -108,13 +111,12 @@ public abstract class AbstractClientConnectionTest behavior = mock(ClientActorBehavior.class); - Assert.assertSame(behavior, connection.runTimer(behavior)); + assertSame(behavior, connection.runTimer(behavior)); } @Test public void testCheckTimeoutEmptyQueue() { - final Optional timeout = connection.checkTimeout(context.ticker().read()); - Assert.assertFalse(timeout.isPresent()); + assertEquals(OptionalLong.empty(), connection.checkTimeout(context.ticker().read())); } @Test @@ -122,8 +124,8 @@ public abstract class AbstractClientConnectionTest> callback = mock(Consumer.class); connection.sendRequest(createRequest(replyToProbe.ref()), callback); final long now = context.ticker().read(); - final Optional timeout = connection.checkTimeout(now); - Assert.assertTrue(timeout.isPresent()); + final OptionalLong timeout = connection.checkTimeout(now); + assertTrue(timeout.isPresent()); } @Test @@ -134,8 +136,8 @@ public abstract class AbstractClientConnectionTest entries = connection.startReplay(); - Assert.assertThat(entries, hasItems(entryWithRequest(request1), entryWithRequest(request2))); - Assert.assertEquals(2, Iterables.size(entries)); + assertThat(entries, hasItems(entryWithRequest(request1), entryWithRequest(request2))); + assertEquals(2, Iterables.size(entries)); Iterables.removeIf(entries, e -> true); final ReconnectForwarder forwarder = mock(ReconnectForwarder.class); connection.finishReplay(forwarder); diff --git a/opendaylight/md-sal/cds-access-client/src/test/java/org/opendaylight/controller/cluster/access/client/ConnectedClientConnectionTest.java b/opendaylight/md-sal/cds-access-client/src/test/java/org/opendaylight/controller/cluster/access/client/ConnectedClientConnectionTest.java index 530ac5aaa9..ab80513f34 100644 --- a/opendaylight/md-sal/cds-access-client/src/test/java/org/opendaylight/controller/cluster/access/client/ConnectedClientConnectionTest.java +++ b/opendaylight/md-sal/cds-access-client/src/test/java/org/opendaylight/controller/cluster/access/client/ConnectedClientConnectionTest.java @@ -7,15 +7,14 @@ */ package org.opendaylight.controller.cluster.access.client; +import static org.junit.Assert.assertNull; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.same; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; -import java.util.Optional; import java.util.function.Consumer; -import org.junit.Assert; import org.junit.Test; import org.opendaylight.controller.cluster.access.ABIVersion; import org.opendaylight.controller.cluster.access.commands.ModifyTransactionRequestBuilder; @@ -38,8 +37,7 @@ public class ConnectedClientConnectionTest final Consumer> callback = mock(Consumer.class); connection.sendRequest(createRequest(replyToProbe.ref()), callback); final long now = context.ticker().read() + ConnectedClientConnection.DEFAULT_BACKEND_ALIVE_TIMEOUT_NANOS; - final Optional timeout = connection.checkTimeout(now); - Assert.assertNull(timeout); + assertNull(connection.checkTimeout(now)); } @Override @@ -47,7 +45,7 @@ public class ConnectedClientConnectionTest final BackendInfo backend = new BackendInfo(backendProbe.ref(), "test", 0L, ABIVersion.BORON, 10); final ConnectingClientConnection connectingConn = new ConnectingClientConnection<>(context, 0L, backend.getName()); - return new ConnectedClientConnection<>(connectingConn, backend); + return new ConnectedClientConnection<>(connectingConn, backend); } @Override diff --git a/opendaylight/md-sal/cds-access-client/src/test/java/org/opendaylight/controller/cluster/access/client/ConnectingClientConnectionTest.java b/opendaylight/md-sal/cds-access-client/src/test/java/org/opendaylight/controller/cluster/access/client/ConnectingClientConnectionTest.java index a3c4b5c4e2..d0ffa02d40 100644 --- a/opendaylight/md-sal/cds-access-client/src/test/java/org/opendaylight/controller/cluster/access/client/ConnectingClientConnectionTest.java +++ b/opendaylight/md-sal/cds-access-client/src/test/java/org/opendaylight/controller/cluster/access/client/ConnectingClientConnectionTest.java @@ -24,7 +24,7 @@ import akka.actor.ActorRef; import akka.actor.ActorSystem; import akka.testkit.TestProbe; import com.google.common.testing.FakeTicker; -import java.util.Optional; +import java.util.OptionalLong; import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.TimeUnit; import java.util.function.Consumer; @@ -198,7 +198,7 @@ public class ConnectingClientConnectionTest { @Test public void testSendRequestNeedsBackend() { queue.sendRequest(mockRequest, mockCallback); - final Optional ret = queue.checkTimeout(ticker.read()); + final OptionalLong ret = queue.checkTimeout(ticker.read()); assertNotNull(ret); assertTrue(ret.isPresent()); } @@ -214,7 +214,7 @@ public class ConnectingClientConnectionTest { setupBackend(); queue.sendRequest(mockRequest, mockCallback); - final Optional ret = queue.checkTimeout(ticker.read()); + final OptionalLong ret = queue.checkTimeout(ticker.read()); assertNotNull(ret); assertTrue(ret.isPresent()); assertTransmit(mockRequest, 0); @@ -222,7 +222,7 @@ public class ConnectingClientConnectionTest { @Test public void testRunTimeoutEmpty() { - Optional ret = queue.checkTimeout(ticker.read()); + OptionalLong ret = queue.checkTimeout(ticker.read()); assertNotNull(ret); assertFalse(ret.isPresent()); } @@ -230,7 +230,7 @@ public class ConnectingClientConnectionTest { @Test public void testRunTimeoutWithoutShift() { queue.sendRequest(mockRequest, mockCallback); - Optional ret = queue.checkTimeout(ticker.read()); + OptionalLong ret = queue.checkTimeout(ticker.read()); assertNotNull(ret); assertTrue(ret.isPresent()); } @@ -241,7 +241,7 @@ public class ConnectingClientConnectionTest { ticker.advance(AbstractClientConnection.DEFAULT_BACKEND_ALIVE_TIMEOUT_NANOS - 1); - Optional ret = queue.checkTimeout(ticker.read()); + OptionalLong ret = queue.checkTimeout(ticker.read()); assertNotNull(ret); assertTrue(ret.isPresent()); } @@ -254,7 +254,7 @@ public class ConnectingClientConnectionTest { ticker.advance(AbstractClientConnection.DEFAULT_BACKEND_ALIVE_TIMEOUT_NANOS); - Optional ret = queue.checkTimeout(ticker.read()); + OptionalLong ret = queue.checkTimeout(ticker.read()); assertNull(ret); } @@ -266,8 +266,7 @@ public class ConnectingClientConnectionTest { ticker.advance(AbstractClientConnection.DEFAULT_BACKEND_ALIVE_TIMEOUT_NANOS + 1); - Optional ret = queue.checkTimeout(ticker.read()); - assertNull(ret); + assertNull(queue.checkTimeout(ticker.read())); } @SuppressWarnings({ "rawtypes", "unchecked" }) @@ -297,9 +296,7 @@ public class ConnectingClientConnectionTest { ticker.advance(AbstractClientConnection.DEFAULT_NO_PROGRESS_TIMEOUT_NANOS); // No problem - Optional ret = queue.checkTimeout(ticker.read()); - assertNotNull(ret); - assertFalse(ret.isPresent()); + assertEquals(OptionalLong.empty(), queue.checkTimeout(ticker.read())); } @Test @@ -307,9 +304,7 @@ public class ConnectingClientConnectionTest { ticker.advance(AbstractClientConnection.DEFAULT_NO_PROGRESS_TIMEOUT_NANOS + 1); // No problem - Optional ret = queue.checkTimeout(ticker.read()); - assertNotNull(ret); - assertFalse(ret.isPresent()); + assertEquals(OptionalLong.empty(), queue.checkTimeout(ticker.read())); } @Test @@ -355,8 +350,7 @@ public class ConnectingClientConnectionTest { ticker.advance(AbstractClientConnection.DEFAULT_NO_PROGRESS_TIMEOUT_NANOS - 11); - Optional ret = queue.checkTimeout(ticker.read()); - assertNull(ret); + assertNull(queue.checkTimeout(ticker.read())); } private void setupBackend() { diff --git a/opendaylight/md-sal/cds-access-client/src/test/java/org/opendaylight/controller/cluster/access/client/ReconnectingClientConnectionTest.java b/opendaylight/md-sal/cds-access-client/src/test/java/org/opendaylight/controller/cluster/access/client/ReconnectingClientConnectionTest.java index 0b7d0c2655..84cfea481b 100644 --- a/opendaylight/md-sal/cds-access-client/src/test/java/org/opendaylight/controller/cluster/access/client/ReconnectingClientConnectionTest.java +++ b/opendaylight/md-sal/cds-access-client/src/test/java/org/opendaylight/controller/cluster/access/client/ReconnectingClientConnectionTest.java @@ -7,14 +7,16 @@ */ package org.opendaylight.controller.cluster.access.client; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.after; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; -import java.util.Optional; +import java.util.OptionalLong; import java.util.function.Consumer; -import org.junit.Assert; import org.junit.Test; import org.opendaylight.controller.cluster.access.ABIVersion; import org.opendaylight.controller.cluster.access.commands.TransactionAbortSuccess; @@ -35,9 +37,9 @@ public class ReconnectingClientConnectionTest final Consumer> callback = mock(Consumer.class); connection.sendRequest(createRequest(replyToProbe.ref()), callback); final long now = context.ticker().read() + ConnectedClientConnection.DEFAULT_BACKEND_ALIVE_TIMEOUT_NANOS; - final Optional timeout = connection.checkTimeout(now); - Assert.assertNotNull(timeout); - Assert.assertTrue(timeout.isPresent()); + final OptionalLong timeout = connection.checkTimeout(now); + assertNotNull(timeout); + assertTrue(timeout.isPresent()); } @Override @@ -54,7 +56,7 @@ public class ReconnectingClientConnectionTest @Test public void testReconnectConnection() { final ClientActorBehavior behavior = mock(ClientActorBehavior.class); - Assert.assertSame(behavior, connection.lockedReconnect(behavior, mock(RequestException.class))); + assertSame(behavior, connection.lockedReconnect(behavior, mock(RequestException.class))); } @Override -- 2.36.6