Skip to content

Commit 425c4e3

Browse files
committed
Merge remote-tracking branch 'apache/4.20' into 4.22
2 parents 2d4b7ba + 750290b commit 425c4e3

File tree

11 files changed

+128
-34
lines changed

11 files changed

+128
-34
lines changed

core/src/main/java/com/cloud/storage/template/HttpTemplateDownloader.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ private void checkCredentials(String user, String password) {
151151
client.getParams().setAuthenticationPreemptive(true);
152152
Credentials defaultcreds = new UsernamePasswordCredentials(user, password);
153153
client.getState().setCredentials(new AuthScope(hostAndPort.first(), hostAndPort.second(), AuthScope.ANY_REALM), defaultcreds);
154-
logger.info("Added username=" + user + ", password=" + password + "for host " + hostAndPort.first() + ":" + hostAndPort.second());
154+
logger.info("Added username={}, password=****** for host {}:{}", user, hostAndPort.first(), hostAndPort.second());
155155
} else {
156156
logger.info("No credentials configured for host=" + hostAndPort.first() + ":" + hostAndPort.second());
157157
}

engine/schema/src/main/java/com/cloud/storage/dao/VolumeDao.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,5 +163,7 @@ public interface VolumeDao extends GenericDao<VolumeVO, Long>, StateDao<Volume.S
163163

164164
VolumeVO findOneByIScsiName(String iScsiName);
165165

166+
int getVolumeCountByOfferingId(long diskOfferingId);
167+
166168
VolumeVO findByLastIdAndState(long lastVolumeId, Volume.State...states);
167169
}

engine/schema/src/main/java/com/cloud/storage/dao/VolumeDaoImpl.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ public class VolumeDaoImpl extends GenericDaoBase<VolumeVO, Long> implements Vol
7878
protected GenericSearchBuilder<VolumeVO, SumCount> primaryStorageSearch2;
7979
protected GenericSearchBuilder<VolumeVO, SumCount> secondaryStorageSearch;
8080
private final SearchBuilder<VolumeVO> poolAndPathSearch;
81+
final GenericSearchBuilder<VolumeVO, Integer> CountByOfferingId;
8182

8283
@Inject
8384
ReservationDao reservationDao;
@@ -506,6 +507,11 @@ public VolumeDaoImpl() {
506507
poolAndPathSearch.and("poolId", poolAndPathSearch.entity().getPoolId(), Op.EQ);
507508
poolAndPathSearch.and("path", poolAndPathSearch.entity().getPath(), Op.EQ);
508509
poolAndPathSearch.done();
510+
511+
CountByOfferingId = createSearchBuilder(Integer.class);
512+
CountByOfferingId.select(null, Func.COUNT, CountByOfferingId.entity().getId());
513+
CountByOfferingId.and("diskOfferingId", CountByOfferingId.entity().getDiskOfferingId(), Op.EQ);
514+
CountByOfferingId.done();
509515
}
510516

511517
@Override
@@ -914,6 +920,14 @@ public VolumeVO findOneByIScsiName(String iScsiName) {
914920
return findOneIncludingRemovedBy(sc);
915921
}
916922

