added missing xid in requestcontext 28/17728/2
authorMartin Bobak <mbobak@cisco.com>
Fri, 3 Apr 2015 17:54:55 +0000 (19:54 +0200)
committerMartin Bobak <mbobak@cisco.com>
Fri, 3 Apr 2015 19:08:00 +0000 (21:08 +0200)
Change-Id: Ia51cfcb752c7b708ee1e569a58c05f1b82faa999
Signed-off-by: Martin Bobak <mbobak@cisco.com>
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/device/DeviceContextImpl.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/device/DeviceManagerImpl.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/dedicated/MeterStatisticsService.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/dedicated/QueueStatisticsService.java

index 60c79a13dc75d9baea55f3cbb9a67b1d5883f5ec..e15b30ac4e5e954f3b2ca6cd5de1d8d788019d86 100644 (file)
@@ -169,29 +169,32 @@ public class DeviceContextImpl implements DeviceContext {
     @Override
     public void processReply(final OfHeader ofHeader) {
         final RequestContext requestContext = getRequests().get(ofHeader.getXid());
-        final SettableFuture replyFuture = requestContext.getFuture();
-        getRequests().remove(ofHeader.getXid());
-        RpcResult<OfHeader> rpcResult;
-
-        if (ofHeader instanceof Error) {
-            final Error error = (Error) ofHeader;
-            final String message = "Operation on device failed";
-            rpcResult = RpcResultBuilder
-                    .<OfHeader>failed()
-                    .withError(RpcError.ErrorType.APPLICATION, message, new DeviceDataException(message, error))
-                    .build();
-        } else {
-            rpcResult = RpcResultBuilder
-                    .<OfHeader>success()
-                    .withResult(ofHeader)
-                    .build();
-        }
+        if (null != requestContext) {
+            final SettableFuture replyFuture = requestContext.getFuture();
+            getRequests().remove(ofHeader.getXid());
+            RpcResult<OfHeader> rpcResult;
+            if (ofHeader instanceof Error) {
+                final Error error = (Error) ofHeader;
+                final String message = "Operation on device failed";
+                rpcResult = RpcResultBuilder
+                        .<OfHeader>failed()
+                        .withError(RpcError.ErrorType.APPLICATION, message, new DeviceDataException(message, error))
+                        .build();
+            } else {
+                rpcResult = RpcResultBuilder
+                        .<OfHeader>success()
+                        .withResult(ofHeader)
+                        .build();
+            }
 
-        replyFuture.set(rpcResult);
-        try {
-            requestContext.close();
-        } catch (final Exception e) {
-            LOG.error("Closing RequestContext failed: ", e);
+            replyFuture.set(rpcResult);
+            try {
+                requestContext.close();
+            } catch (final Exception e) {
+                LOG.error("Closing RequestContext failed: ", e);
+            }
+        } else {
+            LOG.error("Can't find request context registered for xid : {}", ofHeader.getXid());
         }
     }
 
index 471c7eb5f7c108ba9d8589068ec4fe9329b62feb..a1c6f952ff23aefc5870df8532494ef8315249d7 100644 (file)
@@ -172,6 +172,7 @@ public class DeviceManagerImpl implements DeviceManager {
 
         final Xid xid = deviceContext.getNextXid();
         final RequestContext<List<MultipartReply>> requestContext = dummyRequestContextStack.createRequestContext();
+        requestContext.setXid(xid);
         multiMsgCollector.registerMultipartXid(xid.getValue());
         Futures.addCallback(requestContext.getFuture(), new FutureCallback<RpcResult<List<MultipartReply>>>() {
             @Override
index 5234c0665dc08a810a63bf5956d3d60e38f39ec3..e5b75e37f70937ed1d2ac3f83ddb06b1eba57e2a 100644 (file)
@@ -53,6 +53,7 @@ public class MeterStatisticsService extends CommonService {
                         caseBuilder.setMultipartRequestMeter(mprMeterBuild.build());
 
                         final Xid xid = deviceContext.getNextXid();
+                        data.getRequestContext().setXid(xid);
                         multiMsgCollector.registerMultipartXid(xid.getValue());
 
                         MultipartRequestInputBuilder mprInput = RequestInputUtils
index c53f682394fe0a23540832860349cabb962b39a4..0bc94f221080d20cba69fb9878b8fa0f9c0c6d52 100644 (file)
@@ -10,6 +10,8 @@ package org.opendaylight.openflowplugin.impl.statistics.services.dedicated;
 
 import com.google.common.base.Function;
 import com.google.common.util.concurrent.JdkFutureAdapters;
+import java.util.List;
+import java.util.concurrent.Future;
 import org.opendaylight.openflowplugin.api.OFConstants;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
 import org.opendaylight.openflowplugin.api.openflow.device.RequestContextStack;
@@ -24,8 +26,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestQueueCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.queue._case.MultipartRequestQueueBuilder;
 import org.opendaylight.yangtools.yang.common.RpcResult;
-import java.util.List;
-import java.util.concurrent.Future;
 
 /**
  * Created by Martin Bobak &lt;mbobak@cisco.com&gt; on 2.4.2015.