Static optical madness. Fix in device resource store. Javadoc.
Change-Id: Iaba6b62094b3d2023f352d52037c6d1535c31b88
diff --git a/apps/optical/src/main/java/org/onosproject/optical/OpticalPathProvisioner.java b/apps/optical/src/main/java/org/onosproject/optical/OpticalPathProvisioner.java
index ab89c1d..d0af3b5 100644
--- a/apps/optical/src/main/java/org/onosproject/optical/OpticalPathProvisioner.java
+++ b/apps/optical/src/main/java/org/onosproject/optical/OpticalPathProvisioner.java
@@ -378,8 +378,10 @@
LinkResourceAllocations lra = linkResourceService.getAllocations(intent.id());
if (intent instanceof OpticalConnectivityIntent) {
deviceResourceService.releasePorts(intent.id());
- linkResourceService.releaseResources(lra);
- } else if (intent instanceof OpticalCircuitIntent) {
+ if (lra != null) {
+ linkResourceService.releaseResources(lra);
+ }
+ } else if (intent instanceof OpticalCircuitIntent) {
deviceResourceService.releasePorts(intent.id());
deviceResourceService.releaseMapping(intent.id());
if (lra != null) {
diff --git a/core/api/src/main/java/org/onosproject/net/OchSignal.java b/core/api/src/main/java/org/onosproject/net/OchSignal.java
index 356950c..e775521 100644
--- a/core/api/src/main/java/org/onosproject/net/OchSignal.java
+++ b/core/api/src/main/java/org/onosproject/net/OchSignal.java
@@ -17,6 +17,7 @@
import com.google.common.base.MoreObjects;
import org.onlab.util.Frequency;
+import org.onosproject.net.resource.link.LambdaResourceAllocation;
import java.util.Objects;
@@ -34,6 +35,9 @@
public static final Frequency CENTER_FREQUENCY = Frequency.ofTHz(193.1);
public static final Frequency FLEX_GRID_SLOT = Frequency.ofGHz(12.5);
+ private static final GridType DEFAULT_OCH_GRIDTYPE = GridType.DWDM;
+ private static final ChannelSpacing DEFAULT_CHANNEL_SPACING = ChannelSpacing.CHL_50GHZ;
+
private final GridType gridType;
private final ChannelSpacing channelSpacing;
@@ -63,6 +67,33 @@
}
/**
+ * Create OCh signal from lambda resource allocation.
+ *
+ * @param alloc lambda resource allocation
+ * @param maxFrequency maximum frequency
+ * @param grid grid spacing frequency
+ */
+ public OchSignal(LambdaResourceAllocation alloc, Frequency maxFrequency, Frequency grid) {
+ int channel = alloc.lambda().toInt();
+
+ // Calculate center frequency
+ Frequency centerFrequency = maxFrequency.subtract(grid.multiply(channel - 1));
+
+ this.gridType = DEFAULT_OCH_GRIDTYPE;
+ this.channelSpacing = DEFAULT_CHANNEL_SPACING;
+ this.spacingMultiplier = (int) (centerFrequency.subtract(OchSignal.CENTER_FREQUENCY).asHz() / grid.asHz());
+ this.slotGranularity = (int) Math.round((double) grid.asHz() / ChannelSpacing.CHL_12P5GHZ.frequency().asHz());
+ }
+
+ public OchSignal(Frequency centerFrequency, ChannelSpacing channelSpacing, int slotGranularity) {
+ this.gridType = DEFAULT_OCH_GRIDTYPE;
+ this.channelSpacing = channelSpacing;
+ this.spacingMultiplier = (int) Math.round((double) centerFrequency.
+ subtract(OchSignal.CENTER_FREQUENCY).asHz() / channelSpacing().frequency().asHz());
+ this.slotGranularity = slotGranularity;
+ }
+
+ /**
* Returns grid type.
*
* @return grid type
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/OpticalCircuitIntentCompiler.java b/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/OpticalCircuitIntentCompiler.java
index 557288c..fb58ae8 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/OpticalCircuitIntentCompiler.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/OpticalCircuitIntentCompiler.java
@@ -165,9 +165,9 @@
* Checks if current allocations on given resource can satisfy request.
* If the resource is null, return true.
*
- * @param request
- * @param resource
- * @return
+ * @param request the intent making the request
+ * @param resource the resource on which to map the intent
+ * @return true if the resource can accept the request, false otherwise
*/
private boolean isAvailable(Intent request, IntentId resource) {
if (resource == null) {
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/OpticalConnectivityIntentCompiler.java b/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/OpticalConnectivityIntentCompiler.java
index e5a8e3b..bab6098 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/OpticalConnectivityIntentCompiler.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/OpticalConnectivityIntentCompiler.java
@@ -27,10 +27,8 @@
import org.apache.felix.scr.annotations.ReferenceCardinality;
import org.onlab.util.Frequency;
import org.onosproject.net.AnnotationKeys;
-import org.onosproject.net.ChannelSpacing;
import org.onosproject.net.ConnectPoint;
import org.onosproject.net.DeviceId;
-import org.onosproject.net.GridType;
import org.onosproject.net.Link;
import org.onosproject.net.OchPort;
import org.onosproject.net.OchSignal;
@@ -73,9 +71,6 @@
protected static final Logger log = LoggerFactory.getLogger(OpticalConnectivityIntentCompiler.class);
- private static final GridType DEFAULT_OCH_GRIDTYPE = GridType.DWDM;
- private static final ChannelSpacing DEFAULT_CHANNEL_SPACING = ChannelSpacing.CHL_50GHZ;
-
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected IntentExtensionService intentManager;
@@ -127,24 +122,31 @@
for (Path path : paths) {
// Static or dynamic lambda allocation
- LambdaResourceAllocation lambdaAlloc;
String staticLambda = srcPort.annotations().value(AnnotationKeys.STATIC_LAMBDA);
+ OchPort srcOchPort = (OchPort) srcPort;
+ OchPort dstOchPort = (OchPort) dstPort;
+ OchSignal ochSignal;
+
+ // FIXME: need to actually reserve the lambda for static lambda's
if (staticLambda != null) {
- // FIXME: need to actually reserve the lambda
- lambdaAlloc = new LambdaResourceAllocation(LambdaResource.valueOf(Integer.parseInt(staticLambda)));
+ ochSignal = new OchSignal(Frequency.ofHz(Long.valueOf(staticLambda)),
+ srcOchPort.lambda().channelSpacing(),
+ srcOchPort.lambda().slotGranularity());
+ } else if (!srcOchPort.isTunable() || !dstOchPort.isTunable()) {
+ // FIXME: also check OCh port
+ ochSignal = srcOchPort.lambda();
} else {
// Request and reserve lambda on path
LinkResourceAllocations linkAllocs = assignWavelength(intent, path);
if (linkAllocs == null) {
continue;
}
- lambdaAlloc = getWavelength(path, linkAllocs);
+ LambdaResourceAllocation lambdaAlloc = getWavelength(path, linkAllocs);
+ OmsPort omsPort = (OmsPort) deviceService.getPort(path.src().deviceId(), path.src().port());
+ ochSignal = new OchSignal(lambdaAlloc, omsPort.maxFrequency(), omsPort.grid());
}
- OmsPort omsPort = (OmsPort) deviceService.getPort(path.src().deviceId(), path.src().port());
-
// Create installable optical path intent
- OchSignal ochSignal = getOchSignal(lambdaAlloc, omsPort.maxFrequency(), omsPort.grid());
// Only support fixed grid for now
OchSignalType signalType = OchSignalType.FIXED_GRID;
@@ -239,29 +241,6 @@
return true;
}
- /**
- * Convert lambda resource allocation in OCh signal.
- *
- * @param alloc lambda resource allocation
- * @param maxFrequency maximum frequency
- * @param grid grid spacing frequency
- * @return OCh signal
- */
- private OchSignal getOchSignal(LambdaResourceAllocation alloc, Frequency maxFrequency, Frequency grid) {
- int channel = alloc.lambda().toInt();
-
- // Calculate center frequency
- Frequency centerFrequency = maxFrequency.subtract(grid.multiply(channel - 1));
-
- // Build OCh signal object
- int spacingMultiplier = (int) (centerFrequency.subtract(OchSignal.CENTER_FREQUENCY).asHz() / grid.asHz());
- int slotGranularity = (int) (grid.asHz() / ChannelSpacing.CHL_12P5GHZ.frequency().asHz());
- OchSignal ochSignal = new OchSignal(DEFAULT_OCH_GRIDTYPE, DEFAULT_CHANNEL_SPACING,
- spacingMultiplier, slotGranularity);
-
- return ochSignal;
- }
-
private ConnectPoint staticPort(ConnectPoint connectPoint) {
Port port = deviceService.getPort(connectPoint.deviceId(), connectPoint.port());
diff --git a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/ConsistentDeviceResourceStore.java b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/ConsistentDeviceResourceStore.java
index bc45583..78cbb28 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/ConsistentDeviceResourceStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/ConsistentDeviceResourceStore.java
@@ -167,7 +167,7 @@
public Set<IntentId> getMapping(IntentId intentId) {
Versioned<Set<IntentId>> result = intentMapping.get(intentId);
- if (result == null) {
+ if (result != null) {
return result.value();
}
@@ -178,7 +178,6 @@
public boolean allocateMapping(IntentId keyIntentId, IntentId valIntentId) {
Versioned<Set<IntentId>> versionedIntents = intentMapping.get(keyIntentId);
-
if (versionedIntents == null) {
Set<IntentId> newSet = new HashSet<>();
newSet.add(valIntentId);
@@ -216,6 +215,7 @@
for (Port port : ports) {
portAllocs.remove(port);
}
+ tx.commit();
} catch (Exception e) {
log.error("Exception thrown, rolling back", e);
tx.abort();
diff --git a/web/api/src/main/java/org/onosproject/rest/resources/ConfigProvider.java b/web/api/src/main/java/org/onosproject/rest/resources/ConfigProvider.java
index c7feaea..978484e 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/ConfigProvider.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/ConfigProvider.java
@@ -235,7 +235,11 @@
port = portNumber(node.path("port").asLong(0));
}
- checkNotNull(port);
+ if (port == null) {
+ log.error("Cannot find port given in node {}", node);
+ return null;
+ }
+
String portName = Strings.emptyToNull(port.name());
SparseAnnotations annotations = null;
if (portName != null) {