CORD-633 Make controllers of the br-int configurable
Change-Id: Ie7b17d2be9d46dae201de0092183b5301ef899b3
diff --git a/src/main/java/org/opencord/cordvtn/impl/CordVtnNodeManager.java b/src/main/java/org/opencord/cordvtn/impl/CordVtnNodeManager.java
index 78cc228..c2a89b9 100644
--- a/src/main/java/org/opencord/cordvtn/impl/CordVtnNodeManager.java
+++ b/src/main/java/org/opencord/cordvtn/impl/CordVtnNodeManager.java
@@ -16,6 +16,7 @@
package org.opencord.cordvtn.impl;
import com.google.common.base.Strings;
+import com.google.common.collect.Lists;
import com.jcraft.jsch.Session;
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
@@ -170,6 +171,7 @@
private final BridgeHandler bridgeHandler = new BridgeHandler();
private ConsistentMap<String, CordVtnNode> nodeStore;
+ private List<ControllerInfo> controllers = Lists.newArrayList();
private ApplicationId appId;
private NodeId localNodeId;
@@ -226,10 +228,9 @@
@Activate
protected void activate() {
appId = coreService.registerApplication(CORDVTN_APP_ID);
-
- configRegistry.registerConfigFactory(configFactory);
- localNodeId = clusterService.getLocalNode().id();
leadershipService.runForLeadership(appId.name());
+ localNodeId = clusterService.getLocalNode().id();
+ configRegistry.registerConfigFactory(configFactory);
nodeStore = storageService.<String, CordVtnNode>consistentMapBuilder()
.withSerializer(Serializer.using(NODE_SERIALIZER.build()))
@@ -241,6 +242,8 @@
deviceService.addListener(deviceListener);
configService.addListener(configListener);
+ // TODO read nodes as well after more tests
+ readControllers();
log.info("Started");
}
@@ -329,7 +332,7 @@
public PortNumber dataPort(DeviceId deviceId) {
CordVtnNode node = nodeByBridgeId(deviceId);
if (node == null) {
- log.warn("Failed to get node for {}", deviceId);
+ log.debug("Failed to get node for {}", deviceId);
return null;
}
@@ -346,7 +349,7 @@
public IpAddress dataIp(DeviceId deviceId) {
CordVtnNode node = nodeByBridgeId(deviceId);
if (node == null) {
- log.warn("Failed to get node for {}", deviceId);
+ log.debug("Failed to get node for {}", deviceId);
return null;
}
return node.dataIp().ip();
@@ -372,7 +375,7 @@
public PortNumber hostManagementPort(DeviceId deviceId) {
CordVtnNode node = nodeByBridgeId(deviceId);
if (node == null) {
- log.warn("Failed to get node for {}", deviceId);
+ log.debug("Failed to get node for {}", deviceId);
return null;
}
@@ -540,10 +543,6 @@
return;
}
- List<ControllerInfo> controllers = clusterService.getNodes().stream()
- .map(controller -> new ControllerInfo(controller.ip(), OF_PORT, "tcp"))
- .collect(Collectors.toList());
-
String dpid = node.integrationBridgeId().toString().substring(DPID_BEGIN);
BridgeDescription bridgeDesc = DefaultBridgeDescription.builder()
.name(INTEGRATION_BRIDGE)
@@ -844,7 +843,13 @@
/**
* Reads cordvtn nodes from config file.
*/
- private void readConfiguration() {
+ private void readNodes() {
+ NodeId leaderNodeId = leadershipService.getLeader(appId.name());
+ if (!Objects.equals(localNodeId, leaderNodeId)) {
+ // do not allow to proceed without leadership
+ return;
+ }
+
CordVtnConfig config = configRegistry.getConfig(appId, CordVtnConfig.class);
if (config == null) {
log.debug("No configuration found");
@@ -853,16 +858,22 @@
config.cordVtnNodes().forEach(this::addOrUpdateNode);
}
+ private void readControllers() {
+ CordVtnConfig config = configRegistry.getConfig(appId, CordVtnConfig.class);
+ if (config == null) {
+ log.debug("No configuration found");
+ return;
+ }
+ controllers = config.controllers();
+ controllers.stream().forEach(ctrl -> {
+ log.debug("Added controller {}:{}", ctrl.ip(), ctrl.port());
+ });
+ }
+
private class InternalConfigListener implements NetworkConfigListener {
@Override
public void event(NetworkConfigEvent event) {
- NodeId leaderNodeId = leadershipService.getLeader(appId.name());
- if (!Objects.equals(localNodeId, leaderNodeId)) {
- // do not allow to proceed without leadership
- return;
- }
-
if (!event.configClass().equals(CordVtnConfig.class)) {
return;
}
@@ -870,7 +881,10 @@
switch (event.type()) {
case CONFIG_ADDED:
case CONFIG_UPDATED:
- eventExecutor.execute(CordVtnNodeManager.this::readConfiguration);
+ eventExecutor.execute(() -> {
+ readControllers();
+ readNodes();
+ });
break;
default:
break;