private GlobalDOMRpcRoutingTableEntry(final DOMRpcIdentifier rpcId, final Map<YangInstanceIdentifier, List<DOMRpcImplementation>> impls) { super(rpcId.getType(), impls); this.rpcId = Preconditions.checkNotNull(rpcId); }
private RoutedDOMRpcRoutingTableEntry(final DOMRpcIdentifier globalRpcId, final YangInstanceIdentifier keyId, final Map<YangInstanceIdentifier, List<DOMRpcImplementation>> impls) { super(globalRpcId.getType(), impls); this.keyId = Preconditions.checkNotNull(keyId); this.globalRpcId = Preconditions.checkNotNull(globalRpcId); }
protected void onRpcsAvailable(Collection<DOMRpcIdentifier> rpcs) { for(DOMRpcIdentifier identifier: rpcs) { if(rpcSchemaPaths.contains(identifier.getType())) { LOG.debug("{}: onRpcsAvailable - found SchemaPath {}", logName(), identifier.getType()); retrieveService("RpcProviderRegistry", RpcProviderRegistry.class, service -> { rpcRegistry = (RpcProviderRegistry)service; setSatisfied(); }); break; } } }
@Override public CheckedFuture<DOMRpcResult, DOMRpcException> invokeRpc(final DOMRpcIdentifier rpc, final NormalizedNode<?, ?> input) { final SchemaPath schemaPath = rpc.getType(); final DataObject bindingInput = input != null ? deserilialize(rpc.getType(),input) : null; final ListenableFuture<RpcResult<?>> bindingResult = invoke(schemaPath,bindingInput); return transformResult(schemaPath,bindingResult); }
private static ListMultimap<SchemaPath, YangInstanceIdentifier> decomposeIdentifiers(final Set<DOMRpcIdentifier> rpcs) { final ListMultimap<SchemaPath, YangInstanceIdentifier> ret = LinkedListMultimap.create(); for (DOMRpcIdentifier i : rpcs) { ret.put(i.getType(), i.getContextReference()); } return ret; }
boolean contains(final DOMRpcIdentifier input) { final AbstractDOMRpcRoutingTableEntry contexts = rpcs.get(input.getType()); return contexts != null && contexts.containsContext(input.getContextReference()); }
@Override public void onRpcAvailable(@Nonnull final Collection<DOMRpcIdentifier> rpcs) { Preconditions.checkArgument(rpcs != null, "Input Collection of DOMRpcIdentifier can not be null."); if (LOG.isDebugEnabled()) { LOG.debug("Adding registration for [{}]", rpcs); } final List<RpcRouter.RouteIdentifier<?,?,?>> routeIds = new ArrayList<>(); for (final DOMRpcIdentifier rpc : rpcs) { final RpcRouter.RouteIdentifier<?,?,?> routeId = new RouteIdentifierImpl(null, rpc.getType().getLastComponent(), rpc.getContextReference()); routeIds.add(routeId); } final RpcRegistry.Messages.AddOrUpdateRoutes addRpcMsg = new RpcRegistry.Messages.AddOrUpdateRoutes(routeIds); rpcRegistry.tell(addRpcMsg, ActorRef.noSender()); }
@Override public void onRpcUnavailable(@Nonnull final Collection<DOMRpcIdentifier> rpcs) { Preconditions.checkArgument(rpcs != null, "Input Collection of DOMRpcIdentifier can not be null."); if(LOG.isDebugEnabled()) { LOG.debug("Removing registration for [{}]", rpcs); } final List<RpcRouter.RouteIdentifier<?,?,?>> routeIds = new ArrayList<>(); for (final DOMRpcIdentifier rpc : rpcs) { final RpcRouter.RouteIdentifier<?,?,?> routeId = new RouteIdentifierImpl(null, rpc.getType().getLastComponent(), rpc.getContextReference()); routeIds.add(routeId); } final RpcRegistry.Messages.RemoveRoutes removeRpcMsg = new RpcRegistry.Messages.RemoveRoutes(routeIds); rpcRegistry.tell(removeRpcMsg, ActorRef.noSender()); } }
public static ExecuteRpc from(final DOMRpcIdentifier rpc, final NormalizedNode<?, ?> input) { final Node serializedInput; if(input != null) { serializedInput = NormalizedNodeSerializer.serialize(input); } else { serializedInput = null; } return new ExecuteRpc(serializedInput, rpc.getType().getLastComponent()); }
@Override public void onComplete(final Throwable error, final FindRoutersReply routes) throws Throwable { if (error != null) { frontEndFuture.failNow(error); } else { final List<Pair<ActorRef, Long>> routePairs = routes.getRouterWithUpdateTime(); if (routePairs == null || routePairs.isEmpty()) { frontEndFuture.failNow(new DOMRpcImplementationNotAvailableException( "No local or remote implementation available for rpc %s", rpc.getType(), error)); } else { final ActorRef remoteImplRef = new LatestEntryRoutingLogic(routePairs).select(); final Object executeRpcMessage = ExecuteRpc.from(rpc, input); LOG.debug("Found remote actor {} for rpc {} - sending {}", remoteImplRef, rpc.getType(), executeRpcMessage); frontEndFuture.completeWith(ask(remoteImplRef, executeRpcMessage, config.getAskDuration())); } } } }, ExecutionContext.Implicits$.MODULE$.global());
@SuppressWarnings({"unchecked", "rawtypes"}) private Future<FindRoutersReply> findRouteAsync(final DOMRpcIdentifier rpc) { // FIXME: Refactor routeId and message to use DOMRpcIdentifier directly. final RpcRouter.RouteIdentifier<?, ?, ?> routeId = new RouteIdentifierImpl(null, rpc.getType().getLastComponent(), rpc.getContextReference()); final RpcRegistry.Messages.FindRouters findMsg = new RpcRegistry.Messages.FindRouters(routeId); return (Future) ask(rpcRegistry, findMsg, config.getAskDuration()); } }
"Rpc implementation for {} was removed during processing.", rpc)); final RemoteDOMRpcFuture frontEndFuture = RemoteDOMRpcFuture.create(rpc.getType().getLastComponent()); findRouteAsync(rpc).onComplete(new OnComplete<FindRoutersReply>() {