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) {