Repository: cloudstack
Updated Branches:
  refs/heads/4.5 0141b3778 -> 2d7187e00


Update to SolidFire driver regarding snapshots

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

Branch: refs/heads/4.5
Commit: 2d7187e002e6b5b164c226fdde994a3a92cb9dda
Parents: 0141b37
Author: Mike Tutkowski <[email protected]>
Authored: Wed Oct 22 15:55:35 2014 -0600
Committer: Mike Tutkowski <[email protected]>
Committed: Wed Oct 22 15:55:35 2014 -0600

----------------------------------------------------------------------
 .../driver/SolidFirePrimaryDataStoreDriver.java | 158 +------------------
 1 file changed, 1 insertion(+), 157 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2d7187e0/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/driver/SolidFirePrimaryDataStoreDriver.java
----------------------------------------------------------------------
diff --git 
a/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/driver/SolidFirePrimaryDataStoreDriver.java
 
b/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/driver/SolidFirePrimaryDataStoreDriver.java
index e966cf6..d61258b 100644
--- 
a/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/driver/SolidFirePrimaryDataStoreDriver.java
+++ 
b/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/driver/SolidFirePrimaryDataStoreDriver.java
@@ -32,14 +32,11 @@ import 
org.apache.cloudstack.engine.subsystem.api.storage.SnapshotInfo;
 import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
 import org.apache.cloudstack.framework.async.AsyncCompletionCallback;
 import org.apache.cloudstack.storage.command.CommandResult;
-import org.apache.cloudstack.storage.command.CopyCmdAnswer;
-import org.apache.cloudstack.storage.command.CreateObjectAnswer;
 import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
 import org.apache.cloudstack.storage.datastore.db.StoragePoolDetailVO;
 import org.apache.cloudstack.storage.datastore.db.StoragePoolDetailsDao;
 import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
 import org.apache.cloudstack.storage.datastore.util.SolidFireUtil;
-import org.apache.cloudstack.storage.to.SnapshotObjectTO;
 import org.apache.log4j.Logger;
 
 import com.cloud.agent.api.Answer;
@@ -60,10 +57,6 @@ import com.cloud.storage.StoragePool;
 import com.cloud.storage.Volume;
 import com.cloud.storage.VolumeDetailVO;
 import com.cloud.storage.VolumeVO;
-import com.cloud.storage.SnapshotVO;
-import com.cloud.storage.dao.SnapshotDao;
-import com.cloud.storage.dao.SnapshotDetailsDao;
-import com.cloud.storage.dao.SnapshotDetailsVO;
 import com.cloud.storage.dao.VolumeDao;
 import com.cloud.storage.dao.VolumeDetailsDao;
 import com.cloud.user.AccountDetailVO;
@@ -81,8 +74,6 @@ public class SolidFirePrimaryDataStoreDriver implements 
PrimaryDataStoreDriver {
     @Inject private ClusterDao _clusterDao;
     @Inject private ClusterDetailsDao _clusterDetailsDao;
     @Inject private HostDao _hostDao;
-    @Inject private SnapshotDao _snapshotDao;
-    @Inject private SnapshotDetailsDao _snapshotDetailsDao;
     @Inject private PrimaryDataStoreDao _storagePoolDao;
     @Inject private StoragePoolDetailsDao _storagePoolDetailsDao;
     @Inject private VolumeDao _volumeDao;
@@ -259,25 +250,6 @@ public class SolidFirePrimaryDataStoreDriver implements 
PrimaryDataStoreDriver {
             }
         }
 
