Optimization - calculate the subnet prefix only once. 24/3924/2
authorAlissa Bonas <abonas@redhat.com>
Wed, 25 Dec 2013 17:23:33 +0000 (19:23 +0200)
committerGerrit Code Review <gerrit@opendaylight.org>
Wed, 22 Jan 2014 21:04:29 +0000 (21:04 +0000)
Before this change, subnet prefix was calculated on every
'isSubnetOf' call. Since the prefix is not changing unless
the subnet address itself changed, it's sufficient to do it only once
and keep it as part of the Subnet object.

Marked it as transient so it will not be serialized - it can be
calculated from the rest of the info of Subnet anytime after
deserialization.

Change-Id: Ie16bf80713820b566864bea0ff46298c93cc2d47
Signed-off-by: Alissa Bonas <abonas@redhat.com>
opendaylight/switchmanager/api/src/main/java/org/opendaylight/controller/switchmanager/Subnet.java

index 56df8e2..2794109 100644 (file)
@@ -25,6 +25,7 @@ public class Subnet implements Cloneable, Serializable {
     private static final long serialVersionUID = 1L;
     // Key fields
     private InetAddress networkAddress;
     private static final long serialVersionUID = 1L;
     // Key fields
     private InetAddress networkAddress;
+    private transient InetAddress subnetPrefix;
     private short subnetMaskLength;
     // Property fields
     private short vlan;
     private short subnetMaskLength;
     // Property fields
     private short vlan;
@@ -114,6 +115,7 @@ public class Subnet implements Cloneable, Serializable {
      */
     public Subnet setNetworkAddress(InetAddress networkAddress) {
         this.networkAddress = networkAddress;
      */
     public Subnet setNetworkAddress(InetAddress networkAddress) {
         this.networkAddress = networkAddress;
+        this.subnetPrefix = null;
         return this;
     }
 
         return this;
     }
 
@@ -159,10 +161,12 @@ public class Subnet implements Cloneable, Serializable {
         if (ip == null) {
             return false;
         }
         if (ip == null) {
             return false;
         }
-        InetAddress thisPrefix = getPrefixForAddress(this.networkAddress);
+        if(subnetPrefix == null) {
+            subnetPrefix = getPrefixForAddress(this.networkAddress);
+        }
         InetAddress otherPrefix = getPrefixForAddress(ip);
         boolean isSubnetOf = true;
         InetAddress otherPrefix = getPrefixForAddress(ip);
         boolean isSubnetOf = true;
-        if (((thisPrefix == null) || (otherPrefix == null)) || (!thisPrefix.equals(otherPrefix)) ) {
+        if (((subnetPrefix == null) || (otherPrefix == null)) || (!subnetPrefix.equals(otherPrefix)) ) {
             isSubnetOf = false;
         }
         return isSubnetOf;
             isSubnetOf = false;
         }
         return isSubnetOf;