You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ra...@apache.org on 2015/04/29 07:43:49 UTC
[05/50] git commit: updated refs/heads/master to 0b83559
volume upload: Volume entry created in DB even though GetUpload* API fails with "No ssvm present" error
Signed-off-by: Rajani Karuturi <ra...@gmail.com>
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/dd1a8da9
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/dd1a8da9
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/dd1a8da9
Branch: refs/heads/master
Commit: dd1a8da9775f3348bc664550270d7a0e99199e5b
Parents: da1d8f9
Author: Rajani Karuturi <ra...@gmail.com>
Authored: Thu Feb 26 15:13:52 2015 +0530
Committer: Rajani Karuturi <ra...@gmail.com>
Committed: Fri Feb 27 17:42:32 2015 +0530
----------------------------------------------------------------------
.../com/cloud/storage/VolumeApiServiceImpl.java | 100 ++++++++++---------
1 file changed, 54 insertions(+), 46 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/dd1a8da9/server/src/com/cloud/storage/VolumeApiServiceImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/VolumeApiServiceImpl.java b/server/src/com/cloud/storage/VolumeApiServiceImpl.java
index 62f7710..9840096 100644
--- a/server/src/com/cloud/storage/VolumeApiServiceImpl.java
+++ b/server/src/com/cloud/storage/VolumeApiServiceImpl.java
@@ -30,6 +30,7 @@ import javax.inject.Inject;
import com.cloud.utils.EncryptionUtil;
import com.cloud.utils.ImageStoreUtil;
+import com.cloud.utils.db.TransactionCallbackWithException;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
@@ -276,70 +277,77 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic
}
@Override
- @DB
@ActionEvent(eventType = EventTypes.EVENT_VOLUME_UPLOAD, eventDescription = "uploading volume for post upload", async = true)
- public GetUploadParamsResponse uploadVolume(GetUploadParamsForVolumeCmd cmd) throws ResourceAllocationException, MalformedURLException {
+ public GetUploadParamsResponse uploadVolume(final GetUploadParamsForVolumeCmd cmd) throws ResourceAllocationException, MalformedURLException {
Account caller = CallContext.current().getCallingAccount();
long ownerId = cmd.getEntityOwnerId();
- Account owner = _entityMgr.findById(Account.class, ownerId);
- Long zoneId = cmd.getZoneId();
- String volumeName = cmd.getName();
+ final Account owner = _entityMgr.findById(Account.class, ownerId);
+ final Long zoneId = cmd.getZoneId();
+ final String volumeName = cmd.getName();
String format = cmd.getFormat();
- Long diskOfferingId = cmd.getDiskOfferingId();
+ final Long diskOfferingId = cmd.getDiskOfferingId();
String imageStoreUuid = cmd.getImageStoreUuid();
- DataStore store = _tmpltMgr.getImageStore(imageStoreUuid, zoneId);
+ final DataStore store = _tmpltMgr.getImageStore(imageStoreUuid, zoneId);
validateVolume(caller, ownerId, zoneId, volumeName, null, format, diskOfferingId);
- VolumeVO volume = persistVolume(owner, zoneId, volumeName, null, cmd.getFormat(), diskOfferingId, Volume.State.NotUploaded);
-
- VolumeInfo vol = volFactory.getVolume(volume.getId());
-
- RegisterVolumePayload payload = new RegisterVolumePayload(null, cmd.getChecksum(), cmd.getFormat());
- vol.addPayload(payload);
+ return Transaction.execute(new TransactionCallbackWithException<GetUploadParamsResponse, MalformedURLException>() {
+ @Override
+ public GetUploadParamsResponse doInTransaction(TransactionStatus status) throws MalformedURLException {
- Pair<EndPoint, DataObject> pair = volService.registerVolumeForPostUpload(vol, store);
- EndPoint ep = pair.first();
- DataObject dataObject = pair.second();
+ VolumeVO volume = persistVolume(owner, zoneId, volumeName, null, cmd.getFormat(), diskOfferingId, Volume.State.NotUploaded);
+ VolumeInfo vol = volFactory.getVolume(volume.getId());
- GetUploadParamsResponse response = new GetUploadParamsResponse();
+ RegisterVolumePayload payload = new RegisterVolumePayload(null, cmd.getChecksum(), cmd.getFormat());
+ vol.addPayload(payload);
- String ssvmUrlDomain = _configDao.getValue(Config.SecStorageSecureCopyCert.key());
+ Pair<EndPoint, DataObject> pair = volService.registerVolumeForPostUpload(vol, store);
+ EndPoint ep = pair.first();
+ DataObject dataObject = pair.second();
- String url = ImageStoreUtil.generatePostUploadUrl(ssvmUrlDomain, ep.getPublicAddr(), vol.getUuid());
- response.setPostURL(new URL(url));
- // set the post url, this is used in the monitoring thread to determine the SSVM
- VolumeDataStoreVO volumeStore = _volumeStoreDao.findByVolume(volume.getId());
- if (volumeStore != null) {
- volumeStore.setExtractUrl(url);
- _volumeStoreDao.persist(volumeStore);
- }
+ GetUploadParamsResponse response = new GetUploadParamsResponse();
- response.setId(UUID.fromString(vol.getUuid()));
+ String ssvmUrlDomain = _configDao.getValue(Config.SecStorageSecureCopyCert.key());
- int timeout = ImageStoreUploadMonitorImpl.getUploadOperationTimeout();
- DateTime currentDateTime = new DateTime(DateTimeZone.UTC);
- String expires = currentDateTime.plusMinutes(timeout).toString();
- response.setTimeout(expires);
+ String url = ImageStoreUtil.generatePostUploadUrl(ssvmUrlDomain, ep.getPublicAddr(), vol.getUuid());
+ response.setPostURL(new URL(url));
- String key = _configDao.getValue(Config.SSVMPSK.key());
- /*
- * encoded metadata using the post upload config key
- */
- TemplateOrVolumePostUploadCommand command = new TemplateOrVolumePostUploadCommand(vol.getId(), vol.getUuid(), volumeStore.getInstallPath(), volumeStore.getChecksum(), vol
- .getType().toString(), vol.getName(), vol.getFormat().toString(), dataObject.getDataStore().getUri(), dataObject.getDataStore().getRole().toString());
- command.setLocalPath(volumeStore.getLocalDownloadPath());
- Gson gson = new GsonBuilder().create();
- String metadata = EncryptionUtil.encodeData(gson.toJson(command), key);
- response.setMetadata(metadata);
+ // set the post url, this is used in the monitoring thread to determine the SSVM
+ VolumeDataStoreVO volumeStore = _volumeStoreDao.findByVolume(vol.getId());
+ if (volumeStore != null) {
+ volumeStore.setExtractUrl(url);
+ _volumeStoreDao.persist(volumeStore);
+ }
- /*
- * signature calculated on the url, expiry, metadata.
- */
- response.setSignature(EncryptionUtil.generateSignature(metadata + url + expires, key));
- return response;
+ response.setId(UUID.fromString(vol.getUuid()));
+
+ int timeout = ImageStoreUploadMonitorImpl.getUploadOperationTimeout();
+ DateTime currentDateTime = new DateTime(DateTimeZone.UTC);
+ String expires = currentDateTime.plusMinutes(timeout).toString();
+ response.setTimeout(expires);
+
+ String key = _configDao.getValue(Config.SSVMPSK.key());
+ /*
+ * encoded metadata using the post upload config key
+ */
+ TemplateOrVolumePostUploadCommand command =
+ new TemplateOrVolumePostUploadCommand(vol.getId(), vol.getUuid(), volumeStore.getInstallPath(), volumeStore.getChecksum(), vol.getType().toString(),
+ vol.getName(), vol.getFormat().toString(), dataObject.getDataStore().getUri(),
+ dataObject.getDataStore().getRole().toString());
+ command.setLocalPath(volumeStore.getLocalDownloadPath());
+ Gson gson = new GsonBuilder().create();
+ String metadata = EncryptionUtil.encodeData(gson.toJson(command), key);
+ response.setMetadata(metadata);
+
+ /*
+ * signature calculated on the url, expiry, metadata.
+ */
+ response.setSignature(EncryptionUtil.generateSignature(metadata + url + expires, key));
+ return response;
+ }
+ });
}
private boolean validateVolume(Account caller, long ownerId, Long zoneId, String volumeName, String url,