Martin Mucha has uploaded a new change for review.

Change subject: <utils>: performance improvement
......................................................................

<utils>: performance improvement

* initialized ArrayList to avoid copying arrays (tradeof is
bigger memory footprint during initialization)

* changed transforming macAddress stored in 'long' to
String; loop is used instead of regex.

---
this changes cuts CPU time approx to 50% of original.
---
Note: code can be suboptimal when looking for LOT OF macs but range
offers to little of them: in that case unneccesarily big
array alocated and then trown away for no reason. But this should
not be an issue.

Change-Id: I09f87ebd1ea17d09a974ce6ca3e26bd2454a72fc
Bug-Url: https://bugzilla.redhat.com/1063064
Signed-off-by: Martin Mucha <mmu...@redhat.com>
---
M 
backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/MacAddressRangeUtils.java
1 file changed, 19 insertions(+), 4 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/40/25940/1

diff --git 
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/MacAddressRangeUtils.java
 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/MacAddressRangeUtils.java
index e6bad59..eb97f41 100644
--- 
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/MacAddressRangeUtils.java
+++ 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/MacAddressRangeUtils.java
@@ -24,25 +24,40 @@
 
         long startNum = Long.parseLong(parsedRangeStart, HEX_RADIX);
         long endNum = Long.parseLong(parsedRangeEnd, HEX_RADIX);
+        return innerInitRange(stopAfter, startNum, endNum);
+    }
+
+    private static List<String> innerInitRange(int stopAfter, long startNum, 
long endNum) {
         if (startNum > endNum) {
             return Collections.emptyList();
         }
 
-        List<String> macAddresses = new ArrayList<String>();
+        List<String> macAddresses = new ArrayList<>(stopAfter);     
//initialize ArrayList for all potential records. (ignore that there need not 
be that many records.
         for (long i = startNum; i <= endNum; i++) {
             if ((MAC_ADDRESS_MULTICAST_BIT & i) != 0) {
                 continue;
             }
 
-            String value = String.format("%012x", i);
-            macAddresses.add(StringUtils.join(value.split("(?<=\\G..)"), ':'));
+            macAddresses.add(macAddressIntToString(i));
 
             if (stopAfter-- <= 0) {
                 return macAddresses;
             }
         }
 
-        return macAddresses;
+        return new ArrayList<>(macAddresses);     //do a copy to reduce array 
length (array stored in ArrayList impl.)
+    }
+
+    private static String macAddressIntToString(long macAddress) {
+        String value = String.format("%012x", macAddress);
+//            String original = StringUtils.join(value.split("(?<=\\G..)"), 
':');       //this regex was formerly used to add colons.
+
+        char[] chars = value.toCharArray();
+        String result = "" + chars[0] + chars[1];
+        for (int pos = 2; pos < value.length(); pos += 2) {
+            result += ":" + chars[pos] + chars[pos + 1];
+        }
+        return result;
     }
 
     public static boolean isRangeValid(String start, String end) {


-- 
To view, visit http://gerrit.ovirt.org/25940
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I09f87ebd1ea17d09a974ce6ca3e26bd2454a72fc
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Martin Mucha <mmu...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to