Bug 14492 - Stop and start of SSVM in Zone1 fails if Zone2 is configured with Storage network

status 14492: resolved fixed
reviewed-by: edison
This commit is contained in:
frank 2012-03-26 11:55:33 -07:00
parent e30e008644
commit 5fe0faf0cd
3 changed files with 14 additions and 7 deletions

View File

@ -11,7 +11,7 @@ public interface StorageNetworkManager extends Manager {
void releaseIpAddress(String ip);
boolean isStorageIpRangeAvailable();
boolean isStorageIpRangeAvailable(long zoneId);
List<SecondaryStorageVmVO> getSSVMWithNoStorageNetwork(long zoneId);

View File

@ -24,6 +24,7 @@ import com.cloud.dc.dao.StorageNetworkIpAddressDao;
import com.cloud.dc.dao.StorageNetworkIpRangeDao;
import com.cloud.exception.InsufficientAddressCapacityException;
import com.cloud.exception.InvalidParameterValueException;
import com.cloud.host.HostVO;
import com.cloud.network.Networks.TrafficType;
import com.cloud.network.dao.NetworkDao;
import com.cloud.utils.Pair;
@ -342,8 +343,11 @@ public class StorageNetworkManagerImpl implements StorageNetworkManager, Storage
}
@Override
public boolean isStorageIpRangeAvailable() {
return _sNwIpRangeDao.countRanges() > 0;
public boolean isStorageIpRangeAvailable(long zoneId) {
SearchCriteriaService<StorageNetworkIpRangeVO, StorageNetworkIpRangeVO> sc = SearchCriteria2.create(StorageNetworkIpRangeVO.class);
sc.addAnd(sc.getEntity().getDataCenterId(), Op.EQ, zoneId);
List<StorageNetworkIpRangeVO> entries = sc.list();
return entries.size() > 0;
}
@Override

View File

@ -19,6 +19,7 @@ import com.cloud.network.Networks.BroadcastDomainType;
import com.cloud.network.Networks.Mode;
import com.cloud.network.Networks.TrafficType;
import com.cloud.network.StorageNetworkManager;
import com.cloud.network.dao.NetworkDao;
import com.cloud.offering.NetworkOffering;
import com.cloud.user.Account;
import com.cloud.utils.component.AdapterBase;
@ -35,6 +36,7 @@ import com.cloud.vm.Nic.ReservationStrategy;
public class StorageNetworkGuru extends PodBasedNetworkGuru implements NetworkGuru {
private static final Logger s_logger = Logger.getLogger(StorageNetworkGuru.class);
@Inject StorageNetworkManager _sNwMgr;
@Inject NetworkDao _nwDao;
protected StorageNetworkGuru() {
super();
@ -81,7 +83,7 @@ public class StorageNetworkGuru extends PodBasedNetworkGuru implements NetworkGu
public Network implement(Network network, NetworkOffering offering, DeployDestination destination, ReservationContext context)
throws InsufficientVirtualNetworkCapcityException {
assert network.getTrafficType() == TrafficType.Storage : "Why are you sending this configuration to me " + network;
if (!_sNwMgr.isStorageIpRangeAvailable()) {
if (!_sNwMgr.isStorageIpRangeAvailable(destination.getDataCenter().getId())) {
return super.implement(network, offering, destination, context);
}
return network;
@ -91,7 +93,7 @@ public class StorageNetworkGuru extends PodBasedNetworkGuru implements NetworkGu
public NicProfile allocate(Network network, NicProfile nic, VirtualMachineProfile<? extends VirtualMachine> vm)
throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException {
assert network.getTrafficType() == TrafficType.Storage : "Well, I can't take care of this config now can I? " + network;
if (!_sNwMgr.isStorageIpRangeAvailable()) {
if (!_sNwMgr.isStorageIpRangeAvailable(network.getDataCenterId())) {
return super.allocate(network, nic, vm);
}
@ -101,7 +103,7 @@ public class StorageNetworkGuru extends PodBasedNetworkGuru implements NetworkGu
@Override
public void reserve(NicProfile nic, Network network, VirtualMachineProfile<? extends VirtualMachine> vm, DeployDestination dest, ReservationContext context)
throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException {
if (!_sNwMgr.isStorageIpRangeAvailable()) {
if (!_sNwMgr.isStorageIpRangeAvailable(dest.getDataCenter().getId())) {
super.reserve(nic, network, vm, dest, context);
return;
}
@ -132,7 +134,8 @@ public class StorageNetworkGuru extends PodBasedNetworkGuru implements NetworkGu
@Override
public boolean release(NicProfile nic, VirtualMachineProfile<? extends VirtualMachine> vm, String reservationId) {
if (!_sNwMgr.isStorageIpRangeAvailable()) {
Network nw = _nwDao.findById(nic.getNetworkId());
if (!_sNwMgr.isStorageIpRangeAvailable(nw.getDataCenterId())) {
return super.release(nic, vm, reservationId);
}