submit =
- deviceTx.submit(Timeouts.DEVICE_WRITE_TIMEOUT, Timeouts.DEVICE_WRITE_TIMEOUT_UNIT);
- submit.get();
- LOG.info("Spanloss Value update completed successfully");
- return true;
}
- } catch (InterruptedException | ExecutionException e) {
- LOG.warn("Unable to set spanloss", e);
- }
+ } catch (OpenRoadmInterfaceException e) {
+ // TODO Auto-generated catch block
+ LOG.error("OpenRoadmInterfaceException occured: ",e);
+ } /**catch (InterruptedException e) {
+ // TODO Auto-generated catch block
+ } catch (ExecutionException e) {
+ // TODO Auto-generated catch block
+ }**/
return false;
}
@@ -400,62 +514,100 @@ public class OlmPowerServiceImpl implements OlmPowerService {
*
* 2. Set Spanloss value for interface
*
- * @param roadmLinks reference to list of RoadmLinks
- * @return true/false
+ * @param roadmLinks
+ * reference to list of RoadmLinks
+ * @return map with list of spans with their spanloss value
*/
- private boolean getLinkSpanloss(List roadmLinks) {
+ private Map getLinkSpanloss(List roadmLinks) {
+ Map map = new HashMap<>();
LOG.info("Executing GetLinkSpanLoss");
- BigDecimal spanLoss = new BigDecimal(0);
- for (int i = 0; i < roadmLinks.size(); i++) {
-
- OtsPmHolder srcOtsPmHoler = getPmMeasurements(roadmLinks.get(i).getSrcNodeId(),
- roadmLinks.get(i).getSrcTpId(), "OpticalPowerOutput");
- OtsPmHolder destOtsPmHoler = getPmMeasurements(roadmLinks.get(i).getDestNodeId(),
- roadmLinks.get(i).getDestTpid(), "OpticalPowerInput");
- spanLoss = new BigDecimal(srcOtsPmHoler.getOtsParameterVal() - destOtsPmHoler.getOtsParameterVal())
- .setScale(0, RoundingMode.HALF_UP);
- LOG.info("Spanloss Calculated as :" + spanLoss + "=" + srcOtsPmHoler.getOtsParameterVal() + "-"
- + destOtsPmHoler.getOtsParameterVal());
- if (spanLoss.doubleValue() < 28 && spanLoss.doubleValue() > 0) {
- if (!setSpanLoss(roadmLinks.get(i).getSrcNodeId(), srcOtsPmHoler.getOtsInterfaceName(), spanLoss,
- "TX")) {
- LOG.info("Setting spanLoss failed for " + roadmLinks.get(i).getSrcNodeId());
- return false;
- }
- if (!setSpanLoss(roadmLinks.get(i).getDestNodeId(), destOtsPmHoler.getOtsInterfaceName(), spanLoss,
- "RX")) {
- LOG.info("Setting spanLoss failed for " + roadmLinks.get(i).getDestNodeId());
- return false;
- }
+ BigDecimal spanLoss;
+ for (RoadmLinks link : roadmLinks) {
+ String sourceNodeId = link.getSrcNodeId();
+ String sourceTpId = link.getSrcTpId();
+ String destNodeId = link.getDestNodeId();
+ String destTpId = link.getDestTpid();
+ OtsPmHolder srcOtsPmHoler = getPmMeasurements(sourceNodeId, sourceTpId, "OpticalPowerOutput");
+ if (srcOtsPmHoler == null) {
+ srcOtsPmHoler = getPmMeasurements(sourceNodeId, sourceTpId, "OpticalPowerOutputOSC");
}
+ OtsPmHolder destOtsPmHoler = getPmMeasurements(destNodeId, destTpId, "OpticalPowerInput");
+ if (destOtsPmHoler == null) {
+ destOtsPmHoler = getPmMeasurements(destNodeId, destTpId, "OpticalPowerInputOSC");
+ }
+
+ if (srcOtsPmHoler.getOtsInterfaceName() == null || destOtsPmHoler.getOtsInterfaceName() == null) {
+ LOG.warn("OTS is not present for the link {}", link);
+ continue;
+ }
+ spanLoss = BigDecimal.valueOf(srcOtsPmHoler.getOtsParameterVal() - destOtsPmHoler.getOtsParameterVal())
+ .setScale(1, RoundingMode.HALF_UP);
+ LOG.info("Spanloss Calculated as :{}={}-{}",
+ spanLoss, srcOtsPmHoler.getOtsParameterVal(), destOtsPmHoler.getOtsParameterVal());
+ if (spanLoss.doubleValue() > 28) {
+ LOG.warn("Span Loss is out of range of OpenROADM specifications");
+ }
+ if (spanLoss.intValue() <= 0) {
+ spanLoss = BigDecimal.valueOf(0);
+ }
+ if (!setSpanLoss(sourceNodeId, srcOtsPmHoler.getOtsInterfaceName(), spanLoss, "TX")) {
+ LOG.info("Setting spanLoss failed for {}", sourceNodeId);
+ return null;
+ }
+ if (!setSpanLoss(destNodeId, destOtsPmHoler.getOtsInterfaceName(), spanLoss, "RX")) {
+ LOG.info("Setting spanLoss failed for {}", destNodeId);
+ return null;
+ }
+ map.put(link.getLinkId(), spanLoss);
}
- return true;
+ return map;
}
private String getRealNodeId(String mappedNodeId) {
KeyedInstanceIdentifier mappedNodeII =
- InstanceIdentifiers.OVERLAY_NETWORK_II.child(Node.class, new NodeKey(new NodeId(mappedNodeId)));
- com.google.common.base.Optional realNode;
- try (ReadOnlyTransaction readOnlyTransaction = dataBroker.newReadOnlyTransaction()) {
+ InstanceIdentifiers.OVERLAY_NETWORK_II.child(Node.class, new NodeKey(new NodeId(mappedNodeId)));
+ Optional realNode;
+ try (ReadTransaction readOnlyTransaction = this.dataBroker.newReadOnlyTransaction()) {
realNode = readOnlyTransaction.read(LogicalDatastoreType.CONFIGURATION, mappedNodeII).get();
} catch (InterruptedException | ExecutionException e) {
- LOG.error(e.getMessage(), e);
+ LOG.error("Error on getRealNodeId {} :", mappedNodeId, e);
throw new IllegalStateException(e);
}
- if (!realNode.isPresent() || realNode.get().getSupportingNode() == null) {
+ if (!realNode.isPresent() || (realNode.get().getSupportingNode() == null)) {
+ LOG.error("supporting node is null");
throw new IllegalArgumentException(
- String.format("Could not find node %s, or supporting node is not present", mappedNodeId));
+ String.format("Could not find node %s, or supporting node is not present", mappedNodeId));
}
- List collect = realNode.get().getSupportingNode().stream()
- .filter(node -> node.getNetworkRef() != null
- && NetworkUtils.UNDERLAY_NETWORK_ID.equals(node.getNetworkRef().getValue())
- && node.getNodeRef() != null && !Strings.isNullOrEmpty(node.getNodeRef().getValue()))
- .collect(Collectors.toList());
- if (collect.isEmpty() || collect.size() > 1) {
+ List collect = realNode.get().nonnullSupportingNode().values().stream()
+ .filter(node -> (node.getNetworkRef() != null)
+ && NetworkUtils.UNDERLAY_NETWORK_ID.equals(node.getNetworkRef().getValue())
+ && (node.getNodeRef() != null) && !Strings.isNullOrEmpty(node.getNodeRef().getValue()))
+ .collect(Collectors.toList());
+ if (collect.isEmpty() || (collect.size() > 1)) {
throw new IllegalArgumentException(String.format("Invalid support node count [%d] was found for node %s",
- collect.size(), mappedNodeId));
+ collect.size(), mappedNodeId));
+
}
+ LOG.info("getRealNodeId - return {}", collect.iterator().next().getNodeRef().getValue());
return collect.iterator().next().getNodeRef().getValue();
}
+ private Link getNetworkLinkById(LinkId linkId) {
+ NetworkKey overlayTopologyKey = new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID));
+ InstanceIdentifier linkIID = InstanceIdentifier.builder(Networks.class)
+ .child(Network.class, overlayTopologyKey)
+ .augmentation(Network1.class).child(Link.class, new LinkKey(linkId))
+ .build();
+ Optional linkOptional;
+ try (ReadTransaction rtx = dataBroker.newReadOnlyTransaction()) {
+ //TODO change to constant from Timeouts class when it will be merged.
+ linkOptional = rtx.read(LogicalDatastoreType.CONFIGURATION, linkIID).get(Timeouts.DATASTORE_READ,
+ TimeUnit.MILLISECONDS);
+ return linkOptional.get();
+ } catch (InterruptedException | ExecutionException | TimeoutException e) {
+ LOG.warn("Read of {} topology failed", NetworkUtils.OVERLAY_NETWORK_ID);
+ return null;
+ }
+ }
+
}