Mike Kolesnik has uploaded a new change for review. Change subject: engine: Initialize MAC pool partially ......................................................................
engine: Initialize MAC pool partially If MAC pool exceeds the maximum then we will initialize it until its full. An error is being written to the log in this case. The partial initialization will prevent an OOM in case of a really big range (not entirely though, this will be fixed in the future). Change-Id: I0547509eb81a51599e2342503c9f108df1fa47c7 Bug-Url: https://bugzilla.redhat.com/1065011 Signed-off-by: Mike Kolesnik <mkole...@redhat.com> (cherry picked from commit ee37b7289f9d1a6c2b803a3650995c4127876131) --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/MacPoolManager.java M backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/MacAddressRangeUtils.java 2 files changed, 14 insertions(+), 10 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/31/24531/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/MacPoolManager.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/MacPoolManager.java index b29230d..05658f7 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/MacPoolManager.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/MacPoolManager.java @@ -24,6 +24,7 @@ public class MacPoolManager { + private static final Integer MAX_MACS_IN_POOL = Config.<Integer> GetValue(ConfigValues.MaxMacsCountInPool); private static final String INIT_ERROR_MSG = "{0}: Error in initializing MAC Addresses pool manager."; private static final MacPoolManager INSTANCE = new MacPoolManager(); @@ -70,8 +71,8 @@ try { initRanges(ranges); } catch (MacPoolExceededMaxException e) { - log.errorFormat("{0}: MAC Pool range exceeded maximum number of mac pool addressed. " - + "Please check Mac Pool configuration.", instanceId()); + log.errorFormat("{0}: MAC Pool range exceeded maximum number of mac pool addresses ({1}). " + + "Please check Mac Pool configuration.", instanceId(), MAX_MACS_IN_POOL); } } @@ -81,7 +82,9 @@ forceAddMac(iface.getMacAddress()); } initialized = true; - log.infoFormat("{0}: Finished initializing", instanceId()); + log.infoFormat("{0}: Finished initializing. Available MACs in pool: {1}", + instanceId(), + availableMacs.size()); } catch (Exception ex) { log.errorFormat(INIT_ERROR_MSG, instanceId(), ex); } finally { @@ -118,9 +121,10 @@ } private boolean initRange(String start, String end) { - List<String> macAddresses = MacAddressRangeUtils.initRange(start, end); + List<String> macAddresses = MacAddressRangeUtils.initRange(start, end, MAX_MACS_IN_POOL); - if (macAddresses.size() + availableMacs.size() > Config.<Integer> GetValue(ConfigValues.MaxMacsCountInPool)) { + if (macAddresses.size() + availableMacs.size() > MAX_MACS_IN_POOL) { + availableMacs.addAll(macAddresses.subList(0, MAX_MACS_IN_POOL - availableMacs.size())); throw new MacPoolExceededMaxException(); } 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 962cf01..e6bad59 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 @@ -11,11 +11,11 @@ private static final long MAC_ADDRESS_MULTICAST_BIT = 0x010000000000L; private static final int HEX_RADIX = 16; - public static List<String> initRange(String start, String end) { - return innerInitRange(start, end, false); + public static List<String> initRange(String start, String end, int size) { + return innerInitRange(start, end, size); } - private static List<String> innerInitRange(String start, String end, boolean stopOnFirst) { + private static List<String> innerInitRange(String start, String end, int stopAfter) { String parsedRangeStart = StringUtils.remove(start, ':'); String parsedRangeEnd = StringUtils.remove(end, ':'); if (parsedRangeEnd == null || parsedRangeStart == null) { @@ -37,7 +37,7 @@ String value = String.format("%012x", i); macAddresses.add(StringUtils.join(value.split("(?<=\\G..)"), ':')); - if (stopOnFirst) { + if (stopAfter-- <= 0) { return macAddresses; } } @@ -46,6 +46,6 @@ } public static boolean isRangeValid(String start, String end) { - return !innerInitRange(start, end, true).isEmpty(); + return !innerInitRange(start, end, 1).isEmpty(); } } -- To view, visit http://gerrit.ovirt.org/24531 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I0547509eb81a51599e2342503c9f108df1fa47c7 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.3 Gerrit-Owner: Mike Kolesnik <mkole...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches