You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by sw...@apache.org on 2016/05/04 14:26:26 UTC
[1/2] git commit: updated refs/heads/master to c9319e2
Repository: cloudstack
Updated Branches:
refs/heads/master b8286548b -> c9319e21f
CLOUDSTACK-8302 - Cleanup snapshot on KVM with RBD
Snapshot removing implemented on RBD.
1. On management side: when created new shanpshot we checking if our primary storage is RBD,
then do not remove record from cloud.snapshot_store_ref with link to Ceph
image via 'install_path' field.
2. On management side: when removing snapshot, also send command to agent 'DeleteCommand'.
3. On agent side: method implemented 'public Answer deleteSnapshot(final DeleteCommand cmd)'
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/10ae2aff
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/10ae2aff
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/10ae2aff
Branch: refs/heads/master
Commit: 10ae2aff28cae69f0199fa2820472bb9cd7f3ebc
Parents: d518b61
Author: Dmytro Shevchenko <ds...@gmail.com>
Authored: Sat Dec 12 16:44:09 2015 +0200
Committer: Dmytro Shevchenko <ds...@gmail.com>
Committed: Mon Apr 25 22:14:48 2016 +0300
----------------------------------------------------------------------
engine/storage/snapshot/pom.xml | 5 +++
.../snapshot/XenserverSnapshotStrategy.java | 26 ++++++++----
.../kvm/storage/KVMStorageProcessor.java | 43 +++++++++++++++++++-
3 files changed, 64 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/10ae2aff/engine/storage/snapshot/pom.xml
----------------------------------------------------------------------
diff --git a/engine/storage/snapshot/pom.xml b/engine/storage/snapshot/pom.xml
index 97ca7f2..eda47be 100644
--- a/engine/storage/snapshot/pom.xml
+++ b/engine/storage/snapshot/pom.xml
@@ -37,6 +37,11 @@
<type>test-jar</type>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.apache.cloudstack</groupId>
+ <artifactId>cloud-engine-storage-volume</artifactId>
+ <version>${project.version}</version>
+ </dependency>
</dependencies>
<build>
<plugins>
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/10ae2aff/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/XenserverSnapshotStrategy.java
----------------------------------------------------------------------
diff --git a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/XenserverSnapshotStrategy.java b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/XenserverSnapshotStrategy.java
index edd194e..99fc161 100644
--- a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/XenserverSnapshotStrategy.java
+++ b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/XenserverSnapshotStrategy.java
@@ -36,6 +36,7 @@ import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
import org.apache.cloudstack.storage.command.CreateObjectAnswer;
import org.apache.cloudstack.storage.datastore.db.SnapshotDataStoreDao;
import org.apache.cloudstack.storage.datastore.db.SnapshotDataStoreVO;
+import org.apache.cloudstack.storage.datastore.PrimaryDataStoreImpl;
import org.apache.cloudstack.storage.to.SnapshotObjectTO;
import com.cloud.exception.InvalidParameterValueException;
@@ -53,6 +54,7 @@ import com.cloud.storage.dao.SnapshotDao;
import com.cloud.storage.dao.VolumeDao;
import com.cloud.storage.snapshot.SnapshotManager;
import com.cloud.storage.Storage.ImageFormat;
+import com.cloud.storage.Storage.StoragePoolType;
import com.cloud.utils.NumbersUtil;
import com.cloud.utils.db.DB;
import com.cloud.utils.exception.CloudRuntimeException;
@@ -263,6 +265,10 @@ public class XenserverSnapshotStrategy extends SnapshotStrategyBase {
//snapshot is deleted on backup storage, need to delete it on primary storage
SnapshotDataStoreVO snapshotOnPrimary = snapshotStoreDao.findBySnapshot(snapshotId, DataStoreRole.Primary);
if (snapshotOnPrimary != null) {
+ SnapshotInfo snapshotOnPrimaryInfo = snapshotDataFactory.getSnapshot(snapshotId, DataStoreRole.Primary);
+ if (((PrimaryDataStoreImpl)snapshotOnPrimaryInfo.getDataStore()).getPoolType() == StoragePoolType.RBD) {
+ snapshotSvr.deleteSnapshot(snapshotOnPrimaryInfo);
+ }
snapshotOnPrimary.setState(State.Destroyed);
snapshotStoreDao.update(snapshotOnPrimary.getId(), snapshotOnPrimary);
}
@@ -371,15 +377,17 @@ public class XenserverSnapshotStrategy extends SnapshotStrategyBase {
try {
SnapshotInfo parent = snapshot.getParent();
- if (backupedSnapshot != null && parent != null) {
- Long parentSnapshotId = parent.getId();
- while (parentSnapshotId != null && parentSnapshotId != 0L) {
- SnapshotDataStoreVO snapshotDataStoreVO = snapshotStoreDao.findByStoreSnapshot(primaryStore.getRole(), primaryStore.getId(), parentSnapshotId);
- if (snapshotDataStoreVO != null) {
- parentSnapshotId = snapshotDataStoreVO.getParentSnapshotId();
- snapshotStoreDao.remove(snapshotDataStoreVO.getId());
- } else {
- parentSnapshotId = null;
+ if (backupedSnapshot != null && parent != null && primaryStore instanceof PrimaryDataStoreImpl) {
+ if (((PrimaryDataStoreImpl)primaryStore).getPoolType() != StoragePoolType.RBD) {
+ Long parentSnapshotId = parent.getId();
+ while (parentSnapshotId != null && parentSnapshotId != 0L) {
+ SnapshotDataStoreVO snapshotDataStoreVO = snapshotStoreDao.findByStoreSnapshot(primaryStore.getRole(), primaryStore.getId(), parentSnapshotId);
+ if (snapshotDataStoreVO != null) {
+ parentSnapshotId = snapshotDataStoreVO.getParentSnapshotId();
+ snapshotStoreDao.remove(snapshotDataStoreVO.getId());
+ } else {
+ parentSnapshotId = null;
+ }
}
}
SnapshotDataStoreVO snapshotDataStoreVO = snapshotStoreDao.findByStoreSnapshot(primaryStore.getRole(), primaryStore.getId(), snapshot.getId());
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/10ae2aff/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java
index 51931db..92e985e 100644
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java
+++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java
@@ -1274,7 +1274,48 @@ public class KVMStorageProcessor implements StorageProcessor {
@Override
public Answer deleteSnapshot(final DeleteCommand cmd) {
- return new Answer(cmd);
+ String snap_full_name = "";
+ try {
+ SnapshotObjectTO snapshotTO = (SnapshotObjectTO) cmd.getData();
+ PrimaryDataStoreTO primaryStore = (PrimaryDataStoreTO) snapshotTO.getDataStore();
+ VolumeObjectTO volume = snapshotTO.getVolume();
+ KVMStoragePool primaryPool = storagePoolMgr.getStoragePool(primaryStore.getPoolType(), primaryStore.getUuid());
+ KVMPhysicalDisk disk = storagePoolMgr.getPhysicalDisk(primaryStore.getPoolType(), primaryStore.getUuid(), volume.getPath());
+ String snapshotFullPath = snapshotTO.getPath();
+ String snapshotName = snapshotFullPath.substring(snapshotFullPath.lastIndexOf("/") + 1);
+ snap_full_name = disk.getName() + "@" + snapshotName;
+ if (primaryPool.getType() == StoragePoolType.RBD) {
+ Rados r = new Rados(primaryPool.getAuthUserName());
+ r.confSet("mon_host", primaryPool.getSourceHost() + ":" + primaryPool.getSourcePort());
+ r.confSet("key", primaryPool.getAuthSecret());
+ r.confSet("client_mount_timeout", "30");
+ r.connect();
+ s_logger.debug("Succesfully connected to Ceph cluster at " + r.confGet("mon_host"));
+ IoCTX io = r.ioCtxCreate(primaryPool.getSourceDir());
+ Rbd rbd = new Rbd(io);
+ RbdImage image = rbd.open(disk.getName());
+ try {
+ s_logger.info("Attempting to remove RBD snapshot " + snap_full_name);
+ if (image.snapIsProtected(snapshotName)) {
+ s_logger.debug("Unprotecting RBD snapshot " + snap_full_name);
+ image.snapUnprotect(snapshotName);
+ }
+ image.snapRemove(snapshotName);
+ s_logger.info("Snapshot " + snap_full_name + " successfully removed from " +
+ primaryPool.getType().toString() + " pool.");
+ } finally {
+ rbd.close(image);
+ r.ioCtxDestroy(io);
+ }
+ } else {
+ s_logger.warn("Operation not implemented for storage pool type of " + primaryPool.getType().toString());
+ throw new InternalErrorException("Operation not implemented for storage pool type of " + primaryPool.getType().toString());
+ }
+ return new Answer(cmd, true, "Snapshot " + snap_full_name + " removed successfully.");
+ } catch (Exception e) {
+ s_logger.error(e.getMessage());
+ return new Answer(cmd, false, "Failed to remove snapshot " + snap_full_name);
+ }
}
@Override
[2/2] git commit: updated refs/heads/master to c9319e2
Posted by sw...@apache.org.
Merge pull request #1230 from SafeSwissCloud/CLOUDSTACK-8302
CLOUDSTACK-8302: Removing snapshots on RBDSnapshot removing implemented if primary datastore is RBD
https://issues.apache.org/jira/browse/CLOUDSTACK-8302
* pr/1230:
CLOUDSTACK-8302 - Cleanup snapshot on KVM with RBD Snapshot removing implemented on RBD. 1. On management side: when created new shanpshot we checking if our primary storage is RBD, then do not remove record from cloud.snapshot_store_ref with link to Ceph image via 'install_path' field. 2. On management side: when removing snapshot, also send command to agent 'DeleteCommand'. 3. On agent side: method implemented 'public Answer deleteSnapshot(final DeleteCommand cmd)'
Signed-off-by: Will Stevens <wi...@gmail.com>
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/c9319e21
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/c9319e21
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/c9319e21
Branch: refs/heads/master
Commit: c9319e21fb33eaab42dee90cbfedd88eff23e842
Parents: b828654 10ae2af
Author: Will Stevens <wi...@gmail.com>
Authored: Wed May 4 10:26:01 2016 -0400
Committer: Will Stevens <wi...@gmail.com>
Committed: Wed May 4 10:26:01 2016 -0400
----------------------------------------------------------------------
engine/storage/snapshot/pom.xml | 5 +++
.../snapshot/XenserverSnapshotStrategy.java | 26 ++++++++----
.../kvm/storage/KVMStorageProcessor.java | 43 +++++++++++++++++++-
3 files changed, 64 insertions(+), 10 deletions(-)
----------------------------------------------------------------------