use of org.opendaylight.controller.cluster.access.commands.TransactionPurgeRequest in project controller by opendaylight.
the class TransmittingTransmitQueueTest method testSlicedRequestOnComplete.
@Test
public void testSlicedRequestOnComplete() throws Exception {
doReturn(true).when(mockMessageSlicer).slice(any());
ModifyTransactionRequestBuilder reqBuilder = new ModifyTransactionRequestBuilder(TRANSACTION_IDENTIFIER, probe.ref());
reqBuilder.setSequence(0L);
final Request<?, ?> request = reqBuilder.build();
final long now = now();
final Consumer<Response<?, ?>> mockConsumer = createConsumerMock();
queue.enqueueOrForward(new ConnectionEntry(request, mockConsumer, now), now);
ArgumentCaptor<SliceOptions> sliceOptions = ArgumentCaptor.forClass(SliceOptions.class);
verify(mockMessageSlicer).slice(sliceOptions.capture());
assertTrue(sliceOptions.getValue().getMessage() instanceof RequestEnvelope);
final Request<?, ?> request2 = new TransactionPurgeRequest(TRANSACTION_IDENTIFIER, 1L, probe.ref());
queue.enqueueOrForward(new ConnectionEntry(request2, mockConsumer, now), now);
verifyNoMoreInteractions(mockMessageSlicer);
probe.expectNoMsg();
RequestEnvelope requestEnvelope = (RequestEnvelope) sliceOptions.getValue().getMessage();
queue.complete(new FailureEnvelope(request.toRequestFailure(mock(RequestException.class)), requestEnvelope.getSessionId(), requestEnvelope.getTxSequence(), 0), 0);
requestEnvelope = probe.expectMsgClass(RequestEnvelope.class);
assertEquals(request2, requestEnvelope.getMessage());
final Request<?, ?> request3 = new TransactionPurgeRequest(TRANSACTION_IDENTIFIER, 3L, probe.ref());
queue.enqueueOrForward(new ConnectionEntry(request3, mockConsumer, now), now);
requestEnvelope = probe.expectMsgClass(RequestEnvelope.class);
assertEquals(request3, requestEnvelope.getMessage());
}
use of org.opendaylight.controller.cluster.access.commands.TransactionPurgeRequest in project controller by opendaylight.
the class TransmittingTransmitQueueTest method testSetForwarder.
@Test
public void testSetForwarder() throws Exception {
final FakeTicker ticker = new FakeTicker();
ticker.setAutoIncrementStep(1, TimeUnit.MICROSECONDS);
final Request<?, ?> request = new TransactionPurgeRequest(TRANSACTION_IDENTIFIER, 0L, probe.ref());
final Consumer<Response<?, ?>> callback = createConsumerMock();
final ConnectionEntry entry = new ConnectionEntry(request, callback, ticker.read());
final ReconnectForwarder forwarder = mock(ReconnectForwarder.class);
queue.setForwarder(forwarder, ticker.read());
final long secondEnqueueNow = ticker.read();
queue.enqueueOrForward(entry, secondEnqueueNow);
verify(forwarder).forwardEntry(entry, secondEnqueueNow);
}
use of org.opendaylight.controller.cluster.access.commands.TransactionPurgeRequest in project controller by opendaylight.
the class LocalProxyTransactionTest method testHandleForwardedRemotePurgeRequest.
@Test
public void testHandleForwardedRemotePurgeRequest() throws Exception {
final TestProbe probe = createProbe();
final TransactionPurgeRequest request = new TransactionPurgeRequest(TRANSACTION_ID, 0L, probe.ref());
testHandleForwardedRemoteRequest(request);
}
use of org.opendaylight.controller.cluster.access.commands.TransactionPurgeRequest in project controller by opendaylight.
the class LocalProxyTransaction method forwardToRemote.
@Override
final void forwardToRemote(final RemoteProxyTransaction successor, final TransactionRequest<?> request, final Consumer<Response<?, ?>> callback) {
if (request instanceof CommitLocalTransactionRequest) {
final CommitLocalTransactionRequest req = (CommitLocalTransactionRequest) request;
final DataTreeModification mod = req.getModification();
LOG.debug("Applying modification {} to successor {}", mod, successor);
mod.applyToCursor(new AbstractDataTreeModificationCursor() {
@Override
public void write(final PathArgument child, final NormalizedNode<?, ?> data) {
successor.write(current().node(child), data);
}
@Override
public void merge(final PathArgument child, final NormalizedNode<?, ?> data) {
successor.merge(current().node(child), data);
}
@Override
public void delete(final PathArgument child) {
successor.delete(current().node(child));
}
});
successor.sealOnly();
final ModifyTransactionRequest successorReq = successor.commitRequest(req.isCoordinated());
successor.sendRequest(successorReq, callback);
} else if (request instanceof AbortLocalTransactionRequest) {
LOG.debug("Forwarding abort {} to successor {}", request, successor);
successor.abort();
} else if (request instanceof TransactionPurgeRequest) {
LOG.debug("Forwarding purge {} to successor {}", request, successor);
successor.enqueuePurge(callback);
} else if (request instanceof ModifyTransactionRequest) {
successor.handleForwardedRequest(request, callback);
} else {
throwUnhandledRequest(request);
}
}
Aggregations