Findbugs : Fix a number of potential NPEs and minor findings

This commit is contained in:
Hugo Trippaers 2014-02-13 09:26:51 +01:00
parent e0a4b7c891
commit d4d49578dc
4 changed files with 51 additions and 56 deletions

View File

@ -42,14 +42,12 @@ import com.cloud.dc.ClusterDetailsDao;
import com.cloud.dc.ClusterVO;
import com.cloud.dc.DataCenter.NetworkType;
import com.cloud.dc.DataCenterVO;
import com.cloud.dc.dao.ClusterDao;
import com.cloud.dc.dao.DataCenterDao;
import com.cloud.exception.DiscoveredWithErrorException;
import com.cloud.exception.DiscoveryException;
import com.cloud.exception.InvalidParameterValueException;
import com.cloud.exception.ResourceInUseException;
import com.cloud.host.HostVO;
import com.cloud.host.dao.HostDao;
import com.cloud.hypervisor.Hypervisor;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
import com.cloud.hypervisor.dao.HypervisorCapabilitiesDao;
@ -87,8 +85,6 @@ import com.cloud.utils.UriUtils;
public class VmwareServerDiscoverer extends DiscovererBase implements Discoverer, ResourceStateAdapter {
private static final Logger s_logger = Logger.getLogger(VmwareServerDiscoverer.class);
@Inject
ClusterDao _clusterDao;
@Inject
VmwareManager _vmwareMgr;
@Inject
@ -98,8 +94,6 @@ public class VmwareServerDiscoverer extends DiscovererBase implements Discoverer
@Inject
ClusterDetailsDao _clusterDetailsDao;
@Inject
HostDao _hostDao;
@Inject
DataCenterDao _dcDao;
@Inject
ResourceManager _resourceMgr;

View File

@ -382,10 +382,10 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
@Override
public List<ManagedObjectReference> addHostToPodCluster(VmwareContext serviceContext, long dcId, Long podId, Long clusterId, String hostInventoryPath)
throws Exception {
ManagedObjectReference mor = null;
if (serviceContext != null) {
mor = serviceContext.getHostMorByPath(hostInventoryPath);
if (serviceContext == null) {
throw new CloudRuntimeException("Invalid serviceContext");
}
ManagedObjectReference mor = serviceContext.getHostMorByPath(hostInventoryPath);
String privateTrafficLabel = null;
privateTrafficLabel = serviceContext.getStockObject("privateTrafficLabel");
if (privateTrafficLabel == null) {

View File

@ -663,8 +663,6 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
public ExecutionResult createFileInVR(String routerIp, String filePath, String fileName, String content) {
VmwareManager mgr = getServiceContext().getStockObject(VmwareManager.CONTEXT_STOCK_NAME);
File keyFile = mgr.getSystemVMKeyFile();
boolean result = true;
try {
SshHelper.scpTo(routerIp, 3922, "root", keyFile, null, filePath, content.getBytes(), fileName, null);
} catch (Exception e) {
@ -1065,9 +1063,6 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
}
private ExecutionResult prepareNetworkElementCommand(IpAssocCommand cmd) {
int i = 0;
String[] results = new String[cmd.getIpAddresses().length];
VmwareContext context = getServiceContext();
try {
VmwareHypervisorHost hyperHost = getHyperHost(context);
@ -1142,15 +1137,13 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
}
private ExecutionResult NetworkElementCommandnup(IpAssocCommand cmd) {
String[] results = new String[cmd.getIpAddresses().length];
VmwareContext context = getServiceContext();
try {
VmwareHypervisorHost hyperHost = getHyperHost(context);
IpAddressTO[] ips = cmd.getIpAddresses();
String routerName = cmd.getAccessDetail(NetworkElementCommand.ROUTER_NAME);
String controlIp = VmwareResource.getRouterSshControlIp(cmd);
VmwareResource.getRouterSshControlIp(cmd);
VirtualMachineMO vmMo = hyperHost.findVmOnHyperHost(routerName);
@ -4477,10 +4470,13 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
null);
return new CreateAnswer(cmd, vol);
} finally {
vmMo.detachAllDisks();
s_logger.info("Destroy dummy VM after volume creation");
vmMo.destroy();
if (vmMo != null) {
s_logger.warn("Unable to destroy a null VM ManagedObjectReference");
vmMo.detachAllDisks();
vmMo.destroy();
}
}
} else {
VirtualMachineMO vmTemplate = VmwareHelper.pickOneVmOnRunningHost(dcMo.findVmByNameAndLabel(cmd.getTemplateUrl()), true);
@ -4537,8 +4533,11 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
return new CreateAnswer(cmd, vol);
} finally {
s_logger.info("Destroy dummy VM after volume creation");
vmMo.detachAllDisks();
vmMo.destroy();
if (vmMo != null) {
s_logger.warn("Unable to destroy a null VM ManagedObjectReference");
vmMo.detachAllDisks();
vmMo.destroy();
}
}
}
} catch (Throwable e) {

View File

@ -123,17 +123,17 @@ public class VmwareStorageProcessor implements StorageProcessor {
}
private void copyTemplateFromSecondaryToPrimary(VmwareHypervisorHost hyperHost, DatastoreMO datastoreMo, String secondaryStorageUrl,
String templatePathAtSecondaryStorage, String templateName, String templateUuid) throws Exception {
String templatePathAtSecondaryStorage, String templateName, String templateUuid) throws Exception {
s_logger.info("Executing copyTemplateFromSecondaryToPrimary. secondaryStorage: " + secondaryStorageUrl + ", templatePathAtSecondaryStorage: " +
templatePathAtSecondaryStorage + ", templateName: " + templateName);
templatePathAtSecondaryStorage + ", templateName: " + templateName);
String secondaryMountPoint = mountService.getMountPoint(secondaryStorageUrl);
s_logger.info("Secondary storage mount point: " + secondaryMountPoint);
String srcOVAFileName =
VmwareStorageLayoutHelper.getTemplateOnSecStorageFilePath(secondaryMountPoint, templatePathAtSecondaryStorage, templateName,
ImageFormat.OVA.getFileExtension());
VmwareStorageLayoutHelper.getTemplateOnSecStorageFilePath(secondaryMountPoint, templatePathAtSecondaryStorage, templateName,
ImageFormat.OVA.getFileExtension());
String srcFileName = getOVFFilePath(srcOVAFileName);
if (srcFileName == null) {
@ -163,7 +163,7 @@ public class VmwareStorageProcessor implements StorageProcessor {
VirtualMachineMO vmMo = hyperHost.findVmOnHyperHost(vmName);
if (vmMo == null) {
String msg =
"Failed to import OVA template. secondaryStorage: " + secondaryStorageUrl + ", templatePathAtSecondaryStorage: " + templatePathAtSecondaryStorage +
"Failed to import OVA template. secondaryStorage: " + secondaryStorageUrl + ", templatePathAtSecondaryStorage: " + templatePathAtSecondaryStorage +
", templateName: " + templateName + ", templateUuid: " + templateUuid;
s_logger.error(msg);
throw new Exception(msg);
@ -218,7 +218,7 @@ public class VmwareStorageProcessor implements StorageProcessor {
DatastoreMO primaryStorageDatastoreMo = new DatastoreMO(context, morDs);
copyTemplateFromSecondaryToPrimary(hyperHost, primaryStorageDatastoreMo, secondaryStorageUrl, templateInfo.first(), templateInfo.second(),
templateUuidName);
templateUuidName);
} else {
s_logger.info("Template " + templateInfo.second() + " has already been setup, skip the template setup process in primary storage");
}
@ -238,7 +238,7 @@ public class VmwareStorageProcessor implements StorageProcessor {
}
private boolean createVMLinkedClone(VirtualMachineMO vmTemplate, DatacenterMO dcMo, DatastoreMO dsMo, String vmdkName, ManagedObjectReference morDatastore,
ManagedObjectReference morPool) throws Exception {
ManagedObjectReference morPool) throws Exception {
ManagedObjectReference morBaseSnapshot = vmTemplate.getSnapshotMor("cloud.template.base");
if (morBaseSnapshot == null) {
@ -257,7 +257,7 @@ public class VmwareStorageProcessor implements StorageProcessor {
}
private boolean createVMFullClone(VirtualMachineMO vmTemplate, DatacenterMO dcMo, DatastoreMO dsMo, String vmdkName, ManagedObjectReference morDatastore,
ManagedObjectReference morPool) throws Exception {
ManagedObjectReference morPool) throws Exception {
s_logger.info("creating full clone from template");
if (!vmTemplate.createFullClone(vmdkName, dcMo.getVmFolder(), morPool, morDatastore)) {
@ -293,7 +293,7 @@ public class VmwareStorageProcessor implements StorageProcessor {
String vmdkFileBaseName = null;
if (srcStore == null) {
// create a root volume for blank VM (created from ISO)
String dummyVmName = this.hostService.getWorkerName(context, cmd, 0);
String dummyVmName = hostService.getWorkerName(context, cmd, 0);
try {
vmMo = HypervisorHostHelper.createWorkerVM(hyperHost, dsMo, dummyVmName);
@ -312,10 +312,12 @@ public class VmwareStorageProcessor implements StorageProcessor {
vmMo.detachDisk(volumeDatastorePath, false);
}
} finally {
vmMo.detachAllDisks();
s_logger.info("Destroy dummy VM after volume creation");
vmMo.destroy();
if (vmMo != null) {
s_logger.warn("Unable to destroy a null VM ManagedObjectReference");
vmMo.detachAllDisks();
vmMo.destroy();
}
}
} else {
String templatePath = template.getPath();
@ -459,7 +461,7 @@ public class VmwareStorageProcessor implements StorageProcessor {
}
private Pair<String, String> copyVolumeToSecStorage(VmwareHostService hostService, VmwareHypervisorHost hyperHost, CopyCommand cmd, String vmName, String poolId,
String volumePath, String destVolumePath, String secStorageUrl, String workerVmName) throws Exception {
String volumePath, String destVolumePath, String secStorageUrl, String workerVmName) throws Exception {
VirtualMachineMO workerVm = null;
VirtualMachineMO vmMo = null;
String exportName = UUID.randomUUID().toString().replace("-", "");
@ -521,8 +523,8 @@ public class VmwareStorageProcessor implements StorageProcessor {
Pair<String, String> result;
result =
copyVolumeToSecStorage(hostService, hyperHost, cmd, vmName, primaryStorage.getUuid(), srcVolume.getPath(), destVolume.getPath(), destStore.getUrl(),
hostService.getWorkerName(context, cmd, 0));
copyVolumeToSecStorage(hostService, hyperHost, cmd, vmName, primaryStorage.getUuid(), srcVolume.getPath(), destVolume.getPath(), destStore.getUrl(),
hostService.getWorkerName(context, cmd, 0));
VolumeObjectTO newVolume = new VolumeObjectTO();
newVolume.setPath(result.first() + File.separator + result.second());
return new CopyCmdAnswer(newVolume);
@ -577,7 +579,7 @@ public class VmwareStorageProcessor implements StorageProcessor {
}
private Ternary<String, Long, Long> createTemplateFromVolume(VirtualMachineMO vmMo, String installPath, long templateId, String templateUniqueName,
String secStorageUrl, String volumePath, String workerVmName) throws Exception {
String secStorageUrl, String volumePath, String workerVmName) throws Exception {
String secondaryMountPoint = mountService.getMountPoint(secStorageUrl);
String installFullPath = secondaryMountPoint + "/" + installPath;
@ -611,7 +613,7 @@ public class VmwareStorageProcessor implements StorageProcessor {
// 4 MB is the minimum requirement for VM memory in VMware
Pair<VirtualMachineMO, String[]> cloneResult =
vmMo.cloneFromCurrentSnapshot(workerVmName, 0, 4, volumeDeviceInfo.second(), VmwareHelper.getDiskDeviceDatastore(volumeDeviceInfo.first()));
vmMo.cloneFromCurrentSnapshot(workerVmName, 0, 4, volumeDeviceInfo.second(), VmwareHelper.getDiskDeviceDatastore(volumeDeviceInfo.first()));
clonedVm = cloneResult.first();
clonedVm.exportVm(secondaryMountPoint + "/" + installPath, templateUniqueName, false, false);
@ -674,7 +676,7 @@ public class VmwareStorageProcessor implements StorageProcessor {
if (vmMo == null) {
if (s_logger.isDebugEnabled()) {
s_logger.debug("Unable to find the owner VM for CreatePrivateTemplateFromVolumeCommand on host " + hyperHost.getHyperHostName() +
", try within datacenter");
", try within datacenter");
}
vmMo = hyperHost.findVmOnPeerHyperHost(volume.getVmName());
@ -694,8 +696,8 @@ public class VmwareStorageProcessor implements StorageProcessor {
}
Ternary<String, Long, Long> result =
createTemplateFromVolume(vmMo, template.getPath(), template.getId(), template.getName(), secondaryStoragePoolURL, volumePath,
hostService.getWorkerName(context, cmd, 0));
createTemplateFromVolume(vmMo, template.getPath(), template.getId(), template.getName(), secondaryStoragePoolURL, volumePath,
hostService.getWorkerName(context, cmd, 0));
TemplateObjectTO newTemplate = new TemplateObjectTO();
newTemplate.setPath(result.first());
@ -742,7 +744,7 @@ public class VmwareStorageProcessor implements StorageProcessor {
}
private Ternary<String, Long, Long> createTemplateFromSnapshot(String installPath, String templateUniqueName, String secStorageUrl, String snapshotPath,
Long templateId) throws Exception {
Long templateId) throws Exception {
//Snapshot path is decoded in this form: /snapshots/account/volumeId/uuid/uuid
String backupSSUuid;
String snapshotFolder;
@ -751,7 +753,7 @@ public class VmwareStorageProcessor implements StorageProcessor {
backupSSUuid = snapshotPath.substring(index + 1).replace(".ova", "");
snapshotFolder = snapshotPath.substring(0, index);
} else {
String[] tokens = snapshotPath.split(File.separator);
String[] tokens = snapshotPath.split(File.separatorChar == '\\' ? "\\\\" : File.separator);
backupSSUuid = tokens[tokens.length - 1];
snapshotFolder = StringUtils.join(tokens, File.separator, 0, tokens.length - 1);
}
@ -909,7 +911,7 @@ public class VmwareStorageProcessor implements StorageProcessor {
// return Pair<String(divice bus name), String[](disk chain)>
private Pair<String, String[]> exportVolumeToSecondaryStroage(VirtualMachineMO vmMo, String volumePath, String secStorageUrl, String secStorageDir,
String exportName, String workerVmName) throws Exception {
String exportName, String workerVmName) throws Exception {
String secondaryMountPoint = mountService.getMountPoint(secStorageUrl);
String exportPath = secondaryMountPoint + "/" + secStorageDir + "/" + exportName;
@ -937,7 +939,7 @@ public class VmwareStorageProcessor implements StorageProcessor {
// 4 MB is the minimum requirement for VM memory in VMware
Pair<VirtualMachineMO, String[]> cloneResult =
vmMo.cloneFromCurrentSnapshot(workerVmName, 0, 4, volumeDeviceInfo.second(), VmwareHelper.getDiskDeviceDatastore(volumeDeviceInfo.first()));
vmMo.cloneFromCurrentSnapshot(workerVmName, 0, 4, volumeDeviceInfo.second(), VmwareHelper.getDiskDeviceDatastore(volumeDeviceInfo.first()));
clonedVm = cloneResult.first();
String disks[] = cloneResult.second();
@ -953,7 +955,7 @@ public class VmwareStorageProcessor implements StorageProcessor {
// Ternary<String(backup uuid in secondary storage), String(device bus name), String[](original disk chain in the snapshot)>
private Ternary<String, String, String[]> backupSnapshotToSecondaryStorage(VirtualMachineMO vmMo, String installPath, String volumePath, String snapshotUuid,
String secStorageUrl, String prevSnapshotUuid, String prevBackupUuid, String workerVmName) throws Exception {
String secStorageUrl, String prevSnapshotUuid, String prevBackupUuid, String workerVmName) throws Exception {
String backupUuid = UUID.randomUUID().toString();
Pair<String, String[]> snapshotInfo = exportVolumeToSecondaryStroage(vmMo, volumePath, secStorageUrl, installPath, backupUuid, workerVmName);
@ -1030,8 +1032,8 @@ public class VmwareStorageProcessor implements StorageProcessor {
}
backupResult =
backupSnapshotToSecondaryStorage(vmMo, destSnapshot.getPath(), srcSnapshot.getVolume().getPath(), snapshotUuid, secondaryStorageUrl,
prevSnapshotUuid, prevBackupUuid, hostService.getWorkerName(context, cmd, 1));
backupSnapshotToSecondaryStorage(vmMo, destSnapshot.getPath(), srcSnapshot.getVolume().getPath(), snapshotUuid, secondaryStorageUrl,
prevSnapshotUuid, prevBackupUuid, hostService.getWorkerName(context, cmd, 1));
snapshotBackupUuid = backupResult.first();
success = (snapshotBackupUuid != null);
@ -1173,9 +1175,9 @@ public class VmwareStorageProcessor implements StorageProcessor {
Map<String, String> details = disk.getDetails();
morDs = hostService.prepareManagedStorage(hyperHost, iScsiName, storageHost, storagePort,
details.get(DiskTO.CHAP_INITIATOR_USERNAME), details.get(DiskTO.CHAP_INITIATOR_SECRET),
details.get(DiskTO.CHAP_TARGET_USERNAME), details.get(DiskTO.CHAP_TARGET_SECRET),
volumeTO.getSize(), cmd);
details.get(DiskTO.CHAP_INITIATOR_USERNAME), details.get(DiskTO.CHAP_INITIATOR_SECRET),
details.get(DiskTO.CHAP_TARGET_USERNAME), details.get(DiskTO.CHAP_TARGET_SECRET),
volumeTO.getSize(), cmd);
}
else {
morDs = HypervisorHostHelper.findDatastoreWithBackwardsCompatibility(hyperHost, isManaged ? VmwareResource.getDatastoreName(iScsiName) : primaryStore.getUuid());
@ -1187,7 +1189,7 @@ public class VmwareStorageProcessor implements StorageProcessor {
throw new Exception(msg);
}
DatastoreMO dsMo = new DatastoreMO(this.hostService.getServiceContext(null), morDs);
DatastoreMO dsMo = new DatastoreMO(hostService.getServiceContext(null), morDs);
String datastoreVolumePath;
if (isAttach) {
@ -1219,7 +1221,7 @@ public class VmwareStorageProcessor implements StorageProcessor {
vmMo.detachDisk(datastoreVolumePath, false);
if (isManaged) {
this.hostService.handleDatastoreAndVmdkDetach(iScsiName, storageHost, storagePort);
hostService.handleDatastoreAndVmdkDetach(iScsiName, storageHost, storagePort);
} else {
VmwareStorageLayoutHelper.syncVolumeToRootFolder(dsMo.getOwnerDatacenter().first(), dsMo, volumeTO.getPath());
}
@ -1369,7 +1371,7 @@ public class VmwareStorageProcessor implements StorageProcessor {
String volumeUuid = UUID.randomUUID().toString().replace("-", "");
String volumeDatastorePath = dsMo.getDatastorePath(volumeUuid + ".vmdk");
String dummyVmName = this.hostService.getWorkerName(context, cmd, 0);
String dummyVmName = hostService.getWorkerName(context, cmd, 0);
try {
s_logger.info("Create worker VM " + dummyVmName);
vmMo = HypervisorHostHelper.createWorkerVM(hyperHost, dsMo, dummyVmName);
@ -1485,7 +1487,7 @@ public class VmwareStorageProcessor implements StorageProcessor {
// this.hostService.handleDatastoreAndVmdkDetach(iScsiName, storageHost, storagePort);
if (managedIqns != null && !managedIqns.isEmpty()) {
this.hostService.removeManagedTargetsFromCluster(managedIqns);
hostService.removeManagedTargetsFromCluster(managedIqns);
}
for (NetworkDetails netDetails : networks) {
@ -1573,7 +1575,7 @@ public class VmwareStorageProcessor implements StorageProcessor {
}
private Long restoreVolumeFromSecStorage(VmwareHypervisorHost hyperHost, DatastoreMO primaryDsMo, String newVolumeName, String secStorageUrl, String secStorageDir,
String backupName) throws Exception {
String backupName) throws Exception {
String secondaryMountPoint = mountService.getMountPoint(secStorageUrl);
String srcOVAFileName = null;