diff --git a/api/src/com/cloud/storage/Upload.java b/api/src/com/cloud/storage/Upload.java index d73a9d8604c..d67c15f946e 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(); diff --git a/api/src/org/apache/cloudstack/api/BaseAsyncCmd.java b/api/src/org/apache/cloudstack/api/BaseAsyncCmd.java index 2bc8a6e8002..fd67ed89675 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; } diff --git a/api/src/org/apache/cloudstack/api/BaseAsyncCreateCmd.java b/api/src/org/apache/cloudstack/api/BaseAsyncCreateCmd.java index 63cab8be63b..ad9f4c6b31f 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()); diff --git a/api/src/org/apache/cloudstack/api/BaseCmd.java b/api/src/org/apache/cloudstack/api/BaseCmd.java index d89f5ea1b3c..d964e70b84f 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 idList = new ArrayList(); - idList.add(new IdentityProxy("domain", domainId, "domainId")); + // idList is not used anywhere, so removed it now + //List idList = new ArrayList(); + //idList.add(new IdentityProxy("domain", domainId, "domainId")); throw new InvalidParameterValueException("Unable to find account by name " + accountName + " in domain with specified id"); } } diff --git a/api/src/org/apache/cloudstack/api/BaseResponse.java b/api/src/org/apache/cloudstack/api/BaseResponse.java index 06171d9d944..a3fe6b0ee01 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() { diff --git a/api/src/org/apache/cloudstack/api/ResponseObject.java b/api/src/org/apache/cloudstack/api/ResponseObject.java index fd327fab09a..c8bd45727c9 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 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 ca886396656..a82c36343c1 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 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 787e096f26a..39dcfe66e0d 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 { diff --git a/api/src/org/apache/cloudstack/api/response/AccountResponse.java b/api/src/org/apache/cloudstack/api/response/AccountResponse.java index dcb9142f2e8..2f186fb4032 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 details; + + @Override + public String getObjectId() { + return this.id; + } + public void setId(String id) { this.id = id; } diff --git a/api/src/org/apache/cloudstack/api/response/AutoScalePolicyResponse.java b/api/src/org/apache/cloudstack/api/response/AutoScalePolicyResponse.java index b1331394f58..3be8a425f0d 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; } diff --git a/api/src/org/apache/cloudstack/api/response/AutoScaleVmGroupResponse.java b/api/src/org/apache/cloudstack/api/response/AutoScaleVmGroupResponse.java index a4f3da6899c..125aa9bf9e1 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; } diff --git a/api/src/org/apache/cloudstack/api/response/AutoScaleVmProfileResponse.java b/api/src/org/apache/cloudstack/api/response/AutoScaleVmProfileResponse.java index 0041be91d66..f5ed4b1bdba 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; } diff --git a/api/src/org/apache/cloudstack/api/response/ConditionResponse.java b/api/src/org/apache/cloudstack/api/response/ConditionResponse.java index c90e78a3534..168ba5c90c8 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; } diff --git a/api/src/org/apache/cloudstack/api/response/CounterResponse.java b/api/src/org/apache/cloudstack/api/response/CounterResponse.java index 1d13d68fdf6..6afc0dea40c 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; } diff --git a/api/src/org/apache/cloudstack/api/response/DomainRouterResponse.java b/api/src/org/apache/cloudstack/api/response/DomainRouterResponse.java index 7db014e109a..bd44f2614f2 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(); } + + @Override - public String getObjectUuid() { + public String getObjectId() { return this.getId(); } + + public String getId() { return id; } diff --git a/api/src/org/apache/cloudstack/api/response/ExtractResponse.java b/api/src/org/apache/cloudstack/api/response/ExtractResponse.java index ac5cc3d3e79..5d415e94349 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() { diff --git a/api/src/org/apache/cloudstack/api/response/FirewallRuleResponse.java b/api/src/org/apache/cloudstack/api/response/FirewallRuleResponse.java index 040878abe8f..4dae4c5b857 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 tags; + + @Override + public String getObjectId() { + return this.getId(); + } + public String getId() { return id; } diff --git a/api/src/org/apache/cloudstack/api/response/HostResponse.java b/api/src/org/apache/cloudstack/api/response/HostResponse.java index e4aae571058..39309caef6c 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; } diff --git a/api/src/org/apache/cloudstack/api/response/IPAddressResponse.java b/api/src/org/apache/cloudstack/api/response/IPAddressResponse.java index d614e34db1a..18d32068e6b 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; } diff --git a/api/src/org/apache/cloudstack/api/response/IsoVmResponse.java b/api/src/org/apache/cloudstack/api/response/IsoVmResponse.java index ddb1c3f30dc..a667e50c5f9 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; } diff --git a/api/src/org/apache/cloudstack/api/response/NicResponse.java b/api/src/org/apache/cloudstack/api/response/NicResponse.java index 1ac00846190..a6ca5b8232d 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; diff --git a/api/src/org/apache/cloudstack/api/response/PhysicalNetworkResponse.java b/api/src/org/apache/cloudstack/api/response/PhysicalNetworkResponse.java index 4f7f832c60d..0f1e166ef4b 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; } diff --git a/api/src/org/apache/cloudstack/api/response/PrivateGatewayResponse.java b/api/src/org/apache/cloudstack/api/response/PrivateGatewayResponse.java index fb5c9890f9f..143a61aa618 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; } diff --git a/api/src/org/apache/cloudstack/api/response/SecurityGroupResponse.java b/api/src/org/apache/cloudstack/api/response/SecurityGroupResponse.java index 6900ca519bf..049709e4e20 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(); } + + @Override - public String getObjectUuid() { + public String getObjectId() { return this.getId(); } + + public String getId() { return id; } diff --git a/api/src/org/apache/cloudstack/api/response/SnapshotResponse.java b/api/src/org/apache/cloudstack/api/response/SnapshotResponse.java index 28d768d51a2..1c06b0a95bf 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 tags; + @Override + public String getObjectId() { + return this.getId(); + } + private String getId() { return id; } diff --git a/api/src/org/apache/cloudstack/api/response/StaticRouteResponse.java b/api/src/org/apache/cloudstack/api/response/StaticRouteResponse.java index e7de3209734..54831fe4a49 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 tags; + + @Override + public String getObjectId() { + return this.id; + } + public void setId(String id) { this.id = id; } diff --git a/api/src/org/apache/cloudstack/api/response/StoragePoolResponse.java b/api/src/org/apache/cloudstack/api/response/StoragePoolResponse.java index 12676687873..707c852d262 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; } diff --git a/api/src/org/apache/cloudstack/api/response/SystemVmResponse.java b/api/src/org/apache/cloudstack/api/response/SystemVmResponse.java index 6a8e79d92cd..806cada0877 100644 --- a/api/src/org/apache/cloudstack/api/response/SystemVmResponse.java +++ b/api/src/org/apache/cloudstack/api/response/SystemVmResponse.java @@ -108,15 +108,15 @@ 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; + + + @Override + public String getObjectId() { + return this.getId(); } - public void setObjectId(Long objectId) { - this.objectId = objectId; - } public String getId() { return id; diff --git a/api/src/org/apache/cloudstack/api/response/TemplateResponse.java b/api/src/org/apache/cloudstack/api/response/TemplateResponse.java index 785b647a9e4..d9daf3ac27d 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; } diff --git a/api/src/org/apache/cloudstack/api/response/TrafficTypeResponse.java b/api/src/org/apache/cloudstack/api/response/TrafficTypeResponse.java index b2f6e946b35..6f88d9c025c 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; } diff --git a/api/src/org/apache/cloudstack/api/response/UserResponse.java b/api/src/org/apache/cloudstack/api/response/UserResponse.java index 8c070fd5eb8..6f1badf92a2 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; } diff --git a/api/src/org/apache/cloudstack/api/response/UserVmResponse.java b/api/src/org/apache/cloudstack/api/response/UserVmResponse.java index 767ee0f4a7e..d90362b29d7 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(); } diff --git a/api/src/org/apache/cloudstack/api/response/VolumeResponse.java b/api/src/org/apache/cloudstack/api/response/VolumeResponse.java index 730314a6a3c..1c6f4f3db96 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; } diff --git a/api/src/org/apache/cloudstack/query/QueryService.java b/api/src/org/apache/cloudstack/query/QueryService.java index 1bc04f313c4..da526e0539f 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 listProjectAccounts(ListProjectAccountsCmd cmd); - public Snapshot findSnapshotById(long snapshotId); } diff --git a/core/src/com/cloud/storage/UploadVO.java b/core/src/com/cloud/storage/UploadVO.java index b39553e8638..95f66e71b06 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; } diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/com/cloud/api/ApiDBUtils.java index 960ee5454be..2aaee2e2fc5 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 // /////////////////////////////////////////////////////////////////////// diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index c602577ac9b..5640ab7f22d 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); } diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index e685aef4b3e..651de7ff67f 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 objectJobMap = new HashMap(); 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()); } } } diff --git a/server/src/com/cloud/api/query/QueryManagerImpl.java b/server/src/com/cloud/api/query/QueryManagerImpl.java index 4cad6c3b66e..b9ed92a3069 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); - } - } diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index ddf91dc3500..8c73bad98a6 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) { diff --git a/server/src/com/cloud/storage/upload/UploadListener.java b/server/src/com/cloud/storage/upload/UploadListener.java index 4303e437bb6..ee13cf9b0d8 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 responseNameMap; + public static final Map responseNameMap; static{ MaptempMap = new HashMap(); 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 stateMap = new HashMap(); - 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()); } } diff --git a/setup/db/create-schema.sql b/setup/db/create-schema.sql index 9891371bbb2..c01a5cdccac 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`;