You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by pr...@apache.org on 2013/06/28 23:55:24 UTC

git commit: updated refs/heads/master-6-17-stable to e8b2d74

Updated Branches:
  refs/heads/master-6-17-stable 75f98eea4 -> e8b2d74a0


Revert "Cloudstack-2150 DB table entries of phisical network is not proper.Shows Duplicate entries Cloudstack-2980 Adding a VLAN range that overlaps with two existing ranges results in inconsistent DB entries"

This reverts commit 53b40d2337fe3f1ecfee982ecd99896118448fb0.


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/e8b2d74a
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/e8b2d74a
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/e8b2d74a

Branch: refs/heads/master-6-17-stable
Commit: e8b2d74a00348c25d6810d6e0078bfeb9d76cdea
Parents: 75f98ee
Author: Prachi Damle <pr...@cloud.com>
Authored: Fri Jun 28 14:35:18 2013 -0700
Committer: Prachi Damle <pr...@cloud.com>
Committed: Fri Jun 28 14:35:18 2013 -0700

----------------------------------------------------------------------
 .../com/cloud/dc/dao/DataCenterVnetDaoImpl.java |  2 +-
 .../com/cloud/network/NetworkServiceImpl.java   | 85 ++++++++++++--------
 2 files changed, 53 insertions(+), 34 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e8b2d74a/engine/schema/src/com/cloud/dc/dao/DataCenterVnetDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/dc/dao/DataCenterVnetDaoImpl.java b/engine/schema/src/com/cloud/dc/dao/DataCenterVnetDaoImpl.java
