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