RequestContext is closed with RpcError set to its future 49/18849/2
authorMartin Bobak <mbobak@cisco.com>
Wed, 22 Apr 2015 14:56:32 +0000 (16:56 +0200)
committerMartin Bobak <mbobak@cisco.com>
Wed, 22 Apr 2015 16:07:39 +0000 (18:07 +0200)
Change-Id: Ie8c1f044ecc69c186d71f6551e742067fad9ed30
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/services/RequestContextUtil.java

index c128a06ea1594c9e9786ca151b8d3c9af95bd7df..cac380d687b42aa57ee2d0ad81dc78c048a70dd7 100644 (file)
@@ -45,6 +45,7 @@ import org.opendaylight.openflowplugin.impl.common.NodeStaticReplyTranslatorUtil
 import org.opendaylight.openflowplugin.impl.registry.flow.DeviceFlowRegistryImpl;
 import org.opendaylight.openflowplugin.impl.registry.group.DeviceGroupRegistryImpl;
 import org.opendaylight.openflowplugin.impl.registry.meter.DeviceMeterRegistryImpl;
+import org.opendaylight.openflowplugin.impl.services.RequestContextUtil;
 import org.opendaylight.openflowplugin.openflow.md.core.session.SwitchConnectionCookieOFImpl;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnector;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
@@ -81,6 +82,7 @@ import org.slf4j.LoggerFactory;
 public class DeviceContextImpl implements DeviceContext {
 
     private static final Logger LOG = LoggerFactory.getLogger(DeviceContextImpl.class);
+    public static final String DEVICE_DISCONNECTED = "Device disconnected.";
 
     private final ConnectionContext primaryConnectionContext;
     private final DeviceState deviceState;
@@ -382,7 +384,7 @@ public class DeviceContextImpl implements DeviceContext {
     @Override
     public void close() throws Exception {
         for (Map.Entry<Long, RequestContext> entry : requests.entrySet()) {
-            entry.getValue().close();
+            RequestContextUtil.closeRequestContextWithRpcError(entry.getValue(), DEVICE_DISCONNECTED);
         }
         if (primaryConnectionContext.getConnectionAdapter().isAlive()) {
             primaryConnectionContext.getConnectionAdapter().disconnect();
index 9c54e4520f7ecb9858c991d27aed10d44d7d0532..05d45d25b624512c066083d8fd09289d13b74ba6 100644 (file)
@@ -8,7 +8,8 @@
 package org.opendaylight.openflowplugin.impl.services;
 
 import org.opendaylight.openflowplugin.api.openflow.device.RequestContext;
-
+import org.opendaylight.yangtools.yang.common.RpcError;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
 import org.slf4j.Logger;
 
 public final class RequestContextUtil {
@@ -20,11 +21,18 @@ public final class RequestContextUtil {
     }
 
 
+    public static void closeRequestContextWithRpcError(final RequestContext<?> requestContext, String errorMessage) {
+
+        RpcResultBuilder rpcResultBuilder = RpcResultBuilder.failed().withRpcError(RpcResultBuilder.newError(RpcError.ErrorType.APPLICATION, "", errorMessage));
+        requestContext.getFuture().set(rpcResultBuilder.build());
+        closeRequstContext(requestContext);
+    }
+
     public static void closeRequstContext(final RequestContext<?> requestContext) {
         try {
             requestContext.close();
         } catch (Exception e) {
-            LOG.debug("Request context wasn't closed. Exception message: {}",e.getMessage());
+            LOG.debug("Request context wasn't closed. Exception message: {}", e.getMessage());
         }
     }
 }