Bug 6193 - Change in length of DatapathId of a switch 92/42092/1
authorSai MarapaReddy <sai.marapareddy@gmail.com>
Tue, 19 Jul 2016 20:37:21 +0000 (13:37 -0700)
committerSai MarapaReddy <sai.marapareddy@gmail.com>
Tue, 19 Jul 2016 20:37:21 +0000 (13:37 -0700)
Dpid can go out of the Long range which results in NumberFormatException.
Hence the need to use BigInteger to hold the Dpid

Current patch accomodates Dpid to be of type BigInteger.

Change-Id: Id10a6afb09ee6da04faad6a0bcfaa960f32e93b7
Signed-off-by: Sai MarapaReddy <sai.marapareddy@gmail.com>
Author: Sai MarapaReddy <sai.marapareddy@gmail.com>

applications/forwardingrules-manager/src/main/java/org/opendaylight/openflowplugin/applications/frm/FlowNodeConnectorInventoryTranslator.java
applications/forwardingrules-manager/src/main/java/org/opendaylight/openflowplugin/applications/frm/impl/FlowNodeConnectorInventoryTranslatorImpl.java
applications/forwardingrules-manager/src/main/java/org/opendaylight/openflowplugin/applications/frm/impl/FlowNodeReconciliationImpl.java

index da1c6accfc60826fed6743a05dbe2ae1c452c736..04a4ea1fb82aa31f66c442e1ae8b6225a0335c3d 100644 (file)
@@ -8,7 +8,9 @@
 
 package org.opendaylight.openflowplugin.applications.frm;
 
+import java.math.BigInteger;
+
 public interface FlowNodeConnectorInventoryTranslator {
 
-    public boolean isNodeConnectorUpdated(long dpId, String portName);
+    public boolean isNodeConnectorUpdated(BigInteger dpId, String portName);
 }
index e4b032e370b5875e5852e1d4f4d484e9ed325f62..1d017a14f5e018d784dc05433b5ac296615e22b3 100644 (file)
@@ -25,6 +25,7 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.math.BigInteger;
 import java.util.concurrent.Callable;
 
 public class FlowNodeConnectorInventoryTranslatorImpl extends AbstractNodeConnectorCommitter<FlowCapableNodeConnector> implements FlowNodeConnectorInventoryTranslator {
@@ -42,7 +43,7 @@ public class FlowNodeConnectorInventoryTranslatorImpl extends AbstractNodeConnec
             .augmentation(FlowCapableNodeConnector.class)
             .build();
 
-    private Multimap<Long,String> dpnToPortMultiMap = Multimaps.synchronizedListMultimap(ArrayListMultimap.<Long,String>create());
+    private Multimap<BigInteger,String> dpnToPortMultiMap = Multimaps.synchronizedListMultimap(ArrayListMultimap.<BigInteger,String>create());
 
     public FlowNodeConnectorInventoryTranslatorImpl(final ForwardingRulesManager manager, final DataBroker dataBroker){
         super(manager, FlowCapableNodeConnector.class);
@@ -92,7 +93,7 @@ public class FlowNodeConnectorInventoryTranslatorImpl extends AbstractNodeConnec
             LOG.info("Node Connector removed");
             String sNodeConnectorIdentifier = nodeConnIdent
                     .firstKeyOf(NodeConnector.class, NodeConnectorKey.class).getId().getValue();
-            long nDpId = getDpIdFromPortName(sNodeConnectorIdentifier);
+            BigInteger nDpId = getDpIdFromPortName(sNodeConnectorIdentifier);
             String portName = del.getName();
 
             dpnToPortMultiMap.remove(nDpId, sNodeConnectorIdentifier);
@@ -113,7 +114,7 @@ public class FlowNodeConnectorInventoryTranslatorImpl extends AbstractNodeConnec
             LOG.info("Node Connector added");
             String sNodeConnectorIdentifier = nodeConnIdent
                     .firstKeyOf(NodeConnector.class, NodeConnectorKey.class).getId().getValue();
-            long nDpId = getDpIdFromPortName(sNodeConnectorIdentifier);
+            BigInteger nDpId = getDpIdFromPortName(sNodeConnectorIdentifier);
 
             String portName = add.getName();
             if(!dpnToPortMultiMap.containsEntry(nDpId,sNodeConnectorIdentifier)) {
@@ -130,14 +131,14 @@ public class FlowNodeConnectorInventoryTranslatorImpl extends AbstractNodeConnec
     }
 
     @Override
-    public boolean isNodeConnectorUpdated(long dpId, String portName){
+    public boolean isNodeConnectorUpdated(BigInteger dpId, String portName){
         return dpnToPortMultiMap.containsEntry(dpId,portName) ;
     }
 
 
-    private long getDpIdFromPortName(String portName) {
+    private BigInteger getDpIdFromPortName(String portName) {
         String dpId = portName.substring(portName.indexOf(SEPARATOR) + 1, portName.lastIndexOf(SEPARATOR));
-        return Long.parseLong(dpId);
+        return new BigInteger(dpId);
     }
 }
 
index dc620b6790a92dbda42c26a2f57bbed0960e8c92..909f4c1423b3113cea57c6c820cccc44aff45c71 100644 (file)
@@ -8,6 +8,7 @@
 
 package org.opendaylight.openflowplugin.applications.frm.impl;
 
+import java.math.BigInteger;
 import java.util.*;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
@@ -236,7 +237,7 @@ public class FlowNodeReconciliationImpl implements FlowNodeReconciliation {
         public void run() {
 
             String sNode = nodeIdentity.firstKeyOf(Node.class, NodeKey.class).getId().getValue();
-            long nDpId = getDpnIdFromNodeName(sNode);
+            BigInteger nDpId = getDpnIdFromNodeName(sNode);
 
             ReadOnlyTransaction trans = provider.getReadTranaction();
             Optional<FlowCapableNode> flowNode = Optional.absent();
@@ -379,9 +380,9 @@ public class FlowNodeReconciliationImpl implements FlowNodeReconciliation {
             trans.close();
         }
     }
-    private long getDpnIdFromNodeName(String nodeName) {
+    private BigInteger getDpnIdFromNodeName(String nodeName) {
         String dpId = nodeName.substring(nodeName.lastIndexOf(SEPARATOR) + 1);
-        return Long.parseLong(dpId);
+        return new BigInteger(dpId);
     }
 
     private void reconciliationPreProcess(final InstanceIdentifier<FlowCapableNode> nodeIdent) {