@Override public void merge (final LogicalDatastoreType store, final YangInstanceIdentifier path, final NormalizedNode < ?,?>data){ delegate.merge(store, new NormalizedNodeMessage(path, data)); }
@Override public void merge(final LogicalDatastoreType store, final NormalizedNodeMessage data) { if (writeTx == null) { writeTx = delegateBroker.newWriteOnlyTransaction(); } writeTx.merge(store, data.getIdentifier(), data.getNode()); }
@Override public Future<NormalizedNodeMessage> onRemoteNodeCreated(final NormalizedNodeMessage message) { final Entry<InstanceIdentifier<?>, DataObject> fromNormalizedNode = codecRegistry.fromNormalizedNode(message.getIdentifier(), message.getNode()); final InstanceIdentifier<Node> iid = (InstanceIdentifier<Node>) fromNormalizedNode.getKey(); final Node value = (Node) fromNormalizedNode.getValue(); LOG.debug("TopologyManager({}) onRemoteNodeCreated received, nodeid: {}", value.getNodeId(), value); final ListenableFuture<Node> nodeListenableFuture = onNodeCreated(value.getNodeId(), value); final DefaultPromise<NormalizedNodeMessage> promise = new DefaultPromise<>(); Futures.addCallback(nodeListenableFuture, new FutureCallback<Node>() { @Override public void onSuccess(Node result) { final Entry<YangInstanceIdentifier, NormalizedNode<?, ?>> entry = codecRegistry.toNormalizedNode(iid, result); promise.success(new NormalizedNodeMessage(entry.getKey(), entry.getValue())); } @Override public void onFailure(Throwable t) { promise.failure(t); } }); return promise.future(); }
clusterExtension.system().actorSelection(path).tell(new CustomIdentifyMessage(clusterExtension.selfAddress()), TypedActor.context().self()); } else if (message instanceof CustomIdentifyMessageReply) { LOG.warn("Received a custom identify reply message from: {}", ((CustomIdentifyMessageReply) message).getAddress()); if (!peers.containsKey(((CustomIdentifyMessage) message).getAddress())) { final TopologyManager peer = typedExtension.typedActorOf(new TypedProps<>(TopologyManager.class, BaseTopologyManager.class), actorRef); peers.put(((CustomIdentifyMessageReply) message).getAddress(), peer); if (isMaster) { resyncPeer(peer); LOG.warn("Received a custom identify message from: {}", ((CustomIdentifyMessage) message).getAddress()); if (!peers.containsKey(((CustomIdentifyMessage) message).getAddress())) { final TopologyManager peer = typedExtension.typedActorOf(new TypedProps<>(TopologyManager.class, BaseTopologyManager.class), actorRef); peers.put(((CustomIdentifyMessage) message).getAddress(), peer); if (isMaster) { resyncPeer(peer); actorRef.tell(new CustomIdentifyMessageReply(clusterExtension.selfAddress()), TypedActor.context().self());
public void registerMountPoint(final ActorSystem actorSystem, final ActorContext context) { if (remoteSchemaContext == null || netconfSessionPreferences == null) { LOG.debug("Master mount point does not have schemas ready yet, delaying registration"); return; } Preconditions.checkNotNull(id); Preconditions.checkNotNull(remoteSchemaContext, "Device has no remote schema context yet. Probably not fully connected."); Preconditions.checkNotNull(netconfSessionPreferences, "Device has no capabilities yet. Probably not fully connected."); this.actorSystem = actorSystem; final NetconfDeviceNotificationService notificationService = new NetconfDeviceNotificationService(); LOG.warn("Creating master data broker for device {}", id); deviceDataBroker = TypedActor.get(context).typedActorOf(new TypedProps<>(ProxyNetconfDeviceDataBroker.class, new Creator<NetconfDeviceMasterDataBroker>() { @Override public NetconfDeviceMasterDataBroker create() throws Exception { return new NetconfDeviceMasterDataBroker(actorSystem, id, remoteSchemaContext, deviceRpc, netconfSessionPreferences); } }), MOUNT_POINT); LOG.debug("Master data broker registered on path {}", TypedActor.get(actorSystem).getActorRefFor(deviceDataBroker).path()); salProvider.getMountInstance().onTopologyDeviceConnected(remoteSchemaContext, deviceDataBroker, deviceRpc, notificationService); final Cluster cluster = Cluster.get(actorSystem); final Iterable<Member> members = cluster.state().getMembers(); final ActorRef deviceDataBrokerRef = TypedActor.get(actorSystem).getActorRefFor(deviceDataBroker); for (final Member member : members) { if (!member.address().equals(cluster.selfAddress())) { final NetconfTopologyPathCreator pathCreator = new NetconfTopologyPathCreator(member.address().toString(),topologyId); final String path = pathCreator.withSuffix(id.getName()).build(); actorSystem.actorSelection(path).tell(new AnnounceMasterMountPoint(), deviceDataBrokerRef); } } }
public void unregisterMountPoint() { salProvider.getMountInstance().onTopologyDeviceDisconnected(); if (deviceDataBroker != null) { LOG.debug("Stopping master data broker for device {}", id.getName()); for (final Member member : Cluster.get(actorSystem).state().getMembers()) { if (member.address().equals(Cluster.get(actorSystem).selfAddress())) { continue; } final NetconfTopologyPathCreator pathCreator = new NetconfTopologyPathCreator(member.address().toString(), topologyId); final String path = pathCreator.withSuffix(id.getName()).build(); actorSystem.actorSelection(path).tell(new AnnounceMasterMountPointDown(), null); } TypedActor.get(actorSystem).stop(deviceDataBroker); deviceDataBroker = null; } }
@Override public Future<NormalizedNodeMessage> onRemoteNodeUpdated(final NormalizedNodeMessage message) { final Entry<InstanceIdentifier<?>, DataObject> fromNormalizedNode = codecRegistry.fromNormalizedNode(message.getIdentifier(), message.getNode()); final InstanceIdentifier<Node> iid = (InstanceIdentifier<Node>) fromNormalizedNode.getKey(); final Node value = (Node) fromNormalizedNode.getValue(); LOG.debug("TopologyManager({}) onRemoteNodeUpdated received, nodeid: {}", id, value.getNodeId()); final ListenableFuture<Node> nodeListenableFuture = onNodeUpdated(value.getNodeId(), value); final DefaultPromise<NormalizedNodeMessage> promise = new DefaultPromise<>(); Futures.addCallback(nodeListenableFuture, new FutureCallback<Node>() { @Override public void onSuccess(Node result) { final Entry<YangInstanceIdentifier, NormalizedNode<?, ?>> entry = codecRegistry.toNormalizedNode(iid, result); promise.success(new NormalizedNodeMessage(entry.getKey(), entry.getValue())); } @Override public void onFailure(Throwable t) { promise.failure(t); } }); return promise.future(); }
@Override public void onComplete(Throwable failure, NormalizedNodeMessage success) throws Throwable { if (failure != null) { settableFuture.setException(failure); return; } final Entry<InstanceIdentifier<?>, DataObject> fromNormalizedNode = codecRegistry.fromNormalizedNode(success.getIdentifier(), success.getNode()); final Node value = (Node) fromNormalizedNode.getValue(); settableFuture.set(value); } }, TypedActor.context().dispatcher());
@Override public void put (final LogicalDatastoreType store, final YangInstanceIdentifier path, final NormalizedNode < ?,?>data){ delegate.put(store, new NormalizedNodeMessage(path, data)); }
@Override public void onComplete(Throwable failure, NormalizedNodeMessage success) throws Throwable { if (failure != null) { settableFuture.setException(failure); return; } final Entry<InstanceIdentifier<?>, DataObject> fromNormalizedNode = codecRegistry.fromNormalizedNode(success.getIdentifier(), success.getNode()); final Node value = (Node) fromNormalizedNode.getValue(); settableFuture.set(value); } }, TypedActor.context().dispatcher());
@Override public void onSuccess(Optional<NormalizedNode<?, ?>> result) { if (!result.isPresent()) { promise.success(Optional.<NormalizedNodeMessage>absent()); } else { promise.success(Optional.of(new NormalizedNodeMessage(path, result.get()))); } }
@Override public void put(final LogicalDatastoreType store, final NormalizedNodeMessage data) { if (writeTx == null) { writeTx = delegateBroker.newWriteOnlyTransaction(); } writeTx.put(store, data.getIdentifier(), data.getNode()); }
@Override public void onSuccess(Node result) { final Entry<YangInstanceIdentifier, NormalizedNode<?, ?>> entry = codecRegistry.toNormalizedNode(iid, result); promise.success(new NormalizedNodeMessage(entry.getKey(), entry.getValue())); }
@Override public void onSuccess(Node result) { final Entry<YangInstanceIdentifier, NormalizedNode<?, ?>> entry = codecRegistry.toNormalizedNode(iid, result); promise.success(new NormalizedNodeMessage(entry.getKey(), entry.getValue())); }
@Override public void onSuccess(Node result) { final Entry<YangInstanceIdentifier, NormalizedNode<?, ?>> entry = codecRegistry.toNormalizedNode(TopologyUtil.createTopologyNodePath(topologyId), result); promise.success(new NormalizedNodeMessage(entry.getKey(), entry.getValue())); }
private void resyncPeer(final TopologyManager peer) { final ReadOnlyTransaction rTx = dataBroker.newReadOnlyTransaction(); final CheckedFuture<Optional<Topology>, ReadFailedException> read = rTx.read(LogicalDatastoreType.CONFIGURATION, topologyListPath); Futures.addCallback(read, new FutureCallback<Optional<Topology>>() { @Override public void onSuccess(Optional<Topology> result) { if (result.isPresent() && result.get().getNode() != null) { for (final Node node : result.get().getNode()) { final Entry<YangInstanceIdentifier, NormalizedNode<?, ?>> entry = codecRegistry.toNormalizedNode(TopologyUtil.createTopologyNodePath(topologyId), node); peer.onRemoteNodeCreated(new NormalizedNodeMessage(entry.getKey(), entry.getValue())); // we dont care about the future from now on since we will be notified by the onConnected event } } } @Override public void onFailure(Throwable t) { LOG.error("Unable to read from datastore"); } }); } }
@Override public void onSuccess(Optional<Topology> result) { if (result.isPresent() && result.get().getNode() != null) { for (final Node node : result.get().getNode()) { final Entry<YangInstanceIdentifier, NormalizedNode<?, ?>> entry = codecRegistry.toNormalizedNode(TopologyUtil.createTopologyNodePath(topologyId), node); peer.onRemoteNodeCreated(new NormalizedNodeMessage(entry.getKey(), entry.getValue())); // we dont care about the future from now on since we will be notified by the onConnected event } } }
public Future<NormalizedNodeMessage> remoteGetCurrentStatusForNode(final NodeId nodeId) { LOG.debug("TopologyManager({}) remoteGetCurrentStatusForNode received, nodeid: {}", id, nodeId.getValue()); final ListenableFuture<Node> listenableFuture = getCurrentStatusForNode(nodeId); final DefaultPromise<NormalizedNodeMessage> promise = new DefaultPromise<>(); Futures.addCallback(listenableFuture, new FutureCallback<Node>() { @Override public void onSuccess(Node result) { final Entry<YangInstanceIdentifier, NormalizedNode<?, ?>> entry = codecRegistry.toNormalizedNode(TopologyUtil.createTopologyNodePath(topologyId), result); promise.success(new NormalizedNodeMessage(entry.getKey(), entry.getValue())); } @Override public void onFailure(Throwable t) { promise.failure(t); } }); return promise.future(); }
final Future<NormalizedNodeMessage> scalaFuture = topologyManager.onRemoteNodeCreated(new NormalizedNodeMessage(normalizedNodeEntry.getKey(), normalizedNodeEntry.getValue())); scalaFuture.onComplete(new OnComplete<NormalizedNodeMessage>() { @Override