incubator-cloudstack-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From alena1...@apache.org
Subject git commit: CS-15220: fixed db upgrade for networks using external devices Reviewed-by: Sheng Yang
Date Tue, 05 Jun 2012 22:22:25 GMT
Updated Branches:
  refs/heads/master d39026171 -> 7092532ae


CS-15220: fixed db upgrade for networks using external devices
Reviewed-by: Sheng Yang

Conflicts:

	server/test/com/cloud/network/MockNetworkManagerImpl.java

Conflicts:

	server/src/com/cloud/upgrade/dao/Upgrade2214to30.java


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

Branch: refs/heads/master
Commit: 7092532ae89643fb2ec928ac27df713d58a6b71f
Parents: d390261
Author: Alena Prokharchyk <alena.prokharchyk@citrix.com>
Authored: Mon Jun 4 18:39:10 2012 -0700
Committer: Alena Prokharchyk <alena.prokharchyk@citrix.com>
Committed: Tue Jun 5 15:10:49 2012 -0700

----------------------------------------------------------------------
 .../src/com/cloud/upgrade/dao/Upgrade2214to30.java |  185 +++++++++++++--
 .../com/cloud/network/MockNetworkManagerImpl.java  |   17 +-
 .../upgrade/AdvanceZone223To224UpgradeTest.java    |    8 +-
 .../cloud/vm/MockVirtualMachineManagerImpl.java    |   18 ++
 4 files changed, 191 insertions(+), 37 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/7092532a/server/src/com/cloud/upgrade/dao/Upgrade2214to30.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/upgrade/dao/Upgrade2214to30.java b/server/src/com/cloud/upgrade/dao/Upgrade2214to30.java
index a4e5b6f..37d8c55 100755
--- a/server/src/com/cloud/upgrade/dao/Upgrade2214to30.java
+++ b/server/src/com/cloud/upgrade/dao/Upgrade2214to30.java
@@ -22,6 +22,7 @@ import java.sql.Types;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.UUID;
 
 import org.apache.log4j.Logger;
@@ -29,7 +30,6 @@ import org.apache.log4j.Logger;
 import com.cloud.offering.NetworkOffering;
 import com.cloud.utils.crypt.DBEncryptionUtil;
 import com.cloud.utils.crypt.EncryptionSecretKeyChecker;
-import com.cloud.utils.db.Transaction;
 import com.cloud.utils.exception.CloudRuntimeException;
 import com.cloud.utils.script.Script;
 
@@ -82,8 +82,10 @@ public class Upgrade2214to30 implements DbUpgrade {
         updateReduntantRouters(conn);
         // update networks that have to switch from Shared to Isolated network offerings
         switchAccountSpecificNetworksToIsolated(conn);
+        // update networks to external network offerings if needed
+        String externalOfferingName = fixNetworksWithExternalDevices(conn);
         // create service/provider map for network offerings
-        createNetworkOfferingServices(conn);
+        createNetworkOfferingServices(conn, externalOfferingName);
         // create service/provider map for networks
         createNetworkServices(conn);
         //migrate user concentrated deployment planner choice to new global setting
@@ -854,67 +856,97 @@ public class Upgrade2214to30 implements DbUpgrade {
     	}
     }
     
