X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=openflowplugin-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fopenflowplugin%2Fimpl%2Fservices%2FAbstractService.java;h=d916cd35685e042feb322354a4ade970bd050f7d;hb=777c94332871b8c34f56f7f2010de1536cb759ba;hp=3c267c9b42ef2db5655d2458320641c1dad002f8;hpb=617a0726d931230945a8a8d28a6e34be39f56b16;p=openflowplugin.git diff --git a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/AbstractService.java b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/AbstractService.java index 3c267c9b42..d916cd3568 100644 --- a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/AbstractService.java +++ b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/AbstractService.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the @@ -12,11 +12,9 @@ import com.google.common.base.Verify; import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; -import java.math.BigInteger; -import java.util.Objects; import java.util.function.Function; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; +import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.openflowjava.protocol.api.connection.OutboundQueue; import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext; import org.opendaylight.openflowplugin.api.openflow.device.DeviceInfo; @@ -31,17 +29,21 @@ import org.opendaylight.openflowplugin.impl.services.util.RequestContextUtil; import org.opendaylight.openflowplugin.impl.services.util.ServiceException; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader; import org.opendaylight.yangtools.yang.binding.DataContainer; -import org.opendaylight.yangtools.yang.common.RpcError; +import org.opendaylight.yangtools.yang.common.ErrorTag; +import org.opendaylight.yangtools.yang.common.ErrorType; import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.common.RpcResultBuilder; +import org.opendaylight.yangtools.yang.common.Uint32; +import org.opendaylight.yangtools.yang.common.Uint64; +import org.opendaylight.yangtools.yang.common.Uint8; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public abstract class AbstractService { private static final Logger LOG = LoggerFactory.getLogger(AbstractService.class); - private final short version; - private final BigInteger datapathId; + private final Uint8 version; + private final Uint64 datapathId; private final RequestContextStack requestContextStack; private final DeviceContext deviceContext; private final MessageSpy messageSpy; @@ -69,11 +71,11 @@ public abstract class AbstractService { this.eventIdentifier = eventIdentifier; } - public short getVersion() { + public final Uint8 getVersion() { return version; } - public BigInteger getDatapathId() { + public final Uint64 getDatapathId() { return datapathId; } @@ -106,54 +108,62 @@ public abstract class AbstractService { protected abstract FutureCallback createCallback(RequestContext context, Class requestType); - public ListenableFuture> handleServiceCall(@Nonnull final I input) { + public ListenableFuture> handleServiceCall(@NonNull final I input) { return handleServiceCall(input, null); } - public ListenableFuture> handleServiceCall(@Nonnull final I input, + public ListenableFuture> handleServiceCall(@NonNull final I input, @Nullable final Function isComplete) { Preconditions.checkNotNull(input); final Class requestType = input instanceof DataContainer - ? DataContainer.class.cast(input).getImplementedInterface() + ? ((DataContainer) input).implementedInterface() : input.getClass(); - getMessageSpy().spyMessage(requestType, MessageSpy.STATISTIC_GROUP.TO_SWITCH_ENTERED); + getMessageSpy().spyMessage(requestType, MessageSpy.StatisticsGroup.TO_SWITCH_ENTERED); LOG.trace("Handling general service call"); final RequestContext requestContext = requestContextStack.createRequestContext(); - if (Objects.isNull(requestContext)) { + if (requestContext == null) { LOG.trace("Request context refused."); - getMessageSpy().spyMessage(AbstractService.class, MessageSpy.STATISTIC_GROUP.TO_SWITCH_DISREGARDED); + getMessageSpy().spyMessage(AbstractService.class, MessageSpy.StatisticsGroup.TO_SWITCH_DISREGARDED); return Futures.immediateFuture(RpcResultBuilder .failed() - .withError(RpcError.ErrorType.APPLICATION, "", "Request quota exceeded") + .withError(ErrorType.APPLICATION, ErrorTag.ACCESS_DENIED, "Request quota exceeded") .build()); } - if (Objects.isNull(requestContext.getXid())) { - getMessageSpy().spyMessage(requestContext.getClass(), MessageSpy.STATISTIC_GROUP.TO_SWITCH_RESERVATION_REJECTED); - return RequestContextUtil.closeRequestContextWithRpcError(requestContext, "Outbound queue wasn't able to reserve XID."); + if (requestContext.getXid() == null) { + getMessageSpy().spyMessage(requestContext.getClass(), + MessageSpy.StatisticsGroup.TO_SWITCH_RESERVATION_REJECTED); + return RequestContextUtil + .closeRequestContextWithRpcError(requestContext, "Outbound queue wasn't able to reserve XID."); } - getMessageSpy().spyMessage(requestContext.getClass(), MessageSpy.STATISTIC_GROUP.TO_SWITCH_READY_FOR_SUBMIT); + getMessageSpy().spyMessage(requestContext.getClass(), MessageSpy.StatisticsGroup.TO_SWITCH_READY_FOR_SUBMIT); final Xid xid = requestContext.getXid(); OfHeader request = null; try { request = buildRequest(xid, input); - Verify.verify(xid.getValue().equals(request.getXid()), "Expected XID %s got %s", xid.getValue(), request.getXid()); - } catch (Exception ex) { + Verify.verify(xid.getValue().equals(request.getXid()), + "Expected XID %s got %s", + xid.getValue(), + request.getXid()); + } catch (ServiceException ex) { LOG.error("Failed to build request for {}, forfeiting request {}", input, xid.getValue(), ex); - RequestContextUtil.closeRequestContextWithRpcError(requestContext, "failed to build request input: " + ex.getMessage()); + RequestContextUtil.closeRequestContextWithRpcError(requestContext, + "failed to build request input: " + ex.getMessage()); } finally { - final OutboundQueue outboundQueue = getDeviceContext().getPrimaryConnectionContext().getOutboundQueueProvider(); + final OutboundQueue outboundQueue = + getDeviceContext().getPrimaryConnectionContext().getOutboundQueueProvider(); - if (Objects.nonNull(isComplete)) { - outboundQueue.commitEntry(xid.getValue(), request, createCallback(requestContext, requestType), isComplete); + final Uint32 queueXid = xid.getValue(); + if (isComplete != null) { + outboundQueue.commitEntry(queueXid, request, createCallback(requestContext, requestType), isComplete); } else { - outboundQueue.commitEntry(xid.getValue(), request, createCallback(requestContext, requestType)); + outboundQueue.commitEntry(queueXid, request, createCallback(requestContext, requestType)); } }