Skip to content

Commit 7b64236

Browse files
committed
Merge release branch 4.18 to main
* 4.18: server: remove registered userdata when cleanup an account (#7777) server: Use max secondary storage defined on the account during upload (#7441) test: upgrade kubernetes versions to 1.25.0/1.26.0 (#7685) kvm: Added VNI Devices as normal bridge slave devs (#7836) noVNC: fix JP keyboard on vmware7+ which uses websocket URL (#7694)
2 parents 82f9106 + 1605b2f commit 7b64236

File tree

20 files changed

+1398
-38
lines changed

20 files changed

+1398
-38
lines changed

api/src/main/java/com/cloud/user/ResourceLimitService.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,15 @@ public interface ResourceLimitService {
117117
*/
118118
public long findDefaultResourceLimitForDomain(ResourceType resourceType);
119119

120+
/**
121+
* Finds the resource limit for a specified account, domain and type.
122+
*
123+
* @param domain
124+
* @param type
125+
* @return resource limit
126+
*/
127+
public long findCorrectResourceLimitForAccountAndDomain(Account account, Domain domain, ResourceType type);
128+
120129
/**
121130
* Increments the resource count
122131
*

engine/schema/src/main/java/com/cloud/user/dao/UserDataDao.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,6 @@ public interface UserDataDao extends GenericDao<UserDataVO, Long> {
2525

2626
public UserDataVO findByName(long accountId, long domainId, String name);
2727

28+
int removeByAccountId(long accountId);
29+
2830
}

engine/schema/src/main/java/com/cloud/user/dao/UserDataDaoImpl.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,4 +63,11 @@ public UserDataVO findByName(long accountId, long domainId, String name) {
6363

6464
return findOneBy(sc);
6565
}
66+
67+
@Override
68+
public int removeByAccountId(long accountId) {
69+
SearchCriteria<UserDataVO> sc = userdataSearch.create();
70+
sc.setParameters("accountId", accountId);
71+
return remove(sc);
72+
}
6673
}

plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1713,7 +1713,8 @@ private String matchPifFileInDirectory(final String bridgeName) {
17131713
"^enx",
17141714
"^dummy",
17151715
"^lo",
1716-
"^p\\d+p\\d+"
1716+
"^p\\d+p\\d+",
1717+
"^vni"
17171718
};
17181719

17191720
/**

server/src/main/java/com/cloud/resourcelimit/ResourceLimitManagerImpl.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -547,6 +547,18 @@ public long findDefaultResourceLimitForDomain(ResourceType resourceType) {
547547
return resourceLimit;
548548
}
549549

550+
@Override
551+
public long findCorrectResourceLimitForAccountAndDomain(Account account, Domain domain, ResourceType type) {
552+
long maxSecondaryStorageForAccount = findCorrectResourceLimitForAccount(account, type);
553+
long maxSecondaryStorageForDomain = findCorrectResourceLimitForDomain(domain, type);
554+
555+
if (maxSecondaryStorageForDomain == Resource.RESOURCE_UNLIMITED || maxSecondaryStorageForAccount == Resource.RESOURCE_UNLIMITED) {
556+
return Math.max(maxSecondaryStorageForDomain, maxSecondaryStorageForAccount);
557+
}
558+
559+
return Math.min(maxSecondaryStorageForDomain, maxSecondaryStorageForAccount);
560+
}
561+
550562
@Override
551563
@DB
552564
public void checkResourceLimit(final Account account, final ResourceType type, long... count) throws ResourceAllocationException {

server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434

3535
import javax.inject.Inject;
3636

37+
import com.cloud.domain.dao.DomainDao;
3738
import org.apache.cloudstack.api.ApiConstants.IoDriverPolicy;
3839
import org.apache.cloudstack.api.ApiErrorCode;
3940
import org.apache.cloudstack.api.InternalIdentity;
@@ -331,6 +332,9 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic
331332
@Inject
332333
protected SnapshotHelper snapshotHelper;
333334

335+
@Inject
336+
protected DomainDao domainDao;
337+
334338
@Inject
335339
protected ProjectManager projectManager;
336340
@Inject
@@ -486,13 +490,13 @@ public GetUploadParamsResponse doInTransaction(TransactionStatus status) throws
486490
//using the existing max upload size configuration
487491
command.setProcessTimeout(NumbersUtil.parseLong(_configDao.getValue("vmware.package.ova.timeout"), 3600));
488492
command.setMaxUploadSize(_configDao.getValue(Config.MaxUploadVolumeSize.key()));
489-
command.setAccountId(vol.getAccountId());
490-
Account account = _accountDao.findById(vol.getAccountId());
491-
if (account.getType().equals(Account.Type.PROJECT)) {
492-
command.setDefaultMaxSecondaryStorageInGB(ResourceLimitService.MaxProjectSecondaryStorage.value());
493-
} else {
494-
command.setDefaultMaxSecondaryStorageInGB(ResourceLimitService.MaxAccountSecondaryStorage.value());
495-
}
493+
494+
long accountId = vol.getAccountId();
495+
Account account = _accountDao.findById(accountId);
496+
Domain domain = domainDao.findById(account.getDomainId());
497+
498+
command.setDefaultMaxSecondaryStorageInGB(_resourceLimitMgr.findCorrectResourceLimitForAccountAndDomain(account, domain, ResourceType.secondary_storage));
499+
command.setAccountId(accountId);
496500
Gson gson = new GsonBuilder().create();
497501
String metadata = EncryptionUtil.encodeData(gson.toJson(command), key);
498502
response.setMetadata(metadata);

server/src/main/java/com/cloud/template/HypervisorTemplateAdapter.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828

2929
import javax.inject.Inject;
3030

31+
import com.cloud.domain.Domain;
3132
import org.apache.cloudstack.agent.directdownload.CheckUrlAnswer;
3233
import org.apache.cloudstack.agent.directdownload.CheckUrlCommand;
3334
import org.apache.cloudstack.annotation.AnnotationService;
@@ -93,7 +94,6 @@
9394
import com.cloud.storage.download.DownloadMonitor;
9495
import com.cloud.template.VirtualMachineTemplate.State;
9596
import com.cloud.user.Account;
96-
import com.cloud.user.ResourceLimitService;
9797
import com.cloud.utils.Pair;
9898
import com.cloud.utils.UriUtils;
9999
import com.cloud.utils.db.DB;
@@ -402,13 +402,13 @@ public List<TemplateOrVolumePostUploadCommand> doInTransaction(TransactionStatus
402402
templateOnStore.getDataStore().getRole().toString());
403403
//using the existing max template size configuration
404404
payload.setMaxUploadSize(_configDao.getValue(Config.MaxTemplateAndIsoSize.key()));
405-
payload.setAccountId(template.getAccountId());
406-
Account account = _accountDao.findById(template.getAccountId());
407-
if (account.getType().equals(Account.Type.PROJECT)) {
408-
payload.setDefaultMaxSecondaryStorageInGB(ResourceLimitService.MaxProjectSecondaryStorage.value());
409-
} else {
410-
payload.setDefaultMaxSecondaryStorageInGB(ResourceLimitService.MaxAccountSecondaryStorage.value());
411-
}
405+
406+
Long accountId = template.getAccountId();
407+
Account account = _accountDao.findById(accountId);
408+
Domain domain = _domainDao.findById(account.getDomainId());
409+
410+
payload.setDefaultMaxSecondaryStorageInGB(_resourceLimitMgr.findCorrectResourceLimitForAccountAndDomain(account, domain, ResourceType.secondary_storage));
411+
payload.setAccountId(accountId);
412412
payload.setRemoteEndPoint(ep.getPublicAddr());
413413
payload.setRequiresHvm(template.requiresHvm());
414414
payload.setDescription(template.getDisplayText());

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@
162162
import com.cloud.user.dao.SSHKeyPairDao;
163163
import com.cloud.user.dao.UserAccountDao;
164164
import com.cloud.user.dao.UserDao;
165+
import com.cloud.user.dao.UserDataDao;
165166
import com.cloud.utils.ConstantTimeComparator;
166167
import com.cloud.utils.NumbersUtil;
167168
import com.cloud.utils.Pair;
@@ -292,6 +293,8 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M
292293
private GlobalLoadBalancerRuleDao _gslbRuleDao;
293294
@Inject
294295
private SSHKeyPairDao _sshKeyPairDao;
296+
@Inject
297+
private UserDataDao userDataDao;
295298

296299
private List<QuerySelector> _querySelectors;
297300

@@ -1089,6 +1092,10 @@ public int compare(NetworkVO network1, NetworkVO network2) {
10891092
for (SSHKeyPairVO keypair : sshkeypairs) {
10901093
_sshKeyPairDao.remove(keypair.getId());
10911094
}
1095+
1096+
// Delete registered UserData
1097+
userDataDao.removeByAccountId(accountId);
1098+
10921099
return true;
10931100
} catch (Exception ex) {
10941101
s_logger.warn("Failed to cleanup account " + account + " due to ", ex);

server/src/main/java/org/apache/cloudstack/consoleproxy/ConsoleAccessManagerImpl.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -385,7 +385,7 @@ private ConsoleEndpoint composeConsoleAccessEndpoint(String rootUrl, VirtualMach
385385
String token = encryptor.encryptObject(ConsoleProxyClientParam.class, param);
386386
int vncPort = consoleProxyManager.getVncPort();
387387

388-
String url = generateConsoleAccessUrl(rootUrl, param, token, vncPort, vm);
388+
String url = generateConsoleAccessUrl(rootUrl, param, token, vncPort, vm, hostVo, details);
389389

390390
s_logger.debug("Adding allowed session: " + sessionUuid);
391391
persistConsoleSession(sessionUuid, vm.getId(), hostVo.getId());
@@ -413,7 +413,7 @@ protected void persistConsoleSession(String sessionUuid, long instanceId, long h
413413
}
414414

415415
private String generateConsoleAccessUrl(String rootUrl, ConsoleProxyClientParam param, String token, int vncPort,
416-
VirtualMachine vm) {
416+
VirtualMachine vm, HostVO hostVo, UserVmDetailVO details) {
417417
StringBuilder sb = new StringBuilder(rootUrl);
418418
if (param.getHypervHost() != null || !ConsoleProxyManager.NoVncConsoleDefault.value()) {
419419
sb.append("/ajax?token=" + token);
@@ -422,6 +422,9 @@ private String generateConsoleAccessUrl(String rootUrl, ConsoleProxyClientParam
422422
.append("?autoconnect=true")
423423
.append("&port=" + vncPort)
424424
.append("&token=" + token);
425+
if (requiresVncOverWebSocketConnection(vm, hostVo) && details != null && details.getValue() != null) {
426+
sb.append("&language=" + details.getValue());
427+
}
425428
}
426429

427430
if (StringUtils.isNotBlank(param.getExtraSecurityToken())) {

server/src/test/java/com/cloud/user/AccountManagerImplTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,7 @@ public void deleteUserAccount() {
164164
sshkeyList.add(sshkey);
165165
Mockito.when(_sshKeyPairDao.listKeyPairs(Mockito.anyLong(), Mockito.anyLong())).thenReturn(sshkeyList);
166166
Mockito.when(_sshKeyPairDao.remove(Mockito.anyLong())).thenReturn(true);
167+
Mockito.when(userDataDao.removeByAccountId(Mockito.anyLong())).thenReturn(222);
167168

168169
Assert.assertTrue(accountManagerImpl.deleteUserAccount(42l));
169170
// assert that this was a clean delete

0 commit comments

Comments
 (0)