You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by mc...@apache.org on 2012/12/21 01:53:26 UTC

git commit: Remove IdentityProxy from BaseResponse, ExtractResponse. Now IdentityProxy is only referenced in CreateCmdResponse, which involves some async job logic change. Since it is not impacting list performance, will leave it there for now.

Updated Branches:
  refs/heads/api_refactoring 5548d08fb -> b14b39a69


Remove IdentityProxy from BaseResponse, ExtractResponse. Now
IdentityProxy is only referenced in CreateCmdResponse, which involves
some async job logic change. Since it is not impacting list performance,
will leave it there for now.

Signed-off-by: Min Chen <mi...@citrix.com>


Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/b14b39a6
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/b14b39a6
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/b14b39a6

Branch: refs/heads/api_refactoring
Commit: b14b39a69fa295d1d20484170b95b97fe310af28
Parents: 5548d08
Author: Min Chen <mi...@citrix.com>
Authored: Thu Dec 20 16:52:52 2012 -0800
Committer: Min Chen <mi...@citrix.com>
Committed: Thu Dec 20 16:52:52 2012 -0800

----------------------------------------------------------------------
 api/src/com/cloud/storage/Upload.java              |    2 +
 .../org/apache/cloudstack/api/BaseAsyncCmd.java    |    3 +-
 .../apache/cloudstack/api/BaseAsyncCreateCmd.java  |    5 +-
 api/src/org/apache/cloudstack/api/BaseCmd.java     |    5 +-
 .../org/apache/cloudstack/api/BaseResponse.java    |   19 +--
 .../org/apache/cloudstack/api/ResponseObject.java  |   24 +---
 .../api/command/user/volume/CreateVolumeCmd.java   |    2 +-
 .../api/command/user/volume/ExtractVolumeCmd.java  |   16 +-
 .../cloudstack/api/response/AccountResponse.java   |    6 +
 .../api/response/AutoScalePolicyResponse.java      |    6 +
 .../api/response/AutoScaleVmGroupResponse.java     |    7 +
 .../api/response/AutoScaleVmProfileResponse.java   |    7 +
 .../cloudstack/api/response/ConditionResponse.java |    6 +
 .../cloudstack/api/response/CounterResponse.java   |    6 +
 .../api/response/DomainRouterResponse.java         |    6 +-
 .../cloudstack/api/response/ExtractResponse.java   |   54 +++---
 .../api/response/FirewallRuleResponse.java         |    6 +
 .../cloudstack/api/response/HostResponse.java      |    5 +
 .../cloudstack/api/response/IPAddressResponse.java |    5 +
 .../cloudstack/api/response/IsoVmResponse.java     |    5 +
 .../cloudstack/api/response/NicResponse.java       |    4 -
 .../api/response/PhysicalNetworkResponse.java      |    7 +
 .../api/response/PrivateGatewayResponse.java       |    5 +
 .../api/response/SecurityGroupResponse.java        |    6 +-
 .../cloudstack/api/response/SnapshotResponse.java  |    5 +
 .../api/response/StaticRouteResponse.java          |    6 +
 .../api/response/StoragePoolResponse.java          |    6 +
 .../cloudstack/api/response/SystemVmResponse.java  |   12 +-
 .../cloudstack/api/response/TemplateResponse.java  |    5 +
 .../api/response/TrafficTypeResponse.java          |    6 +
 .../cloudstack/api/response/UserResponse.java      |    6 +
 .../cloudstack/api/response/UserVmResponse.java    |    4 +-
 .../cloudstack/api/response/VolumeResponse.java    |    5 +
 .../org/apache/cloudstack/query/QueryService.java  |    2 +-
 core/src/com/cloud/storage/UploadVO.java           |   44 +++--
 server/src/com/cloud/api/ApiDBUtils.java           |  129 ++++++++++++++
 server/src/com/cloud/api/ApiResponseHelper.java    |  133 ++-------------
 server/src/com/cloud/api/ApiServer.java            |   27 ++-
 .../src/com/cloud/api/query/QueryManagerImpl.java  |    6 +-
 .../src/com/cloud/server/ManagementServerImpl.java |    6 +-
 .../com/cloud/storage/upload/UploadListener.java   |  118 +++++++------
 setup/db/create-schema.sql                         |    1 +
 42 files changed, 443 insertions(+), 295 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b14b39a6/api/src/com/cloud/storage/Upload.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/storage/Upload.java b/api/src/com/cloud/storage/Upload.java
