import com.google.common.annotations.Beta;
import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
Node getInitialState(@Nonnull final NodeId nodeId, @Nonnull final Node configNode);
@Nonnull
- Node getFailedState(@Nonnull final NodeId nodeId, @Nonnull final Node configNode);
+ Node getFailedState(@Nonnull final NodeId nodeId, @Nullable final Node configNode);
}
* Customizable extension layer between the top level TopologyManager and NodeManager
*/
@Beta
-public interface TopologyManagerCallback extends NodeListener, Receiver, RoleChangeListener {
+public interface TopologyManagerCallback extends InitialStateProvider, NodeListener, Receiver, RoleChangeListener {
interface TopologyManagerCallbackFactory {
TopologyManagerCallback create(ActorSystem actorSystem, String topologyId);
import java.util.HashMap;
import java.util.Map;
import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.netconf.topology.NodeManager;
import org.opendaylight.netconf.topology.NodeManagerCallback.NodeManagerCallbackFactory;
public void onReceive(Object o, ActorRef actorRef) {
}
+
+ @Nonnull
+ @Override
+ public Node getInitialState(@Nonnull NodeId nodeId, @Nonnull Node configNode) {
+ return nodes.get(nodeId).getInitialState(nodeId, configNode);
+ }
+
+ @Nonnull
+ @Override
+ public Node getFailedState(@Nonnull NodeId nodeId, @Nullable Node configNode) {
+ return nodes.get(nodeId).getFailedState(nodeId, configNode);
+ }
}
import java.util.Random;
import javax.annotation.Nonnull;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.netconf.topology.NodeManager;
import org.opendaylight.netconf.topology.RoleChangeStrategy;
import org.opendaylight.netconf.topology.StateAggregator;
import org.opendaylight.netconf.topology.TopologyManager;
private final String topologyId;
private final TopologyManagerCallback delegateTopologyHandler;
- private final Map<NodeId, NodeManager> nodes = new HashMap<>();
private final Map<Address, TopologyManager> peers = new HashMap<>();
private TopologyManager masterPeer = null;
private final int id = new Random().nextInt();
public void onFailure(final Throwable t) {
// If the combined connection attempt failed, set the node to connection failed
LOG.debug("Futures aggregation failed");
- naSalNodeWriter.update(nodeId, nodes.get(nodeId).getFailedState(nodeId, node));
+ naSalNodeWriter.update(nodeId, delegateTopologyHandler.getFailedState(nodeId, node));
// FIXME disconnect those which succeeded
// just issue a delete on delegateTopologyHandler that gets handled on lower level
}
@Override
public void onFailure(final Throwable t) {
// If the combined connection attempt failed, set the node to connection failed
- naSalNodeWriter.update(nodeId, nodes.get(nodeId).getFailedState(nodeId, node));
+ naSalNodeWriter.update(nodeId, delegateTopologyHandler.getFailedState(nodeId, node));
// FIXME disconnect those which succeeded
// just issue a delete on delegateTopologyHandler that gets handled on lower level
}
public void onFailure(final Throwable t) {
// If the combined connection attempt failed, set the node to connection failed
LOG.debug("Futures aggregation failed");
- naSalNodeWriter.update(nodeId, nodes.get(nodeId).getFailedState(nodeId, null));
+ naSalNodeWriter.update(nodeId, delegateTopologyHandler.getFailedState(nodeId, null));
// FIXME disconnect those which succeeded
// just issue a delete on delegateTopologyHandler that gets handled on lower level
}
public void close() throws Exception {
// close all existing connectors, delete whole topology in datastore?
for (NetconfConnectorDTO connectorDTO : activeConnectors.values()) {
- connectorDTO.getCommunicator().disconnect();
+ connectorDTO.getCommunicator().close();
}
activeConnectors.clear();
}
}
@Nonnull @Override public Node getFailedState(@Nonnull final NodeId nodeId,
- @Nonnull final Node configNode) {
- final NetconfNode netconfNode = configNode.getAugmentation(NetconfNode.class);
+ @Nullable final Node configNode) {
+ final NetconfNode netconfNode = configNode == null ? currentOperationalNode.getAugmentation(NetconfNode.class) : configNode.getAugmentation(NetconfNode.class);
return new NodeBuilder()
.setNodeId(nodeId)
public void onReceive(Object o, ActorRef actorRef) {
}
+
+ @Nonnull
+ @Override
+ public Node getInitialState(@Nonnull NodeId nodeId, @Nonnull Node configNode) {
+ return nodes.get(nodeId).getInitialState(nodeId, configNode);
+ }
+
+ @Nonnull
+ @Override
+ public Node getFailedState(@Nonnull NodeId nodeId, @Nonnull Node configNode) {
+ return nodes.get(nodeId).getFailedState(nodeId, configNode);
+ }
}
public void onReceive(Object o, ActorRef actorRef) {
}
+
+ @Nonnull
+ @Override
+ public Node getInitialState(@Nonnull NodeId nodeId, @Nonnull Node configNode) {
+ return new NodeBuilder()
+ .setNodeId(nodeId)
+ .addAugmentation(NetconfNode.class,
+ new NetconfNodeBuilder()
+ .setConnectionStatus(ConnectionStatus.Connecting)
+ .setHost(new Host(new IpAddress(new Ipv4Address("127.0.0.1"))))
+ .setPort(new PortNumber(65535))
+ .build())
+ .build();
+ }
+
+ @Nonnull
+ @Override
+ public Node getFailedState(@Nonnull NodeId nodeId, @Nonnull Node configNode) {
+ return new NodeBuilder()
+ .setNodeId(nodeId)
+ .addAugmentation(NetconfNode.class,
+ new NetconfNodeBuilder()
+ .setConnectionStatus(ConnectionStatus.UnableToConnect)
+ .setHost(new Host(new IpAddress(new Ipv4Address("127.0.0.1"))))
+ .setPort(new PortNumber(65535))
+ .build())
+ .build();
+ }
}
public class TestingSuccesfulStateAggregator implements StateAggregator {