-        List<SnapshotVO> lstSnapshots = _snapshotDao.listAll();
-
-        if (lstSnapshots != null) {
-            for (SnapshotVO snapshot : lstSnapshots) {
-                SnapshotDetailsVO snapshotDetails = 
_snapshotDetailsDao.findDetail(snapshot.getId(), 
SolidFireUtil.SNAPSHOT_STORAGE_POOL_ID);
-
-                // if this snapshot belong to the storagePool that was passed 
in
-                if (snapshotDetails != null && snapshotDetails.getValue() != 
null && Long.parseLong(snapshotDetails.getValue()) == storagePool.getId()) {
-                    snapshotDetails = 
_snapshotDetailsDao.findDetail(snapshot.getId(), SolidFireUtil.SNAPSHOT_SIZE);
-
-                    if (snapshotDetails != null && snapshotDetails.getValue() 
!= null) {
-                        long snapshotSize = 
Long.parseLong(snapshotDetails.getValue());
-
-                        usedSpace += snapshotSize;
-                    }
-                }
-            }
-        }
-
         return usedSpace;
     }
 
@@ -457,9 +429,6 @@ public class SolidFirePrimaryDataStoreDriver implements 
PrimaryDataStoreDriver {
 
                 errMsg = ex.getMessage();
             }
-        } else if (dataObject.getType() == DataObjectType.SNAPSHOT) {
-            // should return null when no error message
-            errMsg = deleteSnapshot((SnapshotInfo)dataObject, 
dataStore.getId());
         } else {
             errMsg = "Invalid DataObjectType (" + dataObject.getType() + ") 
passed to deleteAsync";
         }
