Skip to content

Commit 2fa5a5a

Browse files
Alena Prokharchykustcweizhou
authored andcommitted
CLOUDSTACK-4704: 41-42 db upgrade - populate vpc_service_map table with the services/providers supported by VPC
(cherry picked from commit 798f34a) Signed-off-by: Wei Zhou <w.zhou@leaseweb.com>
1 parent 9055e5b commit 2fa5a5a

6 files changed

Lines changed: 77 additions & 24 deletions

File tree

engine/schema/src/com/cloud/network/vpc/dao/VpcDao.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ public interface VpcDao extends GenericDao<VpcVO, Long>{
4040

4141
long countByAccountId(long accountId);
4242

43-
VpcVO persist(VpcVO vpc, Map<String, String> serviceProviderMap);
43+
VpcVO persist(VpcVO vpc, Map<String, List<String>> serviceProviderMap);
4444

4545
void persistVpcServiceProviders(long vpcId,
46-
Map<String, String> serviceProviderMap);
46+
Map<String, List<String>> serviceProviderMap);
4747
}

engine/schema/src/com/cloud/network/vpc/dao/VpcDaoImpl.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ public long countByAccountId(long accountId) {
128128

129129
@Override
130130
@DB
131-
public VpcVO persist(VpcVO vpc, Map<String, String> serviceProviderMap) {
131+
public VpcVO persist(VpcVO vpc, Map<String, List<String>> serviceProviderMap) {
132132
Transaction txn = Transaction.currentTxn();
133133
txn.start();
134134
VpcVO newVpc = super.persist(vpc);
@@ -139,12 +139,14 @@ public VpcVO persist(VpcVO vpc, Map<String, String> serviceProviderMap) {
139139

140140
@Override
141141
@DB
142-
public void persistVpcServiceProviders(long vpcId, Map<String, String> serviceProviderMap) {
142+
public void persistVpcServiceProviders(long vpcId, Map<String, List<String>> serviceProviderMap) {
143143
Transaction txn = Transaction.currentTxn();
144144
txn.start();
145145
for (String service : serviceProviderMap.keySet()) {
146-
VpcServiceMapVO serviceMap = new VpcServiceMapVO(vpcId, Network.Service.getService(service), Network.Provider.getProvider(serviceProviderMap.get(service)));
147-
_vpcSvcMap.persist(serviceMap);
146+
for (String provider : serviceProviderMap.get(service)) {
147+
VpcServiceMapVO serviceMap = new VpcServiceMapVO(vpcId, Network.Service.getService(service), Network.Provider.getProvider(provider));
148+
_vpcSvcMap.persist(serviceMap);
149+
}
148150
}
149151
txn.commit();
150152
}

engine/schema/src/com/cloud/upgrade/dao/Upgrade410to420.java

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ public void performDataMigration(Connection conn) {
115115
setRAWformatForRBDVolumes(conn);
116116
migrateVolumeOnSecondaryStorage(conn);
117117
createFullCloneFlag(conn);
118+
upgradeVpcServiceMap(conn);
118119
}
119120

120121
private void createFullCloneFlag(Connection conn) {
@@ -2953,4 +2954,59 @@ protected void setRAWformatForRBDVolumes(Connection conn) {
29532954
throw new CloudRuntimeException("Failed to update volume format to RAW for volumes on RBD pools due to exception ", e);
29542955
}
29552956
}
2957+
2958+
2959+
private void upgradeVpcServiceMap(Connection conn){
2960+
s_logger.debug("Upgrading VPC service Map");
2961+
PreparedStatement listVpc = null;
2962+
PreparedStatement listServiceProviders = null;
2963+
PreparedStatement insertProviders = null;
2964+
ResultSet rs = null;
2965+
ResultSet rs1 = null;
2966+
try {
2967+
//Get all vpc Ids along with vpc offering Id
2968+
listVpc = conn.prepareStatement("SELECT id, vpc_offering_id FROM `cloud`.`vpc` where removed is NULL");
2969+
rs = listVpc.executeQuery();
2970+
while (rs.next()) {
2971+
long vpc_id = rs.getLong(1);
2972+
long offering_id = rs.getLong(2);
2973+
//list all services and providers in offering
2974+
listServiceProviders = conn.prepareStatement("SELECT service, provider FROM `cloud`.`vpc_offering_service_map` where vpc_offering_id = ?");
2975+
listServiceProviders.setLong(1, offering_id);
2976+
rs1 = listServiceProviders.executeQuery();
2977+
//Insert entries in vpc_service_map
2978+
while (rs1.next()) {
2979+
String service = rs1.getString(1);
2980+
String provider = rs1.getString(2);
2981+
insertProviders = conn.prepareStatement("INSERT INTO `cloud`.`vpc_service_map` (`vpc_id`, `service`, `provider`, `created`) VALUES (?, ?, ?, now());");
2982+
insertProviders.setLong(1, vpc_id);
2983+
insertProviders.setString(2, service);
2984+
insertProviders.setString(3, provider);
2985+
insertProviders.executeUpdate();
2986+
}
2987+
s_logger.debug("Upgraded service map for VPC: "+vpc_id);
2988+
}
2989+
}catch (SQLException e) {
2990+
throw new CloudRuntimeException("Error during VPC service map upgrade", e);
2991+
} finally {
2992+
try {
2993+
if (rs != null) {
2994+
rs.close();
2995+
}
2996+
if (rs1 != null) {
2997+
rs1.close();
2998+
}
2999+
if (listVpc != null) {
3000+
listVpc.close();
3001+
}
3002+
if (listServiceProviders != null) {
3003+
listServiceProviders.close();
3004+
}
3005+
if (insertProviders != null) {
3006+
insertProviders.close();
3007+
}
3008+
} catch (SQLException e) {
3009+
}
3010+
}
3011+
}
29563012
}

server/src/com/cloud/network/vpc/VpcManagerImpl.java

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -670,18 +670,11 @@ protected Vpc createVpc(long zoneId, long vpcOffId, Account vpcOwner, String vpc
670670
return vpc;
671671
}
672672

673-
private Map<String, String> finalizeServicesAndProvidersForVpc(long zoneId, long offeringId) {
674-
Map<String, String> svcProviders = new HashMap<String, String>();
675-
Map<String, List<String>> providerSvcs = new HashMap<String, List<String>>();
673+
private Map<String, List<String>> finalizeServicesAndProvidersForVpc(long zoneId, long offeringId) {
674+
Map<String, List<String>> svcProviders = new HashMap<String, List<String>>();
676675
List<VpcOfferingServiceMapVO> servicesMap = _vpcOffSvcMapDao.listByVpcOffId(offeringId);
677676

678677
for (VpcOfferingServiceMapVO serviceMap : servicesMap) {
679-
if (svcProviders.containsKey(serviceMap.getService())) {
680-
// FIXME - right now we pick up the first provider from the list, need to add more logic based on
681-
// provider load, etc
682-
continue;
683-
}
684-
685678
String service = serviceMap.getService();
686679
String provider = serviceMap.getProvider();
687680

@@ -695,13 +688,15 @@ private Map<String, String> finalizeServicesAndProvidersForVpc(long zoneId, long
695688
throw new InvalidParameterValueException("Provider " + provider +
696689
" should be enabled in at least one physical network of the zone specified");
697690
}
698-
699-
svcProviders.put(service, provider);
700-
List<String> l = providerSvcs.get(provider);
701-
if (l == null) {
702-
providerSvcs.put(provider, l = new ArrayList<String>());
691+
692+
List<String> providers = null;
693+
if (svcProviders.get(service) == null) {
694+
providers = new ArrayList<String>();
695+
} else {
696+
providers = svcProviders.get(service);
703697
}
704-
l.add(service);
698+
providers.add(provider);
699+
svcProviders.put(service, providers);
705700
}
706701

707702
return svcProviders;

server/test/com/cloud/vpc/dao/MockVpcDaoImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,12 +86,12 @@ public long countByAccountId(long accountId) {
8686
}
8787

8888
@Override
89-
public VpcVO persist(VpcVO vpc, Map<String, String> serviceProviderMap) {
89+
public VpcVO persist(VpcVO vpc, Map<String, List<String>> serviceProviderMap) {
9090
return null;
9191
}
9292

9393
@Override
94-
public void persistVpcServiceProviders(long vpcId, Map<String, String> serviceProviderMap) {
94+
public void persistVpcServiceProviders(long vpcId, Map<String, List<String>> serviceProviderMap) {
9595
return;
9696
}
9797

setup/db/db/schema-410to420.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ CREATE TABLE `vpc_service_map` (
265265
`created` datetime COMMENT 'date created',
266266
PRIMARY KEY (`id`),
267267
CONSTRAINT `fk_vpc_service_map__vpc_id` FOREIGN KEY(`vpc_id`) REFERENCES `vpc`(`id`) ON DELETE CASCADE,
268-
UNIQUE (`vpc_id`, `service`)
268+
UNIQUE (`vpc_id`, `service`, `provider`)
269269
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
270270

271271
CREATE TABLE `cloud`.`load_balancer_healthcheck_policies` (

0 commit comments

Comments
 (0)