Add "Optimization type" support on Network
Change-Id: I3ade07cd774fcf73104a799f40743730ddd56b57
diff --git a/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/NetworkConverter.java b/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/NetworkConverter.java
index 9437d4a1..d0b2c3c 100644
--- a/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/NetworkConverter.java
+++ b/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/NetworkConverter.java
@@ -17,6 +17,7 @@
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Preconditions.checkState;
+import static org.onosproject.tetopology.management.api.OptimizationType.NOT_OPTIMIZED;
import java.util.List;
import java.util.Map;
@@ -518,7 +519,9 @@
org.onosproject.tetopology.management.api.DefaultNetwork network =
new org.onosproject.tetopology.management.api.DefaultNetwork(networkKeyId, supportingNetworkIds,
teNodes, teLinks, teTopologyId,
- serverProvided, deviceId);
+ serverProvided,
+ deviceId,
+ NOT_OPTIMIZED);
return network;
}
diff --git a/apps/tetopology/api/src/main/java/org/onosproject/tetopology/management/api/DefaultNetwork.java b/apps/tetopology/api/src/main/java/org/onosproject/tetopology/management/api/DefaultNetwork.java
index faa35e1..df3dbd5 100644
--- a/apps/tetopology/api/src/main/java/org/onosproject/tetopology/management/api/DefaultNetwork.java
+++ b/apps/tetopology/api/src/main/java/org/onosproject/tetopology/management/api/DefaultNetwork.java
@@ -15,18 +15,19 @@
*/
package org.onosproject.tetopology.management.api;
+import java.util.List;
+import java.util.Map;
+
+import org.onosproject.net.DeviceId;
+import org.onosproject.tetopology.management.api.link.NetworkLink;
+import org.onosproject.tetopology.management.api.node.NetworkNode;
+
import com.google.common.base.MoreObjects;
import com.google.common.base.Objects;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
-import org.onosproject.net.DeviceId;
-import org.onosproject.tetopology.management.api.link.NetworkLink;
-import org.onosproject.tetopology.management.api.node.NetworkNode;
-
-import java.util.List;
-import java.util.Map;
/**
* Default Network implementation.
@@ -39,22 +40,24 @@
private final TeTopologyId teTopologyId;
private final boolean serverProvided;
private final DeviceId ownerId;
+ private final OptimizationType optimization;
/**
* Creates an instance of DefaultNetwork.
*
- * @param networkId network identifier
+ * @param networkId network identifier
* @param supportingNetworkIds supporting network identifier
- * @param nodes list of nodes within the network
- * @param links list of links within the network
- * @param teTopologyId TE topology identifier
- * @param serverProvided whether the network is received from server
- * @param ownerId the the controller identifier owning this topology
+ * @param nodes list of nodes within the network
+ * @param links list of links within the network
+ * @param teTopologyId TE topology identifier associated with the network
+ * @param serverProvided whether the network is received from server
+ * @param ownerId the the controller identifier owning this topology
+ * @param optimization TE topology optimization criteria
*/
public DefaultNetwork(KeyId networkId, List<KeyId> supportingNetworkIds,
Map<KeyId, NetworkNode> nodes, Map<KeyId, NetworkLink> links,
TeTopologyId teTopologyId, boolean serverProvided,
- DeviceId ownerId) {
+ DeviceId ownerId, OptimizationType optimization) {
this.networkId = networkId;
this.supportingNetworkIds = supportingNetworkIds != null ?
Lists.newArrayList(supportingNetworkIds) : null;
@@ -63,6 +66,7 @@
this.teTopologyId = teTopologyId;
this.serverProvided = serverProvided;
this.ownerId = ownerId;
+ this.optimization = optimization;
}
@@ -121,9 +125,15 @@
}
@Override
+ public OptimizationType optimization() {
+ return optimization;
+ }
+
+ @Override
public int hashCode() {
return Objects.hashCode(networkId, supportingNetworkIds,
- nodes, links, serverProvided, teTopologyId, ownerId);
+ nodes, links, serverProvided, teTopologyId,
+ ownerId, optimization);
}
@Override
@@ -139,7 +149,8 @@
Objects.equal(links, that.links) &&
Objects.equal(serverProvided, that.serverProvided) &&
Objects.equal(teTopologyId, that.teTopologyId) &&
- Objects.equal(ownerId, that.ownerId);
+ Objects.equal(ownerId, that.ownerId)
+ && Objects.equal(optimization, that.optimization);
}
return false;
}
@@ -154,6 +165,8 @@
.add("serverProvided", serverProvided)
.add("teTopologyId", teTopologyId)
.add("ownerId", ownerId)
+ .add("optimization", optimization)
.toString();
}
+
}
diff --git a/apps/tetopology/api/src/main/java/org/onosproject/tetopology/management/api/Network.java b/apps/tetopology/api/src/main/java/org/onosproject/tetopology/management/api/Network.java
index 389ff46..4464c4e 100644
--- a/apps/tetopology/api/src/main/java/org/onosproject/tetopology/management/api/Network.java
+++ b/apps/tetopology/api/src/main/java/org/onosproject/tetopology/management/api/Network.java
@@ -94,6 +94,13 @@
TeTopologyId teTopologyId();
/**
+ * Returns the topology optimization criteria.
+ *
+ * @return the optimization
+ */
+ OptimizationType optimization();
+
+ /**
* Returns the controller identifier owning this abstracted topology.
*
* @return the controller id
diff --git a/apps/tetopology/app/src/main/java/org/onosproject/tetopology/management/impl/DistributedTeTopologyStore.java b/apps/tetopology/app/src/main/java/org/onosproject/tetopology/management/impl/DistributedTeTopologyStore.java
index ecfb25c..60fd0d5 100644
--- a/apps/tetopology/app/src/main/java/org/onosproject/tetopology/management/impl/DistributedTeTopologyStore.java
+++ b/apps/tetopology/app/src/main/java/org/onosproject/tetopology/management/impl/DistributedTeTopologyStore.java
@@ -15,6 +15,7 @@
*/
package org.onosproject.tetopology.management.impl;
+import static org.onosproject.tetopology.management.api.OptimizationType.NOT_OPTIMIZED;
import static org.onosproject.tetopology.management.api.TeTopologyEvent.Type.LINK_ADDED;
import static org.onosproject.tetopology.management.api.TeTopologyEvent.Type.LINK_REMOVED;
import static org.onosproject.tetopology.management.api.TeTopologyEvent.Type.LINK_UPDATED;
@@ -752,20 +753,19 @@
}
TeTopologyId topologyId = null;
DeviceId ownerId = null;
+ OptimizationType opt = NOT_OPTIMIZED;
if (curNetwork.teTopologyKey() != null &&
teTopologyMap.get(curNetwork.teTopologyKey()) != null) {
topologyId = new TeTopologyId(curNetwork.teTopologyKey().providerId(),
curNetwork.teTopologyKey().clientId(),
- teTopologyMap
- .get(curNetwork
- .teTopologyKey())
+ teTopologyMap.get(curNetwork.teTopologyKey())
.teTopologyId());
ownerId = teTopologyMap.get(curNetwork.teTopologyKey())
.topologyData().ownerId();
-
+ opt = teTopologyMap.get(curNetwork.teTopologyKey()).topologyData().optimization();
}
return new DefaultNetwork(networkId, supportingNetworkIds, nodes, links,
- topologyId, curNetwork.serverProvided(), ownerId);
+ topologyId, curNetwork.serverProvided(), ownerId, opt);
}
@Override
@@ -851,7 +851,9 @@
flags.set(TeTopology.BIT_CUSTOMIZED);
}
CommonTopologyData common = new CommonTopologyData(network.networkId(),
- OptimizationType.NOT_OPTIMIZED, flags, network.ownerId());
+ network.optimization(),
+ flags,
+ network.ownerId());
intTopo.setTopologydata(common);
teTopologyMap.put(topoKey, intTopo);
}
diff --git a/apps/tetopology/app/src/main/java/org/onosproject/tetopology/management/impl/TeMgrUtil.java b/apps/tetopology/app/src/main/java/org/onosproject/tetopology/management/impl/TeMgrUtil.java
index dc4c165..c2b9b39 100644
--- a/apps/tetopology/app/src/main/java/org/onosproject/tetopology/management/impl/TeMgrUtil.java
+++ b/apps/tetopology/app/src/main/java/org/onosproject/tetopology/management/impl/TeMgrUtil.java
@@ -229,7 +229,8 @@
}
}
return new DefaultNetwork(networkId, null, nodes, links,
- topologyId, false, teTopology.ownerId());
+ topologyId, false, teTopology.ownerId(),
+ teTopology.optimization());
}
}
diff --git a/apps/tetopology/app/src/main/java/org/onosproject/tetopology/management/impl/TeTopologyManager.java b/apps/tetopology/app/src/main/java/org/onosproject/tetopology/management/impl/TeTopologyManager.java
index 30ca4e2..69a8f2d 100644
--- a/apps/tetopology/app/src/main/java/org/onosproject/tetopology/management/impl/TeTopologyManager.java
+++ b/apps/tetopology/app/src/main/java/org/onosproject/tetopology/management/impl/TeTopologyManager.java
@@ -391,8 +391,9 @@
break;
case NETWORK_REMOVED:
post(new TeTopologyEvent(NETWORK_REMOVED,
- new DefaultNetwork(event.networkKey(),
- null, null, null, null, false, null)));
+ new DefaultNetwork(event.networkKey(), null, null,
+ null, null, false, null,
+ NOT_OPTIMIZED)));
break;
case NODE_ADDED:
case NODE_UPDATED:
diff --git a/apps/tetopology/app/src/test/java/org/onosproject/tetopology/management/DefaultBuilder.java b/apps/tetopology/app/src/test/java/org/onosproject/tetopology/management/DefaultBuilder.java
index 9ed72ba..c92bbc7 100644
--- a/apps/tetopology/app/src/test/java/org/onosproject/tetopology/management/DefaultBuilder.java
+++ b/apps/tetopology/app/src/test/java/org/onosproject/tetopology/management/DefaultBuilder.java
@@ -25,6 +25,7 @@
import org.onosproject.tetopology.management.api.EncodingType;
import org.onosproject.tetopology.management.api.KeyId;
import org.onosproject.tetopology.management.api.Network;
+import org.onosproject.tetopology.management.api.OptimizationType;
import org.onosproject.tetopology.management.api.SwitchingType;
import org.onosproject.tetopology.management.api.TeConstants;
import org.onosproject.tetopology.management.api.TeStatus;
@@ -253,15 +254,18 @@
}
private static Network networkBuilder(TeTopologyId teTopologyId, KeyId supportingNetworkId,
- Map<KeyId, NetworkNode> nodes, Map<KeyId, NetworkLink> links,
- boolean serverProvided, DeviceId ownerId) {
+ Map<KeyId, NetworkNode> nodes,
+ Map<KeyId, NetworkLink> links,
+ boolean serverProvided,
+ DeviceId ownerId,
+ OptimizationType optType) {
KeyId networkId = TeMgrUtil.toNetworkId(teTopologyId);
List<KeyId> supportingNetworkIds = null;
if (supportingNetworkId != null) {
supportingNetworkIds = Lists.newArrayList(supportingNetworkId);
}
return new DefaultNetwork(networkId, supportingNetworkIds, nodes, links, teTopologyId,
- serverProvided, ownerId);
+ serverProvided, ownerId, optType);
}
/**
@@ -318,10 +322,10 @@
ODU4);
links.put(networkLink.linkId(), networkLink);
DeviceId ownerId = DeviceId.deviceId(DOMAIN_ID);
- TeTopologyId topologyId = new TeTopologyId(PROVIDER_ID, CLIENT_ID, Long
- .toString(ABSTRACT_TOPOLOGY_ID));
+ TeTopologyId topologyId = new TeTopologyId(PROVIDER_ID, CLIENT_ID,
+ Long.toString(ABSTRACT_TOPOLOGY_ID));
network = networkBuilder(topologyId, null, nodes, links, false,
- ownerId);
+ ownerId, OptimizationType.NOT_OPTIMIZED);
return network;
}
diff --git a/apps/tetopology/app/src/test/java/org/onosproject/tetopology/management/SimpleTeTopologyStore.java b/apps/tetopology/app/src/test/java/org/onosproject/tetopology/management/SimpleTeTopologyStore.java
index f4ff72d..e313369 100644
--- a/apps/tetopology/app/src/test/java/org/onosproject/tetopology/management/SimpleTeTopologyStore.java
+++ b/apps/tetopology/app/src/test/java/org/onosproject/tetopology/management/SimpleTeTopologyStore.java
@@ -15,6 +15,7 @@
*/
package org.onosproject.tetopology.management;
+import static org.onosproject.tetopology.management.api.OptimizationType.NOT_OPTIMIZED;
import static org.onosproject.tetopology.management.api.TeTopologyEvent.Type.NETWORK_ADDED;
import static org.onosproject.tetopology.management.api.TeTopologyEvent.Type.NETWORK_REMOVED;
import static org.onosproject.tetopology.management.api.TeTopologyEvent.Type.TE_TOPOLOGY_ADDED;
@@ -297,6 +298,7 @@
}
TeTopologyId topologyId = null;
DeviceId ownerId = null;
+ OptimizationType opt = NOT_OPTIMIZED;
if (curNetwork.teTopologyKey() != null
&& teTopology(curNetwork.teTopologyKey()) != null) {
topologyId = new TeTopologyId(curNetwork.teTopologyKey()
@@ -304,11 +306,12 @@
teTopology(curNetwork.teTopologyKey())
.teTopologyIdStringValue());
ownerId = teTopology(curNetwork.teTopologyKey()).ownerId();
-
+ opt = teTopologyMap.get(curNetwork.teTopologyKey()).topologyData()
+ .optimization();
}
return new DefaultNetwork(networkId, supportingNetworkIds, nodes, links,
topologyId, curNetwork.serverProvided(),
- ownerId);
+ ownerId, opt);
}
@Override
@@ -408,9 +411,8 @@
// Hard rule for now
flags.set(TeTopology.BIT_CUSTOMIZED);
}
- CommonTopologyData common = new CommonTopologyData(network
- .networkId(), OptimizationType.NOT_OPTIMIZED, flags, network
- .ownerId());
+ CommonTopologyData common = new CommonTopologyData(network.networkId(), NOT_OPTIMIZED,
+ flags, network.ownerId());
intTopo.setTopologydata(common);
teTopologyMap.put(topoKey, intTopo);
// Assume new topology
@@ -424,8 +426,7 @@
networkMap.put(network.networkId(), newNetwork);
// Assume new network
TeTopologyEvent topologyEvent = new TeTopologyEvent(NETWORK_ADDED,
- network(network
- .networkId()));
+ network(network.networkId()));
notifyDelegate(topologyEvent);
}
@@ -440,7 +441,8 @@
null,
null,
false,
- null));
+ null,
+ NOT_OPTIMIZED));
notifyDelegate(topologyEvent);
if (network != null && network.teTopologyKey() != null) {
removeNetworkMapEntrys(network, false);