-    private void createNetworkOfferingServices(Connection conn) {
+    private void createNetworkOfferingServices(Connection conn, String externalOfferingName)
{
         PreparedStatement pstmt = null;
         ResultSet rs = null;
         try {
             pstmt = conn
-                    .prepareStatement("select id, dns_service, gateway_service, firewall_service,
lb_service, userdata_service, vpn_service, dhcp_service, unique_name from `cloud`.`network_offerings`
where traffic_type='Guest'");
+                    .prepareStatement("select id, dns_service, gateway_service, firewall_service,
lb_service, userdata_service," +
+                    		" vpn_service, dhcp_service, unique_name from `cloud`.`network_offerings`
where traffic_type='Guest'");
             rs = pstmt.executeQuery();
             while (rs.next()) {
+                boolean sharedSourceNat = false;
+                boolean dedicatedLb = true;
                 long id = rs.getLong(1);
                 String uniqueName = rs.getString(9);
 
-                ArrayList<String> services = new ArrayList<String>();
+                Map<String, String> services = new HashMap<String, String>();
                 if (rs.getLong(2) != 0) {
-                    services.add("Dns");
+                    services.put("Dns", "VirtualRouter");
                 }
 
                 if (rs.getLong(3) != 0) {
-                    services.add("Gateway");
+                    if (externalOfferingName != null && uniqueName.equalsIgnoreCase(externalOfferingName))
{
+                        services.put("Gateway", "JuniperSRX");
+                    } else {
+                        services.put("Gateway", "VirtualRouter");
+                    }
                 }
 
                 if (rs.getLong(4) != 0) {
-                    services.add("Firewall");
+                    if (externalOfferingName != null && uniqueName.equalsIgnoreCase(externalOfferingName))
{
+                        services.put("Firewall", "JuniperSRX");
+                    } else {
+                        services.put("Firewall", "VirtualRouter");
+                    }
                 }
 
                 if (rs.getLong(5) != 0) {
-                    services.add("Lb");
+                    if (externalOfferingName != null && uniqueName.equalsIgnoreCase(externalOfferingName))
{
+                        services.put("Lb", "F5BigIp");
+                        dedicatedLb = false;
+                    } else {
+                        services.put("Lb", "VirtualRouter");
+                    }
                 }
 
                 if (rs.getLong(6) != 0) {
-                    services.add("UserData");
+                    services.put("UserData", "VirtualRouter");
                 }
 
                 if (rs.getLong(7) != 0) {
-                    services.add("Vpn");
+                    if (externalOfferingName == null || !uniqueName.equalsIgnoreCase(externalOfferingName))
{
+                        services.put("Vpn", "VirtualRouter");
+                    } 
                 }
 
                 if (rs.getLong(8) != 0) {
-                    services.add("Dhcp");
+                    services.put("Dhcp", "VirtualRouter");
                 }
 
                 if (uniqueName.equalsIgnoreCase(NetworkOffering.DefaultSharedNetworkOfferingWithSGService.toString()))
{
-                    services.add("SecurityGroup");
+                    services.put("SecurityGroup", "SecurityGroupProvider");
                 }
 
-                if (uniqueName.equals(NetworkOffering.DefaultIsolatedNetworkOfferingWithSourceNatService.toString()))
{
-                    services.add("SourceNat");
-                    services.add("PortForwarding");
-                    services.add("StaticNat");
+                if (uniqueName.equals(NetworkOffering.DefaultIsolatedNetworkOfferingWithSourceNatService.toString())
|| uniqueName.equalsIgnoreCase(externalOfferingName)) {
+                    if (externalOfferingName != null && uniqueName.equalsIgnoreCase(externalOfferingName))
{
+                        services.put("SourceNat", "JuniperSRX");
+                        services.put("PortForwarding", "JuniperSRX");
+                        services.put("StaticNat", "JuniperSRX");
+                        sharedSourceNat = true;
+                    } else {
+                        services.put("SourceNat", "VirtualRouter");
+                        services.put("PortForwarding", "VirtualRouter");
+                        services.put("StaticNat", "VirtualRouter");
+                    }
                 }
 
-                for (String service : services) {
-                    pstmt = conn.prepareStatement("INSERT INTO `cloud`.`ntwk_offering_service_map`
(`network_offering_id`, `service`, `provider`, `created`) values (?,?,?, now())");
+                for (String service : services.keySet()) {
+                    pstmt = conn.prepareStatement("INSERT INTO `cloud`.`ntwk_offering_service_map`
(`network_offering_id`," +
+                    		" `service`, `provider`, `created`) values (?,?,?, now())");
                     pstmt.setLong(1, id);
                     pstmt.setString(2, service);
-                    if (service.equalsIgnoreCase("SecurityGroup")) {
-                        pstmt.setString(3, "SecurityGroupProvider");
-                    } else {
-                        pstmt.setString(3, "VirtualRouter");
-                    }
+                    pstmt.setString(3, services.get(service));
                     pstmt.executeUpdate();
                 }
+                
+                //update shared source nat and dedicated lb
+                pstmt = conn.prepareStatement("UPDATE `cloud`.`network_offerings` set shared_source_nat_service=?,
dedicated_lb_service=? where id=?");
+                pstmt.setBoolean(1, sharedSourceNat);
+                pstmt.setBoolean(2, dedicatedLb);
+                pstmt.setLong(3, id);
+                pstmt.executeUpdate();
+                
             }
         } catch (SQLException e) {
             throw new CloudRuntimeException("Unable to create service/provider map for network
offerings", e);
@@ -1175,7 +1207,7 @@ public class Upgrade2214to30 implements DbUpgrade {
                 return ;
             }
             
-            // get all networks that need to be updated to the redundant network offerings
+            // get all networks that need to be updated to the isolated network offering
             pstmt = conn
                     .prepareStatement("select id, network_offering_id from `cloud`.`networks`
where switch_to_isolated=1");
             rs = pstmt.executeQuery();
@@ -1310,4 +1342,107 @@ public class Upgrade2214to30 implements DbUpgrade {
             }
         }
     }
+    
+    protected String fixNetworksWithExternalDevices(Connection conn) {
+        PreparedStatement pstmt = null;
+        ResultSet rs = null;
+        ResultSet rs1 = null;
+        
+        //Get zones to upgrade
+        List<Long> zoneIds = new ArrayList<Long>();
+        try {
+            pstmt = conn.prepareStatement("select id from `cloud`.`data_center` where lb_provider='F5BigIp'
or firewall_provider='JuniperSRX' or gateway_provider='JuniperSRX'");
+            rs = pstmt.executeQuery();
+            while (rs.next()) {
+                zoneIds.add(rs.getLong(1));
+            }
+        } catch (SQLException e) {
+            throw new CloudRuntimeException("Unable to switch networks to the new network
offering", e);
+        }
+        
+        
+        String uniqueName = null;
+        HashMap<Long, Long> newNetworkOfferingMap = new HashMap<Long, Long>();
+        
+        for (Long zoneId : zoneIds) {
+            try {
+                // Find the correct network offering
+                pstmt = conn
+                        .prepareStatement("select id, network_offering_id from `cloud`.`networks`
where guest_type='Virtual' and data_center_id=?");
+                pstmt.setLong(1, zoneId);
+                rs = pstmt.executeQuery();
+                pstmt = conn.prepareStatement("select count(*) from `cloud`.`network_offerings`");
+                rs1 = pstmt.executeQuery();
+                long ntwkOffCount = 0;
+                while (rs1.next()) {
+                    ntwkOffCount = rs1.getLong(1);
+                } 
+
+                pstmt = conn.prepareStatement("CREATE TEMPORARY TABLE `cloud`.`network_offerings2`
ENGINE=MEMORY SELECT * FROM `cloud`.`network_offerings` WHERE id=1");
+                pstmt.executeUpdate();
+
+
+                while (rs.next()) {
+                    long networkId = rs.getLong(1);
+                    long networkOfferingId = rs.getLong(2);
+                    s_logger.debug("Updating network offering for the network id=" + networkId
+ " as it has switch_to_isolated=1");
+                    Long newNetworkOfferingId = null;
+                    if (!newNetworkOfferingMap.containsKey(networkOfferingId)) {
+                        uniqueName = "Isolated with external providers";
+                        // clone the record to
+                        pstmt = conn.prepareStatement("INSERT INTO `cloud`.`network_offerings2`
SELECT * FROM `cloud`.`network_offerings` WHERE id=?");
+                        pstmt.setLong(1, networkOfferingId);
+                        pstmt.executeUpdate();
+
+                        //set the new unique name
+                        pstmt = conn.prepareStatement("UPDATE `cloud`.`network_offerings2`
SET id=?, unique_name=?, name=? WHERE id=?");
+                        ntwkOffCount = ntwkOffCount + 1;
+                        newNetworkOfferingId = ntwkOffCount;
+                        pstmt.setLong(1, newNetworkOfferingId);
+                        pstmt.setString(2, uniqueName);
+                        pstmt.setString(3, uniqueName);
+                        pstmt.setLong(4, networkOfferingId);
+                        pstmt.executeUpdate();
+
+                        pstmt = conn.prepareStatement("INSERT INTO `cloud`.`network_offerings`
SELECT * from " +
+                                "`cloud`.`network_offerings2` WHERE id=" + newNetworkOfferingId);
+                        pstmt.executeUpdate();
+
+                        pstmt = conn.prepareStatement("UPDATE `cloud`.`networks` SET network_offering_id=?
where id=?");
+                        pstmt.setLong(1, newNetworkOfferingId);
+                        pstmt.setLong(2, networkId);
+                        pstmt.executeUpdate();
+
+                        newNetworkOfferingMap.put(networkOfferingId, ntwkOffCount);
+                    } else {
+                        pstmt = conn.prepareStatement("UPDATE `cloud`.`networks` SET network_offering_id=?
where id=?");
+                        newNetworkOfferingId = newNetworkOfferingMap.get(networkOfferingId);
+                        pstmt.setLong(1, newNetworkOfferingId);
+                        pstmt.setLong(2, networkId);
+                        pstmt.executeUpdate();
+                    }
+
+                    s_logger.debug("Successfully updated network id=" + networkId + " with
new network offering id " + newNetworkOfferingId);
+                }
+
+            } catch (SQLException e) {
+                throw new CloudRuntimeException("Unable to switch networks to the new network
offering", e);
+            } finally {
+                try {
+                    pstmt = conn.prepareStatement("DROP TABLE `cloud`.`network_offerings2`");
+                    pstmt.executeUpdate();
+                    if (rs != null) {
+                        rs.close();
+                    }
+
+                    if (pstmt != null) {
+                        pstmt.close();
+                    }
+                } catch (SQLException e) {
+                }
+            }
+        }
+        
+        return uniqueName;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/7092532a/server/test/com/cloud/network/MockNetworkManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/network/MockNetworkManagerImpl.java b/server/test/com/cloud/network/MockNetworkManagerImpl.java
index f7380fe..323e85d 100755
--- a/server/test/com/cloud/network/MockNetworkManagerImpl.java
+++ b/server/test/com/cloud/network/MockNetworkManagerImpl.java
@@ -768,14 +768,6 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager,
NetworkS
     }
 
 	@Override
-	public IpAddress allocateIP(long networkId, Account ipOwner,
-			boolean isSystem) throws ResourceAllocationException,
-			InsufficientAddressCapacityException, ConcurrentOperationException {
-		// TODO Auto-generated method stub
-		return null;
-	}
-
-	@Override
 	public PublicIp assignPublicIpAddress(long dcId, Long podId, Account owner,
 			VlanType type, Long networkId, String requestedIp, boolean isSystem)
 			throws InsufficientAddressCapacityException {
@@ -881,4 +873,13 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager,
NetworkS
         // TODO Auto-generated method stub
         return null;
     }
+
+    /* (non-Javadoc)
+     * @see com.cloud.network.NetworkService#allocateIP(long, com.cloud.user.Account)
+     */
+    @Override
+    public IpAddress allocateIP(long networkId, Account ipOwner) throws ResourceAllocationException,
InsufficientAddressCapacityException, ConcurrentOperationException {
+        // TODO Auto-generated method stub
+        return null;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/7092532a/server/test/com/cloud/upgrade/AdvanceZone223To224UpgradeTest.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/upgrade/AdvanceZone223To224UpgradeTest.java b/server/test/com/cloud/upgrade/AdvanceZone223To224UpgradeTest.java
index 5ddb190..ce47449 100644
--- a/server/test/com/cloud/upgrade/AdvanceZone223To224UpgradeTest.java
+++ b/server/test/com/cloud/upgrade/AdvanceZone223To224UpgradeTest.java
@@ -40,8 +40,8 @@ public class AdvanceZone223To224UpgradeTest extends TestCase {
     }
 
     public void test217to22Upgrade() throws SQLException {
-        s_logger.debug("Finding sample data from 2.2.8");
-//        DbTestUtils.executeScript("PreviousDatabaseSchema/2.2.8/dave-sample.sql", false,
true);
+        s_logger.debug("Finding sample data from 2.2.14");
+//        DbTestUtils.executeScript("PreviousDatabaseSchema/2.2.14/dave-sample.sql", false,
true);
 
         Connection conn;
         PreparedStatement pstmt;
@@ -50,9 +50,9 @@ public class AdvanceZone223To224UpgradeTest extends TestCase {
         DatabaseUpgradeChecker checker = ComponentLocator.inject(DatabaseUpgradeChecker.class);
 
         String version = dao.getCurrentVersion();
-        assert version.equals("2.2.8") : "Version returned is not 2.2.8 but " + version;
+        assert version.equals("2.2.14") : "Version returned is not 2.2.14 but " + version;
 
-        checker.upgrade("2.2.8", "2.2.12");
+        checker.upgrade("2.2.14", "3.0.3");
     }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/7092532a/server/test/com/cloud/vm/MockVirtualMachineManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/vm/MockVirtualMachineManagerImpl.java b/server/test/com/cloud/vm/MockVirtualMachineManagerImpl.java
index ea4950b..5a65a6d 100755
--- a/server/test/com/cloud/vm/MockVirtualMachineManagerImpl.java
+++ b/server/test/com/cloud/vm/MockVirtualMachineManagerImpl.java
@@ -217,4 +217,22 @@ public class MockVirtualMachineManagerImpl implements VirtualMachineManager
{
 		return null;
 	}
 
+    /* (non-Javadoc)
+     * @see com.cloud.vm.VirtualMachineManager#checkIfCanUpgrade(com.cloud.vm.VirtualMachine,
long)
+     */
+    @Override
+    public void checkIfCanUpgrade(VirtualMachine vmInstance, long newServiceOfferingId) {
+        // TODO Auto-generated method stub
+        
+    }
+
+    /* (non-Javadoc)
+     * @see com.cloud.vm.VirtualMachineManager#upgradeVmDb(long, long)
+     */
+    @Override
+    public boolean upgradeVmDb(long vmId, long serviceOfferingId) {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
 }


Mime
View raw message