You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ko...@apache.org on 2015/01/31 13:08:13 UTC
[2/8] git commit: updated refs/heads/volume-upload to 121ff19
volume-upload: management server polling and upload status from agent
Some more fixes to the polling logic
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/c9908d26
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/c9908d26
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/c9908d26
Branch: refs/heads/volume-upload
Commit: c9908d26780f34f4324a4773289f9a4172c099b1
Parents: 3e857bd
Author: Koushik Das <ko...@apache.org>
Authored: Thu Jan 22 13:03:23 2015 +0530
Committer: Koushik Das <ko...@apache.org>
Committed: Sat Jan 31 17:10:46 2015 +0530
----------------------------------------------------------------------
.../storage/command/UploadStatusAnswer.java | 2 +-
.../storage/ImageStoreUploadMonitorImpl.java | 190 +++++++++----------
2 files changed, 95 insertions(+), 97 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c9908d26/core/src/org/apache/cloudstack/storage/command/UploadStatusAnswer.java
----------------------------------------------------------------------
diff --git a/core/src/org/apache/cloudstack/storage/command/UploadStatusAnswer.java b/core/src/org/apache/cloudstack/storage/command/UploadStatusAnswer.java
index 887f3ab..00be941 100644
--- a/core/src/org/apache/cloudstack/storage/command/UploadStatusAnswer.java
+++ b/core/src/org/apache/cloudstack/storage/command/UploadStatusAnswer.java
@@ -33,7 +33,7 @@ public class UploadStatusAnswer extends Answer {
public UploadStatusAnswer(UploadStatusCommand cmd, UploadStatus status, String msg) {
super(cmd, false, msg);
- this.status = UploadStatus.ERROR;
+ this.status = status;
}
public UploadStatusAnswer(UploadStatusCommand cmd, Exception e) {
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c9908d26/server/src/com/cloud/storage/ImageStoreUploadMonitorImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/ImageStoreUploadMonitorImpl.java b/server/src/com/cloud/storage/ImageStoreUploadMonitorImpl.java
index e0af472..736f8c6 100755
--- a/server/src/com/cloud/storage/ImageStoreUploadMonitorImpl.java
+++ b/server/src/com/cloud/storage/ImageStoreUploadMonitorImpl.java
@@ -37,6 +37,7 @@ import org.apache.cloudstack.framework.config.ConfigKey;
import org.apache.cloudstack.framework.config.Configurable;
import org.apache.cloudstack.managed.context.ManagedContextRunnable;
import org.apache.cloudstack.storage.command.UploadStatusAnswer;
+import org.apache.cloudstack.storage.command.UploadStatusAnswer.UploadStatus;
import org.apache.cloudstack.storage.command.UploadStatusCommand;
import org.apache.cloudstack.storage.command.UploadStatusCommand.EntityType;
import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreDao;
@@ -64,6 +65,7 @@ import com.cloud.utils.concurrency.NamedThreadFactory;
import com.cloud.utils.db.Transaction;
import com.cloud.utils.db.TransactionCallbackNoReturn;
import com.cloud.utils.db.TransactionStatus;
+import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.utils.fsm.NoTransitionException;
import com.cloud.utils.fsm.StateMachine2;
@@ -188,10 +190,16 @@ public class ImageStoreUploadMonitorImpl extends ManagerBase implements ImageSto
continue;
}
Host host = _hostDao.findById(ep.getId());
+ UploadStatusCommand cmd = new UploadStatusCommand(volume.getId(), EntityType.Volume);
if (host != null && host.getManagementServerId() != null) {
if (_nodeId == host.getManagementServerId().longValue()) {
- UploadStatusCommand cmd = new UploadStatusCommand(volume.getId(), EntityType.Volume);
- Answer answer = ep.sendMessage(cmd);
+ Answer answer = null;
+ try {
+ answer = ep.sendMessage(cmd);
+ } catch (CloudRuntimeException e) {
+ s_logger.warn("Unable to get upload status for volume " + volume.getUuid() + ". Error details: " + e.getMessage());
+ answer = new UploadStatusAnswer(cmd, UploadStatus.UNKNOWN, e.getMessage());
+ }
if (answer == null || !(answer instanceof UploadStatusAnswer)) {
s_logger.warn("No or invalid answer corresponding to UploadStatusCommand for volume " + volumeDataStore.getVolumeId());
continue;
@@ -199,7 +207,8 @@ public class ImageStoreUploadMonitorImpl extends ManagerBase implements ImageSto
handleVolumeStatusResponse((UploadStatusAnswer)answer, volume, volumeDataStore);
}
} else {
- handleVolumeStatusResponse(null, volume, volumeDataStore);
+ String error = "Volume " + volume.getUuid() + " failed to upload as SSVM is either destroyed or SSVM agent not in 'Up' state";
+ handleVolumeStatusResponse(new UploadStatusAnswer(cmd, UploadStatus.ERROR, error), volume, volumeDataStore);
}
}
@@ -218,10 +227,16 @@ public class ImageStoreUploadMonitorImpl extends ManagerBase implements ImageSto
continue;
}
Host host = _hostDao.findById(ep.getId());
+ UploadStatusCommand cmd = new UploadStatusCommand(template.getId(), EntityType.Template);
if (host != null && host.getManagementServerId() != null) {
if (_nodeId == host.getManagementServerId().longValue()) {
- UploadStatusCommand cmd = new UploadStatusCommand(template.getId(), EntityType.Template);
- Answer answer = ep.sendMessage(cmd);
+ Answer answer = null;
+ try {
+ answer = ep.sendMessage(cmd);
+ } catch (CloudRuntimeException e) {
+ s_logger.warn("Unable to get upload status for template " + template.getUuid() + ". Error details: " + e.getMessage());
+ answer = new UploadStatusAnswer(cmd, UploadStatus.UNKNOWN, e.getMessage());
+ }
if (answer == null || !(answer instanceof UploadStatusAnswer)) {
s_logger.warn("No or invalid answer corresponding to UploadStatusCommand for template " + templateDataStore.getTemplateId());
continue;
@@ -229,7 +244,8 @@ public class ImageStoreUploadMonitorImpl extends ManagerBase implements ImageSto
handleTemplateStatusResponse((UploadStatusAnswer)answer, template, templateDataStore);
}
} else {
- handleTemplateStatusResponse(null, template, templateDataStore);
+ String error = "Template " + template.getUuid() + " failed to upload as SSVM is either destroyed or SSVM agent not in 'Up' state";
+ handleTemplateStatusResponse(new UploadStatusAnswer(cmd, UploadStatus.ERROR, error), template, templateDataStore);
}
}
}
@@ -242,58 +258,49 @@ public class ImageStoreUploadMonitorImpl extends ManagerBase implements ImageSto
VolumeVO tmpVolume = _volumeDao.findById(volume.getId());
VolumeDataStoreVO tmpVolumeDataStore = _volumeDataStoreDao.findById(volumeDataStore.getId());
try {
- if (answer != null) {
- switch (answer.getStatus()) {
- case COMPLETED:
- tmpVolumeDataStore.setDownloadState(VMTemplateStorageResourceAssoc.Status.DOWNLOADED);
- tmpVolumeDataStore.setState(State.Ready);
- stateMachine.transitTo(tmpVolume, Event.OperationSucceeded, null, _volumeDao);
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Volume " + tmpVolume.getUuid() + " uploaded successfully");
- }
- break;
- case IN_PROGRESS:
- if (tmpVolume.getState() == Volume.State.NotUploaded) {
- tmpVolumeDataStore.setDownloadState(VMTemplateStorageResourceAssoc.Status.DOWNLOAD_IN_PROGRESS);
- stateMachine.transitTo(tmpVolume, Event.UploadRequested, null, _volumeDao);
- } else if (tmpVolume.getState() == Volume.State.UploadInProgress) { // check for timeout
- if (System.currentTimeMillis() - tmpVolumeDataStore.getCreated().getTime() > _uploadOperationTimeout) {
- tmpVolumeDataStore.setDownloadState(VMTemplateStorageResourceAssoc.Status.DOWNLOAD_ERROR);
- stateMachine.transitTo(tmpVolume, Event.OperationFailed, null, _volumeDao);
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Volume " + tmpVolume.getUuid() + " failed to upload due to operation timed out");
- }
- }
- }
- break;
- case ERROR:
- tmpVolumeDataStore.setDownloadState(VMTemplateStorageResourceAssoc.Status.DOWNLOAD_ERROR);
- tmpVolumeDataStore.setState(State.Failed);
- stateMachine.transitTo(tmpVolume, Event.OperationFailed, null, _volumeDao);
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Volume " + tmpVolume.getUuid() + " failed to upload. Error details: " + answer.getDetails());
- }
- break;
- case UNKNOWN:
- if (tmpVolume.getState() == Volume.State.NotUploaded) { // check for timeout
- if (System.currentTimeMillis() - tmpVolumeDataStore.getCreated().getTime() > _uploadOperationTimeout) {
- tmpVolumeDataStore.setDownloadState(VMTemplateStorageResourceAssoc.Status.ABANDONED);
- tmpVolumeDataStore.setState(State.Failed);
- stateMachine.transitTo(tmpVolume, Event.OperationTimeout, null, _volumeDao);
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Volume " + tmpVolume.getUuid() + " failed to upload due to operation timed out");
- }
+ switch (answer.getStatus()) {
+ case COMPLETED:
+ tmpVolumeDataStore.setDownloadState(VMTemplateStorageResourceAssoc.Status.DOWNLOADED);
+ tmpVolumeDataStore.setState(State.Ready);
+ stateMachine.transitTo(tmpVolume, Event.OperationSucceeded, null, _volumeDao);
+ if (s_logger.isDebugEnabled()) {
+ s_logger.debug("Volume " + tmpVolume.getUuid() + " uploaded successfully");
+ }
+ break;
+ case IN_PROGRESS:
+ if (tmpVolume.getState() == Volume.State.NotUploaded) {
+ tmpVolumeDataStore.setDownloadState(VMTemplateStorageResourceAssoc.Status.DOWNLOAD_IN_PROGRESS);
+ stateMachine.transitTo(tmpVolume, Event.UploadRequested, null, _volumeDao);
+ } else if (tmpVolume.getState() == Volume.State.UploadInProgress) { // check for timeout
+ if (System.currentTimeMillis() - tmpVolumeDataStore.getCreated().getTime() > _uploadOperationTimeout) {
+ tmpVolumeDataStore.setDownloadState(VMTemplateStorageResourceAssoc.Status.DOWNLOAD_ERROR);
+ stateMachine.transitTo(tmpVolume, Event.OperationFailed, null, _volumeDao);
+ if (s_logger.isDebugEnabled()) {
+ s_logger.debug("Volume " + tmpVolume.getUuid() + " failed to upload due to operation timed out");
}
}
- break;
}
- } else {
- tmpVolumeDataStore.setDownloadState(VMTemplateStorageResourceAssoc.Status.UPLOAD_ERROR);
+ break;
+ case ERROR:
+ tmpVolumeDataStore.setDownloadState(VMTemplateStorageResourceAssoc.Status.DOWNLOAD_ERROR);
tmpVolumeDataStore.setState(State.Failed);
stateMachine.transitTo(tmpVolume, Event.OperationFailed, null, _volumeDao);
if (s_logger.isDebugEnabled()) {
- s_logger.debug("Volume " + tmpVolume.getUuid() + " failed to upload as SSVM is either destroyed or SSVM agent not in 'Up' state");
+ s_logger.debug("Volume " + tmpVolume.getUuid() + " failed to upload. Error details: " + answer.getDetails());
+ }
+ break;
+ case UNKNOWN:
+ if (tmpVolume.getState() == Volume.State.NotUploaded) { // check for timeout
+ if (System.currentTimeMillis() - tmpVolumeDataStore.getCreated().getTime() > _uploadOperationTimeout) {
+ tmpVolumeDataStore.setDownloadState(VMTemplateStorageResourceAssoc.Status.ABANDONED);
+ tmpVolumeDataStore.setState(State.Failed);
+ stateMachine.transitTo(tmpVolume, Event.OperationTimeout, null, _volumeDao);
+ if (s_logger.isDebugEnabled()) {
+ s_logger.debug("Volume " + tmpVolume.getUuid() + " failed to upload due to operation timed out");
+ }
+ }
}
+ break;
}
_volumeDataStoreDao.update(tmpVolumeDataStore.getId(), tmpVolumeDataStore);
} catch (NoTransitionException e) {
@@ -311,58 +318,49 @@ public class ImageStoreUploadMonitorImpl extends ManagerBase implements ImageSto
VMTemplateVO tmpTemplate = _templateDao.findById(template.getId());
TemplateDataStoreVO tmpTemplateDataStore = _templateDataStoreDao.findById(templateDataStore.getId());
try {
- if (answer != null) {
- switch (answer.getStatus()) {
- case COMPLETED:
- tmpTemplateDataStore.setDownloadState(VMTemplateStorageResourceAssoc.Status.DOWNLOADED);
- tmpTemplateDataStore.setState(State.Ready);
- stateMachine.transitTo(tmpTemplate, VirtualMachineTemplate.Event.OperationSucceeded, null, _templateDao);
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Template " + tmpTemplate.getUuid() + " uploaded successfully");
- }
- break;
- case IN_PROGRESS:
- if (tmpTemplate.getState() == VirtualMachineTemplate.State.NotUploaded) {
- tmpTemplateDataStore.setDownloadState(VMTemplateStorageResourceAssoc.Status.DOWNLOAD_IN_PROGRESS);
- stateMachine.transitTo(tmpTemplate, VirtualMachineTemplate.Event.UploadRequested, null, _templateDao);
- } else if (tmpTemplate.getState() == VirtualMachineTemplate.State.UploadInProgress) { // check for timeout
- if (System.currentTimeMillis() - tmpTemplateDataStore.getCreated().getTime() > _uploadOperationTimeout) {
- tmpTemplateDataStore.setDownloadState(VMTemplateStorageResourceAssoc.Status.DOWNLOAD_ERROR);
- stateMachine.transitTo(tmpTemplate, VirtualMachineTemplate.Event.OperationFailed, null, _templateDao);
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Template " + tmpTemplate.getUuid() + " failed to upload due to operation timed out");
- }
- }
- }
- break;
- case ERROR:
- tmpTemplateDataStore.setDownloadState(VMTemplateStorageResourceAssoc.Status.DOWNLOAD_ERROR);
- tmpTemplateDataStore.setState(State.Failed);
- stateMachine.transitTo(tmpTemplate, VirtualMachineTemplate.Event.OperationFailed, null, _templateDao);
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Template " + tmpTemplate.getUuid() + " failed to upload. Error details: " + answer.getDetails());
- }
- break;
- case UNKNOWN:
- if (tmpTemplate.getState() == VirtualMachineTemplate.State.NotUploaded) { // check for timeout
- if (System.currentTimeMillis() - tmpTemplateDataStore.getCreated().getTime() > _uploadOperationTimeout) {
- tmpTemplateDataStore.setDownloadState(VMTemplateStorageResourceAssoc.Status.ABANDONED);
- tmpTemplateDataStore.setState(State.Failed);
- stateMachine.transitTo(tmpTemplate, VirtualMachineTemplate.Event.OperationTimeout, null, _templateDao);
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Template " + tmpTemplate.getUuid() + " failed to upload due to operation timed out");
- }
+ switch (answer.getStatus()) {
+ case COMPLETED:
+ tmpTemplateDataStore.setDownloadState(VMTemplateStorageResourceAssoc.Status.DOWNLOADED);
+ tmpTemplateDataStore.setState(State.Ready);
+ stateMachine.transitTo(tmpTemplate, VirtualMachineTemplate.Event.OperationSucceeded, null, _templateDao);
+ if (s_logger.isDebugEnabled()) {
+ s_logger.debug("Template " + tmpTemplate.getUuid() + " uploaded successfully");
+ }
+ break;
+ case IN_PROGRESS:
+ if (tmpTemplate.getState() == VirtualMachineTemplate.State.NotUploaded) {
+ tmpTemplateDataStore.setDownloadState(VMTemplateStorageResourceAssoc.Status.DOWNLOAD_IN_PROGRESS);
+ stateMachine.transitTo(tmpTemplate, VirtualMachineTemplate.Event.UploadRequested, null, _templateDao);
+ } else if (tmpTemplate.getState() == VirtualMachineTemplate.State.UploadInProgress) { // check for timeout
+ if (System.currentTimeMillis() - tmpTemplateDataStore.getCreated().getTime() > _uploadOperationTimeout) {
+ tmpTemplateDataStore.setDownloadState(VMTemplateStorageResourceAssoc.Status.DOWNLOAD_ERROR);
+ stateMachine.transitTo(tmpTemplate, VirtualMachineTemplate.Event.OperationFailed, null, _templateDao);
+ if (s_logger.isDebugEnabled()) {
+ s_logger.debug("Template " + tmpTemplate.getUuid() + " failed to upload due to operation timed out");
}
}
- break;
}
- } else {
- tmpTemplateDataStore.setDownloadState(VMTemplateStorageResourceAssoc.Status.UPLOAD_ERROR);
+ break;
+ case ERROR:
+ tmpTemplateDataStore.setDownloadState(VMTemplateStorageResourceAssoc.Status.DOWNLOAD_ERROR);
tmpTemplateDataStore.setState(State.Failed);
stateMachine.transitTo(tmpTemplate, VirtualMachineTemplate.Event.OperationFailed, null, _templateDao);
if (s_logger.isDebugEnabled()) {
- s_logger.debug("Template " + tmpTemplate.getUuid() + " failed to upload as SSVM is either destroyed or SSVM agent not in 'Up' state");
+ s_logger.debug("Template " + tmpTemplate.getUuid() + " failed to upload. Error details: " + answer.getDetails());
+ }
+ break;
+ case UNKNOWN:
+ if (tmpTemplate.getState() == VirtualMachineTemplate.State.NotUploaded) { // check for timeout
+ if (System.currentTimeMillis() - tmpTemplateDataStore.getCreated().getTime() > _uploadOperationTimeout) {
+ tmpTemplateDataStore.setDownloadState(VMTemplateStorageResourceAssoc.Status.ABANDONED);
+ tmpTemplateDataStore.setState(State.Failed);
+ stateMachine.transitTo(tmpTemplate, VirtualMachineTemplate.Event.OperationTimeout, null, _templateDao);
+ if (s_logger.isDebugEnabled()) {
+ s_logger.debug("Template " + tmpTemplate.getUuid() + " failed to upload due to operation timed out");
+ }
+ }
}
+ break;
}
_templateDataStoreDao.update(tmpTemplateDataStore.getId(), tmpTemplateDataStore);
} catch (NoTransitionException e) {