From: Martin Bobak Date: Wed, 22 Apr 2015 14:56:32 +0000 (+0200) Subject: RequestContext is closed with RpcError set to its future X-Git-Tag: release/lithium~347 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;ds=sidebyside;h=8acb1b0bbaee45ebfea2e10fd51748c497d6bf6e;p=openflowplugin.git RequestContext is closed with RpcError set to its future Change-Id: Ie8c1f044ecc69c186d71f6551e742067fad9ed30 Signed-off-by: Martin Bobak --- diff --git a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/device/DeviceContextImpl.java b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/device/DeviceContextImpl.java index c128a06ea1..cac380d687 100644 --- a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/device/DeviceContextImpl.java +++ b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/device/DeviceContextImpl.java @@ -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 entry : requests.entrySet()) { - entry.getValue().close(); + RequestContextUtil.closeRequestContextWithRpcError(entry.getValue(), DEVICE_DISCONNECTED); } if (primaryConnectionContext.getConnectionAdapter().isAlive()) { primaryConnectionContext.getConnectionAdapter().disconnect(); diff --git a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/RequestContextUtil.java b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/RequestContextUtil.java index 9c54e4520f..05d45d25b6 100644 --- a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/RequestContextUtil.java +++ b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/RequestContextUtil.java @@ -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()); } } }