diff --git a/api/src/org/apache/cloudstack/api/ApiConstants.java b/api/src/org/apache/cloudstack/api/ApiConstants.java index 762ad7097fc..6bd5ddede3e 100644 --- a/api/src/org/apache/cloudstack/api/ApiConstants.java +++ b/api/src/org/apache/cloudstack/api/ApiConstants.java @@ -613,6 +613,7 @@ public class ApiConstants { public static final String REGION_LEVEL_VPC = "regionlevelvpc"; public static final String STRECHED_L2_SUBNET = "strechedl2subnet"; public static final String NETWORK_SPANNED_ZONES = "zonesnetworkspans"; + public static final String PHYSICAL_SIZE = "physicalsize"; public enum HostDetails { all, capacity, events, stats, min; diff --git a/api/src/org/apache/cloudstack/api/response/SnapshotResponse.java b/api/src/org/apache/cloudstack/api/response/SnapshotResponse.java index 10cb202ba93..aa8de5c6fd4 100644 --- a/api/src/org/apache/cloudstack/api/response/SnapshotResponse.java +++ b/api/src/org/apache/cloudstack/api/response/SnapshotResponse.java @@ -86,6 +86,10 @@ public class SnapshotResponse extends BaseResponse implements ControlledEntityRe @Param(description = "the state of the snapshot. BackedUp means that snapshot is ready to be used; Creating - the snapshot is being allocated on the primary storage; BackingUp - the snapshot is being backed up on secondary storage") private Snapshot.State state; + @SerializedName(ApiConstants.PHYSICAL_SIZE) + @Param(description = "physical size of backedup snapshot on image store") + private long physicalSize; + @SerializedName(ApiConstants.ZONE_ID) @Param(description = "id of the availability zone") private String zoneId; @@ -166,6 +170,10 @@ public class SnapshotResponse extends BaseResponse implements ControlledEntityRe this.state = state; } + public void setPhysicaSize(long physicalSize) { + this.physicalSize = physicalSize; + } + @Override public void setProjectId(String projectId) { this.projectId = projectId; diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/SnapshotInfo.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/SnapshotInfo.java index 7865965fa93..0f05ca186f3 100644 --- a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/SnapshotInfo.java +++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/SnapshotInfo.java @@ -36,4 +36,6 @@ public interface SnapshotInfo extends DataObject, Snapshot { ObjectInDataStoreStateMachine.State getStatus(); boolean isRevertable(); + + long getPhysicalSize(); } diff --git a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotObject.java b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotObject.java index c64f78fd01c..60ff31e4342 100644 --- a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotObject.java +++ b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotObject.java @@ -138,6 +138,16 @@ public class SnapshotObject implements SnapshotInfo { return false; } + @Override + public long getPhysicalSize() { + long physicalSize = 0; + SnapshotDataStoreVO snapshotStore = snapshotStoreDao.findBySnapshot(snapshot.getId(), DataStoreRole.Image); + if (snapshotStore != null) { + physicalSize = snapshotStore.getPhysicalSize(); + } + return physicalSize; + } + @Override public VolumeInfo getBaseVolume() { return volFactory.getVolume(snapshot.getVolumeId()); diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index 89c1eb7c352..dd55486ddfd 100644 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -493,6 +493,7 @@ public class ApiResponseHelper implements ResponseGenerator { snapshotResponse.setRevertable(false); } else { snapshotResponse.setRevertable(snapshotInfo.isRevertable()); + snapshotResponse.setPhysicaSize(snapshotInfo.getPhysicalSize()); } // set tag information