You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by GitBox <gi...@apache.org> on 2021/09/23 05:37:01 UTC

[GitHub] [cloudstack] slavkap commented on pull request #4826: Allow storage plugins to get storage/volume stats without sending commands to hosts

slavkap commented on pull request #4826:
URL: https://github.com/apache/cloudstack/pull/4826#issuecomment-925518739


   Hi @sureshanaparti, @rhtyd, sorry for not answering, but I needed a break and took a few days off. Unfortunately, I cannot find the problem with the test. The stack trace shows a null pointer exception at line 6508:
   
   > 2021-09-17 12:32:31,667 ERROR [c.c.a.ApiAsyncJobDispatcher] (API-Job-Executor-105:ctx-2c8348f6 job-2321) (logid:5537f2da) Unexpected exception while executing org.apache.cloudstack.api.command.admin.vm.MigrateVirtualMachineWithVolumeCmd
   > java.lang.NullPointerException
   >         at com.cloud.vm.UserVmManagerImpl.getVolumePoolMappingForMigrateVmWithStorage(UserVmManagerImpl.java:6508)
   >         at com.cloud.vm.UserVmManagerImpl.migrateVirtualMachineWithVolume(UserVmManagerImpl.java:6576)
   >         at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   
   but this leads to commented part in the code of method `moveVMToUser` not `getVolumePoolMappingForMigrateVmWithStorage` :
   
   ```
     6462	    public UserVm moveVMToUser(final AssignVMCmd cmd) throws ResourceAllocationException, ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException {
     6463	        // VERIFICATIONS and VALIDATIONS
     6464	
     6465	        // VV 1: verify the two users
     6466	        Account caller = CallContext.current().getCallingAccount();
     6467	        if (!_accountMgr.isRootAdmin(caller.getId())
     6468	                && !_accountMgr.isDomainAdmin(caller.getId())) { // only
     6469	            // root
     6470	            // admin
     6471	            // can
     6472	            // assign
     6473	            // VMs
     6474	            throw new InvalidParameterValueException("Only domain admins are allowed to assign VMs and not " + caller.getType());
     6475	        }
     6476	
     6477	        // get and check the valid VM
     6478	        final UserVmVO vm = _vmDao.findById(cmd.getVmId());
     6479	        if (vm == null) {
     6480	            throw new InvalidParameterValueException("There is no vm by that id " + cmd.getVmId());
     6481	        } else if (vm.getState() == State.Running) { // VV 3: check if vm is
     6482	            // running
     6483	            if (s_logger.isDebugEnabled()) {
     6484	                s_logger.debug("VM is Running, unable to move the vm " + vm);
     6485	            }
     6486	            InvalidParameterValueException ex = new InvalidParameterValueException("VM is Running, unable to move the vm with specified vmId");
     6487	            ex.addProxyObject(vm.getUuid(), "vmId");
     6488	            throw ex;
     6489	        }
     6490	
     6491	        final Account oldAccount = _accountService.getActiveAccountById(vm.getAccountId());
     6492	        if (oldAccount == null) {
     6493	            throw new InvalidParameterValueException("Invalid account for VM " + vm.getAccountId() + " in domain.");
     6494	        }
     6495	        final Account newAccount = _accountMgr.finalizeOwner(caller, cmd.getAccountName(), cmd.getDomainId(), cmd.getProjectId());
     6496	        if (newAccount == null) {
     6497	            throw new InvalidParameterValueException("Invalid accountid=" + cmd.getAccountName() + " in domain " + cmd.getDomainId());
     6498	        }
     6499	
     6500	        if (newAccount.getState() == Account.State.disabled) {
     6501	            throw new InvalidParameterValueException("The new account owner " + cmd.getAccountName() + " is disabled.");
     6502	        }
     6503	
     6504	        if (cmd.getProjectId() != null && cmd.getDomainId() == null) {
     6505	            throw new InvalidParameterValueException("Please provide a valid domain ID; cannot assign VM to a project if domain ID is NULL.");
     6506	        }
     6507	
     6508	        //check caller has access to both the old and new account
     6509	        _accountMgr.checkAccess(caller, null, true, oldAccount);
   ```
   
   
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@cloudstack.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org