CS-15381: Upgrade from 3.0.3 to 3.0.4 is failing

CS-15382: Hosts going to Alert state if there were destroyed networks with non-existent tags prior to upgrade

Reviewed-By: Alena P.

Changes:
- If 2.2.14, create the SG provider by looking at is_security_group_enabled flag
- if 3.0.3, create the SG provider by looking at the ntwk_service_map.
This commit is contained in:
prachi 2012-07-01 18:02:34 -07:00
parent a8fd70fe0a
commit 709f1b9c78
3 changed files with 70 additions and 28 deletions

View File

@ -142,7 +142,7 @@ public class Upgrade2214to30 extends Upgrade30xBase implements DbUpgrade {
String vmwarePrivateLabel = getNetworkLabelFromConfig(conn, "vmware.private.vswitch");
String vmwareGuestLabel = getNetworkLabelFromConfig(conn, "vmware.guest.vswitch");
pstmt = conn.prepareStatement("SELECT id, domain_id, networktype, vnet, name FROM `cloud`.`data_center`");
pstmt = conn.prepareStatement("SELECT id, domain_id, networktype, vnet, name FROM `cloud`.`data_center` WHERE removed IS NULL");
rs = pstmt.executeQuery();
while (rs.next()) {
long zoneId = rs.getLong(1);
@ -153,7 +153,8 @@ public class Upgrade2214to30 extends Upgrade30xBase implements DbUpgrade {
//check if there are multiple guest networks configured using network_tags
PreparedStatement pstmt2 = conn.prepareStatement("SELECT distinct tag FROM `cloud`.`network_tags` t JOIN `cloud`.`networks` n where t.network_id = n.id and n.data_center_id = "+zoneId);
PreparedStatement pstmt2 = conn.prepareStatement("SELECT distinct tag FROM `cloud`.`network_tags` t JOIN `cloud`.`networks` n where t.network_id = n.id and n.data_center_id = ? and n.removed IS NULL");
pstmt2.setLong(1, zoneId);
ResultSet rsTags = pstmt2.executeQuery();
if(rsTags.next()){
boolean isFirstPhysicalNtwk = true;
@ -169,7 +170,8 @@ public class Upgrade2214to30 extends Upgrade30xBase implements DbUpgrade {
addTrafficType(conn, physicalNetworkId, "Storage", xenStorageLabel, null, null);
}
addTrafficType(conn, physicalNetworkId, "Guest", guestNetworkTag, kvmGuestLabel, vmwareGuestLabel);
addDefaultServiceProviders(conn, physicalNetworkId, zoneId);
addDefaultVRProvider(conn, physicalNetworkId, zoneId);
addDefaultSGProvider(conn, physicalNetworkId, zoneId, networkType, false);
//for all networks with this tag, add physical_network_id
PreparedStatement pstmt3 = conn.prepareStatement("SELECT network_id FROM `cloud`.`network_tags` where tag = '" + guestNetworkTag + "'");
@ -202,7 +204,9 @@ public class Upgrade2214to30 extends Upgrade30xBase implements DbUpgrade {
addTrafficType(conn, physicalNetworkId, "Management", xenPrivateLabel, kvmPrivateLabel, vmwarePrivateLabel);
addTrafficType(conn, physicalNetworkId, "Storage", xenStorageLabel, null, null);
addTrafficType(conn, physicalNetworkId, "Guest", xenGuestLabel, kvmGuestLabel, vmwareGuestLabel);
addDefaultServiceProviders(conn, physicalNetworkId, zoneId);
addDefaultVRProvider(conn, physicalNetworkId, zoneId);
addDefaultSGProvider(conn, physicalNetworkId, zoneId, networkType, false);
// add physicalNetworkId to op_dc_vnet_alloc for this zone
s_logger.debug("Adding PhysicalNetwork to op_dc_vnet_alloc");

View File

@ -112,7 +112,8 @@ public class Upgrade303to304 extends Upgrade30xBase implements DbUpgrade {
//Create a physical network with guest traffic type and this tag
long physicalNetworkId = addPhysicalNetworkToZone(conn, zoneId, zoneName, networkType, null, domainId);
addTrafficType(conn, physicalNetworkId, "Guest", xenGuestLabel, null, null);
addDefaultServiceProviders(conn, physicalNetworkId, zoneId);
addDefaultVRProvider(conn, physicalNetworkId, zoneId);
addDefaultSGProvider(conn, physicalNetworkId, zoneId, networkType, true);
PreparedStatement pstmt3 = conn.prepareStatement("SELECT n.id FROM networks n WHERE n.physical_network_id IS NULL AND n.traffic_type = 'Guest' and n.data_center_id = ? and n.removed is null");
pstmt3.setLong(1, zoneId);

View File

@ -155,7 +155,66 @@ public abstract class Upgrade30xBase implements DbUpgrade{
}
protected void addDefaultServiceProviders(Connection conn, long physicalNetworkId, long zoneId){
protected void addDefaultSGProvider(Connection conn, long physicalNetworkId, long zoneId, String networkType, boolean is304){
PreparedStatement pstmtUpdate = null, pstmt2 = null;
try{
//add security group service provider (if security group service is enabled for at least one guest network)
boolean isSGServiceEnabled = false;
String selectSG = "";
if(is304){
selectSG = "SELECT nm.* FROM `cloud`.`ntwk_service_map` nm JOIN `cloud`.`networks` n ON nm.network_id = n.id where n.data_center_id = ? and nm.service='SecurityGroup'";
}else{
selectSG = "SELECT * from `cloud`.`networks` where is_security_group_enabled=1 and data_center_id=?";
}
pstmt2 = conn.prepareStatement(selectSG);
pstmt2.setLong(1, zoneId);
ResultSet sgDcSet = pstmt2.executeQuery();
if (sgDcSet.next()) {
isSGServiceEnabled = true;
}
sgDcSet.close();
pstmt2.close();
if(isSGServiceEnabled){
s_logger.debug("Adding PhysicalNetworkServiceProvider SecurityGroupProvider to the physical network id=" + physicalNetworkId);
String insertPNSP = "INSERT INTO `cloud`.`physical_network_service_providers` (`uuid`, `physical_network_id` , `provider_name`, `state` ," +
"`destination_physical_network_id`, `vpn_service_provided`, `dhcp_service_provided`, `dns_service_provided`, `gateway_service_provided`," +
"`firewall_service_provided`, `source_nat_service_provided`, `load_balance_service_provided`, `static_nat_service_provided`," +
"`port_forwarding_service_provided`, `user_data_service_provided`, `security_group_service_provided`) VALUES (?,?,?,?,0,0,0,0,0,0,0,0,0,0,0,1)";
pstmtUpdate = conn.prepareStatement(insertPNSP);
pstmtUpdate.setString(1, UUID.randomUUID().toString());
pstmtUpdate.setLong(2, physicalNetworkId);
pstmtUpdate.setString(3, "SecurityGroupProvider");
if ("Advanced".equals(networkType)) {
pstmtUpdate.setString(4, "Disabled");
}else{
pstmtUpdate.setString(4, "Enabled");
}
pstmtUpdate.executeUpdate();
pstmtUpdate.close();
}
}catch (SQLException e) {
throw new CloudRuntimeException("Exception while adding default Security Group Provider", e);
} finally {
if (pstmtUpdate != null) {
try {
pstmtUpdate.close();
} catch (SQLException e) {
}
}
if (pstmt2 != null) {
try {
pstmt2.close();
} catch (SQLException e) {
}
}
}
}
protected void addDefaultVRProvider(Connection conn, long physicalNetworkId, long zoneId){
PreparedStatement pstmtUpdate = null, pstmt2 = null;
try{
// add physical network service provider - VirtualRouter
@ -173,27 +232,6 @@ public abstract class Upgrade30xBase implements DbUpgrade{
pstmtUpdate.executeUpdate();
pstmtUpdate.close();
//add security group service provider (if security group service is enabled for at least one guest network)
String selectSG = "SELECT * from `cloud`.`networks` where is_security_group_enabled=1 and data_center_id=?";
pstmt2 = conn.prepareStatement(selectSG);
pstmt2.setLong(1, zoneId);
ResultSet sgDcSet = pstmt2.executeQuery();
while (sgDcSet.next()) {
s_logger.debug("Adding PhysicalNetworkServiceProvider SecurityGroupProvider to the physical network id=" + physicalNetworkId);
insertPNSP = "INSERT INTO `cloud`.`physical_network_service_providers` (`uuid`, `physical_network_id` , `provider_name`, `state` ," +
"`destination_physical_network_id`, `vpn_service_provided`, `dhcp_service_provided`, `dns_service_provided`, `gateway_service_provided`," +
"`firewall_service_provided`, `source_nat_service_provided`, `load_balance_service_provided`, `static_nat_service_provided`," +
"`port_forwarding_service_provided`, `user_data_service_provided`, `security_group_service_provided`) VALUES (?,?,?,?,0,0,0,0,0,0,0,0,0,0,0,1)";
pstmtUpdate = conn.prepareStatement(insertPNSP);
pstmtUpdate.setString(1, UUID.randomUUID().toString());
pstmtUpdate.setLong(2, physicalNetworkId);
pstmtUpdate.setString(3, "SecurityGroupProvider");
pstmtUpdate.setString(4, "Enabled");
pstmtUpdate.executeUpdate();
pstmtUpdate.close();
}
pstmt2.close();
// add virtual_router_element
String fetchNSPid = "SELECT id from `cloud`.`physical_network_service_providers` where physical_network_id=" + physicalNetworkId;
pstmt2 = conn.prepareStatement(fetchNSPid);
@ -229,7 +267,6 @@ public abstract class Upgrade30xBase implements DbUpgrade{
}
}
protected void addPhysicalNtwk_To_Ntwk_IP_Vlan(Connection conn, long physicalNetworkId, long networkId){
PreparedStatement pstmtUpdate = null;
try{