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=73f098da9eb4241931cae4fc64709f503a85e0cc;hb=e44519382364e5c57a679aad31756376b624a4e0;hp=075271017e524b03eed72dbf9aa4a7532c15d7be;hpb=dc32b3883e31861ef2dde36735641e03c3207fb5;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 075271017e..73f098da9e 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 @@ -14,15 +14,16 @@ import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import java.math.BigInteger; import javax.annotation.Nonnull; -import org.opendaylight.openflowjava.protocol.api.connection.ConnectionAdapter; import org.opendaylight.openflowjava.protocol.api.connection.OutboundQueue; -import org.opendaylight.openflowplugin.api.openflow.connection.ConnectionContext; import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext; +import org.opendaylight.openflowplugin.api.openflow.device.DeviceInfo; +import org.opendaylight.openflowplugin.api.openflow.device.DeviceRegistry; import org.opendaylight.openflowplugin.api.openflow.device.RequestContext; import org.opendaylight.openflowplugin.api.openflow.device.RequestContextStack; +import org.opendaylight.openflowplugin.api.openflow.device.TxFacade; import org.opendaylight.openflowplugin.api.openflow.device.Xid; +import org.opendaylight.openflowplugin.api.openflow.statistics.ofpspecific.EventIdentifier; import org.opendaylight.openflowplugin.api.openflow.statistics.ofpspecific.MessageSpy; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.FeaturesReply; 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; @@ -40,19 +41,27 @@ abstract class AbstractService { private final BigInteger datapathId; private final RequestContextStack requestContextStack; private final DeviceContext deviceContext; - private final ConnectionAdapter primaryConnectionAdapter; private final MessageSpy messageSpy; + private EventIdentifier eventIdentifier; + + AbstractService(final RequestContextStack requestContextStack, final DeviceContext deviceContext) { + final DeviceInfo deviceInfo = deviceContext.getDeviceInfo(); - public AbstractService(final RequestContextStack requestContextStack, final DeviceContext deviceContext) { this.requestContextStack = requestContextStack; this.deviceContext = deviceContext; - final FeaturesReply features = this.deviceContext.getPrimaryConnectionContext().getFeatures(); - this.datapathId = features.getDatapathId(); - this.version = features.getVersion(); - this.primaryConnectionAdapter = deviceContext.getPrimaryConnectionContext().getConnectionAdapter(); + this.datapathId = deviceInfo.getDatapathId(); + this.version = deviceInfo.getVersion(); this.messageSpy = deviceContext.getMessageSpy(); } + public EventIdentifier getEventIdentifier() { + return eventIdentifier; + } + + public void setEventIdentifier(final EventIdentifier eventIdentifier) { + this.eventIdentifier = eventIdentifier; + } + public short getVersion() { return version; } @@ -65,15 +74,23 @@ abstract class AbstractService { return requestContextStack; } + @Deprecated public DeviceContext getDeviceContext() { return deviceContext; } + protected DeviceRegistry getDeviceRegistry() {return deviceContext;} + + public DeviceInfo getDeviceInfo() {return deviceContext.getDeviceInfo();} + + public TxFacade getTxFacade() {return deviceContext;} + public MessageSpy getMessageSpy() { return messageSpy; } - protected abstract OfHeader buildRequest(Xid xid, I input); + protected abstract OfHeader buildRequest(Xid xid, I input) throws Exception; + protected abstract FutureCallback createCallback(RequestContext context, Class requestType); public final ListenableFuture> handleServiceCall(@Nonnull final I input) { @@ -91,16 +108,16 @@ abstract class AbstractService { final RequestContext requestContext = requestContextStack.createRequestContext(); if (requestContext == null) { LOG.trace("Request context refused."); - deviceContext.getMessageSpy().spyMessage(AbstractService.class, MessageSpy.STATISTIC_GROUP.TO_SWITCH_DISREGARDED); + getMessageSpy().spyMessage(AbstractService.class, MessageSpy.STATISTIC_GROUP.TO_SWITCH_DISREGARDED); return failedFuture(); } if (requestContext.getXid() == null) { - deviceContext.getMessageSpy().spyMessage(requestContext.getClass(), MessageSpy.STATISTIC_GROUP.TO_SWITCH_RESERVATION_REJECTED); + getMessageSpy().spyMessage(requestContext.getClass(), MessageSpy.STATISTIC_GROUP.TO_SWITCH_RESERVATION_REJECTED); return RequestContextUtil.closeRequestContextWithRpcError(requestContext, "Outbound queue wasn't able to reserve XID."); } - messageSpy.spyMessage(requestContext.getClass(), MessageSpy.STATISTIC_GROUP.TO_SWITCH_READY_FOR_SUBMIT); + getMessageSpy().spyMessage(requestContext.getClass(), MessageSpy.STATISTIC_GROUP.TO_SWITCH_READY_FOR_SUBMIT); final Xid xid = requestContext.getXid(); OfHeader request = null; @@ -109,7 +126,7 @@ abstract class AbstractService { Verify.verify(xid.getValue().equals(request.getXid()), "Expected XID %s got %s", xid.getValue(), request.getXid()); } catch (Exception e) { LOG.error("Failed to build request for {}, forfeiting request {}", input, xid.getValue(), e); - // FIXME: complete the requestContext + RequestContextUtil.closeRequestContextWithRpcError(requestContext, "failed to build request input: " + e.getMessage()); } finally { final OutboundQueue outboundQueue = getDeviceContext().getPrimaryConnectionContext().getOutboundQueueProvider(); outboundQueue.commitEntry(xid.getValue(), request, createCallback(requestContext, requestType));