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

Reply via email to