index d73a9d8..d67c15f 100755
--- a/api/src/com/cloud/storage/Upload.java
+++ b/api/src/com/cloud/storage/Upload.java
@@ -36,6 +36,8 @@ public interface Upload {
 
     long getId();
 
+    String getUuid();
+
     Date getCreated();
 
     Date getLastUpdated();

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b14b39a6/api/src/org/apache/cloudstack/api/BaseAsyncCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/BaseAsyncCmd.java b/api/src/org/apache/cloudstack/api/BaseAsyncCmd.java
index 2bc8a6e..fd67ed8 100644
--- a/api/src/org/apache/cloudstack/api/BaseAsyncCmd.java
+++ b/api/src/org/apache/cloudstack/api/BaseAsyncCmd.java
@@ -57,7 +57,8 @@ public abstract class BaseAsyncCmd extends BaseCmd {
     public ResponseObject getResponse(long jobId) {
         AsyncJobResponse response = new AsyncJobResponse();
 
-        response.setJobId(jobId);
+        AsyncJob job = _entityMgr.findById(AsyncJob.class, jobId);
+        response.setJobId(job.getUuid());
         response.setResponseName(getCommandName());
         return response;
     }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b14b39a6/api/src/org/apache/cloudstack/api/BaseAsyncCreateCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/BaseAsyncCreateCmd.java b/api/src/org/apache/cloudstack/api/BaseAsyncCreateCmd.java
index 63cab8b..ad9f4c6 100644
--- a/api/src/org/apache/cloudstack/api/BaseAsyncCreateCmd.java
+++ b/api/src/org/apache/cloudstack/api/BaseAsyncCreateCmd.java
@@ -17,6 +17,8 @@
 package org.apache.cloudstack.api;
 
 import org.apache.cloudstack.api.response.CreateCmdResponse;
+
+import com.cloud.async.AsyncJob;
 import com.cloud.exception.ResourceAllocationException;
 
 public abstract class BaseAsyncCreateCmd extends BaseAsyncCmd {
@@ -37,7 +39,8 @@ public abstract class BaseAsyncCreateCmd extends BaseAsyncCmd {
 
     public String getResponse(long jobId, long objectId, String objectEntityTable) {
         CreateCmdResponse response = new CreateCmdResponse();
-        response.setJobId(jobId);
+        AsyncJob job = _entityMgr.findById(AsyncJob.class, jobId);
+        response.setJobId(job.getUuid());
         response.setId(objectId);
         response.setIdEntityTable(objectEntityTable);
         response.setResponseName(getCommandName());

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b14b39a6/api/src/org/apache/cloudstack/api/BaseCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/BaseCmd.java b/api/src/org/apache/cloudstack/api/BaseCmd.java
index d89f5ea..d964e70 100644
--- a/api/src/org/apache/cloudstack/api/BaseCmd.java
+++ b/api/src/org/apache/cloudstack/api/BaseCmd.java
@@ -512,8 +512,9 @@ public abstract class BaseCmd {
                     throw new PermissionDeniedException("Can't add resources to the account id=" + account.getId() + " in state=" + account.getState() + " as it's no longer active");
                 }
             } else {
-                List<IdentityProxy> idList = new ArrayList<IdentityProxy>();
-                idList.add(new IdentityProxy("domain", domainId, "domainId"));
+                // idList is not used anywhere, so removed it now
+                //List<IdentityProxy> idList = new ArrayList<IdentityProxy>();
+                //idList.add(new IdentityProxy("domain", domainId, "domainId"));
                 throw new InvalidParameterValueException("Unable to find account by name " + accountName + " in domain with specified id");
             }
         }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b14b39a6/api/src/org/apache/cloudstack/api/BaseResponse.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/BaseResponse.java b/api/src/org/apache/cloudstack/api/BaseResponse.java
index 06171d9..a3fe6b0 100644
--- a/api/src/org/apache/cloudstack/api/BaseResponse.java
+++ b/api/src/org/apache/cloudstack/api/BaseResponse.java
@@ -46,18 +46,12 @@ public abstract class BaseResponse implements ResponseObject {
         this.objectName = objectName;
     }
 
-    //TODO: TO be replaced by getObjectUuid() after all response refactoring
-    public Long getObjectId() {
-        return null;
-    }
-
-    public String getObjectUuid(){
+    public String getObjectId() {
         return null;
     }
 
     // For use by list commands with pending async jobs
-    //TODO: To be replaced by jobUuid after all response refactoring
-    protected IdentityProxy jobId = new IdentityProxy("async_job");
+    protected String jobId;
 
     @SerializedName(ApiConstants.JOB_ID) @Param(description="the UUID of the latest async job acting on this object")
     protected String jobUuid;
@@ -65,13 +59,12 @@ public abstract class BaseResponse implements ResponseObject {
     @SerializedName(ApiConstants.JOB_STATUS) @Param(description="the current status of the latest async job acting on this object")
     private Integer jobStatus;
 
-    //TODO: TO be replaced by getter and setters for jobUuid.
-    public Long getJobId() {
-        return jobId.getValue();
+    public String getJobId() {
+        return jobId;
     }
 
-    public void setJobId(Long jobId) {
-        this.jobId.setValue(jobId);
+    public void setJobId(String jobId) {
+        this.jobId = jobId;
     }
 
     public String getJobUuid() {

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b14b39a6/api/src/org/apache/cloudstack/api/ResponseObject.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/ResponseObject.java b/api/src/org/apache/cloudstack/api/ResponseObject.java
index fd327fa..c8bd457 100644
--- a/api/src/org/apache/cloudstack/api/ResponseObject.java
+++ b/api/src/org/apache/cloudstack/api/ResponseObject.java
@@ -45,40 +45,24 @@ public interface ResponseObject {
     void setObjectName(String name);
 
     /**
-     * Returns the object Id
+     * Returns the object UUid
      */
-    Long getObjectId();
-
-    /**
-    * Returns the object uuid. To replace getObjectId() later.
-    */
-    String getObjectUuid();
+    String getObjectId();
 
     /**
      * Returns the job id
      *
      * @return
      */
-    Long getJobId();
+    String getJobId();
 
-    /**
-     * Return the async job uuid. To replace getJobId() later.
-     * @return
-     */
-    String getJobUuid();
 
     /**
      * Sets the job id
      *
      * @param jobId
      */
-    void setJobId(Long jobId);
-
-    /**
-     * Set the job uuid. To replace setJobId() later.
-     * @param jobUuid job uuid
-     */
-    void setJobUuid(String jobUuid);
+    void setJobId(String jobId);
 
     /**
      * Returns the job status

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b14b39a6/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java
index ca88639..a82c363 100644
--- a/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java
@@ -167,7 +167,7 @@ public class CreateVolumeCmd extends BaseAsyncCreateCmd {
             VolumeResponse response = _responseGenerator.createVolumeResponse(volume);
             //FIXME - have to be moved to ApiResponseHelper
             if (getSnapshotId() != null) {
-                Snapshot snap = _queryService.findSnapshotById(getSnapshotId());
+                Snapshot snap = _entityMgr.findById(Snapshot.class, getSnapshotId());
                 if (snap != null) {
                     response.setSnapshotId(snap.getUuid()); // if the volume was
                                                             // created from a

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b14b39a6/api/src/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java
index 787e096..39dcfe6 100644
--- a/api/src/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java
@@ -133,15 +133,17 @@ public class ExtractVolumeCmd extends BaseAsyncCmd {
                 ExtractResponse response = new ExtractResponse();
                 response.setResponseName(getCommandName());
                 response.setObjectName("volume");
-                response.setIdentityTableName("volumes");
-                response.setId(id);
-                response.setName(_entityMgr.findById(Volume.class, id).getName());
-                response.setZoneId(zoneId);
-                response.setZoneName(_entityMgr.findById(DataCenter.class, zoneId).getName());
+                Volume vol = _entityMgr.findById(Volume.class, id);
+                response.setId(vol.getUuid());
+                response.setName(vol.getName());
+                DataCenter zone = _entityMgr.findById(DataCenter.class, id);
+                response.setZoneId(zone.getUuid());
+                response.setZoneName(zone.getName());
                 response.setMode(mode);
-                response.setUploadId(uploadId);
+                response.setUploadId(uploadInfo.getUuid());
                 response.setState(uploadInfo.getUploadState().toString());
-                response.setAccountId(getEntityOwnerId());
+                Account account = _entityMgr.findById(Account.class, getEntityOwnerId());
+                response.setAccountId(account.getUuid());
                 response.setUrl(uploadInfo.getUploadUrl());
                 this.setResponseObject(response);
             } else {

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b14b39a6/api/src/org/apache/cloudstack/api/response/AccountResponse.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/response/AccountResponse.java b/api/src/org/apache/cloudstack/api/response/AccountResponse.java
index dcb9142..2f186fb 100644
--- a/api/src/org/apache/cloudstack/api/response/AccountResponse.java
+++ b/api/src/org/apache/cloudstack/api/response/AccountResponse.java
@@ -149,6 +149,12 @@ public class AccountResponse extends BaseResponse {
     @SerializedName(ApiConstants.ACCOUNT_DETAILS) @Param(description="details for the account")
     private Map<String, String> details;
 
+
+    @Override
+    public String getObjectId() {
+        return this.id;
+    }
+
     public void setId(String id) {
         this.id = id;
     }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b14b39a6/api/src/org/apache/cloudstack/api/response/AutoScalePolicyResponse.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/response/AutoScalePolicyResponse.java b/api/src/org/apache/cloudstack/api/response/AutoScalePolicyResponse.java
index b133139..3be8a42 100644
--- a/api/src/org/apache/cloudstack/api/response/AutoScalePolicyResponse.java
+++ b/api/src/org/apache/cloudstack/api/response/AutoScalePolicyResponse.java
@@ -60,6 +60,12 @@ public class AutoScalePolicyResponse extends BaseResponse implements ControlledE
     @SerializedName(ApiConstants.DOMAIN) @Param(description="the domain name of the autoscale policy")
     private String domainName;
 
+
+    @Override
+    public String getObjectId() {
+        return this.id;
+    }
+
     public void setId(String id) {
         this.id = id;
     }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b14b39a6/api/src/org/apache/cloudstack/api/response/AutoScaleVmGroupResponse.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/response/AutoScaleVmGroupResponse.java b/api/src/org/apache/cloudstack/api/response/AutoScaleVmGroupResponse.java
index a4f3da6..125aa9b 100644
--- a/api/src/org/apache/cloudstack/api/response/AutoScaleVmGroupResponse.java
+++ b/api/src/org/apache/cloudstack/api/response/AutoScaleVmGroupResponse.java
@@ -81,6 +81,13 @@ public class AutoScaleVmGroupResponse extends BaseResponse implements Controlled
 
     }
 
+
+    @Override
+    public String getObjectId() {
+        return this.id;
+    }
+
+
     public void setId(String id) {
         this.id = id;
     }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b14b39a6/api/src/org/apache/cloudstack/api/response/AutoScaleVmProfileResponse.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/response/AutoScaleVmProfileResponse.java b/api/src/org/apache/cloudstack/api/response/AutoScaleVmProfileResponse.java
index 0041be9..f5ed4b1 100644
--- a/api/src/org/apache/cloudstack/api/response/AutoScaleVmProfileResponse.java
+++ b/api/src/org/apache/cloudstack/api/response/AutoScaleVmProfileResponse.java
@@ -92,6 +92,13 @@ public class AutoScaleVmProfileResponse extends BaseResponse implements Controll
 
     }
 
+
+    @Override
+    public String getObjectId() {
+        return this.id;
+    }
+
+
     public void setId(String id) {
         this.id = id;
     }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b14b39a6/api/src/org/apache/cloudstack/api/response/ConditionResponse.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/response/ConditionResponse.java b/api/src/org/apache/cloudstack/api/response/ConditionResponse.java
index c90e78a..168ba5c 100644
--- a/api/src/org/apache/cloudstack/api/response/ConditionResponse.java
+++ b/api/src/org/apache/cloudstack/api/response/ConditionResponse.java
@@ -70,10 +70,16 @@ public class ConditionResponse extends BaseResponse implements ControlledEntityR
     // ///////////////// Setters ///////////////////////
     // ///////////////////////////////////////////////////
 
+
     public void setId(String id) {
         this.id = id;
     }
 
+    @Override
+    public String getObjectId() {
+        return this.id;
+    }
+
     public void setThreshold(long threshold) {
         this.threshold = threshold;
     }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b14b39a6/api/src/org/apache/cloudstack/api/response/CounterResponse.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/response/CounterResponse.java b/api/src/org/apache/cloudstack/api/response/CounterResponse.java
index 1d13d68..6afc0de 100644
--- a/api/src/org/apache/cloudstack/api/response/CounterResponse.java
+++ b/api/src/org/apache/cloudstack/api/response/CounterResponse.java
@@ -48,6 +48,12 @@ public class CounterResponse extends BaseResponse {
     @Param(description = "zone id of counter")
     private String zoneId;
 
+
+    @Override
+    public String getObjectId() {
+        return this.id;
+    }
+
     public void setId(String id) {
         this.id = id;
     }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b14b39a6/api/src/org/apache/cloudstack/api/response/DomainRouterResponse.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/response/DomainRouterResponse.java b/api/src/org/apache/cloudstack/api/response/DomainRouterResponse.java
index 7db014e..bd44f26 100644
--- a/api/src/org/apache/cloudstack/api/response/DomainRouterResponse.java
+++ b/api/src/org/apache/cloudstack/api/response/DomainRouterResponse.java
@@ -154,11 +154,15 @@ public class DomainRouterResponse extends BaseResponse implements ControlledView
         nics = new HashSet<NicResponse>();
     }
 
+
+
     @Override
-    public String getObjectUuid() {
+    public String getObjectId() {
         return this.getId();
     }
 
+
+
     public String getId() {
         return id;
     }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b14b39a6/api/src/org/apache/cloudstack/api/response/ExtractResponse.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/response/ExtractResponse.java b/api/src/org/apache/cloudstack/api/response/ExtractResponse.java
index ac5cc3d..5d415e9 100644
--- a/api/src/org/apache/cloudstack/api/response/ExtractResponse.java
+++ b/api/src/org/apache/cloudstack/api/response/ExtractResponse.java
@@ -19,20 +19,19 @@ package org.apache.cloudstack.api.response;
 import java.util.Date;
 
 import org.apache.cloudstack.api.ApiConstants;
-import com.cloud.utils.IdentityProxy;
 import com.cloud.serializer.Param;
 import com.google.gson.annotations.SerializedName;
 import org.apache.cloudstack.api.BaseResponse;
 
 public class ExtractResponse extends BaseResponse {
     @SerializedName(ApiConstants.ID) @Param(description="the id of extracted object")
-    private IdentityProxy id = new IdentityProxy("vm_template");
+    private String id;
 
     @SerializedName(ApiConstants.NAME) @Param(description="the name of the extracted object")
     private String name;
 
     @SerializedName("extractId") @Param(description="the upload id of extracted object")
-    private IdentityProxy uploadId = new IdentityProxy("async_job");
+    private String uploadId;
 
     @SerializedName("uploadpercentage") @Param(description="the percentage of the entity uploaded to the specified location")
     private Integer uploadPercent;
@@ -41,7 +40,7 @@ public class ExtractResponse extends BaseResponse {
     private String status;
 
     @SerializedName("accountid") @Param(description="the account id to which the extracted object belongs")
-    private IdentityProxy accountId = new IdentityProxy("account");
+    private String accountId;
 
     @SerializedName("resultstring") @Param(includeInApiDoc=false)
     private String resultString;
@@ -59,7 +58,7 @@ public class ExtractResponse extends BaseResponse {
     private String storage;
 
     @SerializedName(ApiConstants.ZONE_ID) @Param(description="zone ID the object was extracted from")
-    private IdentityProxy zoneId = new IdentityProxy("data_center");
+    private String zoneId;
 
     @SerializedName(ApiConstants.ZONE_NAME) @Param(description="zone name the object was extracted from")
     private String zoneName;
@@ -73,26 +72,23 @@ public class ExtractResponse extends BaseResponse {
     public ExtractResponse(){
     }
 
-    public ExtractResponse(Long typeId, String typeName, long accountId,
-            String state, Long uploadId) {
-        this.id.setValue(typeId);
+    public ExtractResponse(String typeId, String typeName, String accountId,
+            String state, String uploadId) {
+        this.id = typeId;
         this.name = typeName;
-        this.accountId.setValue(accountId);
+        this.accountId = accountId;
         this.state = state;
-        this.uploadId.setValue(uploadId);
+        this.uploadId = uploadId;
     }
 
-    public Long getId() {
-        return id.getValue();
+    public String getId() {
+        return id;
     }
 
-    public void setId(long id) {
-        this.id.setValue(id);
+    public void setId(String id) {
+        this.id = id;
     }
 
-    public void setIdentityTableName(String tableName) {
-        this.id.setTableName(tableName);
-    }
 
     public String getName() {
         return name;
@@ -102,12 +98,12 @@ public class ExtractResponse extends BaseResponse {
         this.name = name;
     }
 
-    public Long getUploadId() {
-        return uploadId.getValue();
+    public String getUploadId() {
+        return uploadId;
     }
 
-    public void setUploadId(Long uploadId) {
-        this.uploadId.setValue(uploadId);
+    public void setUploadId(String uploadId) {
+        this.uploadId = uploadId;
     }
 
     public Integer getUploadPercent() {
@@ -126,12 +122,12 @@ public class ExtractResponse extends BaseResponse {
         this.status = status;
     }
 
-    public Long getAccountId() {
-        return accountId.getValue();
+    public String getAccountId() {
+        return accountId;
     }
 
-    public void setAccountId(long accountId) {
-        this.accountId.setValue(accountId);
+    public void setAccountId(String accountId) {
+        this.accountId = accountId;
     }
 
     public String getResultString() {
@@ -174,12 +170,12 @@ public class ExtractResponse extends BaseResponse {
         this.storage = storage;
     }
 
-    public Long getZoneId() {
-        return zoneId.getValue();
+    public String getZoneId() {
+        return zoneId;
     }
 
-    public void setZoneId(Long zoneId) {
-        this.zoneId.setValue(zoneId);
+    public void setZoneId(String zoneId) {
+        this.zoneId = zoneId;
     }
 
     public String getZoneName() {

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b14b39a6/api/src/org/apache/cloudstack/api/response/FirewallRuleResponse.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/response/FirewallRuleResponse.java b/api/src/org/apache/cloudstack/api/response/FirewallRuleResponse.java
index 040878a..4dae4c5 100644
--- a/api/src/org/apache/cloudstack/api/response/FirewallRuleResponse.java
+++ b/api/src/org/apache/cloudstack/api/response/FirewallRuleResponse.java
@@ -67,6 +67,12 @@ public class FirewallRuleResponse extends BaseResponse {
     @SerializedName(ApiConstants.TAGS)  @Param(description="the list of resource tags associated with the rule", responseObject = ResourceTagResponse.class)
     private List<ResourceTagResponse> tags;
 
+
+    @Override
+    public String getObjectId() {
+        return this.getId();
+    }
+
     public String getId() {
         return id;
     }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b14b39a6/api/src/org/apache/cloudstack/api/response/HostResponse.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/response/HostResponse.java b/api/src/org/apache/cloudstack/api/response/HostResponse.java
index e4aae57..39309ca 100644
--- a/api/src/org/apache/cloudstack/api/response/HostResponse.java
+++ b/api/src/org/apache/cloudstack/api/response/HostResponse.java
@@ -160,6 +160,11 @@ public class HostResponse extends BaseResponse {
     private Boolean haHost;
 
 
+    @Override
+    public String getObjectId() {
+        return this.getId();
+    }
+
     public String getId() {
         return id;
     }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b14b39a6/api/src/org/apache/cloudstack/api/response/IPAddressResponse.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/response/IPAddressResponse.java b/api/src/org/apache/cloudstack/api/response/IPAddressResponse.java
index d614e34..18d3206 100644
--- a/api/src/org/apache/cloudstack/api/response/IPAddressResponse.java
+++ b/api/src/org/apache/cloudstack/api/response/IPAddressResponse.java
@@ -117,6 +117,11 @@ public class IPAddressResponse extends BaseResponse implements ControlledEntityR
         this.ipAddress = ipAddress;
     }
 
+    @Override
+    public String getObjectId() {
+        return this.getId();
+    }
+
     public void setAllocated(Date allocated) {
         this.allocated = allocated;
     }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b14b39a6/api/src/org/apache/cloudstack/api/response/IsoVmResponse.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/response/IsoVmResponse.java b/api/src/org/apache/cloudstack/api/response/IsoVmResponse.java
index ddb1c3f..a667e50 100644
--- a/api/src/org/apache/cloudstack/api/response/IsoVmResponse.java
+++ b/api/src/org/apache/cloudstack/api/response/IsoVmResponse.java
@@ -55,6 +55,11 @@ public class IsoVmResponse extends BaseResponse {
     private String virtualMachineState;
 
 
+    @Override
+    public String getObjectId() {
+        return this.getId();
+    }
+
     public String getOsTypeId() {
         return osTypeId;
     }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b14b39a6/api/src/org/apache/cloudstack/api/response/NicResponse.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/response/NicResponse.java b/api/src/org/apache/cloudstack/api/response/NicResponse.java
index 1ac0084..a6ca5b8 100644
--- a/api/src/org/apache/cloudstack/api/response/NicResponse.java
+++ b/api/src/org/apache/cloudstack/api/response/NicResponse.java
@@ -68,10 +68,6 @@ public class NicResponse extends BaseResponse {
         this.id = id;
     }
 
-    @Override
-    public String getObjectUuid() {
-        return this.getId();
-    }
 
     public void setNetworkid(String networkid) {
         this.networkId = networkid;

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b14b39a6/api/src/org/apache/cloudstack/api/response/PhysicalNetworkResponse.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/response/PhysicalNetworkResponse.java b/api/src/org/apache/cloudstack/api/response/PhysicalNetworkResponse.java
index 4f7f832..0f1e166 100644
--- a/api/src/org/apache/cloudstack/api/response/PhysicalNetworkResponse.java
+++ b/api/src/org/apache/cloudstack/api/response/PhysicalNetworkResponse.java
@@ -60,6 +60,13 @@ public class PhysicalNetworkResponse extends BaseResponse {
     @SerializedName(ApiConstants.NETWORK_SPEED) @Param(description="the speed of the physical network")
     private String networkSpeed;
 
+
+    @Override
+    public String getObjectId() {
+        return this.id;
+
+    }
+
     public void setId(String uuid) {
         this.id = uuid;
     }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b14b39a6/api/src/org/apache/cloudstack/api/response/PrivateGatewayResponse.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/response/PrivateGatewayResponse.java b/api/src/org/apache/cloudstack/api/response/PrivateGatewayResponse.java
index fb5c989..143a61a 100644
--- a/api/src/org/apache/cloudstack/api/response/PrivateGatewayResponse.java
+++ b/api/src/org/apache/cloudstack/api/response/PrivateGatewayResponse.java
@@ -72,6 +72,11 @@ public class PrivateGatewayResponse extends BaseResponse implements ControlledEn
     private String state;
 
 
+    @Override
+    public String getObjectId() {
+        return this.id;
+    }
+
     public void setId(String id) {
         this.id = id;
     }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b14b39a6/api/src/org/apache/cloudstack/api/response/SecurityGroupResponse.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/response/SecurityGroupResponse.java b/api/src/org/apache/cloudstack/api/response/SecurityGroupResponse.java
index 6900ca5..049709e 100644
--- a/api/src/org/apache/cloudstack/api/response/SecurityGroupResponse.java
+++ b/api/src/org/apache/cloudstack/api/response/SecurityGroupResponse.java
@@ -69,11 +69,15 @@ public class SecurityGroupResponse extends BaseResponse implements ControlledVie
         this.tags = new HashSet<ResourceTagResponse>();
     }
 
+
+
     @Override
-    public String getObjectUuid() {
+    public String getObjectId() {
         return this.getId();
     }
 
+
+
     public String getId() {
         return id;
      }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b14b39a6/api/src/org/apache/cloudstack/api/response/SnapshotResponse.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/response/SnapshotResponse.java b/api/src/org/apache/cloudstack/api/response/SnapshotResponse.java
index 28d768d..1c06b0a 100644
--- a/api/src/org/apache/cloudstack/api/response/SnapshotResponse.java
+++ b/api/src/org/apache/cloudstack/api/response/SnapshotResponse.java
@@ -85,6 +85,11 @@ public class SnapshotResponse extends BaseResponse implements ControlledEntityRe
     private List<ResourceTagResponse> tags;
 
 
+    @Override
+    public String getObjectId() {
+        return this.getId();
+    }
+
     private String getId() {
         return id;
     }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b14b39a6/api/src/org/apache/cloudstack/api/response/StaticRouteResponse.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/response/StaticRouteResponse.java b/api/src/org/apache/cloudstack/api/response/StaticRouteResponse.java
index e7de320..54831fe 100644
--- a/api/src/org/apache/cloudstack/api/response/StaticRouteResponse.java
+++ b/api/src/org/apache/cloudstack/api/response/StaticRouteResponse.java
@@ -62,6 +62,12 @@ public class StaticRouteResponse extends BaseResponse implements ControlledEntit
             responseObject = ResourceTagResponse.class)
     private List<ResourceTagResponse> tags;
 
+
+    @Override
+    public String getObjectId() {
+        return this.id;
+    }
+
     public void setId(String id) {
         this.id = id;
     }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b14b39a6/api/src/org/apache/cloudstack/api/response/StoragePoolResponse.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/response/StoragePoolResponse.java b/api/src/org/apache/cloudstack/api/response/StoragePoolResponse.java
index 1267668..707c852 100644
--- a/api/src/org/apache/cloudstack/api/response/StoragePoolResponse.java
+++ b/api/src/org/apache/cloudstack/api/response/StoragePoolResponse.java
@@ -80,6 +80,12 @@ public class StoragePoolResponse extends BaseResponse {
     private StoragePoolStatus state;
 
 
+
+    @Override
+    public String getObjectId() {
+        return this.getId();
+    }
+
     public String getId() {
         return id;
     }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b14b39a6/api/src/org/apache/cloudstack/api/response/SystemVmResponse.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/response/SystemVmResponse.java b/api/src/org/apache/cloudstack/api/response/SystemVmResponse.java
index 6a8e79d..806cada 100644
--- a/api/src/org/apache/cloudstack/api/response/SystemVmResponse.java
+++ b/api/src/org/apache/cloudstack/api/response/SystemVmResponse.java
@@ -108,16 +108,16 @@ public class SystemVmResponse extends BaseResponse {
     @SerializedName("activeviewersessions") @Param(description="the number of active console sessions for the console proxy system vm")
     private Integer activeViewerSessions;
 
-    private Long objectId;
+   // private Long objectId;
+
 
-    public Long getObjectId() {
-        return objectId;
-    }
 
-    public void setObjectId(Long objectId) {
-        this.objectId = objectId;
+    @Override
+    public String getObjectId() {
+        return this.getId();
     }
 
+
     public String getId() {
         return id;
     }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b14b39a6/api/src/org/apache/cloudstack/api/response/TemplateResponse.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/response/TemplateResponse.java b/api/src/org/apache/cloudstack/api/response/TemplateResponse.java
index 785b647..d9daf3a 100644
--- a/api/src/org/apache/cloudstack/api/response/TemplateResponse.java
+++ b/api/src/org/apache/cloudstack/api/response/TemplateResponse.java
@@ -135,6 +135,11 @@ public class TemplateResponse extends BaseResponse implements ControlledEntityRe
 
 
 
+    @Override
+    public String getObjectId() {
+        return this.getId();
+    }
+
     public String getId() {
         return id;
     }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b14b39a6/api/src/org/apache/cloudstack/api/response/TrafficTypeResponse.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/response/TrafficTypeResponse.java b/api/src/org/apache/cloudstack/api/response/TrafficTypeResponse.java
index b2f6e94..6f88d9c 100644
--- a/api/src/org/apache/cloudstack/api/response/TrafficTypeResponse.java
+++ b/api/src/org/apache/cloudstack/api/response/TrafficTypeResponse.java
@@ -41,6 +41,12 @@ public class TrafficTypeResponse extends BaseResponse {
     @SerializedName(ApiConstants.VMWARE_NETWORK_LABEL) @Param(description="The network name label of the physical device dedicated to this traffic on a VMware host")
     private String vmwareNetworkLabel;
 
+
+    @Override
+    public String getObjectId() {
+        return this.id;
+    }
+
     public void setPhysicalNetworkId(String physicalNetworkId) {
         this.physicalNetworkId = physicalNetworkId;
     }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b14b39a6/api/src/org/apache/cloudstack/api/response/UserResponse.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/response/UserResponse.java b/api/src/org/apache/cloudstack/api/response/UserResponse.java
index 8c070fd..6f1badf 100644
--- a/api/src/org/apache/cloudstack/api/response/UserResponse.java
+++ b/api/src/org/apache/cloudstack/api/response/UserResponse.java
@@ -72,6 +72,12 @@ public class UserResponse extends BaseResponse {
     @SerializedName("accountid") @Param(description="the account ID of the user")
     private String accountId;
 
+
+    @Override
+    public String getObjectId() {
+        return this.getId();
+    }
+
     public String getId() {
         return id;
     }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b14b39a6/api/src/org/apache/cloudstack/api/response/UserVmResponse.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/response/UserVmResponse.java b/api/src/org/apache/cloudstack/api/response/UserVmResponse.java
index 767ee0f..d90362b 100644
--- a/api/src/org/apache/cloudstack/api/response/UserVmResponse.java
+++ b/api/src/org/apache/cloudstack/api/response/UserVmResponse.java
@@ -185,8 +185,10 @@ public class UserVmResponse extends BaseResponse implements ControlledEntityResp
         return this.id;
     }
 
+
+
     @Override
-    public String getObjectUuid() {
+    public String getObjectId() {
         return this.getId();
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b14b39a6/api/src/org/apache/cloudstack/api/response/VolumeResponse.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/response/VolumeResponse.java b/api/src/org/apache/cloudstack/api/response/VolumeResponse.java
index 730314a..1c6f4f3 100644
--- a/api/src/org/apache/cloudstack/api/response/VolumeResponse.java
+++ b/api/src/org/apache/cloudstack/api/response/VolumeResponse.java
@@ -157,6 +157,11 @@ public class VolumeResponse extends BaseResponse implements ControlledEntityResp
 
 
 
+    @Override
+    public String getObjectId() {
+        return this.getId();
+    }
+
     public Boolean getDestroyed() {
         return destroyed;
     }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b14b39a6/api/src/org/apache/cloudstack/query/QueryService.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/query/QueryService.java b/api/src/org/apache/cloudstack/query/QueryService.java
index 1bc04f3..da526e0 100644
--- a/api/src/org/apache/cloudstack/query/QueryService.java
+++ b/api/src/org/apache/cloudstack/query/QueryService.java
@@ -39,6 +39,7 @@ import org.apache.cloudstack.api.response.UserResponse;
 import org.apache.cloudstack.api.response.UserVmResponse;
 
 
+import com.cloud.async.AsyncJob;
 import com.cloud.exception.PermissionDeniedException;
 import com.cloud.storage.Snapshot;
 
@@ -69,6 +70,5 @@ public interface QueryService {
 
     public ListResponse<ProjectAccountResponse> listProjectAccounts(ListProjectAccountsCmd cmd);
 
-    public Snapshot findSnapshotById(long snapshotId);
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b14b39a6/core/src/com/cloud/storage/UploadVO.java
----------------------------------------------------------------------
diff --git a/core/src/com/cloud/storage/UploadVO.java b/core/src/com/cloud/storage/UploadVO.java
index b39553e..95f66e7 100755
--- a/core/src/com/cloud/storage/UploadVO.java
+++ b/core/src/com/cloud/storage/UploadVO.java
@@ -38,47 +38,50 @@ public class UploadVO implements Upload {
 	@Id
 	@GeneratedValue(strategy=GenerationType.IDENTITY)
 	long id;
-	
+
+    @Column(name="uuid")
+	private String uuid;
+
 	@Column(name="host_id")
 	private long hostId;
-	
+
 	@Column(name="type_id")
 	private long typeId;
-	
+
 	@Column(name=GenericDaoBase.CREATED_COLUMN)
 	private Date created = null;
-	
+
 	@Column(name="last_updated")
 	@Temporal(value=TemporalType.TIMESTAMP)
-	private Date lastUpdated = null;	
-	
+	private Date lastUpdated = null;
+
 	@Column (name="upload_pct")
-	private int uploadPercent;	
-	
+	private int uploadPercent;
+
 	@Column (name="type")
 	@Enumerated(EnumType.STRING)
 	private Type type;
-	
+
 	@Column (name="mode")
     @Enumerated(EnumType.STRING)
     private Mode mode = Mode.FTP_UPLOAD;
-	
+
 	@Column (name="upload_state")
 	@Enumerated(EnumType.STRING)
 	private Status uploadState;
-	
+
 	@Column (name="error_str")
 	private String errorString;
 
 	@Column (name="job_id")
 	private String jobId;
-	
+
 	@Column (name="url")
 	private String uploadUrl;
 
 	@Column (name="install_path")
 	private String installPath;
-	   
+
 	@Override
     public long getHostId() {
 		return hostId;
@@ -93,7 +96,12 @@ public class UploadVO implements Upload {
 		return id;
 	}
 
-	@Override
+
+	public String getUuid() {
+        return uuid;
+    }
+
+    @Override
     public Date getCreated() {
 		return created;
 	}
@@ -102,7 +110,7 @@ public class UploadVO implements Upload {
     public Date getLastUpdated() {
 		return lastUpdated;
 	}
-	
+
 	public void setLastUpdated(Date date) {
 	    lastUpdated = date;
 	}
@@ -125,7 +133,7 @@ public class UploadVO implements Upload {
 		this.type = type;
 		this.uploadUrl = uploadUrl;
 	}
-	
+
 	public UploadVO(long hostId, long typeId, Date lastUpdated,
             Status uploadState, int uploadPercent, Type type,
             Mode mode) {
@@ -139,7 +147,7 @@ public class UploadVO implements Upload {
         this.mode = mode;
     }
 
-	protected UploadVO() {		
+	protected UploadVO() {
 	}
 
 	public UploadVO(Long uploadId) {
@@ -219,7 +227,7 @@ public class UploadVO implements Upload {
         return mode;
     }
 
-    public void setMode(Mode mode) { 
+    public void setMode(Mode mode) {
         this.mode = mode;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b14b39a6/server/src/com/cloud/api/ApiDBUtils.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/com/cloud/api/ApiDBUtils.java
index 960ee54..2aaee2e 100755
--- a/server/src/com/cloud/api/ApiDBUtils.java
+++ b/server/src/com/cloud/api/ApiDBUtils.java
@@ -52,8 +52,10 @@ import com.cloud.api.query.vo.ResourceTagJoinVO;
 import com.cloud.api.query.vo.SecurityGroupJoinVO;
 import com.cloud.api.query.vo.UserAccountJoinVO;
 import com.cloud.api.query.vo.UserVmJoinVO;
+import com.cloud.async.AsyncJob;
 import com.cloud.async.AsyncJobManager;
 import com.cloud.async.AsyncJobVO;
+import com.cloud.async.dao.AsyncJobDao;
 import com.cloud.capacity.CapacityVO;
 import com.cloud.capacity.dao.CapacityDao;
 import com.cloud.capacity.dao.CapacityDaoImpl.SummedCapacity;
@@ -95,6 +97,7 @@ import com.cloud.network.NetworkManager;
 import com.cloud.network.NetworkProfile;
 import com.cloud.network.NetworkRuleConfigVO;
 import com.cloud.network.NetworkVO;
+import com.cloud.network.PhysicalNetworkServiceProvider;
 import com.cloud.network.PhysicalNetworkVO;
 import com.cloud.network.Site2SiteVpnGatewayVO;
 import com.cloud.network.Site2SiteCustomerGatewayVO;
@@ -311,6 +314,7 @@ public class ApiDBUtils {
     private static VpcDao _vpcDao;
     private static VpcOfferingDao _vpcOfferingDao;
     private static SnapshotPolicyDao _snapshotPolicyDao;
+    private static AsyncJobDao _asyncJobDao;
 
     static {
         _ms = (ManagementServer) ComponentLocator.getComponent(ManagementServer.Name);
@@ -397,6 +401,7 @@ public class ApiDBUtils {
         _vpcDao = locator.getDao(VpcDao.class);
         _vpcOfferingDao = locator.getDao(VpcOfferingDao.class);
         _snapshotPolicyDao = locator.getDao(SnapshotPolicyDao.class);
+        _asyncJobDao = locator.getDao(AsyncJobDao.class);
 
         // Note: stats collector should already have been initialized by this time, otherwise a null instance is returned
         _statsCollector = StatsCollector.getInstance();
@@ -1044,6 +1049,130 @@ public class ApiDBUtils {
     public static VpcOffering findVpcOfferingById(long offeringId){
         return _vpcOfferingDao.findById(offeringId);
     }
+
+
+    public static AsyncJob findAsyncJobById(long jobId){
+        return _asyncJobDao.findById(jobId);
+    }
+
+    public static String findJobInstanceUuid(AsyncJob job){
+        if ( job == null )
+            return null;
+        String jobInstanceId = null;
+        if (job.getInstanceType() == AsyncJob.Type.Volume) {
+            VolumeVO volume = ApiDBUtils.findVolumeById(job.getInstanceId());
+            if (volume != null) {
+                jobInstanceId = volume.getUuid();
+            }
+        } else if (job.getInstanceType() == AsyncJob.Type.Template || job.getInstanceType() == AsyncJob.Type.Iso) {
+            VMTemplateVO template = ApiDBUtils.findTemplateById(job.getInstanceId());
+            if (template != null) {
+                jobInstanceId = template.getUuid();
+            }
+        } else if (job.getInstanceType() == AsyncJob.Type.VirtualMachine || job.getInstanceType() == AsyncJob.Type.ConsoleProxy
+                || job.getInstanceType() == AsyncJob.Type.SystemVm || job.getInstanceType() == AsyncJob.Type.DomainRouter) {
+            VMInstanceVO vm = ApiDBUtils.findVMInstanceById(job.getInstanceId());
+            if (vm != null) {
+                jobInstanceId = vm.getUuid();
+            }
+        } else if (job.getInstanceType() == AsyncJob.Type.Snapshot) {
+            Snapshot snapshot = ApiDBUtils.findSnapshotById(job.getInstanceId());
+            if (snapshot != null) {
+                jobInstanceId = snapshot.getUuid();
+            }
+        } else if (job.getInstanceType() == AsyncJob.Type.Host) {
+            Host host = ApiDBUtils.findHostById(job.getInstanceId());
+            if (host != null) {
+                jobInstanceId = host.getUuid();
+            }
+        } else if (job.getInstanceType() == AsyncJob.Type.StoragePool) {
+            StoragePoolVO spool = ApiDBUtils.findStoragePoolById(job.getInstanceId());
+            if (spool != null) {
+                jobInstanceId = spool.getUuid();
+            }
+        } else if (job.getInstanceType() == AsyncJob.Type.IpAddress) {
+            IPAddressVO ip = ApiDBUtils.findIpAddressById(job.getInstanceId());
+            if (ip != null) {
+                jobInstanceId = ip.getUuid();
+            }
+        } else if (job.getInstanceType() == AsyncJob.Type.SecurityGroup) {
+            SecurityGroup sg = ApiDBUtils.findSecurityGroupById(job.getInstanceId());
+            if (sg != null) {
+                jobInstanceId = sg.getUuid();
+            }
+        } else if (job.getInstanceType() == AsyncJob.Type.PhysicalNetwork) {
+            PhysicalNetworkVO pnet = ApiDBUtils.findPhysicalNetworkById(job.getInstanceId());
+            if (pnet != null) {
+                jobInstanceId = pnet.getUuid();
+            }
+        } else if (job.getInstanceType() == AsyncJob.Type.TrafficType) {
+            PhysicalNetworkTrafficTypeVO trafficType = ApiDBUtils.findPhysicalNetworkTrafficTypeById(job.getInstanceId());
+            if (trafficType != null) {
+                jobInstanceId = trafficType.getUuid();
+            }
+        } else if (job.getInstanceType() == AsyncJob.Type.PhysicalNetworkServiceProvider) {
+            PhysicalNetworkServiceProvider sp = ApiDBUtils.findPhysicalNetworkServiceProviderById(job.getInstanceId());
+            if (sp != null) {
+                jobInstanceId = sp.getUuid();
+            }
+        } else if (job.getInstanceType() == AsyncJob.Type.FirewallRule) {
+            FirewallRuleVO fw = ApiDBUtils.findFirewallRuleById(job.getInstanceId());
+            if (fw != null) {
+                jobInstanceId = fw.getUuid();
+            }
+        } else if (job.getInstanceType() == AsyncJob.Type.Account) {
+            Account acct = ApiDBUtils.findAccountById(job.getInstanceId());
+            if (acct != null) {
+                jobInstanceId = acct.getUuid();
+            }
+        } else if (job.getInstanceType() == AsyncJob.Type.User) {
+            User usr = ApiDBUtils.findUserById(job.getInstanceId());
+            if (usr != null) {
+                jobInstanceId = usr.getUuid();
+            }
+        } else if (job.getInstanceType() == AsyncJob.Type.StaticRoute) {
+            StaticRouteVO route = ApiDBUtils.findStaticRouteById(job.getInstanceId());
+            if (route != null) {
+                jobInstanceId = route.getUuid();
+            }
+        } else if (job.getInstanceType() == AsyncJob.Type.PrivateGateway) {
+            VpcGatewayVO gateway = ApiDBUtils.findVpcGatewayById(job.getInstanceId());
+            if (gateway != null) {
+                jobInstanceId = gateway.getUuid();
+            }
+        } else if (job.getInstanceType() == AsyncJob.Type.Counter) {
+            CounterVO counter = ApiDBUtils.getCounter(job.getInstanceId());
+            if (counter != null) {
+                jobInstanceId = counter.getUuid();
+            }
+        } else if (job.getInstanceType() == AsyncJob.Type.Condition) {
+            ConditionVO condition = ApiDBUtils.findConditionById(job.getInstanceId());
+            if (condition != null) {
+                jobInstanceId = condition.getUuid();
+            }
+        } else if (job.getInstanceType() == AsyncJob.Type.AutoScalePolicy) {
+            AutoScalePolicyVO policy = ApiDBUtils.findAutoScalePolicyById(job.getInstanceId());
+            if (policy != null) {
+                jobInstanceId = policy.getUuid();
+            }
+        } else if (job.getInstanceType() == AsyncJob.Type.AutoScaleVmProfile) {
+            AutoScaleVmProfileVO profile = ApiDBUtils.findAutoScaleVmProfileById(job.getInstanceId());
+            if (profile != null) {
+                jobInstanceId = profile.getUuid();
+            }
+        } else if (job.getInstanceType() == AsyncJob.Type.AutoScaleVmGroup) {
+            AutoScaleVmGroupVO group = ApiDBUtils.findAutoScaleVmGroupById(job.getInstanceId());
+            if (group != null) {
+                jobInstanceId = group.getUuid();
+            }
+        } else if (job.getInstanceType() != AsyncJob.Type.None) {
+            // TODO : when we hit here, we need to add instanceType -> UUID
+            // entity table mapping
+            assert (false);
+        }
+        return jobInstanceId;
+    }
+
     ///////////////////////////////////////////////////////////////////////
     //  Newly Added Utility Methods for List API refactoring             //
     ///////////////////////////////////////////////////////////////////////

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b14b39a6/server/src/com/cloud/api/ApiResponseHelper.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java
index c602577..5640ab7 100755
--- a/server/src/com/cloud/api/ApiResponseHelper.java
+++ b/server/src/com/cloud/api/ApiResponseHelper.java
@@ -1480,7 +1480,7 @@ public class ApiResponseHelper implements ResponseGenerator {
         if (vm.getType() == Type.SecondaryStorageVm || vm.getType() == Type.ConsoleProxy) {
             // SystemVm vm = (SystemVm) systemVM;
             vmResponse.setId(vm.getUuid());
-            vmResponse.setObjectId(vm.getId());
+            //vmResponse.setObjectId(vm.getId());
             vmResponse.setSystemVmType(vm.getType().toString().toLowerCase());
 
             vmResponse.setName(vm.getHostName());
@@ -2089,16 +2089,19 @@ public class ApiResponseHelper implements ResponseGenerator {
         UploadVO uploadInfo = ApiDBUtils.findUploadById(uploadId);
         ExtractResponse response = new ExtractResponse();
         response.setObjectName("template");
-        response.setId(id);
-        response.setName(ApiDBUtils.findTemplateById(id).getName());
+        VMTemplateVO template = ApiDBUtils.findTemplateById(id);
+        response.setId(template.getUuid());
+        response.setName(template.getName());
         if (zoneId != null) {
-            response.setZoneId(zoneId);
-            response.setZoneName(ApiDBUtils.findZoneById(zoneId).getName());
+            DataCenter zone = ApiDBUtils.findZoneById(zoneId);
+            response.setZoneId(zone.getUuid());
+            response.setZoneName(zone.getName());
         }
         response.setMode(mode);
-        response.setUploadId(uploadId);
+        response.setUploadId(uploadInfo.getUuid());
         response.setState(uploadInfo.getUploadState().toString());
-        response.setAccountId(accountId);
+        Account account = ApiDBUtils.findAccountById(accountId);
+        response.setAccountId(account.getUuid());
         response.setUrl(uploadInfo.getUploadUrl());
         return response;
 
@@ -2122,124 +2125,14 @@ public class ApiResponseHelper implements ResponseGenerator {
         }
         jobResponse.setCmd(job.getCmd());
         jobResponse.setCreated(job.getCreated());
-        jobResponse.setJobId(job.getId());
+        jobResponse.setJobId(job.getUuid());
         jobResponse.setJobStatus(job.getStatus());
         jobResponse.setJobProcStatus(job.getProcessStatus());
 
         if (job.getInstanceType() != null && job.getInstanceId() != null) {
             jobResponse.setJobInstanceType(job.getInstanceType().toString());
-            String jobInstanceId = null;
-            if (job.getInstanceType() == AsyncJob.Type.Volume) {
-                VolumeVO volume = ApiDBUtils.findVolumeById(job.getInstanceId());
-                if (volume != null) {
-                    jobInstanceId = volume.getUuid();
-                }
-            } else if (job.getInstanceType() == AsyncJob.Type.Template || job.getInstanceType() == AsyncJob.Type.Iso) {
-                VMTemplateVO template = ApiDBUtils.findTemplateById(job.getInstanceId());
-                if (template != null) {
-                    jobInstanceId = template.getUuid();
-                }
-            } else if (job.getInstanceType() == AsyncJob.Type.VirtualMachine || job.getInstanceType() == AsyncJob.Type.ConsoleProxy
-                    || job.getInstanceType() == AsyncJob.Type.SystemVm || job.getInstanceType() == AsyncJob.Type.DomainRouter) {
-                VMInstanceVO vm = ApiDBUtils.findVMInstanceById(job.getInstanceId());
-                if (vm != null) {
-                    jobInstanceId = vm.getUuid();
-                }
-            } else if (job.getInstanceType() == AsyncJob.Type.Snapshot) {
-                Snapshot snapshot = ApiDBUtils.findSnapshotById(job.getInstanceId());
-                if (snapshot != null) {
-                    jobInstanceId = snapshot.getUuid();
-                }
-            } else if (job.getInstanceType() == AsyncJob.Type.Host) {
-                Host host = ApiDBUtils.findHostById(job.getInstanceId());
-                if (host != null) {
-                    jobInstanceId = host.getUuid();
-                }
-            } else if (job.getInstanceType() == AsyncJob.Type.StoragePool) {
-                StoragePoolVO spool = ApiDBUtils.findStoragePoolById(job.getInstanceId());
-                if (spool != null) {
-                    jobInstanceId = spool.getUuid();
-                }
-            } else if (job.getInstanceType() == AsyncJob.Type.IpAddress) {
-                IPAddressVO ip = ApiDBUtils.findIpAddressById(job.getInstanceId());
-                if (ip != null) {
-                    jobInstanceId = ip.getUuid();
-                }
-            } else if (job.getInstanceType() == AsyncJob.Type.SecurityGroup) {
-                SecurityGroup sg = ApiDBUtils.findSecurityGroupById(job.getInstanceId());
-                if (sg != null) {
-                    jobInstanceId = sg.getUuid();
-                }
-            } else if (job.getInstanceType() == AsyncJob.Type.PhysicalNetwork) {
-                PhysicalNetworkVO pnet = ApiDBUtils.findPhysicalNetworkById(job.getInstanceId());
-                if (pnet != null) {
-                    jobInstanceId = pnet.getUuid();
-                }
-            } else if (job.getInstanceType() == AsyncJob.Type.TrafficType) {
-                PhysicalNetworkTrafficTypeVO trafficType = ApiDBUtils.findPhysicalNetworkTrafficTypeById(job.getInstanceId());
-                if (trafficType != null) {
-                    jobInstanceId = trafficType.getUuid();
-                }
-            } else if (job.getInstanceType() == AsyncJob.Type.PhysicalNetworkServiceProvider) {
-                PhysicalNetworkServiceProvider sp = ApiDBUtils.findPhysicalNetworkServiceProviderById(job.getInstanceId());
-                if (sp != null) {
-                    jobInstanceId = sp.getUuid();
-                }
-            } else if (job.getInstanceType() == AsyncJob.Type.FirewallRule) {
-                FirewallRuleVO fw = ApiDBUtils.findFirewallRuleById(job.getInstanceId());
-                if (fw != null) {
-                    jobInstanceId = fw.getUuid();
-                }
-            } else if (job.getInstanceType() == AsyncJob.Type.Account) {
-                Account acct = ApiDBUtils.findAccountById(job.getInstanceId());
-                if (acct != null) {
-                    jobInstanceId = acct.getUuid();
-                }
-            } else if (job.getInstanceType() == AsyncJob.Type.User) {
-                User usr = ApiDBUtils.findUserById(job.getInstanceId());
-                if (usr != null) {
-                    jobInstanceId = usr.getUuid();
-                }
-            } else if (job.getInstanceType() == AsyncJob.Type.StaticRoute) {
-                StaticRouteVO route = ApiDBUtils.findStaticRouteById(job.getInstanceId());
-                if (route != null) {
-                    jobInstanceId = route.getUuid();
-                }
-            } else if (job.getInstanceType() == AsyncJob.Type.PrivateGateway) {
-                VpcGatewayVO gateway = ApiDBUtils.findVpcGatewayById(job.getInstanceId());
-                if (gateway != null) {
-                    jobInstanceId = gateway.getUuid();
-                }
-            } else if (job.getInstanceType() == AsyncJob.Type.Counter) {
-                CounterVO counter = ApiDBUtils.getCounter(job.getInstanceId());
-                if (counter != null) {
-                    jobInstanceId = counter.getUuid();
-                }
-            } else if (job.getInstanceType() == AsyncJob.Type.Condition) {
-                ConditionVO condition = ApiDBUtils.findConditionById(job.getInstanceId());
-                if (condition != null) {
-                    jobInstanceId = condition.getUuid();
-                }
-            } else if (job.getInstanceType() == AsyncJob.Type.AutoScalePolicy) {
-                AutoScalePolicyVO policy = ApiDBUtils.findAutoScalePolicyById(job.getInstanceId());
-                if (policy != null) {
-                    jobInstanceId = policy.getUuid();
-                }
-            } else if (job.getInstanceType() == AsyncJob.Type.AutoScaleVmProfile) {
-                AutoScaleVmProfileVO profile = ApiDBUtils.findAutoScaleVmProfileById(job.getInstanceId());
-                if (profile != null) {
-                    jobInstanceId = profile.getUuid();
-                }
-            } else if (job.getInstanceType() == AsyncJob.Type.AutoScaleVmGroup) {
-                AutoScaleVmGroupVO group = ApiDBUtils.findAutoScaleVmGroupById(job.getInstanceId());
-                if (group != null) {
-                    jobInstanceId = group.getUuid();
-                }
-            } else if (job.getInstanceType() != AsyncJob.Type.None) {
-                // TODO : when we hit here, we need to add instanceType -> UUID
-                // entity table mapping
-                assert (false);
-            }
+            String jobInstanceId = ApiDBUtils.findJobInstanceUuid(job);
+
             if (jobInstanceId != null) {
                 jobResponse.setJobInstanceId(jobInstanceId);
             }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b14b39a6/server/src/com/cloud/api/ApiServer.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java
index e685aef..651de7f 100755
--- a/server/src/com/cloud/api/ApiServer.java
+++ b/server/src/com/cloud/api/ApiServer.java
@@ -51,6 +51,7 @@ import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
 
 import org.apache.cloudstack.api.*;
+import org.apache.cloudstack.api.command.user.account.ListProjectAccountsCmd;
 import org.apache.cloudstack.api.command.user.event.ListEventsCmd;
 import org.apache.cloudstack.api.command.user.vm.ListVMsCmd;
 import org.apache.cloudstack.api.command.user.vmgroup.ListVMGroupsCmd;
@@ -85,6 +86,8 @@ import org.apache.http.protocol.ResponseServer;
 import org.apache.log4j.Logger;
 
 import org.apache.cloudstack.api.command.admin.router.ListRoutersCmd;
+import org.apache.cloudstack.api.command.user.project.ListProjectInvitationsCmd;
+import org.apache.cloudstack.api.command.user.project.ListProjectsCmd;
 import org.apache.cloudstack.api.command.user.securitygroup.ListSecurityGroupsCmd;
 import org.apache.cloudstack.api.command.user.tag.ListTagsCmd;
 import com.cloud.acl.ControlledEntity;
@@ -454,7 +457,10 @@ public class ApiServer implements HttpRequestHandler {
                     && !(cmdObj instanceof ListSecurityGroupsCmd)
                     && !(cmdObj instanceof ListTagsCmd)
                     && !(cmdObj instanceof ListEventsCmd)
-                    && !(cmdObj instanceof ListVMGroupsCmd)) {
+                    && !(cmdObj instanceof ListVMGroupsCmd)
+                    && !(cmdObj instanceof ListProjectsCmd)
+                    && !(cmdObj instanceof ListProjectAccountsCmd)
+                    && !(cmdObj instanceof ListProjectInvitationsCmd)) {
                 buildAsyncListResponse((BaseListCmd) cmdObj, caller);
             }
 
@@ -479,17 +485,22 @@ public class ApiServer implements HttpRequestHandler {
                 return;
             }
 
-            // Using maps might possibly be more efficient if the set is large enough but for now, we'll just do a
-            // comparison of two lists. Either way, there shouldn't be too many async jobs active for the account.
+            Map<String, AsyncJob> objectJobMap = new HashMap<String, AsyncJob>();
             for (AsyncJob job : jobs) {
                 if (job.getInstanceId() == null) {
                     continue;
                 }
-                for (ResponseObject response : responses) {
-                    if (response.getObjectId() != null && job.getInstanceId().longValue() == response.getObjectId().longValue()) {
-                        response.setJobId(job.getId());
-                        response.setJobStatus(job.getStatus());
-                    }
+                String instanceUuid = ApiDBUtils.findJobInstanceUuid(job);
+                if (instanceUuid != null) {
+                    objectJobMap.put(instanceUuid, job);
+                }
+            }
+
+            for (ResponseObject response : responses) {
+                if (response.getObjectId() != null && objectJobMap.containsKey(response.getObjectId())) {
+                    AsyncJob job = objectJobMap.get(response.getObjectId());
+                    response.setJobId(job.getUuid());
+                    response.setJobStatus(job.getStatus());
                 }
             }
         }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b14b39a6/server/src/com/cloud/api/query/QueryManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/query/QueryManagerImpl.java b/server/src/com/cloud/api/query/QueryManagerImpl.java
index 4cad6c3..b9ed92a 100644
--- a/server/src/com/cloud/api/query/QueryManagerImpl.java
+++ b/server/src/com/cloud/api/query/QueryManagerImpl.java
@@ -71,6 +71,7 @@ import com.cloud.api.query.vo.ResourceTagJoinVO;
 import com.cloud.api.query.vo.SecurityGroupJoinVO;
 import com.cloud.api.query.vo.UserAccountJoinVO;
 import com.cloud.api.query.vo.UserVmJoinVO;
+import com.cloud.async.AsyncJob;
 import com.cloud.domain.Domain;
 import com.cloud.domain.DomainVO;
 import com.cloud.domain.dao.DomainDao;
@@ -1308,10 +1309,5 @@ public class QueryManagerImpl implements QueryService, Manager {
         return  _projectAccountJoinDao.searchAndCount(sc, searchFilter);
     }
 
-    @Override
-    public Snapshot findSnapshotById(long snapshotId) {
-        return ApiDBUtils.findSnapshotById(snapshotId);
-    }
-
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b14b39a6/server/src/com/cloud/server/ManagementServerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java
index ddf91dc..8c73bad 100755
--- a/server/src/com/cloud/server/ManagementServerImpl.java
+++ b/server/src/com/cloud/server/ManagementServerImpl.java
@@ -2891,8 +2891,10 @@ public class ManagementServerImpl implements ManagementServer {
             uploadJob = _uploadDao.createForUpdate(uploadJob.getId());
 
             // Update the async Job
-            ExtractResponse resultObj = new ExtractResponse(volumeId, volume.getName(), accountId, UploadVO.Status.COPY_IN_PROGRESS.toString(),
-                    uploadJob.getId());
+
+            ExtractResponse resultObj = new ExtractResponse(ApiDBUtils.findVolumeById(volumeId).getUuid(),
+                    volume.getName(), ApiDBUtils.findAccountById(accountId).getUuid(), UploadVO.Status.COPY_IN_PROGRESS.toString(),
+                    uploadJob.getUuid());
             resultObj.setResponseName(cmd.getCommandName());
             AsyncJobExecutor asyncExecutor = BaseAsyncJobExecutor.getCurrentExecutor();
             if (asyncExecutor != null) {

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b14b39a6/server/src/com/cloud/storage/upload/UploadListener.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/upload/UploadListener.java b/server/src/com/cloud/storage/upload/UploadListener.java
index 4303e43..ee13cf9 100755
--- a/server/src/com/cloud/storage/upload/UploadListener.java
+++ b/server/src/com/cloud/storage/upload/UploadListener.java
@@ -42,6 +42,8 @@ import com.cloud.agent.api.storage.UploadProgressCommand;
 import com.cloud.agent.api.storage.UploadProgressCommand.RequestType;
 import org.apache.cloudstack.api.command.user.template.ExtractTemplateCmd;
 import org.apache.cloudstack.api.response.ExtractResponse;
+
+import com.cloud.api.ApiDBUtils;
 import com.cloud.async.AsyncJobManager;
 import com.cloud.async.AsyncJobResult;
 import com.cloud.exception.AgentUnavailableException;
@@ -55,12 +57,12 @@ import com.cloud.storage.upload.UploadState.UploadEvent;
 import com.cloud.utils.exception.CloudRuntimeException;
 
 public class UploadListener implements Listener {
-	
+
 
 	private static final class StatusTask extends TimerTask {
 		private final UploadListener ul;
 		private final RequestType reqType;
-		
+
 		public StatusTask( UploadListener ul,  RequestType req) {
 			this.reqType = req;
 			this.ul = ul;
@@ -72,10 +74,10 @@ public class UploadListener implements Listener {
 
 		}
 	}
-	
+
 	private static final class TimeoutTask extends TimerTask {
 		private final UploadListener ul;
-		
+
 		public TimeoutTask( UploadListener ul) {
 			this.ul = ul;
 		}
@@ -89,13 +91,13 @@ public class UploadListener implements Listener {
 	public static final Logger s_logger = Logger.getLogger(UploadListener.class.getName());
 	public static final int SMALL_DELAY = 100;
 	public static final long STATUS_POLL_INTERVAL = 10000L;
-	
+
 	public static final String UPLOADED=Status.UPLOADED.toString();
 	public static final String NOT_UPLOADED=Status.NOT_UPLOADED.toString();
 	public static final String UPLOAD_ERROR=Status.UPLOAD_ERROR.toString();
 	public static final String UPLOAD_IN_PROGRESS=Status.UPLOAD_IN_PROGRESS.toString();
 	public static final String UPLOAD_ABANDONED=Status.ABANDONED.toString();
-	public static final Map<String,String> responseNameMap; 
+	public static final Map<String,String> responseNameMap;
 	static{
 	    Map<String, String>tempMap = new HashMap<String, String>();
         tempMap.put(Type.ISO.toString(), ExtractIsoCmd.getStaticName());
@@ -106,16 +108,16 @@ public class UploadListener implements Listener {
 	}
 
 
-	private HostVO sserver;	
-	
+	private HostVO sserver;
+
 	private boolean uploadActive = true;
-	
+
 	private UploadDao uploadDao;
-	
+
 	private final UploadMonitorImpl uploadMonitor;
-	
+
 	private UploadState currState;
-	
+
 	private UploadCommand cmd;
 
 	private Timer timer;
@@ -131,7 +133,7 @@ public class UploadListener implements Listener {
 	private long eventId;
 	private AsyncJobManager asyncMgr;
 	private ExtractResponse resultObj;
-	
+
 	public AsyncJobManager getAsyncMgr() {
 		return asyncMgr;
 	}
@@ -157,12 +159,12 @@ public class UploadListener implements Listener {
 	}
 
 	private final Map<String,  UploadState> stateMap = new HashMap<String, UploadState>();
-	private Long uploadId;	
-	
+	private Long uploadId;
+
 	public UploadListener(HostVO host, Timer _timer, UploadDao uploadDao,
 			UploadVO uploadObj, UploadMonitorImpl uploadMonitor, UploadCommand cmd,
 			Long accountId, String typeName, Type type, long eventId, long asyncJobId, AsyncJobManager asyncMgr) {
-		this.sserver = host;				
+		this.sserver = host;
 		this.uploadDao = uploadDao;
 		this.uploadMonitor = uploadMonitor;
 		this.cmd = cmd;
@@ -178,15 +180,23 @@ public class UploadListener implements Listener {
 		this.eventId = eventId;
 		this.asyncJobId = asyncJobId;
 		this.asyncMgr = asyncMgr;
-		this.resultObj = new ExtractResponse(uploadObj.getTypeId(), typeName, accountId, Status.NOT_UPLOADED.toString(), uploadId);
+		String extractId = null;
+		if ( type == Type.VOLUME ){
+		    extractId = ApiDBUtils.findVolumeById(uploadObj.getTypeId()).getUuid();
+		}
+		else{
+		    extractId = ApiDBUtils.findTemplateById(uploadObj.getTypeId()).getUuid();
+		}
+		this.resultObj = new ExtractResponse(extractId, typeName, ApiDBUtils.findAccountById(accountId).getUuid(), Status.NOT_UPLOADED.toString(),
+		        ApiDBUtils.findUploadById(uploadId).getUuid());
 		resultObj.setResponseName(responseNameMap.get(type.toString()));
 		updateDatabase(Status.NOT_UPLOADED, cmd.getUrl(),"");
 	}
-	
+
 	public UploadListener(UploadMonitorImpl monitor) {
 	    uploadMonitor = monitor;
-	}	
-	
+	}
+
 	public void checkProgress() {
 		transition(UploadEvent.TIMEOUT_CHECK, null);
 	}
@@ -204,15 +214,15 @@ public class UploadListener implements Listener {
 	public void setCommand(UploadCommand _cmd) {
 		this.cmd = _cmd;
 	}
-	
+
 	public void setJobId(String _jobId) {
 		this.jobId = _jobId;
 	}
-	
+
 	public String getJobId() {
 		return jobId;
 	}
-	
+
 	@Override
 	public boolean processAnswers(long agentId, long seq, Answer[] answers) {
 		boolean processed = false;
@@ -230,7 +240,7 @@ public class UploadListener implements Listener {
     	}
         return processed;
 	}
-	
+
 
 	@Override
 	public boolean processCommands(long agentId, long seq, Command[] commands) {
@@ -238,13 +248,13 @@ public class UploadListener implements Listener {
 	}
 
 	@Override
-	public void processConnect(HostVO agent, StartupCommand cmd, boolean forRebalance) {		
+	public void processConnect(HostVO agent, StartupCommand cmd, boolean forRebalance) {
 		if (!(cmd instanceof StartupStorageCommand)) {
 	        return;
 	    }
-	   
+
 	    long agentId = agent.getId();
-	    
+
 	    StartupStorageCommand storage = (StartupStorageCommand)cmd;
 	    if (storage.getResourceType() == Storage.StorageResourceType.STORAGE_HOST ||
 	    storage.getResourceType() == Storage.StorageResourceType.SECONDARY_STORAGE )
@@ -258,35 +268,35 @@ public class UploadListener implements Listener {
 			AgentControlCommand cmd) {
 		return null;
 	}
-	
+
 	public void setUploadInactive(Status reason) {
 		uploadActive=false;
 		uploadMonitor.handleUploadEvent(sserver, accountId, typeName, type, uploadId, reason, eventId);
 	}
-	
+
 	public void logUploadStart() {
 		//uploadMonitor.logEvent(accountId, event, "Storage server " + sserver.getName() + " started upload of " +type.toString() + " " + typeName, EventVO.LEVEL_INFO, eventId);
 	}
-	
+
 	public void cancelTimeoutTask() {
 		if (timeoutTask != null) timeoutTask.cancel();
 	}
-	
+
 	public void cancelStatusTask() {
 		if (statusTask != null) statusTask.cancel();
 	}
 
 	@Override
-	public boolean processDisconnect(long agentId, com.cloud.host.Status state) {	
+	public boolean processDisconnect(long agentId, com.cloud.host.Status state) {
 		setDisconnected();
 		return true;
 	}
 
 	@Override
-	public boolean processTimeout(long agentId, long seq) {		
+	public boolean processTimeout(long agentId, long seq) {
 		return true;
 	}
-	
+
 	private void initStateMachine() {
 		stateMap.put(Status.NOT_UPLOADED.toString(), new NotUploadedState(this));
 		stateMap.put(Status.UPLOADED.toString(), new UploadCompleteState(this));
@@ -294,7 +304,7 @@ public class UploadListener implements Listener {
 		stateMap.put(Status.UPLOAD_IN_PROGRESS.toString(), new UploadInProgressState(this));
 		stateMap.put(Status.ABANDONED.toString(), new UploadAbandonedState(this));
 	}
-	
+
 	private UploadState getState(String stateName) {
 		return stateMap.get(stateName);
 	}
@@ -316,15 +326,15 @@ public class UploadListener implements Listener {
 			throw new CloudRuntimeException("Unhandled event transition: currState="+prevName+", evt="+event);
 		}
 	}
-	
+
 	public Date getLastUpdated() {
 		return lastUpdated;
 	}
-	
+
 	public void setLastUpdated() {
 		lastUpdated  = new Date();
 	}
-	
+
 	public void log(String message, Level level) {
 		s_logger.log(level, message + ", " + type.toString() + " = " + typeName + " at host " + sserver.getName());
 	}
@@ -332,7 +342,7 @@ public class UploadListener implements Listener {
 	public void setDisconnected() {
 		transition(UploadEvent.DISCONNECT, null);
 	}
-	
+
 	public void scheduleStatusCheck(com.cloud.agent.api.storage.UploadProgressCommand.RequestType getStatus) {
 		if (statusTask != null) statusTask.cancel();
 
@@ -349,27 +359,27 @@ public class UploadListener implements Listener {
 			log("Scheduling timeout at " + delay + " ms", Level.DEBUG);
 		}
 	}
-	
+
 	public void updateDatabase(Status state, String uploadErrorString) {
 		resultObj.setResultString(uploadErrorString);
 		resultObj.setState(state.toString());
 		asyncMgr.updateAsyncJobAttachment(asyncJobId, type.toString(), 1L);
 		asyncMgr.updateAsyncJobStatus(asyncJobId, AsyncJobResult.STATUS_IN_PROGRESS, resultObj);
-		
+
 		UploadVO vo = uploadDao.createForUpdate();
 		vo.setUploadState(state);
 		vo.setLastUpdated(new Date());
 		vo.setErrorString(uploadErrorString);
 		uploadDao.update(getUploadId(), vo);
 	}
-	
+
 	public void updateDatabase(Status state, String uploadUrl,String uploadErrorString) {
 		resultObj.setResultString(uploadErrorString);
 		resultObj.setState(state.toString());
 		asyncMgr.updateAsyncJobAttachment(asyncJobId, type.toString(), 1L);
 		asyncMgr.updateAsyncJobStatus(asyncJobId, AsyncJobResult.STATUS_IN_PROGRESS, resultObj);
-		
-		
+
+
 		UploadVO vo = uploadDao.createForUpdate();
 		vo.setUploadState(state);
 		vo.setLastUpdated(new Date());
@@ -377,23 +387,23 @@ public class UploadListener implements Listener {
 		vo.setJobId(null);
 		vo.setUploadPercent(0);
 		vo.setErrorString(uploadErrorString);
-		
+
 		uploadDao.update(getUploadId(), vo);
 	}
-	
+
 	private Long getUploadId() {
 		return uploadId;
 	}
 
-	public synchronized void updateDatabase(UploadAnswer answer) {		
-		
+	public synchronized void updateDatabase(UploadAnswer answer) {
+
 	    if(answer.getErrorString().startsWith("553")){
 	        answer.setErrorString(answer.getErrorString().concat("Please check if the file name already exists."));
 	    }
 		resultObj.setResultString(answer.getErrorString());
 		resultObj.setState(answer.getUploadStatus().toString());
 		resultObj.setUploadPercent(answer.getUploadPct());
-		
+
 		if (answer.getUploadStatus() == Status.UPLOAD_IN_PROGRESS){
 			asyncMgr.updateAsyncJobAttachment(asyncJobId, type.toString(), 1L);
 			asyncMgr.updateAsyncJobStatus(asyncJobId, AsyncJobResult.STATUS_IN_PROGRESS, resultObj);
@@ -409,7 +419,7 @@ public class UploadListener implements Listener {
 		updateBuilder.setLastUpdated(new Date());
 		updateBuilder.setErrorString(answer.getErrorString());
 		updateBuilder.setJobId(answer.getJobId());
-		
+
 		uploadDao.update(getUploadId(), updateBuilder);
 	}
 
@@ -425,9 +435,9 @@ public class UploadListener implements Listener {
 				setDisconnected();
             }
 		}
-		
+
 	}
-	
+
 	private UploadCommand getCommand() {
 		return cmd;
 	}
@@ -435,7 +445,7 @@ public class UploadListener implements Listener {
 	public void logDisconnect() {
 		s_logger.warn("Unable to monitor upload progress of " + typeName + " at host " + sserver.getName());
 	}
-	
+
 	public void scheduleImmediateStatusCheck(RequestType request) {
 		if (statusTask != null) statusTask.cancel();
 		statusTask = new StatusTask(this, request);
@@ -443,6 +453,6 @@ public class UploadListener implements Listener {
 	}
 
 	public void setCurrState(Status uploadState) {
-		this.currState = getState(currState.toString());		
+		this.currState = getState(currState.toString());
 	}
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b14b39a6/setup/db/create-schema.sql
----------------------------------------------------------------------
diff --git a/setup/db/create-schema.sql b/setup/db/create-schema.sql
index 9891371..c01a5cd 100755
--- a/setup/db/create-schema.sql
+++ b/setup/db/create-schema.sql
@@ -2511,6 +2511,7 @@ INSERT INTO `cloud`.`counter` (id, source, name, value,created) VALUES (100,'net
 
 SET foreign_key_checks = 1;
 
+ALTER TABLE upload ADD uuid VARCHAR(40);
 
 --- DB views for list api ---
 DROP VIEW IF EXISTS `cloud`.`user_vm_view`;