mirror of https://github.com/apache/cloudstack.git
Propagating 1345af2a0e84684a804bde5b281c30df72f148a0
This commit is contained in:
parent
efedf018c8
commit
154c6d9021
|
|
@ -1,8 +1,8 @@
|
|||
/**
|
||||
* Copyright (C) 2010 Cloud.com, Inc. All rights reserved.
|
||||
*
|
||||
*
|
||||
* This software is licensed under the GNU General Public License v3 or later.
|
||||
*
|
||||
*
|
||||
* It is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or any later version.
|
||||
|
|
@ -10,10 +10,10 @@
|
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
package com.cloud.ha;
|
||||
|
|
@ -47,54 +47,66 @@ public class ManagementIPSystemVMInvestigator extends AbstractInvestigatorImpl {
|
|||
|
||||
@Override
|
||||
public Boolean isVmAlive(VMInstanceVO vm, HostVO host) {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("testing if vm (" + vm.getId() + ") is alive");
|
||||
}
|
||||
if (VirtualMachine.Type.isSystemVM(vm.getType())) {
|
||||
|
||||
Nic nic = _networkMgr.getNicForTraffic(vm.getId(), TrafficType.Management);
|
||||
if (nic == null) {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Unable to find a management nic, cannot ping this system VM, unable to determine state of vm (" + vm.getId() + "), returning null");
|
||||
}
|
||||
return null;
|
||||
if (!VirtualMachine.Type.isSystemVM(vm.getType())) {
|
||||
s_logger.debug("Not a System Vm, unable to determine state of " + vm + " returning null");
|
||||
}
|
||||
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Testing if " + vm + " is alive");
|
||||
}
|
||||
|
||||
if (vm.getHostId() == null) {
|
||||
s_logger.debug("There's no host id for " + vm);
|
||||
return null;
|
||||
}
|
||||
|
||||
HostVO vmHost = _hostDao.findById(vm.getHostId());
|
||||
if (vmHost == null) {
|
||||
s_logger.debug("Unable to retrieve the host by using id " + vm.getHostId());
|
||||
return null;
|
||||
}
|
||||
|
||||
List<? extends Nic> nics = _networkMgr.getNicsForTraffic(vm.getId(), TrafficType.Management);
|
||||
if (nics.size() == 0) {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Unable to find a management nic, cannot ping this system VM, unable to determine state of " + vm + " returning null");
|
||||
}
|
||||
|
||||
// get the data center IP address, find a host on the pod, use that host to ping the data center IP address
|
||||
HostVO vmHost = _hostDao.findById(vm.getHostId());
|
||||
List<Long> otherHosts = findHostByPod(vm.getPodId(), vm.getHostId());
|
||||
for (Long otherHost : otherHosts) {
|
||||
|
||||
Status vmState = testIpAddress(otherHost, vm.getPrivateIpAddress());
|
||||
if (vmState == null) {
|
||||
// can't get information from that host, try the next one
|
||||
return null;
|
||||
}
|
||||
|
||||
for (Nic nic : nics) {
|
||||
if (nic.getIp4Address() == null) {
|
||||
continue;
|
||||
}
|
||||
// get the data center IP address, find a host on the pod, use that host to ping the data center IP address
|
||||
List<Long> otherHosts = findHostByPod(vmHost.getPodId(), vm.getHostId());
|
||||
for (Long otherHost : otherHosts) {
|
||||
Status vmState = testIpAddress(otherHost, nic.getIp4Address());
|
||||
if (vmState == null) {
|
||||
// can't get information from that host, try the next one
|
||||
continue;
|
||||
}
|
||||
if (vmState == Status.Up) {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("successfully pinged vm's private IP (" + vm.getPrivateIpAddress() + "), returning that the VM is up");
|
||||
}
|
||||
return Boolean.TRUE;
|
||||
} else if (vmState == Status.Down) {
|
||||
// We can't ping the VM directly...if we can ping the host, then report the VM down.
|
||||
// If we can't ping the host, then we don't have enough information.
|
||||
Status vmHostState = testIpAddress(otherHost, vmHost.getPrivateIpAddress());
|
||||
if ((vmHostState != null) && (vmHostState == Status.Up)) {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("successfully pinged vm's host IP (" + vmHost.getPrivateIpAddress() + "), but could not ping VM, returning that the VM is down");
|
||||
}
|
||||
s_logger.debug("successfully pinged vm's private IP (" + vm.getPrivateIpAddress() + "), returning that the VM is up");
|
||||
}
|
||||
return Boolean.TRUE;
|
||||
} else if (vmState == Status.Down) {
|
||||
// We can't ping the VM directly...if we can ping the host, then report the VM down.
|
||||
// If we can't ping the host, then we don't have enough information.
|
||||
Status vmHostState = testIpAddress(otherHost, vmHost.getPrivateIpAddress());
|
||||
if ((vmHostState != null) && (vmHostState == Status.Up)) {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("successfully pinged vm's host IP (" + vmHost.getPrivateIpAddress() + "), but could not ping VM, returning that the VM is down");
|
||||
}
|
||||
return Boolean.FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
}else{
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Not a System Vm, unable to determine state of vm (" + vm.getId() + "), returning null");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("unable to determine state of vm (" + vm.getId() + "), returning null");
|
||||
s_logger.debug("unable to determine state of " + vm + " returning null");
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
|
@ -124,6 +136,6 @@ public class ManagementIPSystemVMInvestigator extends AbstractInvestigatorImpl {
|
|||
@Override
|
||||
public boolean stop() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
/**
|
||||
* Copyright (C) 2010 Cloud.com, Inc. All rights reserved.
|
||||
*
|
||||
*
|
||||
* This software is licensed under the GNU General Public License v3 or later.
|
||||
*
|
||||
*
|
||||
* It is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or any later version.
|
||||
|
|
@ -10,10 +10,10 @@
|
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
package com.cloud.ha;
|
||||
|
|
@ -58,37 +58,44 @@ public class UserVmDomRInvestigator extends AbstractInvestigatorImpl {
|
|||
|
||||
@Override
|
||||
public Boolean isVmAlive(VMInstanceVO vm, HostVO host) {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("testing if vm (" + vm.getId() + ") is alive");
|
||||
}
|
||||
if (vm.getType() == VirtualMachine.Type.User) {
|
||||
// to verify that the VM is alive, we ask the domR (router) to ping the VM (private IP)
|
||||
UserVmVO userVm = _userVmDao.findById(vm.getId());
|
||||
|
||||
Nic nic = _networkMgr.getNicForTraffic(userVm.getId(), TrafficType.Guest);
|
||||
if (nic == null) {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Unable to find a guest nic for " + vm);
|
||||
}
|
||||
return null;
|
||||
if (vm.getType() != VirtualMachine.Type.User) {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Not a User Vm, unable to determine state of " + vm + " returning null");
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("testing if " + vm + " is alive");
|
||||
}
|
||||
// to verify that the VM is alive, we ask the domR (router) to ping the VM (private IP)
|
||||
UserVmVO userVm = _userVmDao.findById(vm.getId());
|
||||
|
||||
List<? extends Nic> nics = _networkMgr.getNicsForTraffic(userVm.getId(), TrafficType.Guest);
|
||||
|
||||
for (Nic nic : nics) {
|
||||
if (nic.getIp4Address() == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
VirtualRouter router = _vnaMgr.getRouterForNetwork(nic.getNetworkId());
|
||||
if (router == null) {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Unable to find a router in network " + nic.getNetworkId() + " to ping " + vm);
|
||||
}
|
||||
return null;
|
||||
continue;
|
||||
}
|
||||
|
||||
return testUserVM(vm, nic, router);
|
||||
}else{
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Not a User Vm, unable to determine state of vm (" + vm.getId() + "), returning null");
|
||||
|
||||
Boolean result = testUserVM(vm, nic, router);
|
||||
if (result == null) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("unable to determine state of vm (" + vm.getId() + "), returning null");
|
||||
s_logger.debug("Returning null since we're unable to determine state of " + vm);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
|
@ -98,13 +105,13 @@ public class UserVmDomRInvestigator extends AbstractInvestigatorImpl {
|
|||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("checking if agent (" + agent.getId() + ") is alive");
|
||||
}
|
||||
|
||||
|
||||
if (agent.getPodId() == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
List<Long> otherHosts = findHostByPod(agent.getPodId(), agent.getId());
|
||||
|
||||
|
||||
for (Long hostId : otherHosts) {
|
||||
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
|
|
@ -155,7 +162,7 @@ public class UserVmDomRInvestigator extends AbstractInvestigatorImpl {
|
|||
public boolean stop() {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
private Boolean testUserVM(VMInstanceVO vm, Nic nic, VirtualRouter router) {
|
||||
String privateIp = nic.getIp4Address();
|
||||
String routerPrivateIp = router.getPrivateIpAddress();
|
||||
|
|
@ -166,7 +173,7 @@ public class UserVmDomRInvestigator extends AbstractInvestigatorImpl {
|
|||
otherHosts.add(router.getHostId());
|
||||
}else{
|
||||
otherHosts = findHostByPod(router.getPodId(), null);
|
||||
}
|
||||
}
|
||||
for (Long hostId : otherHosts) {
|
||||
try {
|
||||
Answer pingTestAnswer = _agentMgr.send(hostId, new PingTestCommand(routerPrivateIp, privateIp), 30 * 1000);
|
||||
|
|
@ -175,7 +182,7 @@ public class UserVmDomRInvestigator extends AbstractInvestigatorImpl {
|
|||
s_logger.debug("user vm " + vm.getHostName() + " has been successfully pinged, returning that it is alive");
|
||||
}
|
||||
return Boolean.TRUE;
|
||||
}
|
||||
}
|
||||
} catch (AgentUnavailableException e) {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Couldn't reach " + e.getResourceId());
|
||||
|
|
@ -192,6 +199,6 @@ public class UserVmDomRInvestigator extends AbstractInvestigatorImpl {
|
|||
s_logger.debug(vm + " could not be pinged, returning that it is unknown");
|
||||
}
|
||||
return null;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -178,7 +178,7 @@ public interface NetworkManager extends NetworkService {
|
|||
|
||||
Nic getNicInNetworkIncludingRemoved(long vmId, long networkId);
|
||||
|
||||
Nic getNicForTraffic(long vmId, TrafficType type);
|
||||
List<? extends Nic> getNicsForTraffic(long vmId, TrafficType type);
|
||||
|
||||
Network getDefaultNetworkForVm(long vmId);
|
||||
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
/**
|
||||
* Copyright (C) 2010 Cloud.com, Inc. All rights reserved.
|
||||
*
|
||||
*
|
||||
* This software is licensed under the GNU General Public License v3 or later.
|
||||
*
|
||||
*
|
||||
* It is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or any later version.
|
||||
|
|
@ -10,10 +10,10 @@
|
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*
|
||||
*/
|
||||
package com.cloud.network;
|
||||
|
||||
|
|
@ -396,7 +396,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
|
|||
|
||||
/**
|
||||
* Returns the target account for an api command
|
||||
*
|
||||
*
|
||||
* @param accountName
|
||||
* - non-null if the account name was passed in in the command
|
||||
* @param domainId
|
||||
|
|
@ -2545,14 +2545,12 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
|
|||
}
|
||||
|
||||
@Override
|
||||
public Nic getNicForTraffic(long vmId, TrafficType type) {
|
||||
public List<NicVO> getNicsForTraffic(long vmId, TrafficType type) {
|
||||
SearchCriteria<NicVO> sc = NicForTrafficTypeSearch.create();
|
||||
sc.setParameters("instance", vmId);
|
||||
sc.setJoinParameters("network", "traffictype", type);
|
||||
|
||||
List<NicVO> vos = _nicDao.search(sc, null);
|
||||
assert vos.size() <= 1 : "If we have multiple networks of the same type, then this method should no longer be used.";
|
||||
return vos.size() == 1 ? vos.get(0) : null;
|
||||
return _nicDao.search(sc, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
/**
|
||||
* Copyright (C) 2010 Cloud.com, Inc. All rights reserved.
|
||||
*
|
||||
*
|
||||
* This software is licensed under the GNU General Public License v3 or later.
|
||||
*
|
||||
*
|
||||
* It is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or any later version.
|
||||
|
|
@ -10,10 +10,10 @@
|
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*
|
||||
*/
|
||||
package com.cloud.storage.secondary;
|
||||
|
||||
|
|
@ -252,7 +252,8 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V
|
|||
allowedCidrs.add(cidr);
|
||||
}
|
||||
}
|
||||
Nic privateNic = _networkMgr.getNicForTraffic(secStorageVm.getId(), TrafficType.Management);
|
||||
List<? extends Nic> nics = _networkMgr.getNicsForTraffic(secStorageVm.getId(), TrafficType.Management);
|
||||
Nic privateNic = nics.get(0);
|
||||
String privateCidr = NetUtils.ipAndNetMaskToCidr(privateNic.getIp4Address(), privateNic.getNetmask());
|
||||
String publicCidr = NetUtils.ipAndNetMaskToCidr(secStorageVm.getPublicIpAddress(), secStorageVm.getPublicNetmask());
|
||||
if (NetUtils.isNetworkAWithinNetworkB(privateCidr, publicCidr) || NetUtils.isNetworkAWithinNetworkB(publicCidr, privateCidr)) {
|
||||
|
|
@ -328,7 +329,7 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
private boolean isSecondaryStorageVmRequired(long dcId) {
|
||||
DataCenterVO dc = _dcDao.findById(dcId);
|
||||
_dcDao.loadDetails(dc);
|
||||
|
|
@ -492,7 +493,7 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V
|
|||
if (s_logger.isTraceEnabled()) {
|
||||
s_logger.trace("Allocate secondary storage vm standby capacity for data center : " + dataCenterId);
|
||||
}
|
||||
|
||||
|
||||
if (!isSecondaryStorageVmRequired(dataCenterId)) {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Secondary storage vm not required in zone " + dataCenterId + " acc. to zone config");
|
||||
|
|
@ -850,10 +851,11 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V
|
|||
buf.append(" zone=").append(dest.getDataCenter().getId());
|
||||
buf.append(" pod=").append(dest.getPod().getId());
|
||||
|
||||
if (profile.getVirtualMachine().getRole() == SecondaryStorageVm.Role.templateProcessor)
|
||||
if (profile.getVirtualMachine().getRole() == SecondaryStorageVm.Role.templateProcessor) {
|
||||
buf.append(" guid=").append(secHost.getGuid());
|
||||
else
|
||||
} else {
|
||||
buf.append(" guid=").append(profile.getVirtualMachine().getHostName());
|
||||
}
|
||||
|
||||
String nfsMountPoint = null;
|
||||
try {
|
||||
|
|
@ -865,10 +867,12 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V
|
|||
if (_configDao.isPremium()) {
|
||||
if (profile.getHypervisorType() == HypervisorType.Hyperv) {
|
||||
buf.append(" resource=com.cloud.storage.resource.CifsSecondaryStorageResource");
|
||||
} else
|
||||
} else {
|
||||
buf.append(" resource=com.cloud.storage.resource.PremiumSecondaryStorageResource");
|
||||
} else
|
||||
}
|
||||
} else {
|
||||
buf.append(" resource=com.cloud.storage.resource.NfsSecondaryStorageResource");
|
||||
}
|
||||
buf.append(" instance=SecStorage");
|
||||
buf.append(" sslcopy=").append(Boolean.toString(_useSSlCopy));
|
||||
buf.append(" role=").append(profile.getVirtualMachine().getRole().toString());
|
||||
|
|
@ -1028,13 +1032,15 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V
|
|||
long dataCenterId = pool.longValue();
|
||||
|
||||
if (!isZoneReady(_zoneHostInfoMap, dataCenterId)) {
|
||||
if (s_logger.isDebugEnabled())
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Zone " + dataCenterId + " is not ready to launch secondary storage VM yet");
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
if (s_logger.isDebugEnabled())
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Zone " + dataCenterId + " is ready to launch secondary storage VM");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue