Skip to content

Commit cf5cb95

Browse files
author
Pearl Dsilva
committed
address comments
1 parent 4e58132 commit cf5cb95

File tree

4 files changed

+33
-15
lines changed

4 files changed

+33
-15
lines changed

engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1856,11 +1856,22 @@ private Map<String, Boolean> getVlanToPersistenceMapForVM(long vmId) {
18561856
return vlanToPersistenceMap;
18571857
}
18581858

1859+
/**
1860+
*
1861+
* @param networkVO - the network object used to determine the vlanId from the broadcast URI
1862+
* @param isPersistent - indicates if the corresponding network's network offering is Persistent
1863+
*
1864+
* @return <VlanId, ShouldKVMBridgeBeDeleted> - basically returns the vlan ID which is used to determine the
1865+
* bridge name for KVM hypervisor and based on the network and isolation type and persistent setting of the offering
1866+
* we decide whether the bridge is to be deleted (KVM) if the last VM in that host is destroyed / migrated
1867+
*/
18591868
private Pair<String, Boolean> getVMNetworkDetails(NetworkVO networkVO, boolean isPersistent) {
18601869
URI broadcastUri = networkVO.getBroadcastUri();
18611870
String scheme = broadcastUri.getScheme();
18621871
String vlanId = Networks.BroadcastDomainType.getValue(broadcastUri);
1863-
Boolean shouldDelete = !((networkVO.getGuestType() == Network.GuestType.L2 || networkVO.getGuestType() == Network.GuestType.Isolated) && scheme.equalsIgnoreCase("vlan") && isPersistent);
1872+
Boolean shouldDelete = !((networkVO.getGuestType() == Network.GuestType.L2 || networkVO.getGuestType() == Network.GuestType.Isolated) &&
1873+
(scheme.equalsIgnoreCase("vlan") || scheme.equalsIgnoreCase("vxlan"))
1874+
&& isPersistent);
18641875
return new Pair<>(vlanId, shouldDelete);
18651876
}
18661877

engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1200,7 +1200,12 @@ Pair<NetworkGuru, NetworkVO> implementNetwork(final long networkId, final Deploy
12001200
return implemented;
12011201
}
12021202

1203-
private NicTO getNicTO(NetworkVO networkVO, NetworkOfferingVO networkOfferingVO) {
1203+
/**
1204+
*
1205+
* Creates a dummy NicTO object which is used by the respective hypervisors to setup network elements / resources
1206+
* - bridges(KVM), VLANs(Xen) and portgroups(VMWare) for L2 network
1207+
*/
1208+
private NicTO createNicTOFromNetworkAndOffering(NetworkVO networkVO, NetworkOfferingVO networkOfferingVO) {
12041209
NicTO to = new NicTO();
12051210
to.setBroadcastType(networkVO.getBroadcastDomainType());
12061211
to.setType(networkVO.getTrafficType());
@@ -1231,10 +1236,9 @@ private boolean isNtwConfiguredInCluster(HostVO hostVO, Map<Long, List<Long>> cl
12311236
}
12321237

12331238
private void setupPersistentNetwork(NetworkVO network, NetworkOfferingVO offering, Long dcId) throws AgentUnavailableException, OperationTimedoutException {
1234-
NicTO to = getNicTO(network, offering);
1239+
NicTO to = createNicTOFromNetworkAndOffering(network, offering);
12351240
List<ClusterVO> clusterVOS = clusterDao.listClustersByDcId(dcId);
12361241
List<HostVO> hosts = resourceManager.listAllUpAndEnabledHostsInOneZoneByType(Host.Type.Routing, dcId);
1237-
Collections.reverse(hosts);
12381242
Map<Long, List<Long>> clusterToHostsMap = new HashMap<>();
12391243
SetupPersistentNetworkCommand cmd = new SetupPersistentNetworkCommand(to);
12401244
for (HostVO host : hosts) {
@@ -1247,13 +1251,11 @@ private void setupPersistentNetwork(NetworkVO network, NetworkOfferingVO offerin
12471251
s_logger.warn("Unable to get an answer to the SetupPersistentNetworkCommand from agent:" + host.getId());
12481252
clusterToHostsMap.get(host.getClusterId()).remove(host.getId());
12491253
continue;
1250-
// throw new CloudRuntimeException("Unable to get an answer to the SetupPersistentNetworkCommand from agent: " + host.getId());
12511254
}
12521255

12531256
if (!answer.getResult()) {
1254-
s_logger.warn("Unable to setup agent " + host.getId() + " due to " + answer.getDetails() );
1255-
// final String msg = "Incorrect Network setup on agent, Reinitialize agent after network names are setup, details : " + answer.getDetails();
1256-
// throw new CloudRuntimeException(msg);
1257+
s_logger.warn("Unable to setup agent " + host.getId() + " due to " + answer.getDetails());
1258+
clusterToHostsMap.get(host.getClusterId()).remove(host.getId());
12571259
continue;
12581260
}
12591261
}

plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtMigrateCommandWrapper.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,7 @@ Use VIR_DOMAIN_XML_SECURE (value = 1) prior to v1.0.0.
282282
// each interface at this point, so inform all vif drivers
283283
final List<VifDriver> allVifDrivers = libvirtComputingResource.getAllVifDrivers();
284284
for (final VifDriver vifDriver : allVifDrivers) {
285-
vifDriver.unplug(iface, deleteBridge(vlanToPersistenceMap, vlanId));
285+
vifDriver.unplug(iface, shouldDeleteBridge(vlanToPersistenceMap, vlanId));
286286
}
287287
}
288288
}
@@ -291,13 +291,17 @@ Use VIR_DOMAIN_XML_SECURE (value = 1) prior to v1.0.0.
291291
}
292292