923+
@Override
924+
public int getVolumeCountByOfferingId(long diskOfferingId) {
925+
SearchCriteria<Integer> sc = CountByOfferingId.create();
926+
sc.setParameters("diskOfferingId", diskOfferingId);
927+
List<Integer> results = customSearch(sc, null);
928+
return results.get(0);
929+
}
930+
917931
@Override
918932
public VolumeVO findByLastIdAndState(long lastVolumeId, State ...states) {
919933
QueryBuilder<VolumeVO> sc = QueryBuilder.create(VolumeVO.class);

engine/schema/src/main/java/com/cloud/upgrade/DatabaseCreator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ private static void initDB(String dbPropsFile, String rootPassword, String[] dat
9999
String username = dbProperties.getProperty(String.format("db.%s.username", database));
100100
String password = dbProperties.getProperty(String.format("db.%s.password", database));
101101
String dbName = dbProperties.getProperty(String.format("db.%s.name", database));
102-
System.out.println(String.format("========> Initializing database=%s with host=%s port=%s username=%s password=%s", dbName, host, port, username, password));
102+
System.out.println(String.format("========> Initializing database=%s with host=%s port=%s username=%s password=******", dbName, host, port, username));
103103

104104
List<String> queries = new ArrayList<String>();
105105
queries.add(String.format("drop database if exists `%s`", dbName));

engine/schema/src/main/java/com/cloud/vm/dao/VMInstanceDao.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,5 +187,9 @@ List<VMInstanceVO> searchRemovedByRemoveDate(final Date startDate, final Date en
187187

188188
Map<String, Long> getNameIdMapForVmIds(Collection<Long> ids);
189189

190+
int getVmCountByOfferingId(Long serviceOfferingId);
191+
192+
int getVmCountByOfferingNotInDomain(Long serviceOfferingId, List<Long> domainIds);
193+
190194
List<VMInstanceVO> listByIdsIncludingRemoved(List<Long> ids);
191195
}

engine/schema/src/main/java/com/cloud/vm/dao/VMInstanceDaoImpl.java

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,8 @@ public class VMInstanceDaoImpl extends GenericDaoBase<VMInstanceVO, Long> implem
104104
protected SearchBuilder<VMInstanceVO> LastHostAndStatesSearch;
105105
protected SearchBuilder<VMInstanceVO> VmsNotInClusterUsingPool;
106106
protected SearchBuilder<VMInstanceVO> IdsPowerStateSelectSearch;
107+
GenericSearchBuilder<VMInstanceVO, Integer> CountByOfferingId;
108+
GenericSearchBuilder<VMInstanceVO, Integer> CountUserVmNotInDomain;
107109

108110
@Inject
109111
ResourceTagDao tagsDao;
@@ -354,6 +356,18 @@ protected void init() {
354356
IdsPowerStateSelectSearch.entity().getPowerStateUpdateCount(),
355357
IdsPowerStateSelectSearch.entity().getPowerStateUpdateTime());
356358
IdsPowerStateSelectSearch.done();
359+
360+
CountByOfferingId = createSearchBuilder(Integer.class);
361+
CountByOfferingId.select(null, Func.COUNT, CountByOfferingId.entity().getId());
362+
CountByOfferingId.and("serviceOfferingId", CountByOfferingId.entity().getServiceOfferingId(), Op.EQ);
363+
CountByOfferingId.done();
364+
365+
CountUserVmNotInDomain = createSearchBuilder(Integer.class);
366+
CountUserVmNotInDomain.select(null, Func.COUNT, CountUserVmNotInDomain.entity().getId());
367+
CountUserVmNotInDomain.and("serviceOfferingId", CountUserVmNotInDomain.entity().getServiceOfferingId(), Op.EQ);
368+
CountUserVmNotInDomain.and("domainIdsNotIn", CountUserVmNotInDomain.entity().getDomainId(), Op.NIN);
369+
CountUserVmNotInDomain.done();
370+
357371
}
358372

359373
@Override
@@ -1247,6 +1261,29 @@ public Map<String, Long> getNameIdMapForVmIds(Collection<Long> ids) {
12471261
.collect(Collectors.toMap(VMInstanceVO::getInstanceName, VMInstanceVO::getId));
12481262
}
12491263

1264+
@Override
1265+
public int getVmCountByOfferingId(Long serviceOfferingId) {
1266+
if (serviceOfferingId == null) {
1267+
return 0;
1268+
}
1269+
SearchCriteria<Integer> sc = CountByOfferingId.create();
1270+
sc.setParameters("serviceOfferingId", serviceOfferingId);
1271+
List<Integer> count = customSearch(sc, null);
1272+
return count.get(0);
1273+
}
1274+
1275+
@Override
1276+
public int getVmCountByOfferingNotInDomain(Long serviceOfferingId, List<Long> domainIds) {
1277+
if (serviceOfferingId == null || CollectionUtils.isEmpty(domainIds)) {
1278+
return 0;
1279+
}
1280+
SearchCriteria<Integer> sc = CountUserVmNotInDomain.create();
1281+
sc.setParameters("serviceOfferingId", serviceOfferingId);
1282+
sc.setParameters("domainIdsNotIn", domainIds.toArray());
1283+
List<Integer> count = customSearch(sc, null);
1284+
return count.get(0);
1285+
}
1286+
12501287
@Override
12511288
public List<VMInstanceVO> listByIdsIncludingRemoved(List<Long> ids) {
12521289
SearchBuilder<VMInstanceVO> idsSearch = createSearchBuilder();

server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,6 @@
4949
import javax.inject.Inject;
5050
import javax.naming.ConfigurationException;
5151

52-
import com.cloud.consoleproxy.ConsoleProxyManager;
53-
import com.cloud.network.router.VirtualNetworkApplianceManager;
54-
import com.cloud.storage.secondary.SecondaryStorageVmManager;
55-
import com.cloud.vm.VirtualMachineManager;
5652
import org.apache.cloudstack.acl.RoleType;
5753
import org.apache.cloudstack.acl.SecurityChecker;
5854
import org.apache.cloudstack.affinity.AffinityGroup;
@@ -154,6 +150,7 @@
154150
import com.cloud.capacity.CapacityManager;
155151
import com.cloud.capacity.dao.CapacityDao;
156152
import com.cloud.configuration.Resource.ResourceType;
153+
import com.cloud.consoleproxy.ConsoleProxyManager;
157154
import com.cloud.dc.AccountVlanMapVO;
158155
import com.cloud.dc.ClusterDetailsDao;
159156
import com.cloud.dc.ClusterDetailsVO;
@@ -204,6 +201,7 @@
204201
import com.cloud.exception.PermissionDeniedException;
205202
import com.cloud.exception.ResourceAllocationException;
206203
import com.cloud.exception.ResourceUnavailableException;
204+
import com.cloud.exception.UnsupportedServiceException;
207205
import com.cloud.gpu.GPU;
208206
import com.cloud.gpu.VgpuProfileVO;
209207
import com.cloud.gpu.dao.VgpuProfileDao;
@@ -247,6 +245,7 @@
247245
import com.cloud.network.element.NetrisProviderVO;
248246
import com.cloud.network.element.NsxProviderVO;
249247
import com.cloud.network.netris.NetrisService;
248+
import com.cloud.network.router.VirtualNetworkApplianceManager;
250249
import com.cloud.network.rules.LoadBalancerContainer.Scheme;
251250
import com.cloud.network.vpc.VpcManager;
252251
import com.cloud.offering.DiskOffering;
@@ -281,6 +280,7 @@
281280
import com.cloud.storage.dao.StoragePoolTagsDao;
282281
import com.cloud.storage.dao.VMTemplateZoneDao;
283282
import com.cloud.storage.dao.VolumeDao;
283+
import com.cloud.storage.secondary.SecondaryStorageVmManager;
284284
import com.cloud.test.IPRangeConfig;
285285
import com.cloud.user.Account;
286286
import com.cloud.user.AccountDetailVO;
@@ -314,6 +314,7 @@
314314
import com.cloud.utils.net.NetUtils;
315315
import com.cloud.vm.NicIpAlias;
316316
import com.cloud.vm.VirtualMachine;
317+
import com.cloud.vm.VirtualMachineManager;
317318
import com.cloud.vm.VmDetailConstants;
318319
import com.cloud.vm.dao.NicIpAliasDao;
319320
import com.cloud.vm.dao.NicIpAliasVO;
@@ -3901,6 +3902,12 @@ public ServiceOffering updateServiceOffering(final UpdateServiceOfferingCmd cmd)
39013902
List<Long> filteredDomainIds = filterChildSubDomains(domainIds);
39023903
Collections.sort(filteredDomainIds);
39033904

3905+
// avoid domain update of service offering if any instance is associated to it
3906+
int instanceCount = _vmInstanceDao.getVmCountByOfferingNotInDomain(offeringHandle.getId(), filteredDomainIds);
3907+
if (instanceCount > 0) {
3908+
throw new UnsupportedServiceException("There are Instances associated to this service offering outside of the specified domains.");
3909+
}
3910+
39043911
List<Long> filteredZoneIds = new ArrayList<>();
39053912
if (CollectionUtils.isNotEmpty(zoneIds)) {
39063913
filteredZoneIds.addAll(zoneIds);

server/src/main/java/com/cloud/hypervisor/KVMGuru.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,8 @@ protected void setVmQuotaPercentage(VirtualMachineTO to, VirtualMachineProfile v
134134
VirtualMachine vm = vmProfile.getVirtualMachine();
135135
HostVO host = hostDao.findById(vm.getHostId());
136136
if (host == null) {
137-
throw new CloudRuntimeException("Host with id: " + vm.getHostId() + " not found");
137+
logger.warn("Host is not available. Skipping setting CPU quota percentage for VM: {}", vm);
138+
return;
138139
}
139140
logger.debug("Limiting CPU usage for VM: {} on host: {}", vm, host);
140141
double hostMaxSpeed = getHostCPUSpeed(host);

server/src/main/java/com/cloud/user/DomainManagerImpl.java

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@
3434
import com.cloud.api.query.vo.VpcOfferingJoinVO;
3535
import com.cloud.configuration.Resource;
3636
import com.cloud.domain.dao.DomainDetailsDao;
37+
import com.cloud.network.dao.NetworkDao;
38+
import com.cloud.network.vpc.dao.VpcDao;
3739
import com.cloud.network.vpc.dao.VpcOfferingDao;
3840
import com.cloud.network.vpc.dao.VpcOfferingDetailsDao;
3941
import com.cloud.offerings.dao.NetworkOfferingDao;
@@ -85,6 +87,7 @@
8587
import com.cloud.service.dao.ServiceOfferingDao;
8688
import com.cloud.service.dao.ServiceOfferingDetailsDao;
8789
import com.cloud.storage.dao.DiskOfferingDao;
90+
import com.cloud.storage.dao.VolumeDao;
8891
import com.cloud.user.dao.AccountDao;
8992
import com.cloud.utils.Pair;
9093
import com.cloud.utils.component.ManagerBase;
@@ -101,6 +104,8 @@
101104
import com.cloud.utils.net.NetUtils;
102105
import com.cloud.vm.ReservationContext;
103106
import com.cloud.vm.ReservationContextImpl;
107+
import com.cloud.vm.dao.VMInstanceDao;
108+
104109
import org.apache.commons.lang3.StringUtils;
105110

106111
@Component
@@ -141,6 +146,14 @@ public class DomainManagerImpl extends ManagerBase implements DomainManager, Dom
141146
@Inject
142147
private ProjectDao _projectDao;
143148
@Inject
149+
private VMInstanceDao vmInstanceDao;
150+
@Inject
151+
private NetworkDao networkDao;
152+
@Inject
153+
private VolumeDao volumeDao;
154+
@Inject
155+
private VpcDao vpcDao;
156+
@Inject
144157
private ProjectManager _projectMgr;
145158
@Inject
146159
private RegionManager _regionMgr;
@@ -543,7 +556,8 @@ private void removeVpcOfferings(Long domainId, String domainIdString) {
543556
List<Long> vpcOfferingsDetailsToRemove = new ArrayList<>();
544557
List<VpcOfferingJoinVO> vpcOfferingsForThisDomain = vpcOfferingJoinDao.findByDomainId(domainId);
545558
for (VpcOfferingJoinVO vpcOffering : vpcOfferingsForThisDomain) {
546-
if (domainIdString.equals(vpcOffering.getDomainId())) {
559+
int vpcCount = vpcDao.getVpcCountByOfferingId(vpcOffering.getId());
560+
if (vpcCount == 0) {
547561
vpcOfferingDao.remove(vpcOffering.getId());
548562
} else {
549563
vpcOfferingsDetailsToRemove.add(vpcOffering.getId());
@@ -558,7 +572,8 @@ private void removeNetworkOfferings(Long domainId, String domainIdString) {
558572
List<Long> networkOfferingsDetailsToRemove = new ArrayList<>();
559573
List<NetworkOfferingJoinVO> networkOfferingsForThisDomain = networkOfferingJoinDao.findByDomainId(domainId, false);
560574
for (NetworkOfferingJoinVO networkOffering : networkOfferingsForThisDomain) {
561-
if (domainIdString.equals(networkOffering.getDomainId())) {
575+
int networkCount = networkDao.getNetworkCountByNetworkOffId(networkOffering.getId());
576+
if (networkCount == 0) {
562577
networkOfferingDao.remove(networkOffering.getId());
563578
} else {
564579
networkOfferingsDetailsToRemove.add(networkOffering.getId());
@@ -573,7 +588,8 @@ private void removeServiceOfferings(Long domainId, String domainIdString) {
573588
List<Long> serviceOfferingsDetailsToRemove = new ArrayList<>();
574589
List<ServiceOfferingJoinVO> serviceOfferingsForThisDomain = serviceOfferingJoinDao.findByDomainId(domainId);
575590
for (ServiceOfferingJoinVO serviceOffering : serviceOfferingsForThisDomain) {
576-
if (domainIdString.equals(serviceOffering.getDomainId())) {
591+
int vmCount = vmInstanceDao.getVmCountByOfferingId(serviceOffering.getId());
592+
if (vmCount == 0) {
577593
serviceOfferingDao.remove(serviceOffering.getId());
578594
} else {
579595
serviceOfferingsDetailsToRemove.add(serviceOffering.getId());
@@ -588,7 +604,8 @@ private void removeDiskOfferings(Long domainId, String domainIdString) {
588604
List<Long> diskOfferingsDetailsToRemove = new ArrayList<>();
589605
List<DiskOfferingJoinVO> diskOfferingsForThisDomain = diskOfferingJoinDao.findByDomainId(domainId);
590606
for (DiskOfferingJoinVO diskOffering : diskOfferingsForThisDomain) {
591-
if (domainIdString.equals(diskOffering.getDomainId())) {
607+
int volumeCount = volumeDao.getVolumeCountByOfferingId(diskOffering.getId());
608+
if (volumeCount == 0) {
592609
diskOfferingDao.remove(diskOffering.getId());
593610
} else {
594611
diskOfferingsDetailsToRemove.add(diskOffering.getId());

server/src/test/java/com/cloud/hypervisor/KVMGuruTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232
import com.cloud.storage.dao.GuestOSDao;
3333
import com.cloud.storage.dao.GuestOSHypervisorDao;
3434
import com.cloud.utils.Pair;
35-
import com.cloud.utils.exception.CloudRuntimeException;
3635
import com.cloud.vm.VirtualMachine;
3736
import com.cloud.vm.VirtualMachineProfile;
3837
import org.apache.cloudstack.api.ApiConstants;
@@ -141,10 +140,11 @@ public void testSetVmQuotaPercentage() {
141140
Mockito.verify(vmTO).setCpuQuotaPercentage(Mockito.anyDouble());
142141
}
143142

144-
@Test(expected = CloudRuntimeException.class)
143+
@Test
145144
public void testSetVmQuotaPercentageNullHost() {
146145
Mockito.when(hostDao.findById(hostId)).thenReturn(null);
147146
guru.setVmQuotaPercentage(vmTO, vmProfile);
147+
Mockito.verify(vmTO, Mockito.never()).setCpuQuotaPercentage(Mockito.anyDouble());
148148
}
149149

150150
@Test

0 commit comments

Comments
 (0)