Return-Path: X-Original-To: apmail-cloudstack-commits-archive@www.apache.org Delivered-To: apmail-cloudstack-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 59B7510069 for ; Mon, 6 Jan 2014 06:26:04 +0000 (UTC) Received: (qmail 96168 invoked by uid 500); 6 Jan 2014 06:25:06 -0000 Delivered-To: apmail-cloudstack-commits-archive@cloudstack.apache.org Received: (qmail 96119 invoked by uid 500); 6 Jan 2014 06:25:03 -0000 Mailing-List: contact commits-help@cloudstack.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cloudstack.apache.org Delivered-To: mailing list commits@cloudstack.apache.org Received: (qmail 96020 invoked by uid 99); 6 Jan 2014 06:24:58 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 06 Jan 2014 06:24:58 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id 4856344A4B; Mon, 6 Jan 2014 06:24:58 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: sanjaytripathi@apache.org To: commits@cloudstack.apache.org Message-Id: <63e9e8527ab54d3e81f0fa92be65a904@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: git commit: updated refs/heads/master to 3ad0e8f Date: Mon, 6 Jan 2014 06:24:58 +0000 (UTC) Updated Branches: refs/heads/master e5283e966 -> 3ad0e8fb4 CLOUDSTACK-5701: physical size is not getting updated in snapshot_store_ref table. Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/3ad0e8fb Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/3ad0e8fb Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/3ad0e8fb Branch: refs/heads/master Commit: 3ad0e8fb474b83428e5e97d88e64c6900ca39dc3 Parents: e5283e9 Author: Sanjay Tripathi Authored: Fri Jan 3 18:16:41 2014 +0530 Committer: Sanjay Tripathi Committed: Mon Jan 6 11:36:43 2014 +0530 ---------------------------------------------------------------------- .../cloudstack/storage/to/SnapshotObjectTO.java | 9 +++++++++ .../storage/snapshot/SnapshotObject.java | 1 + .../datastore/ObjectInDataStoreManagerImpl.java | 1 + .../xen/resource/XenServerStorageProcessor.java | 21 ++++++++++++++++++-- scripts/vm/hypervisor/xenserver/vmopsSnapshot | 17 ++++++++++++++-- 5 files changed, 45 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3ad0e8fb/core/src/org/apache/cloudstack/storage/to/SnapshotObjectTO.java ---------------------------------------------------------------------- diff --git a/core/src/org/apache/cloudstack/storage/to/SnapshotObjectTO.java b/core/src/org/apache/cloudstack/storage/to/SnapshotObjectTO.java index 51ecc5b..7d1ac2d 100644 --- a/core/src/org/apache/cloudstack/storage/to/SnapshotObjectTO.java +++ b/core/src/org/apache/cloudstack/storage/to/SnapshotObjectTO.java @@ -38,6 +38,7 @@ public class SnapshotObjectTO implements DataTO { private long id; private boolean quiescevm; private String[] parents; + private Long physicalSize = (long) 0; public SnapshotObjectTO() { @@ -94,6 +95,14 @@ public class SnapshotObjectTO implements DataTO { this.path = path; } + public Long getPhysicalSize() { + return this.physicalSize; + } + + public void setPhysicalSize(Long physicalSize ) { + this.physicalSize = physicalSize; + } + public VolumeObjectTO getVolume() { return volume; } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3ad0e8fb/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotObject.java ---------------------------------------------------------------------- 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 2594f1d..c05e048 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 @@ -278,6 +278,7 @@ public class SnapshotObject implements SnapshotInfo { } else if (answer instanceof CopyCmdAnswer) { SnapshotObjectTO snapshotTO = (SnapshotObjectTO)((CopyCmdAnswer)answer).getNewData(); snapshotStore.setInstallPath(snapshotTO.getPath()); + snapshotStore.setSize(snapshotTO.getPhysicalSize()); if (snapshotTO.getParentSnapshotPath() == null) { snapshotStore.setParentSnapshotId(0L); } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3ad0e8fb/engine/storage/src/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManagerImpl.java ---------------------------------------------------------------------- diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManagerImpl.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManagerImpl.java index 2eafacc..82164ee 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManagerImpl.java +++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManagerImpl.java @@ -115,6 +115,7 @@ public class ObjectInDataStoreManagerImpl implements ObjectInDataStoreManager { ss.setDataStoreId(dataStore.getId()); ss.setRole(dataStore.getRole()); ss.setVolumeId(snapshotInfo.getVolumeId()); + ss.setSize(snapshotInfo.getSize()); // this is the virtual size of snapshot in primary storage. SnapshotDataStoreVO snapshotDataStoreVO = snapshotDataStoreDao.findParent(dataStore.getRole(), dataStore.getId(), snapshotInfo.getVolumeId()); if (snapshotDataStoreVO != null) { ss.setParentSnapshotId(snapshotDataStoreVO.getSnapshotId()); http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3ad0e8fb/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServerStorageProcessor.java ---------------------------------------------------------------------- diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServerStorageProcessor.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServerStorageProcessor.java index d4f0ffd..73348f4 100644 --- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServerStorageProcessor.java +++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServerStorageProcessor.java @@ -1104,6 +1104,16 @@ public class XenServerStorageProcessor implements StorageProcessor { } + protected Long getSnapshotSize(Connection conn, String primaryStorageSRUuid, String snapshotUuid, Boolean isISCSI, int wait) { + String physicalSize = hypervisorResource.callHostPluginAsync(conn, "vmopsSnapshot", "getSnapshotSize", wait, + "primaryStorageSRUuid", primaryStorageSRUuid, "snapshotUuid", snapshotUuid, "isISCSI", isISCSI.toString()); + if (physicalSize == null || physicalSize.isEmpty()) { + return (long) 0; + } else { + return Long.parseLong(physicalSize); + } + } + protected String backupSnapshot(Connection conn, String primaryStorageSRUuid, String localMountPoint, String path, String secondaryStorageMountPath, String snapshotUuid, String prevBackupUuid, Boolean isISCSI, int wait) { String backupSnapshotUuid = null; @@ -1134,7 +1144,7 @@ public class XenServerStorageProcessor implements StorageProcessor { // indicator of success. if (status != null && status.equalsIgnoreCase("1") && backupSnapshotUuid != null) { s_logger.debug("Successfully copied backupUuid: " + backupSnapshotUuid + " to secondary storage"); - return backupSnapshotUuid; + return results; } else { errMsg = "Could not copy backupUuid: " + backupSnapshotUuid + " from primary storage " + primaryStorageSRUuid + " to secondary storage " + @@ -1230,6 +1240,7 @@ public class XenServerStorageProcessor implements StorageProcessor { String details = null; String snapshotBackupUuid = null; boolean fullbackup = true; + Long physicalSize = null; try { SR primaryStorageSR = hypervisorResource.getSRByNameLabelandHost(conn, primaryStorageNameLabel); if (primaryStorageSR == null) { @@ -1276,6 +1287,8 @@ public class XenServerStorageProcessor implements StorageProcessor { snapshotSr = hypervisorResource.createNfsSRbyURI(conn, new URI(snapshotMountpoint), false); VDI backedVdi = hypervisorResource.cloudVDIcopy(conn, snapshotVdi, snapshotSr, wait); snapshotBackupUuid = backedVdi.getUuid(conn); + String primarySRuuid = snapshotSr.getUuid(conn); + physicalSize = getSnapshotSize(conn, primarySRuuid, snapshotBackupUuid, isISCSI, wait); if (destStore instanceof SwiftTO) { try { @@ -1328,9 +1341,12 @@ public class XenServerStorageProcessor implements StorageProcessor { throw new CloudRuntimeException("S3 upload of snapshots " + snapshotPaUuid + " failed"); } } else { - snapshotBackupUuid = + String results = backupSnapshot(conn, primaryStorageSRUuid, localMountPoint, folder, secondaryStorageMountPath, snapshotUuid, prevBackupUuid, isISCSI, wait); + String[] tmp = results.split("#"); + snapshotBackupUuid = tmp[1]; + physicalSize = Long.parseLong(tmp[2]); finalPath = folder + File.separator + snapshotBackupUuid; } } @@ -1339,6 +1355,7 @@ public class XenServerStorageProcessor implements StorageProcessor { SnapshotObjectTO newSnapshot = new SnapshotObjectTO(); newSnapshot.setPath(finalPath); + newSnapshot.setPhysicalSize(physicalSize); if (fullbackup) { newSnapshot.setParentSnapshotPath(null); } else { http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3ad0e8fb/scripts/vm/hypervisor/xenserver/vmopsSnapshot ---------------------------------------------------------------------- diff --git a/scripts/vm/hypervisor/xenserver/vmopsSnapshot b/scripts/vm/hypervisor/xenserver/vmopsSnapshot index a9a5a72..5fd69a6 100755 --- a/scripts/vm/hypervisor/xenserver/vmopsSnapshot +++ b/scripts/vm/hypervisor/xenserver/vmopsSnapshot @@ -487,6 +487,18 @@ def getVhdParent(session, args): return baseCopyUuid +def getSnapshotSize(session, args): + primaryStorageSRUuid = args['primaryStorageSRUuid'] + snapshotUuid = args['snapshotUuid'] + isISCSI = getIsTrueString(args['isISCSI']) + + primarySRPath = getPrimarySRPath(primaryStorageSRUuid, isISCSI) + logging.debug("primarySRPath: " + primarySRPath) + + snapshotVHD = getVHD(snapshotUuid, isISCSI) + snapshotPath = os.path.join(primarySRPath, snapshotVHD) + physicalSize = vhdutil.getSizePhys(snapshotPath) + return str(physicalSize) def backupSnapshot(session, args): logging.debug("Called backupSnapshot with " + str(args)) @@ -515,6 +527,7 @@ def backupSnapshot(session, args): prevBackupUuid = prevBackupUuid.split("/")[-1] # Check existence of snapshot on primary storage isfile(baseCopyPath, isISCSI) + physicalSize = vhdutil.getSizePhys(baseCopyPath) if prevBackupUuid: # Check existence of prevBackupFile prevBackupVHD = getBackupVHD(prevBackupUuid) @@ -535,7 +548,7 @@ def backupSnapshot(session, args): # If there was a previous snapshot setParent(prevBackupFile, backupFile) - txt = "1#" + backupUuid + txt = "1#" + backupUuid + "#" + str(physicalSize) return txt @echo @@ -596,6 +609,6 @@ def revert_memory_snapshot(session, args): return "0" if __name__ == "__main__": - XenAPIPlugin.dispatch({"getVhdParent":getVhdParent, "create_secondary_storage_folder":create_secondary_storage_folder, "delete_secondary_storage_folder":delete_secondary_storage_folder, "post_create_private_template":post_create_private_template, "backupSnapshot": backupSnapshot, "deleteSnapshotBackup": deleteSnapshotBackup, "unmountSnapshotsDir": unmountSnapshotsDir, "revert_memory_snapshot":revert_memory_snapshot}) + XenAPIPlugin.dispatch({"getVhdParent":getVhdParent, "create_secondary_storage_folder":create_secondary_storage_folder, "delete_secondary_storage_folder":delete_secondary_storage_folder, "post_create_private_template":post_create_private_template, "backupSnapshot": backupSnapshot, "deleteSnapshotBackup": deleteSnapshotBackup, "unmountSnapshotsDir": unmountSnapshotsDir, "revert_memory_snapshot":revert_memory_snapshot, "getSnapshotSize":getSnapshotSize})