You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by an...@apache.org on 2013/10/03 08:06:08 UTC

[10/50] git commit: updated refs/heads/4.2 to 86c9363

CLOUDSTACK-4704: 41-42 db upgrade - populate vpc_service_map table with the services/providers supported by VPC


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

Branch: refs/heads/4.2
Commit: 798f34a49cbfbb3a475f3dadf62d1ac1b8dfa510
Parents: cea14ce
Author: Alena Prokharchyk <al...@citrix.com>
Authored: Thu Sep 19 13:08:38 2013 -0700
Committer: Alena Prokharchyk <al...@citrix.com>
Committed: Thu Sep 19 13:15:05 2013 -0700

----------------------------------------------------------------------
 .../src/com/cloud/network/vpc/dao/VpcDao.java   |  4 +-
 .../com/cloud/network/vpc/dao/VpcDaoImpl.java   | 10 ++--
 .../com/cloud/upgrade/dao/Upgrade410to420.java  | 56 ++++++++++++++++++++
 .../com/cloud/network/vpc/VpcManagerImpl.java   | 25 ++++-----
 .../test/com/cloud/vpc/dao/MockVpcDaoImpl.java  |  4 +-
 setup/db/db/schema-410to420.sql                 |  2 +-
 6 files changed, 77 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/798f34a4/engine/schema/src/com/cloud/network/vpc/dao/VpcDao.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/network/vpc/dao/VpcDao.java b/engine/schema/src/com/cloud/network/vpc/dao/VpcDao.java
