*/
package org.opendaylight.openflowplugin.impl.rpc;
-import org.slf4j.Logger;
-
import com.google.common.util.concurrent.SettableFuture;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.RoutedRpcRegistration;
+import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
+import org.opendaylight.openflowplugin.api.openflow.connection.ConnectionContext;
import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
import org.opendaylight.openflowplugin.api.openflow.device.RequestContext;
import org.opendaylight.openflowplugin.api.openflow.rpc.RpcContext;
import org.opendaylight.yangtools.yang.common.RpcError;
import org.opendaylight.yangtools.yang.common.RpcResult;
import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.slf4j.Logger;
public class RpcContextImpl implements RpcContext {
private static final Logger LOG = org.slf4j.LoggerFactory.getLogger(RpcContextImpl.class);
- final ProviderContext providerContext;
+ final RpcProviderRegistry rpcProviderRegistry;
// TODO: add private Sal salBroker
private final DeviceContext deviceContext;
private int maxRequestsPerDevice;
- public RpcContextImpl(final ProviderContext providerContext, final DeviceContext deviceContext) {
- this.providerContext = providerContext;
+ public RpcContextImpl(final RpcProviderRegistry rpcProviderRegistry, final DeviceContext deviceContext) {
+ this.rpcProviderRegistry = rpcProviderRegistry;
this.deviceContext = deviceContext;
}
/**
* @see org.opendaylight.openflowplugin.api.openflow.rpc.RpcContext#registerRpcServiceImplementation(java.lang.Class,
- * org.opendaylight.yangtools.yang.binding.RpcService)
+ * org.opendaylight.yangtools.yang.binding.RpcService)
*/
@Override
public <S extends RpcService> void registerRpcServiceImplementation(final Class<S> serviceClass,
- final S serviceInstance) {
- final RoutedRpcRegistration<S> routedRpcReg = providerContext.addRoutedRpcImplementation(serviceClass, serviceInstance);
+ final S serviceInstance) {
+ final RoutedRpcRegistration<S> routedRpcReg = rpcProviderRegistry.addRoutedRpcImplementation(serviceClass, serviceInstance);
routedRpcReg.registerPath(NodeContext.class, deviceContext.getDeviceState().getNodeInstanceIdentifier());
rpcRegistrations.add(routedRpcReg);
}
public <T> void forgetRequestContext(final RequestContext<T> requestContext) {
synchronizedRequestsList.remove(requestContext);
LOG.trace("Removed request context with xid {}. Context request in list {}.",
- requestContext.getXid(), synchronizedRequestsList.size());
+ requestContext.getXid().getValue(), synchronizedRequestsList.size());
}
@Override
return synchronizedRequestsList.size() <= maxRequestsPerDevice;
}
+ @Override
+ public void onDeviceDisconnected(final ConnectionContext connectionContext) {
+ for (RoutedRpcRegistration registration : rpcRegistrations) {
+ registration.close();
+ }
+
+ synchronizedRequestsList.clear();
+ }
}