bug 7369 : Resolving NPE while creating a private template from detached volume. The instance id is null when it is detached which was the culprit here.

status 7369: resolved fixed
This commit is contained in:
nit 2010-11-30 15:49:29 +05:30
parent b2ba0521df
commit a6a774f6c0
2 changed files with 10 additions and 9 deletions

View File

@ -5196,7 +5196,7 @@ public class ManagementServerImpl implements ManagementServer {
}
VMTemplateVO template = ApiDBUtils.findTemplateById(volume.getTemplateId());
boolean isExtractable = template != null && template.isExtractable() && !(template.getTemplateType()== Storage.TemplateType.SYSTEM || template.getTemplateType()== Storage.TemplateType.BUILTIN);
boolean isExtractable = template != null && template.isExtractable() && template.getTemplateType() != Storage.TemplateType.SYSTEM;
if( !isExtractable && account!=null && account.getType() != Account.ACCOUNT_TYPE_ADMIN){ // Global admins are allowed to extract
throw new PermissionDeniedException("The volume:" +volumeId+ " is not allowed to be extracted");
}

View File

@ -2487,7 +2487,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM
Long nextTemplateId = _templateDao.getNextInSequence(Long.class, "id");
String description = cmd.getDisplayText();
VMTemplateVO template = ApiDBUtils.findTemplateById(volume.getTemplateId());
boolean isExtractable = template != null && template.isExtractable() && !(template.getTemplateType()== Storage.TemplateType.SYSTEM || template.getTemplateType()== Storage.TemplateType.BUILTIN);
boolean isExtractable = template != null && template.isExtractable() && template.getTemplateType() != Storage.TemplateType.SYSTEM ;
privateTemplate = new VMTemplateVO(nextTemplateId,
uniqueName,
@ -2591,13 +2591,14 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM
if( volume == null ) {
throw new CloudRuntimeException("Unable to find volume for Id " + volumeId);
}
long instanceId = volume.getInstanceId();
VMInstanceVO vm = _vmDao.findById(instanceId);
State vmState = vm.getState();
if( !vmState.equals(State.Stopped) && !vmState.equals(State.Destroyed)) {
throw new CloudRuntimeException("Please put VM " + vm.getHostName() + " into Stopped state first");
}
Long instanceId = volume.getInstanceId();
if (instanceId != null){
VMInstanceVO vm = _vmDao.findById(instanceId);
State vmState = vm.getState();
if( !vmState.equals(State.Stopped) && !vmState.equals(State.Destroyed)) {
throw new CloudRuntimeException("Please put VM " + vm.getHostName() + " into Stopped state first");
}
}
cmd = new CreatePrivateTemplateFromVolumeCommand(secondaryStorageURL, templateId, volume.getAccountId(),
command.getTemplateName(), uniqueName, volume.getPath(), vmName);