mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
bug 10567: In Basic zone, throw an exception with Pod scope when vm failed to be added to the network - so we retry to start it in a different pod
This commit is contained in:
parent
812a1f3f7b
commit
dfb37faa01
@ -76,6 +76,7 @@ import com.cloud.dc.DataCenter;
|
|||||||
import com.cloud.dc.DataCenter.NetworkType;
|
import com.cloud.dc.DataCenter.NetworkType;
|
||||||
import com.cloud.dc.DataCenterVO;
|
import com.cloud.dc.DataCenterVO;
|
||||||
import com.cloud.dc.HostPodVO;
|
import com.cloud.dc.HostPodVO;
|
||||||
|
import com.cloud.dc.Pod;
|
||||||
import com.cloud.dc.dao.AccountVlanMapDao;
|
import com.cloud.dc.dao.AccountVlanMapDao;
|
||||||
import com.cloud.dc.dao.DataCenterDao;
|
import com.cloud.dc.dao.DataCenterDao;
|
||||||
import com.cloud.dc.dao.HostPodDao;
|
import com.cloud.dc.dao.HostPodDao;
|
||||||
@ -1618,8 +1619,9 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian
|
|||||||
//1) send vm data/password information only to the dhcp in the same pod
|
//1) send vm data/password information only to the dhcp in the same pod
|
||||||
//2) send dhcp/dns information to all routers in the cloudstack only when _dnsBasicZoneUpdates is set to "all" value
|
//2) send dhcp/dns information to all routers in the cloudstack only when _dnsBasicZoneUpdates is set to "all" value
|
||||||
DataCenter dc = dest.getDataCenter();
|
DataCenter dc = dest.getDataCenter();
|
||||||
|
Long podId = null;
|
||||||
if (dc.getNetworkType() == NetworkType.Basic) {
|
if (dc.getNetworkType() == NetworkType.Basic) {
|
||||||
Long podId = dest.getPod().getId();
|
podId = dest.getPod().getId();
|
||||||
if (router.getPodIdToDeployIn().longValue() != podId.longValue()) {
|
if (router.getPodIdToDeployIn().longValue() != podId.longValue()) {
|
||||||
sendPasswordAndVmData = false;
|
sendPasswordAndVmData = false;
|
||||||
if (_dnsBasicZoneUpdates.equalsIgnoreCase("pod")) {
|
if (_dnsBasicZoneUpdates.equalsIgnoreCase("pod")) {
|
||||||
@ -1677,6 +1679,11 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (cmds.size() > 0) {
|
if (cmds.size() > 0) {
|
||||||
|
boolean podLevelException = false;
|
||||||
|
//for user vm in Basic zone we should try to re-deploy vm in a diff pod if it fails to deploy in original pod; so throwing exception with Pod scope
|
||||||
|
if (dc.getNetworkType() == NetworkType.Basic && podId != null && profile.getVirtualMachine().getType() == VirtualMachine.Type.User && network.getTrafficType() == TrafficType.Guest && network.getGuestType() == GuestIpType.Direct) {
|
||||||
|
podLevelException = true;
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
_agentMgr.send(router.getHostId(), cmds);
|
_agentMgr.send(router.getHostId(), cmds);
|
||||||
} catch (OperationTimedoutException e) {
|
} catch (OperationTimedoutException e) {
|
||||||
@ -1686,18 +1693,27 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian
|
|||||||
Answer answer = cmds.getAnswer("dhcp");
|
Answer answer = cmds.getAnswer("dhcp");
|
||||||
if (!answer.getResult()) {
|
if (!answer.getResult()) {
|
||||||
s_logger.error("Unable to set dhcp entry for " + profile + " on domR: " + router.getHostName() + " due to " + answer.getDetails());
|
s_logger.error("Unable to set dhcp entry for " + profile + " on domR: " + router.getHostName() + " due to " + answer.getDetails());
|
||||||
|
if (podLevelException) {
|
||||||
|
throw new ResourceUnavailableException("Unable to set dhcp entry for " + profile + " due to " + answer.getDetails(), Pod.class, podId);
|
||||||
|
}
|
||||||
throw new ResourceUnavailableException("Unable to set dhcp entry for " + profile + " due to " + answer.getDetails(), DataCenter.class, router.getDataCenterIdToDeployIn());
|
throw new ResourceUnavailableException("Unable to set dhcp entry for " + profile + " due to " + answer.getDetails(), DataCenter.class, router.getDataCenterIdToDeployIn());
|
||||||
}
|
}
|
||||||
|
|
||||||
answer = cmds.getAnswer("password");
|
answer = cmds.getAnswer("password");
|
||||||
if (answer != null && !answer.getResult()) {
|
if (answer != null && !answer.getResult()) {
|
||||||
s_logger.error("Unable to set password for " + profile + " due to " + answer.getDetails());
|
s_logger.error("Unable to set password for " + profile + " due to " + answer.getDetails());
|
||||||
|
if (podLevelException) {
|
||||||
|
throw new ResourceUnavailableException("Unable to set password due to " + answer.getDetails(), Pod.class, podId);
|
||||||
|
}
|
||||||
throw new ResourceUnavailableException("Unable to set password due to " + answer.getDetails(), DataCenter.class, router.getDataCenterIdToDeployIn());
|
throw new ResourceUnavailableException("Unable to set password due to " + answer.getDetails(), DataCenter.class, router.getDataCenterIdToDeployIn());
|
||||||
}
|
}
|
||||||
|
|
||||||
answer = cmds.getAnswer("vmdata");
|
answer = cmds.getAnswer("vmdata");
|
||||||
if (answer != null && !answer.getResult()) {
|
if (answer != null && !answer.getResult()) {
|
||||||
s_logger.error("Unable to set VM data for " + profile + " due to " + answer.getDetails());
|
s_logger.error("Unable to set VM data for " + profile + " due to " + answer.getDetails());
|
||||||
|
if (podLevelException) {
|
||||||
|
throw new ResourceUnavailableException("Unable to set VM data due to " + answer.getDetails(), Pod.class, podId);
|
||||||
|
}
|
||||||
throw new ResourceUnavailableException("Unable to set VM data due to " + answer.getDetails(), DataCenter.class, router.getDataCenterIdToDeployIn());
|
throw new ResourceUnavailableException("Unable to set VM data due to " + answer.getDetails(), DataCenter.class, router.getDataCenterIdToDeployIn());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user