mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
CLOUDSTACK-4704: 41-42 db upgrade - populate vpc_service_map table with the services/providers supported by VPC
(cherry picked from commit 798f34a49cbfbb3a475f3dadf62d1ac1b8dfa510) Signed-off-by: Wei Zhou <w.zhou@leaseweb.com>
This commit is contained in:
parent
9055e5bd71
commit
2fa5a5ae97
@ -40,8 +40,8 @@ public interface VpcDao extends GenericDao<VpcVO, Long>{
|
|||||||
|
|
||||||
long countByAccountId(long accountId);
|
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,
|
void persistVpcServiceProviders(long vpcId,
|
||||||
Map<String, String> serviceProviderMap);
|
Map<String, List<String>> serviceProviderMap);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -128,7 +128,7 @@ public class VpcDaoImpl extends GenericDaoBase<VpcVO, Long> implements VpcDao{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
@DB
|
@DB
|
||||||
public VpcVO persist(VpcVO vpc, Map<String, String> serviceProviderMap) {
|
public VpcVO persist(VpcVO vpc, Map<String, List<String>> serviceProviderMap) {
|
||||||
Transaction txn = Transaction.currentTxn();
|
Transaction txn = Transaction.currentTxn();
|
||||||
txn.start();
|
txn.start();
|
||||||
VpcVO newVpc = super.persist(vpc);
|
VpcVO newVpc = super.persist(vpc);
|
||||||
@ -139,13 +139,15 @@ public class VpcDaoImpl extends GenericDaoBase<VpcVO, Long> implements VpcDao{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
@DB
|
@DB
|
||||||
public void persistVpcServiceProviders(long vpcId, Map<String, String> serviceProviderMap) {
|
public void persistVpcServiceProviders(long vpcId, Map<String, List<String>> serviceProviderMap) {
|
||||||
Transaction txn = Transaction.currentTxn();
|
Transaction txn = Transaction.currentTxn();
|
||||||
txn.start();
|
txn.start();
|
||||||
for (String service : serviceProviderMap.keySet()) {
|
for (String service : serviceProviderMap.keySet()) {
|
||||||
VpcServiceMapVO serviceMap = new VpcServiceMapVO(vpcId, Network.Service.getService(service), Network.Provider.getProvider(serviceProviderMap.get(service)));
|
for (String provider : serviceProviderMap.get(service)) {
|
||||||
|
VpcServiceMapVO serviceMap = new VpcServiceMapVO(vpcId, Network.Service.getService(service), Network.Provider.getProvider(provider));
|
||||||
_vpcSvcMap.persist(serviceMap);
|
_vpcSvcMap.persist(serviceMap);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
txn.commit();
|
txn.commit();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -115,6 +115,7 @@ public class Upgrade410to420 implements DbUpgrade {
|
|||||||
setRAWformatForRBDVolumes(conn);
|
setRAWformatForRBDVolumes(conn);
|
||||||
migrateVolumeOnSecondaryStorage(conn);
|
migrateVolumeOnSecondaryStorage(conn);
|
||||||
createFullCloneFlag(conn);
|
createFullCloneFlag(conn);
|
||||||
|
upgradeVpcServiceMap(conn);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createFullCloneFlag(Connection conn) {
|
private void createFullCloneFlag(Connection conn) {
|
||||||
@ -2953,4 +2954,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);
|
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) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -670,18 +670,11 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis
|
|||||||
return vpc;
|
return vpc;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Map<String, String> finalizeServicesAndProvidersForVpc(long zoneId, long offeringId) {
|
private Map<String, List<String>> finalizeServicesAndProvidersForVpc(long zoneId, long offeringId) {
|
||||||
Map<String, String> svcProviders = new HashMap<String, String>();
|
Map<String, List<String>> svcProviders = new HashMap<String, List<String>>();
|
||||||
Map<String, List<String>> providerSvcs = new HashMap<String, List<String>>();
|
|
||||||
List<VpcOfferingServiceMapVO> servicesMap = _vpcOffSvcMapDao.listByVpcOffId(offeringId);
|
List<VpcOfferingServiceMapVO> servicesMap = _vpcOffSvcMapDao.listByVpcOffId(offeringId);
|
||||||
|
|
||||||
for (VpcOfferingServiceMapVO serviceMap : servicesMap) {
|
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 service = serviceMap.getService();
|
||||||
String provider = serviceMap.getProvider();
|
String provider = serviceMap.getProvider();
|
||||||
|
|
||||||
@ -696,12 +689,14 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis
|
|||||||
" should be enabled in at least one physical network of the zone specified");
|
" should be enabled in at least one physical network of the zone specified");
|
||||||
}
|
}
|
||||||
|
|
||||||
svcProviders.put(service, provider);
|
List<String> providers = null;
|
||||||
List<String> l = providerSvcs.get(provider);
|
if (svcProviders.get(service) == null) {
|
||||||
if (l == null) {
|
providers = new ArrayList<String>();
|
||||||
providerSvcs.put(provider, l = new ArrayList<String>());
|
} else {
|
||||||
|
providers = svcProviders.get(service);
|
||||||
}
|
}
|
||||||
l.add(service);
|
providers.add(provider);
|
||||||
|
svcProviders.put(service, providers);
|
||||||
}
|
}
|
||||||
|
|
||||||
return svcProviders;
|
return svcProviders;
|
||||||
|
|||||||
@ -86,12 +86,12 @@ public class MockVpcDaoImpl extends GenericDaoBase<VpcVO, Long> implements VpcDa
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public VpcVO persist(VpcVO vpc, Map<String, String> serviceProviderMap) {
|
public VpcVO persist(VpcVO vpc, Map<String, List<String>> serviceProviderMap) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void persistVpcServiceProviders(long vpcId, Map<String, String> serviceProviderMap) {
|
public void persistVpcServiceProviders(long vpcId, Map<String, List<String>> serviceProviderMap) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -265,7 +265,7 @@ CREATE TABLE `vpc_service_map` (
|
|||||||
`created` datetime COMMENT 'date created',
|
`created` datetime COMMENT 'date created',
|
||||||
PRIMARY KEY (`id`),
|
PRIMARY KEY (`id`),
|
||||||
CONSTRAINT `fk_vpc_service_map__vpc_id` FOREIGN KEY(`vpc_id`) REFERENCES `vpc`(`id`) ON DELETE CASCADE,
|
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;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
CREATE TABLE `cloud`.`load_balancer_healthcheck_policies` (
|
CREATE TABLE `cloud`.`load_balancer_healthcheck_policies` (
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user