mirror of https://github.com/apache/cloudstack.git
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:
parent
e30e008644
commit
5fe0faf0cd
|
|
@ -11,7 +11,7 @@ public interface StorageNetworkManager extends Manager {
|
|||
|
||||
void releaseIpAddress(String ip);
|
||||
|
||||
boolean isStorageIpRangeAvailable();
|
||||
boolean isStorageIpRangeAvailable(long zoneId);
|
||||
|
||||
List<SecondaryStorageVmVO> getSSVMWithNoStorageNetwork(long zoneId);
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue