import akka.actor.TypedActor;
import akka.actor.TypedProps;
import akka.cluster.Cluster;
-import akka.cluster.Member;
import akka.dispatch.OnComplete;
import com.google.common.base.Function;
import com.google.common.collect.FluentIterable;
@Nullable final Node configNode) {
final NetconfNode netconfNode = configNode == null ? currentOperationalNode.getAugmentation(NetconfNode.class) : configNode.getAugmentation(NetconfNode.class);
- return new NodeBuilder()
+ final Node failedNode = new NodeBuilder()
.setNodeId(nodeId)
.addAugmentation(NetconfNode.class,
new NetconfNodeBuilder()
.build())
.build())
.build();
+
+ if (currentOperationalNode == null) {
+ currentOperationalNode = failedNode;
+ }
+
+ return failedNode;
}
@Nonnull @Override public ListenableFuture<Node> onNodeCreated(@Nonnull final NodeId nodeId,
@Nonnull final Node configNode) {
// first disconnect this node
topologyDispatcher.unregisterMountPoint(nodeId);
- registration.close();
+ if (registration != null) {
+ registration.close();
+ }
topologyDispatcher.disconnectNode(nodeId);
// now reinit this connection with new settings
Futures.addCallback(connectionFuture, new FutureCallback<NetconfDeviceCapabilities>() {
@Override
public void onSuccess(@Nullable NetconfDeviceCapabilities result) {
- registration = topologyDispatcher.registerConnectionStatusListener(nodeId, NetconfNodeManagerCallback.this);
+ registration = topologyDispatcher.registerConnectionStatusListener(nodeId, nodeManager);
}
@Override
@Nonnull @Override public ListenableFuture<Void> onNodeDeleted(@Nonnull final NodeId nodeId) {
// cleanup and disconnect
topologyDispatcher.unregisterMountPoint(nodeId);
- registration.close();
+ if (registration != null) {
+ registration.close();
+ }
roleChangeStrategy.unregisterRoleCandidate();
return topologyDispatcher.disconnectNode(nodeId);
}
@Override
public void onRoleChanged(final RoleChangeDTO roleChangeDTO) {
- topologyDispatcher.unregisterMountPoint(currentOperationalNode.getNodeId());
+ topologyDispatcher.unregisterMountPoint(new NodeId(nodeId));
isMaster = roleChangeDTO.isOwner();
if (isMaster) {
connected = false;
if (isMaster) {
// announce that master mount point is going down
- for (final Member member : clusterExtension.state().getMembers()) {
- actorSystem.actorSelection(member.address() + "/user/" + topologyId + "/" + nodeId).tell(new AnnounceMasterMountPointDown(), null);
- }
+// for (final Member member : clusterExtension.state().getMembers()) {
+// actorSystem.actorSelection(member.address() + "/user/" + topologyId + "/" + nodeId).tell(new AnnounceMasterMountPointDown(), null);
+// }
// set master to false since we are unregistering, the ownershipChanged callback can sometimes lag behind causing multiple nodes behaving as masters
isMaster = false;
// onRoleChanged() callback can sometimes lag behind, so unregister the mount right when it disconnects