index a2f7cde..e97f2c6 100755
--- a/engine/schema/src/com/cloud/dc/dao/DataCenterVnetDaoImpl.java
+++ b/engine/schema/src/com/cloud/dc/dao/DataCenterVnetDaoImpl.java
@@ -113,7 +113,7 @@ public class DataCenterVnetDaoImpl extends GenericDaoBase<DataCenterVnetVO, Long
     
     @DB
     public void add(long dcId, long physicalNetworkId, int start, int end) {
-        String insertVnet = "INSERT IGNORE INTO `cloud`.`op_dc_vnet_alloc` (vnet, data_center_id, physical_network_id) VALUES ( ?, ?, ?)";
+        String insertVnet = "INSERT INTO `cloud`.`op_dc_vnet_alloc` (vnet, data_center_id, physical_network_id) VALUES ( ?, ?, ?)";
         
         Transaction txn = Transaction.currentTxn();
         try {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e8b2d74a/server/src/com/cloud/network/NetworkServiceImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/NetworkServiceImpl.java b/server/src/com/cloud/network/NetworkServiceImpl.java
index 04815ff..f88f600 100755
--- a/server/src/com/cloud/network/NetworkServiceImpl.java
+++ b/server/src/com/cloud/network/NetworkServiceImpl.java
@@ -2561,7 +2561,7 @@ public class NetworkServiceImpl extends ManagerBase implements  NetworkService {
 
         if (removeVlan != null){
             List<Integer> tokens = processVlanRange(network,removeVlan);
-            removeVlanRange(network, tokens.get(0), tokens.get(1));
+            boolean result = removeVlanRange(network, tokens.get(0), tokens.get(1));
         }
 
         if (tags != null && tags.size() > 1) {
@@ -2589,6 +2589,7 @@ public class NetworkServiceImpl extends ManagerBase implements  NetworkService {
             network.setSpeed(networkSpeed);
         }
 
+        // Vnet range can be extended only
         boolean AddVnet = true;
         List<Pair<Integer, Integer>> vnetsToAdd = new ArrayList<Pair<Integer, Integer>>();
 
@@ -2605,6 +2606,7 @@ public class NetworkServiceImpl extends ManagerBase implements  NetworkService {
                     int existingStartVnet = existingRanges.get(j).first();
                     int existingEndVnet = existingRanges.get(j).second();
 
+                    // check if vnet is being extended
                     if (newStartVnet.intValue() >= existingStartVnet & newEndVnet.intValue() <= existingEndVnet) {
                         throw new InvalidParameterValueException("The vlan range you trying to add already exists.");
                     }
@@ -2628,62 +2630,79 @@ public class NetworkServiceImpl extends ManagerBase implements  NetworkService {
                         vnetsToAdd.add(new Pair<Integer, Integer>(existingEndVnet+1,newEndVnet));
                         existingRanges.get(j).first(newStartVnet);
                         existingRanges.get(j).second(newEndVnet);
-                        AddVnet = false;
                         break;
                     }
                 }
 
             }
             if (AddVnet){
-                vnetsToAdd.add(new Pair<Integer, Integer>(newStartVnet, newEndVnet));
-                existingRanges.add(new Pair<Integer, Integer>(newStartVnet,newEndVnet));
-                j= existingRanges.size()-1;
+                    vnetsToAdd.add(new Pair<Integer, Integer>(newStartVnet, newEndVnet));
+                    existingRanges.add(new Pair<Integer, Integer>(newStartVnet,newEndVnet));
+            }
+
+            Map <Integer,Integer> vnetMap = new HashMap<Integer, Integer>(existingRanges.size());
+            Map <Integer, Integer> IndexMap = new HashMap<Integer, Integer>(existingRanges.size());
+            for (int i=0; i< existingRanges.size(); i++){
+                 vnetMap.put(existingRanges.get(i).first(),existingRanges.get(i).second());
+                 IndexMap.put(existingRanges.get(i).first(),i);
             }
+
             Integer value;
+            Integer index;
             String vnetString = "";
-
-            Integer changed_entry_start = existingRanges.get(j).first();
-            Integer changed_entry_end = existingRanges.get(j).second();
             for (int i=0; i < existingRanges.size(); i++){
-                if (i !=j  && existingRanges.get(i).first()<=changed_entry_end && existingRanges.get(i).second() >= changed_entry_end) {
-                    existingRanges.get(j).second(existingRanges.get(i).second());
+                 value = vnetMap.get((existingRanges.get(i).second()+1));
+                 if (value != null) {
+                     vnetMap.remove((existingRanges.get(i).second()+1));
+                     vnetMap.remove(existingRanges.get(i).first());
+                     vnetMap.put(existingRanges.get(i).first(),value);
+                     existingRanges.add(new Pair<Integer,Integer>(existingRanges.get(i).first(),value));
+                     index = IndexMap.get(existingRanges.get(i).second()+1);
+                     existingRanges.get(index).first(-1);
+                     existingRanges.get(index).second(-1);
+                     existingRanges.get(i).first(-1);
+                     existingRanges.get(i).second(-1);
+                 }
+                value = vnetMap.get((existingRanges.get(i).second()));
+                if (value != null && ( (existingRanges.get(i).second()) != (existingRanges.get(i).first()) )) {
+                    vnetMap.remove((existingRanges.get(i).second()));
+                    vnetMap.remove(existingRanges.get(i).first());
+                    vnetMap.put(existingRanges.get(i).first(),value);
+                    existingRanges.add(new Pair<Integer,Integer>(existingRanges.get(i).first(),value));
+                    index = IndexMap.get(existingRanges.get(i).second());
+                    existingRanges.get(index).first(-1);
+                    existingRanges.get(index).second(-1);
                     existingRanges.get(i).first(-1);
                     existingRanges.get(i).second(-1);
-                } else if ((i !=j  && changed_entry_end > existingRanges.get(i).second()) && changed_entry_start <= existingRanges.get(i).first()) {
-                    existingRanges.get(i).first(-1);
-                    existingRanges.get(i).second(-1);
-                }else if ((i != j ) &&  changed_entry_end > existingRanges.get(i).second() && changed_entry_start <= existingRanges.get(i).second() &&  existingRanges.get(i).first() <= changed_entry_start) {
-                    existingRanges.get(j).first(existingRanges.get(i).first());
-                    existingRanges.get(i).first(-1);
-                    existingRanges.get(i).first(-1);
                 }
             }
 
 
-            for (Pair<Integer,Integer> vnetRange : existingRanges ){
-                value=vnetRange.first();
-                if (value != -1){
-                    vnetString = vnetString+vnetRange.first().toString()+"-"+vnetRange.second().toString()+";";
-                }
-            }
-            if (vnetString.length() > 0 && vnetString.charAt(vnetString.length()-1)==';') {
-                vnetString = vnetString.substring(0, vnetString.length()-1);
+
+            if (newVnetRangeString != null) {
+               for (Pair<Integer,Integer> vnetRange : existingRanges ){
+                    value=vnetMap.get(vnetRange.first());
+                    if (value != null){
+                        vnetString = vnetString+vnetRange.first().toString()+"-"+value.toString()+";";
+                    }
+               }
+               if (vnetString.length() > 0 && vnetString.charAt(vnetString.length()-1)==';') {
+                   vnetString = vnetString.substring(0, vnetString.length()-1);
+               }
+               network.setVnet(vnetString);
             }
-            network.setVnet(vnetString);
-            Transaction txn = Transaction.currentTxn();
-            txn.start();
+
             for (Pair<Integer, Integer> vnetToAdd : vnetsToAdd) {
                 s_logger.debug("Adding vnet range " + vnetToAdd.first() + "-" + vnetToAdd.second() + " for the physicalNetwork id= " + id + " and zone id=" + network.getDataCenterId()
-                        + " as a part of updatePhysicalNetwork call");
+                    + " as a part of updatePhysicalNetwork call");
                 _dcDao.addVnet(network.getDataCenterId(), network.getId(), vnetToAdd.first(), vnetToAdd.second());
             }
-            _physicalNetworkDao.update(id, network);
-            txn.commit();
         }
 
-        return  network;
-    }
+        _physicalNetworkDao.update(id, network);
 
+        return network;
+    }
 
     private List<Integer> processVlanRange(PhysicalNetworkVO network, String removeVlan) {
         Integer StartVnet;