@@ -473,142 +442,17 @@ public class SolidFirePrimaryDataStoreDriver implements 
PrimaryDataStoreDriver {
 
     @Override
     public void copyAsync(DataObject srcData, DataObject destData, 
AsyncCompletionCallback<CopyCommandResult> callback) {
-        if (srcData.getType() == DataObjectType.SNAPSHOT && destData.getType() 
== DataObjectType.SNAPSHOT) {
-            // in this situation, we don't want to copy the snapshot anywhere
-
-            CopyCmdAnswer copyCmdAnswer = new CopyCmdAnswer(destData.getTO());
-            CopyCommandResult result = new CopyCommandResult(null, 
copyCmdAnswer);
-
-            result.setResult(null);
-
-            callback.complete(result);
-
-            return;
-        }
-
         throw new UnsupportedOperationException();
     }
 
     @Override
     public boolean canCopy(DataObject srcData, DataObject destData) {
-        if (srcData.getType() == DataObjectType.SNAPSHOT && destData.getType() 
== DataObjectType.SNAPSHOT) {
-            return true;
-        }
-
         return false;
     }
 
     @Override
     public void takeSnapshot(SnapshotInfo snapshotInfo, 
AsyncCompletionCallback<CreateCmdResult> callback) {
-        CreateCmdResult result = null;
-
-        try {
-            VolumeInfo volumeInfo = snapshotInfo.getBaseVolume();
-            VolumeVO volume = _volumeDao.findById(volumeInfo.getId());
-
-            long sfVolumeId = Long.parseLong(volume.getFolder());
-            long storagePoolId = volume.getPoolId();
-
-            SolidFireUtil.SolidFireConnection sfConnection = 
SolidFireUtil.getSolidFireConnection(storagePoolId, _storagePoolDetailsDao);
-
-            SolidFireUtil.SolidFireVolume sfVolume = 
SolidFireUtil.getSolidFireVolume(sfConnection, sfVolumeId);
-
-            StoragePoolVO storagePool = 
_storagePoolDao.findById(storagePoolId);
-
-            long capacityBytes = storagePool.getCapacityBytes();
-            // getUsedBytes(StoragePool) will not include the bytes of the 
proposed snapshot because
-            // updateSnapshotDetails(long, long, long, long) has not yet been 
called for this snapshot
-            long usedBytes = getUsedBytes(storagePool);
-            long sfVolumeSize = sfVolume.getTotalSize();
-
-            usedBytes += sfVolumeSize;
-
-            // For taking a snapshot, we need to check to make sure a 
sufficient amount of space remains in the primary storage.
-            // For the purpose of "charging" these bytes against 
storage_pool.capacityBytes, we take the full size of the SolidFire volume.
-            // Generally snapshots take up much less space than the size of 
the volume, but the easiest way to track this space usage
-            // is to take the full size of the volume (you can always increase 
the amount of bytes you give to the primary storage).
-            if (usedBytes > capacityBytes) {
-                throw new CloudRuntimeException("Insufficient amount of space 
remains in this primary storage to take a snapshot");
-            }
-
-            storagePool.setUsedBytes(usedBytes);
-
-            long sfSnapshotId = 
SolidFireUtil.createSolidFireSnapshot(sfConnection, sfVolumeId, 
snapshotInfo.getUuid());
-
-            // Now that we have successfully taken a snapshot, update the 
space usage in the storage_pool table (even
-            // though storage_pool.used_bytes is likely no longer in use).
-            _storagePoolDao.update(storagePoolId, storagePool);
-
-            updateSnapshotDetails(snapshotInfo.getId(), sfSnapshotId, 
storagePoolId, sfVolumeSize);
-
-            SnapshotObjectTO snapshotObjectTo = 
(SnapshotObjectTO)snapshotInfo.getTO();
-
-            snapshotObjectTo.setPath(String.valueOf(sfSnapshotId));
-
-            CreateObjectAnswer createObjectAnswer = new 
CreateObjectAnswer(snapshotObjectTo);
-
-            result = new CreateCmdResult(null, createObjectAnswer);
-
-            result.setResult(null);
-        }
-        catch (Exception ex) {
-            s_logger.debug(SolidFireUtil.LOG_PREFIX + "Failed to take 
CloudStack snapshot: " + snapshotInfo.getId(), ex);
-
-            result = new CreateCmdResult(null, new 
CreateObjectAnswer(ex.toString()));
-
-            result.setResult(ex.toString());
-        }
-
-        callback.complete(result);
-    }
-
-    private void updateSnapshotDetails(long csSnapshotId, long sfSnapshotId, 
long storagePoolId, long sfSnapshotSize) {
-        SnapshotDetailsVO accountDetail = new SnapshotDetailsVO(csSnapshotId,
-                SolidFireUtil.SNAPSHOT_ID,
-                String.valueOf(sfSnapshotId),
-                false);
-
-            _snapshotDetailsDao.persist(accountDetail);
-
-            accountDetail = new SnapshotDetailsVO(csSnapshotId,
-                    SolidFireUtil.SNAPSHOT_STORAGE_POOL_ID,
-                    String.valueOf(storagePoolId),
-                    false);
-
-            _snapshotDetailsDao.persist(accountDetail);
-
-            accountDetail = new SnapshotDetailsVO(csSnapshotId,
-                    SolidFireUtil.SNAPSHOT_SIZE,
-                    String.valueOf(sfSnapshotSize),
-                    false);
-
-            _snapshotDetailsDao.persist(accountDetail);
-    }
-
-    // return null for no error message
-    private String deleteSnapshot(SnapshotInfo snapshotInfo, long 
storagePoolId) {
-        String errMsg = null;
-
-        try {
-            SolidFireUtil.SolidFireConnection sfConnection = 
SolidFireUtil.getSolidFireConnection(storagePoolId, _storagePoolDetailsDao);
-
-            SolidFireUtil.deleteSolidFireSnapshot(sfConnection, 
getSolidFireSnapshotId(snapshotInfo.getId()));
-
-            _snapshotDetailsDao.removeDetails(snapshotInfo.getId());
-        }
-        catch (Exception ex) {
-            s_logger.debug(SolidFireUtil.LOG_PREFIX + "Failed to delete 
SolidFire snapshot: " + snapshotInfo.getId(), ex);
-
-            errMsg = ex.getMessage();
-        }
-
-        return errMsg;
-    }
-
-    private long getSolidFireSnapshotId(long csSnapshotId) {
-        SnapshotDetailsVO snapshotDetails = 
_snapshotDetailsDao.findDetail(csSnapshotId, SolidFireUtil.SNAPSHOT_ID);
-
-        return Long.parseLong(snapshotDetails.getValue());
+        throw new UnsupportedOperationException();
     }
 
     @Override

Reply via email to