This removes the need for boxing longs.
Change-Id: I73a6c0be7f9a662f9e1df884f46adbc0fc121fb1
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
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;
// 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<Long> 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);
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);
}
}
@VisibleForTesting
- final Optional<Long> checkTimeout(final long now) {
+ final OptionalLong checkTimeout(final long now) {
lock.lock();
try {
return lockedCheckTimeout(now);
@SuppressFBWarnings(value = "NP_OPTIONAL_RETURN_NULL",
justification = "Returning null Optional is documented in the API contract.")
@GuardedBy("lock")
- private Optional<Long> 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);
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++;
queue.tryTransmit(now);
}
- return Optional.empty();
+ return OptionalLong.empty();
}
private void timeoutEntry(final ConnectionEntry entry, final long beenOpen) {
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;
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;
@Test
public void testLocalActor() {
- Assert.assertEquals(contextProbe.ref(), connection.localActor());
+ assertEquals(contextProbe.ref(), connection.localActor());
}
@Test
final Request<?, ?> 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);
@Test
public void testRun() {
final ClientActorBehavior<U> behavior = mock(ClientActorBehavior.class);
- Assert.assertSame(behavior, connection.runTimer(behavior));
+ assertSame(behavior, connection.runTimer(behavior));
}
@Test
public void testCheckTimeoutEmptyQueue() {
- final Optional<Long> timeout = connection.checkTimeout(context.ticker().read());
- Assert.assertFalse(timeout.isPresent());
+ assertEquals(OptionalLong.empty(), connection.checkTimeout(context.ticker().read()));
}
@Test
final Consumer<Response<?, ?>> callback = mock(Consumer.class);
connection.sendRequest(createRequest(replyToProbe.ref()), callback);
final long now = context.ticker().read();
- final Optional<Long> timeout = connection.checkTimeout(now);
- Assert.assertTrue(timeout.isPresent());
+ final OptionalLong timeout = connection.checkTimeout(now);
+ assertTrue(timeout.isPresent());
}
@Test
connection.sendRequest(request1, callback);
connection.sendRequest(request2, callback);
final Iterable<ConnectionEntry> 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);
*/
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;
final Consumer<Response<?, ?>> callback = mock(Consumer.class);
connection.sendRequest(createRequest(replyToProbe.ref()), callback);
final long now = context.ticker().read() + ConnectedClientConnection.DEFAULT_BACKEND_ALIVE_TIMEOUT_NANOS;
- final Optional<Long> timeout = connection.checkTimeout(now);
- Assert.assertNull(timeout);
+ assertNull(connection.checkTimeout(now));
}
@Override
final BackendInfo backend = new BackendInfo(backendProbe.ref(), "test", 0L, ABIVersion.BORON, 10);
final ConnectingClientConnection<BackendInfo> connectingConn = new ConnectingClientConnection<>(context, 0L,
backend.getName());
- return new ConnectedClientConnection<>(connectingConn, backend);
+ return new ConnectedClientConnection<>(connectingConn, backend);
}
@Override
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;
@Test
public void testSendRequestNeedsBackend() {
queue.sendRequest(mockRequest, mockCallback);
- final Optional<Long> ret = queue.checkTimeout(ticker.read());
+ final OptionalLong ret = queue.checkTimeout(ticker.read());
assertNotNull(ret);
assertTrue(ret.isPresent());
}
setupBackend();
queue.sendRequest(mockRequest, mockCallback);
- final Optional<Long> ret = queue.checkTimeout(ticker.read());
+ final OptionalLong ret = queue.checkTimeout(ticker.read());
assertNotNull(ret);
assertTrue(ret.isPresent());
assertTransmit(mockRequest, 0);
@Test
public void testRunTimeoutEmpty() {
- Optional<Long> ret = queue.checkTimeout(ticker.read());
+ OptionalLong ret = queue.checkTimeout(ticker.read());
assertNotNull(ret);
assertFalse(ret.isPresent());
}
@Test
public void testRunTimeoutWithoutShift() {
queue.sendRequest(mockRequest, mockCallback);
- Optional<Long> ret = queue.checkTimeout(ticker.read());
+ OptionalLong ret = queue.checkTimeout(ticker.read());
assertNotNull(ret);
assertTrue(ret.isPresent());
}
ticker.advance(AbstractClientConnection.DEFAULT_BACKEND_ALIVE_TIMEOUT_NANOS - 1);
- Optional<Long> ret = queue.checkTimeout(ticker.read());
+ OptionalLong ret = queue.checkTimeout(ticker.read());
assertNotNull(ret);
assertTrue(ret.isPresent());
}
ticker.advance(AbstractClientConnection.DEFAULT_BACKEND_ALIVE_TIMEOUT_NANOS);
- Optional<Long> ret = queue.checkTimeout(ticker.read());
+ OptionalLong ret = queue.checkTimeout(ticker.read());
assertNull(ret);
}
ticker.advance(AbstractClientConnection.DEFAULT_BACKEND_ALIVE_TIMEOUT_NANOS + 1);
- Optional<Long> ret = queue.checkTimeout(ticker.read());
- assertNull(ret);
+ assertNull(queue.checkTimeout(ticker.read()));
}
@SuppressWarnings({ "rawtypes", "unchecked" })
ticker.advance(AbstractClientConnection.DEFAULT_NO_PROGRESS_TIMEOUT_NANOS);
// No problem
- Optional<Long> ret = queue.checkTimeout(ticker.read());
- assertNotNull(ret);
- assertFalse(ret.isPresent());
+ assertEquals(OptionalLong.empty(), queue.checkTimeout(ticker.read()));
}
@Test
ticker.advance(AbstractClientConnection.DEFAULT_NO_PROGRESS_TIMEOUT_NANOS + 1);
// No problem
- Optional<Long> ret = queue.checkTimeout(ticker.read());
- assertNotNull(ret);
- assertFalse(ret.isPresent());
+ assertEquals(OptionalLong.empty(), queue.checkTimeout(ticker.read()));
}
@Test
ticker.advance(AbstractClientConnection.DEFAULT_NO_PROGRESS_TIMEOUT_NANOS - 11);
- Optional<Long> ret = queue.checkTimeout(ticker.read());
- assertNull(ret);
+ assertNull(queue.checkTimeout(ticker.read()));
}
private void setupBackend() {
*/
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;
final Consumer<Response<?, ?>> callback = mock(Consumer.class);
connection.sendRequest(createRequest(replyToProbe.ref()), callback);
final long now = context.ticker().read() + ConnectedClientConnection.DEFAULT_BACKEND_ALIVE_TIMEOUT_NANOS;
- final Optional<Long> timeout = connection.checkTimeout(now);
- Assert.assertNotNull(timeout);
- Assert.assertTrue(timeout.isPresent());
+ final OptionalLong timeout = connection.checkTimeout(now);
+ assertNotNull(timeout);
+ assertTrue(timeout.isPresent());
}
@Override
@Test
public void testReconnectConnection() {
final ClientActorBehavior<BackendInfo> behavior = mock(ClientActorBehavior.class);
- Assert.assertSame(behavior, connection.lockedReconnect(behavior, mock(RequestException.class)));
+ assertSame(behavior, connection.lockedReconnect(behavior, mock(RequestException.class)));
}
@Override