index 5a33217..57a2621 100644
--- a/engine/schema/src/com/cloud/network/vpc/dao/VpcDao.java
+++ b/engine/schema/src/com/cloud/network/vpc/dao/VpcDao.java
@@ -40,8 +40,8 @@ public interface VpcDao extends GenericDao<VpcVO, Long>{
     
     long countByAccountId(long accountId);
 
-    VpcVO persist(VpcVO vpc, Map<String, String> serviceProviderMap);
+    VpcVO persist(VpcVO vpc, Map<String, List<String>> serviceProviderMap);
 
     void persistVpcServiceProviders(long vpcId,
-                                    Map<String, String> serviceProviderMap);
+                                    Map<String, List<String>> serviceProviderMap);
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/798f34a4/engine/schema/src/com/cloud/network/vpc/dao/VpcDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/network/vpc/dao/VpcDaoImpl.java b/engine/schema/src/com/cloud/network/vpc/dao/VpcDaoImpl.java
index 6560b90..12868fe 100644
--- a/engine/schema/src/com/cloud/network/vpc/dao/VpcDaoImpl.java
+++ b/engine/schema/src/com/cloud/network/vpc/dao/VpcDaoImpl.java
@@ -128,7 +128,7 @@ public class VpcDaoImpl extends GenericDaoBase<VpcVO, Long> implements VpcDao{
 
     @Override
     @DB
-    public VpcVO persist(VpcVO vpc, Map<String, String> serviceProviderMap) {
+    public VpcVO persist(VpcVO vpc, Map<String, List<String>> serviceProviderMap) {
         Transaction txn = Transaction.currentTxn();
         txn.start();
         VpcVO newVpc = super.persist(vpc);
@@ -139,12 +139,14 @@ public class VpcDaoImpl extends GenericDaoBase<VpcVO, Long> implements VpcDao{
 
     @Override
     @DB
-    public void persistVpcServiceProviders(long vpcId, Map<String, String> serviceProviderMap) {
+    public void persistVpcServiceProviders(long vpcId, Map<String, List<String>> serviceProviderMap) {
         Transaction txn = Transaction.currentTxn();
         txn.start();
         for (String service : serviceProviderMap.keySet()) {
-            VpcServiceMapVO serviceMap = new VpcServiceMapVO(vpcId, Network.Service.getService(service), Network.Provider.getProvider(serviceProviderMap.get(service)));
-            _vpcSvcMap.persist(serviceMap);
+            for (String provider : serviceProviderMap.get(service)) {
+                VpcServiceMapVO serviceMap = new VpcServiceMapVO(vpcId, Network.Service.getService(service), Network.Provider.getProvider(provider));
+                _vpcSvcMap.persist(serviceMap);
+            }
         }
         txn.commit();
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/798f34a4/engine/schema/src/com/cloud/upgrade/dao/Upgrade410to420.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade410to420.java b/engine/schema/src/com/cloud/upgrade/dao/Upgrade410to420.java
index 43f03c0..646b406 100755
--- a/engine/schema/src/com/cloud/upgrade/dao/Upgrade410to420.java
+++ b/engine/schema/src/com/cloud/upgrade/dao/Upgrade410to420.java
@@ -114,6 +114,7 @@ public class Upgrade410to420 implements DbUpgrade {
         setRAWformatForRBDVolumes(conn);
         migrateVolumeOnSecondaryStorage(conn);
         createFullCloneFlag(conn);
+        upgradeVpcServiceMap(conn);
     }
 
     private void createFullCloneFlag(Connection conn) {
@@ -2956,4 +2957,59 @@ public class Upgrade410to420 implements DbUpgrade {
             throw new CloudRuntimeException("Failed to update volume format to RAW for volumes on RBD pools due to exception ", e);
         }
     }
+    
+    
+    private void upgradeVpcServiceMap(Connection conn){
+        s_logger.debug("Upgrading VPC service Map");
+        PreparedStatement listVpc = null;
+        PreparedStatement listServiceProviders = null;
+        PreparedStatement insertProviders = null;
+        ResultSet rs = null;
+        ResultSet rs1 = null;
+        try {
+            //Get all vpc Ids along with vpc offering Id
+            listVpc = conn.prepareStatement("SELECT id, vpc_offering_id FROM `cloud`.`vpc` where removed is NULL");
+            rs = listVpc.executeQuery();
+            while (rs.next()) {
+                long vpc_id = rs.getLong(1);
+                long offering_id = rs.getLong(2);
+                //list all services and providers in offering
+                listServiceProviders = conn.prepareStatement("SELECT service, provider FROM `cloud`.`vpc_offering_service_map` where vpc_offering_id = ?");
+                listServiceProviders.setLong(1, offering_id);
+                rs1 = listServiceProviders.executeQuery();
+                //Insert entries in vpc_service_map
+                while (rs1.next()) {
+                    String service = rs1.getString(1);
+                    String provider = rs1.getString(2);
+                    insertProviders = conn.prepareStatement("INSERT INTO `cloud`.`vpc_service_map` (`vpc_id`, `service`, `provider`, `created`) VALUES (?, ?, ?, now());");
+                    insertProviders.setLong(1, vpc_id);
+                    insertProviders.setString(2, service);
+                    insertProviders.setString(3, provider);
+                    insertProviders.executeUpdate();
+                }
+                s_logger.debug("Upgraded service map for VPC: "+vpc_id);
+            }
+        }catch (SQLException e) {
+            throw new CloudRuntimeException("Error during VPC service map upgrade", e);
+        } finally {
+            try {
+                if (rs != null) {
+                    rs.close();
+                }
+                if (rs1 != null) {
+                    rs1.close();
+                }
+                if (listVpc != null) {
+                    listVpc.close();
+                }
+                if (listServiceProviders != null) {
+                    listServiceProviders.close();
+                }
+                if (insertProviders != null) {
+                    insertProviders.close();
+                }
+            } catch (SQLException e) {
+            }
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/798f34a4/server/src/com/cloud/network/vpc/VpcManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/vpc/VpcManagerImpl.java b/server/src/com/cloud/network/vpc/VpcManagerImpl.java
index f81dee9..8ee249f 100644
--- a/server/src/com/cloud/network/vpc/VpcManagerImpl.java
+++ b/server/src/com/cloud/network/vpc/VpcManagerImpl.java
@@ -656,18 +656,11 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis
         return vpc; 
     }
 
-    private Map<String, String> finalizeServicesAndProvidersForVpc(long zoneId, long offeringId) {
-        Map<String, String> svcProviders = new HashMap<String, String>();
-        Map<String, List<String>> providerSvcs = new HashMap<String, List<String>>();
+    private Map<String, List<String>> finalizeServicesAndProvidersForVpc(long zoneId, long offeringId) {
+        Map<String, List<String>> svcProviders = new HashMap<String, List<String>>();
         List<VpcOfferingServiceMapVO> servicesMap = _vpcOffSvcMapDao.listByVpcOffId(offeringId);
 
         for (VpcOfferingServiceMapVO serviceMap : servicesMap) {
-            if (svcProviders.containsKey(serviceMap.getService())) {
-                // FIXME - right now we pick up the first provider from the list, need to add more logic based on
-                // provider load, etc
-                continue;
-            }
-
             String service = serviceMap.getService();
             String provider = serviceMap.getProvider();
 
@@ -681,13 +674,15 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis
                 throw new InvalidParameterValueException("Provider " + provider +
                         " should be enabled in at least one physical network of the zone specified");
             }
-
-            svcProviders.put(service, provider);
-            List<String> l = providerSvcs.get(provider);
-            if (l == null) {
-                providerSvcs.put(provider, l = new ArrayList<String>());
+            
+            List<String> providers = null;
+            if (svcProviders.get(service) == null) {
+                providers = new ArrayList<String>();
+            } else {
+                providers = svcProviders.get(service);
             }
-            l.add(service);
+            providers.add(provider);
+            svcProviders.put(service, providers);
         }
 
         return svcProviders;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/798f34a4/server/test/com/cloud/vpc/dao/MockVpcDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/vpc/dao/MockVpcDaoImpl.java b/server/test/com/cloud/vpc/dao/MockVpcDaoImpl.java
index 562d67d..5e1c2ec 100644
--- a/server/test/com/cloud/vpc/dao/MockVpcDaoImpl.java
+++ b/server/test/com/cloud/vpc/dao/MockVpcDaoImpl.java
@@ -86,12 +86,12 @@ public class MockVpcDaoImpl extends GenericDaoBase<VpcVO, Long> implements VpcDa
     }
 
     @Override
-    public VpcVO persist(VpcVO vpc, Map<String, String> serviceProviderMap) {
+    public VpcVO persist(VpcVO vpc, Map<String, List<String>> serviceProviderMap) {
         return null;
     }
 
     @Override
-    public void persistVpcServiceProviders(long vpcId, Map<String, String> serviceProviderMap) {
+    public void persistVpcServiceProviders(long vpcId, Map<String, List<String>> serviceProviderMap) {
         return;
     }
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/798f34a4/setup/db/db/schema-410to420.sql
----------------------------------------------------------------------
diff --git a/setup/db/db/schema-410to420.sql b/setup/db/db/schema-410to420.sql
index f7f10b9..197f375 100644
--- a/setup/db/db/schema-410to420.sql
+++ b/setup/db/db/schema-410to420.sql
@@ -270,7 +270,7 @@ CREATE TABLE  `vpc_service_map` (
   `created` datetime COMMENT 'date created',
   PRIMARY KEY (`id`),
   CONSTRAINT `fk_vpc_service_map__vpc_id` FOREIGN KEY(`vpc_id`) REFERENCES `vpc`(`id`) ON DELETE CASCADE,
-  UNIQUE (`vpc_id`, `service`)
+  UNIQUE (`vpc_id`, `service`, `provider`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 
 CREATE TABLE `cloud`.`load_balancer_healthcheck_policies` (