Martin Mucha has uploaded a new change for review. Change subject: core: methods to migrate macPool content to another instance. ......................................................................
core: methods to migrate macPool content to another instance. performed by copying one mac after another. This is probably not very efficient, but with possibility of disjoint mac ranges there is probably not a better way. And second, when dealing with scoped pool, their ranges will be probably smaller and even if not this action isn't that frequent in system. Bug-Url: https://bugzilla.redhat.com/1078844 Change-Id: I72aa0f673811731cce0affd8a3d48cf75944e189 Signed-off-by: Martin Mucha <mmu...@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/MacPoolManagerOriginal.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/MacPoolManagerRanges.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/MacPoolManagerStrategy.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/ObjectCounter.java 4 files changed, 77 insertions(+), 1 deletion(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/94/26794/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/MacPoolManagerOriginal.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/MacPoolManagerOriginal.java index b56647b..48abf17 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/MacPoolManagerOriginal.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/MacPoolManagerOriginal.java @@ -364,4 +364,28 @@ return macAddresses; } + @Override + public void copyContent(MacPoolManagerStrategy macPoolManagerStrategy) { + copyAllocatedMacs(macPoolManagerStrategy); + copyAllocatedCustomMacs(macPoolManagerStrategy); + } + + private void copyAllocatedCustomMacs(MacPoolManagerStrategy macPoolManagerStrategy) { + for (Map.Entry<String, Integer> entry : allocatedCustomMacs.entrySet()) { + final String mac = entry.getKey(); + for (int i = 0; i < entry.getValue(); i++) { + macPoolManagerStrategy.forceAddMac(mac); + } + } + } + + private void copyAllocatedMacs(MacPoolManagerStrategy macPoolManagerStrategy) { + for (Map.Entry<String, Integer> entry : allocatedMacs.entrySet()) { + final String mac = entry.getKey(); + for(int i = 0; i < entry.getValue(); i++) { + macPoolManagerStrategy.forceAddMac(mac); + } + } + } + } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/MacPoolManagerRanges.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/MacPoolManagerRanges.java index 2f7f66d..878cad8 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/MacPoolManagerRanges.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/MacPoolManagerRanges.java @@ -261,6 +261,13 @@ if (!initialized) { throw new IllegalStateException("This instance not yet initialized."); } + + } + + @Override + public void copyContent(MacPoolManagerStrategy macPoolManagerStrategy) { + macsStorage.copyAllocatedCustomMacs(macPoolManagerStrategy); + macsStorage.copyAllocatedMacs(macPoolManagerStrategy); } private static class MacsStorage { @@ -375,6 +382,23 @@ } } return null; + } + + private void copyAllocatedCustomMacs(MacPoolManagerStrategy macPoolManagerStrategy) { + for (Long mac : customMacs) { + final int count = customMacs.count(mac); + final String macString = MacAddressRangeUtils.macAddressToString(mac); + + for (int i = 0; i < count; i++) { + macPoolManagerStrategy.forceAddMac(macString); + } + } + } + + private void copyAllocatedMacs(MacPoolManagerStrategy macPoolManagerStrategy) { + for (Range range : ranges) { + range.copyAllocatedMacs(macPoolManagerStrategy); + } } private static class Range { @@ -520,6 +544,17 @@ return result; } + public void copyAllocatedMacs(MacPoolManagerStrategy macPoolManagerStrategy) { + for (int macIndex = 0; macIndex < size; macIndex++) { + int count = macUsageCount[macIndex]; + long mac = offset + macIndex; + final String macString = MacAddressRangeUtils.macAddressToString(mac); + for (int i = 0; i < count; i++) { + macPoolManagerStrategy.forceAddMac(macString); + } + } + } + } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/MacPoolManagerStrategy.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/MacPoolManagerStrategy.java index d6de8a5..041dc70 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/MacPoolManagerStrategy.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/MacPoolManagerStrategy.java @@ -22,5 +22,7 @@ List<String> allocateMacAddresses(int numberOfAddresses); + void copyContent(MacPoolManagerStrategy macPoolManagerStrategy); + } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/ObjectCounter.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/ObjectCounter.java index 749242b..2df7445 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/ObjectCounter.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/ObjectCounter.java @@ -1,12 +1,14 @@ package org.ovirt.engine.core.bll.network; import java.util.HashMap; +import java.util.Iterator; import java.util.Map; +import org.apache.commons.collections.iterators.UnmodifiableIterator; import org.ovirt.engine.core.utils.log.Log; import org.ovirt.engine.core.utils.log.LogFactory; -class ObjectCounter<T> { +class ObjectCounter<T> implements Iterable<T>{ private static final Log log = LogFactory.getLog(ObjectCounter.class); @@ -58,6 +60,15 @@ return map.containsKey(key); } + public int count(T key) { + return this.map.get(key).toInt(); + } + + @Override + public Iterator<T> iterator() { + return UnmodifiableIterator.decorate(map.keySet().iterator()); + } + private static class ModifiableInteger { private int count; @@ -82,5 +93,9 @@ count--; return count; } + + public int toInt() { + return count; + } } } -- To view, visit http://gerrit.ovirt.org/26794 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I72aa0f673811731cce0affd8a3d48cf75944e189 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