From e3d3a8cb7e4abba0fe08d18038065aaaf25e3d58 Mon Sep 17 00:00:00 2001 From: Min Chen Date: Tue, 20 Aug 2013 14:56:13 -0700 Subject: [PATCH] CLOUDSTACK-4412: NPE while trying to force delete zone wide primary storage when volumes are present. --- .../CloudStackPrimaryDataStoreDriverImpl.java | 31 +++++++++++++++---- 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/plugins/storage/volume/default/src/org/apache/cloudstack/storage/datastore/driver/CloudStackPrimaryDataStoreDriverImpl.java b/plugins/storage/volume/default/src/org/apache/cloudstack/storage/datastore/driver/CloudStackPrimaryDataStoreDriverImpl.java index 1e04a76e73e..47cd1a83ef9 100644 --- a/plugins/storage/volume/default/src/org/apache/cloudstack/storage/datastore/driver/CloudStackPrimaryDataStoreDriverImpl.java +++ b/plugins/storage/volume/default/src/org/apache/cloudstack/storage/datastore/driver/CloudStackPrimaryDataStoreDriverImpl.java @@ -36,7 +36,6 @@ import com.cloud.storage.dao.SnapshotDao; import com.cloud.storage.dao.VMTemplateDao; import com.cloud.storage.dao.VolumeDao; import com.cloud.storage.snapshot.SnapshotManager; -import com.cloud.utils.db.DB; import com.cloud.vm.dao.VMInstanceDao; import org.apache.cloudstack.engine.subsystem.api.storage.*; import org.apache.cloudstack.framework.async.AsyncCompletionCallback; @@ -91,7 +90,14 @@ public class CloudStackPrimaryDataStoreDriverImpl implements PrimaryDataStoreDri CreateObjectCommand cmd = new CreateObjectCommand(volume.getTO()); EndPoint ep = epSelector.select(volume); - Answer answer = ep.sendMessage(cmd); + Answer answer = null; + if ( ep == null ){ + String errMsg = "No remote endpoint to send DeleteCommand, check if host or ssvm is down?"; + s_logger.error(errMsg); + answer = new Answer(cmd, false, errMsg); + } else{ + answer = ep.sendMessage(cmd); + } return answer; } @@ -138,9 +144,15 @@ public class CloudStackPrimaryDataStoreDriverImpl implements PrimaryDataStoreDri CommandResult result = new CommandResult(); try { EndPoint ep = epSelector.select(data); - Answer answer = ep.sendMessage(cmd); - if (answer != null && !answer.getResult()) { - result.setResult(answer.getDetails()); + if ( ep == null ){ + String errMsg = "No remote endpoint to send DeleteCommand, check if host or ssvm is down?"; + s_logger.error(errMsg); + result.setResult(errMsg); + } else { + Answer answer = ep.sendMessage(cmd); + if (answer != null && !answer.getResult()) { + result.setResult(answer.getDetails()); + } } } catch (Exception ex) { s_logger.debug("Unable to destoy volume" + data.getId(), ex); @@ -166,7 +178,14 @@ public class CloudStackPrimaryDataStoreDriverImpl implements PrimaryDataStoreDri CreateObjectCommand cmd = new CreateObjectCommand(snapshotTO); EndPoint ep = this.epSelector.select(snapshot); - Answer answer = ep.sendMessage(cmd); + Answer answer = null; + if ( ep == null ){ + String errMsg = "No remote endpoint to send DeleteCommand, check if host or ssvm is down?"; + s_logger.error(errMsg); + answer = new Answer(cmd, false, errMsg); + } else{ + answer = ep.sendMessage(cmd); + } result = new CreateCmdResult(null, answer); if (answer != null && !answer.getResult()) {