293293
private String getVlanIdFromBridgeName(String brName) {
294-
if (brName != null) {
295-
return brName.split("-")[1];
294+
if (StringUtils.isNotBlank(brName)) {
295+
String[] s = brName.split("-");
296+
if (s.length > 1) {
297+
return s[1];
298+
}
299+
return null;
296300
}
297301
return null;
298302
}
299303

300-
private boolean deleteBridge(Map<String, Boolean> vlanToPersistenceMap, String vlanId) {
304+
private boolean shouldDeleteBridge(Map<String, Boolean> vlanToPersistenceMap, String vlanId) {
301305
if (MapUtils.isNotEmpty(vlanToPersistenceMap) && vlanId != null && vlanToPersistenceMap.containsKey(vlanId)) {
302306
return vlanToPersistenceMap.get(vlanId);
303307
}

plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtStopCommandWrapper.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import com.cloud.utils.ssh.SshHelper;
3131
import org.apache.commons.collections.CollectionUtils;
3232
import org.apache.commons.collections.MapUtils;
33+
import org.apache.commons.lang3.StringUtils;
3334
import org.apache.log4j.Logger;
3435
import org.libvirt.Connect;
3536
import org.libvirt.Domain;
@@ -129,7 +130,7 @@ public Answer execute(final StopCommand command, final LibvirtComputingResource
129130
// We don't know which "traffic type" is associated with
130131
// each interface at this point, so inform all vif drivers
131132
for (final VifDriver vifDriver : libvirtComputingResource.getAllVifDrivers()) {
132-
vifDriver.unplug(iface, deleteBridge(vlanToPersistenceMap, vlanId));
133+
vifDriver.unplug(iface, shouldDeleteBridge(vlanToPersistenceMap, vlanId));
133134
}
134135
}
135136
}
@@ -162,7 +163,7 @@ private void performAgentStopHook(String vmName, final LibvirtComputingResource
162163
}
163164

164165
private String getVlanIdFromBridgeName(String brName) {
165-
if (brName != null) {
166+
if (StringUtils.isNotBlank(brName)) {
166167
String[] s = brName.split("-");
167168
if (s.length > 1) {
168169
return s[1];
@@ -172,7 +173,7 @@ private String getVlanIdFromBridgeName(String brName) {
172173
return null;
173174
}
174175

175-
private boolean deleteBridge(Map<String, Boolean> vlanToPersistenceMap, String vlanId) {
176+
private boolean shouldDeleteBridge(Map<String, Boolean> vlanToPersistenceMap, String vlanId) {
176177
if (MapUtils.isNotEmpty(vlanToPersistenceMap) && vlanId != null && vlanToPersistenceMap.containsKey(vlanId)) {
177178
return vlanToPersistenceMap.get(vlanId);
178179
}

0 commit comments

Comments
 (0)