Thanks for the notes, Edison.

Chip - Edison hit all the important points, but I'm not sure what the proper 
etiquette is here. I'd be more than happy to add some tests, but after looking 
through the code, I can't find any tests to model after. While I don't mind 
coming up with a model for testing this stuff, I think there should be a larger 
discussion about what that would look like.

I wanted to make sure I followed up on this to see what your thoughts were 
before closing the review request.

-Chris
--
Chris Suich
chris.su...@netapp.com<mailto:chris.su...@netapp.com>
NetApp Software Engineer
Data Center Platforms – Cloud Solutions
Citrix, Cisco & Red Hat

On Oct 4, 2013, at 5:28 PM, edison su 
<edison...@citrix.com<mailto:edison...@citrix.com>> wrote:

This is an automatically generated e-mail. To reply, visit: 
https://reviews.apache.org/r/14477/


On October 4th, 2013, 8:23 p.m. UTC, Chip Childers wrote:

api/src/org/apache/cloudstack/api/command/user/snapshot/RevertSnapshotCmd.java<https://reviews.apache.org/r/14477/diff/1/?file=361268#file361268line36>
 (Diff revision 1)

        36

@APICommand(name = "RevertSnapshot", description = "revert a volume snapshot.", 
responseObject = SnapshotResponse.class)


Are there any unit or integration tests for this new API call? I can't find any 
in this diff.

There is no implementation for revertsnapshot yet in the current storage 
drivers. If any storage vendor wants to implement this feature, they can add 
their implementation in their storage driver. Also, if anybody is interested in 
implementing this feature in the default storage driver, for example, for Ceph, 
then it's the place to start with.


On October 4th, 2013, 8:23 p.m. UTC, Chip Childers wrote:

core/src/org/apache/cloudstack/storage/command/ForgetObjectCmd.java<https://reviews.apache.org/r/14477/diff/1/?file=361271#file361271line24>
 (Diff revision 1)

        24

public class ForgetObjectCmd extends Command implements StorageSubSystemCommand 
{


Are there any unit or integration tests for this new API call? I can't find any 
in this diff.

It's not an api, it's just a simple command will send to hypervisor host, will 
be used by HypervisorHelper to introduce/forget an object on hypervisor host.


On October 4th, 2013, 8:23 p.m. UTC, Chip Childers wrote:

engine/storage/src/org/apache/cloudstack/storage/helper/HypervisorHelperImpl.java<https://reviews.apache.org/r/14477/diff/1/?file=361287#file361287line35>
 (Diff revision 1)

        35

public class HypervisorHelperImpl implements HypervisorHelper {


        36

    private static final Logger s_logger = 
Logger.getLogger(HypervisorHelperImpl.class);


        37

    @Inject


        38

    EndPointSelector selector;


        39


        40

    @Override


        41

    public DataTO introduceObject(DataTO object, Scope scope, Long storeId) {


        42

        EndPoint ep = selector.select(scope, storeId);


        43

        IntroduceObjectCmd cmd = new IntroduceObjectCmd(object);


        44

        Answer answer = ep.sendMessage(cmd);


        45

        if (answer == null || !answer.getResult()) {


        46

            String errMsg = answer == null ? null : answer.getDetails();


        47

            throw new CloudRuntimeException("Failed to introduce object, due to 
" + errMsg);


        48

        }


        49

        IntroduceObjectAnswer introduceObjectAnswer = 
(IntroduceObjectAnswer)answer;


        50

        return introduceObjectAnswer.getDataTO();


        51

    }


        52


        53

    @Override


        54

    public boolean forgetObject(DataTO object, Scope scope, Long storeId) {


        55

        EndPoint ep = selector.select(scope, storeId);


        56

        ForgetObjectCmd cmd = new ForgetObjectCmd(object);


        57

        Answer answer = ep.sendMessage(cmd);


        58

        if (answer == null || !answer.getResult()) {


        59

            String errMsg = answer == null ? null : answer.getDetails();


        60

            if (errMsg != null) {


        61

                s_logger.debug("Failed to forget object: " + errMsg);


        62

            }


        63

            return false;


        64

        }


        65

        return true;


        66

    }


        67


        68

    @Override


        69

    public SnapshotObjectTO takeSnapshot(SnapshotObjectTO snapshotObjectTO, 
Scope scope) {


        70

        return null;  //To change body of implemented methods use File | 
Settings | File Templates.


        71

    }


        72


        73

    @Override


        74

    public boolean revertSnapshot(SnapshotObjectTO snapshotObjectTO, Scope 
scope) {


        75

        return false;  //To change body of implemented methods use File | 
Settings | File Templates.


        76

    }


I feel like this new code should have unit test for the if logic trees.

The logic here is very simple: just send a command to hypervisor host. Not sure 
need unit test here or not.


On October 4th, 2013, 8:23 p.m. UTC, Chip Childers wrote:

plugins/hypervisors/simulator/src/com/cloud/resource/SimulatorStorageProcessor.java<https://reviews.apache.org/r/14477/diff/1/?file=361289#file361289line226>
 (Diff revision 1)

        221

    @Override


        222

    public Answer introduceObject(IntroduceObjectCmd cmd) {


        223

        // TODO Auto-generated method stub


        224

        return null;


        225

    }


        226


        227

    @Override


        228

    public Answer forgetObject(ForgetObjectCmd cmd) {


        229

        // TODO Auto-generated method stub


        230

        return null;


        231

    }


Can we get rid of these TODOs?

Yes, I can remove the TODO


On October 4th, 2013, 8:23 p.m. UTC, Chip Childers wrote:

server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java<https://reviews.apache.org/r/14477/diff/1/?file=361292#file361292line264>
 (Diff revision 1)

        261

    public boolean revertSnapshot(Long snapshotId) {


        262

        Snapshot snapshot = _snapshotDao.findById(snapshotId);


        263

        if (snapshot == null) {


        264

            throw new InvalidParameterValueException("No such snapshot");


        265

        }


        266


        267

        SnapshotStrategy snapshotStrategy = null;


        268

        for (SnapshotStrategy strategy : snapshotStrategies) {


        269

            if (strategy.canHandle(snapshot)) {


        270

                snapshotStrategy = strategy;


        271

                break;


        272

            }


        273

        }


        274


        275

        if (snapshotStrategy == null) {


        276

            return false;


        277

        }


        278


        279

        return snapshotStrategy.revertSnapshot(snapshotId);


        280

    }


Unit tests for this if logic?

Again, straight forward code, not sure need add unit test here.


- edison


On October 4th, 2013, 12:57 a.m. UTC, Chris Suich wrote:

Review request for cloudstack.
By Chris Suich.

Updated Oct. 4, 2013, 12:57 a.m.

Repository: cloudstack-git
Description

These changes are a joint effort between Edison and I to refactor some of the 
code around snapshotting VM volumes and creating templates/volumes from VM 
volume snapshots. In general, we were working towards allowing 
PrimaryDataStoreDrivers to create snapshots on primary storage and not 
requiring the snapshots to be transferred to secondary storage.

High level changes:
-Added uuid to NfsTO, SwiftTO & S3TO to cut down on the requirement of 
PrimaryDataStoreTO and ImageStoreTO which don't really serve much of a purpose
-Initial work towards enable reverting VM volume from snapshots
-Added hypervisor commands for introducing and forgetting new hypervisor 
objects (snapshots, templates & volumes)


Diffs

  *   api/src/com/cloud/agent/api/to/DataStoreTO.java (9014f8e)
  *   api/src/com/cloud/agent/api/to/NfsTO.java (415c95c)
  *   api/src/com/cloud/agent/api/to/SwiftTO.java (7349d77)
  *   api/src/com/cloud/event/EventTypes.java (ec9604e)
  *   api/src/com/cloud/storage/snapshot/SnapshotApiService.java (23e6522)
  *   
api/src/org/apache/cloudstack/api/command/admin/storage/ListStoragePoolsCmd.java
 (26351bb)
  *   
api/src/org/apache/cloudstack/api/command/user/snapshot/RevertSnapshotCmd.java 
(PRE-CREATION)
  *   core/src/com/cloud/storage/resource/StorageProcessor.java (5fa9f8a)
  *   
core/src/com/cloud/storage/resource/StorageSubsystemCommandHandlerBase.java 
(ab9aa2a)
  *   core/src/org/apache/cloudstack/storage/command/ForgetObjectCmd.java 
(PRE-CREATION)
  *   core/src/org/apache/cloudstack/storage/command/IntroduceObjectAnswer.java 
(PRE-CREATION)
  *   core/src/org/apache/cloudstack/storage/command/IntroduceObjectCmd.java 
(PRE-CREATION)
  *   core/src/org/apache/cloudstack/storage/to/ImageStoreTO.java (0037ea5)
  *   core/src/org/apache/cloudstack/storage/to/PrimaryDataStoreTO.java 
(5e870df)
  *   
engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/EndPointSelector.java
 (ca0cc2c)
  *   
engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/SnapshotService.java
 (d594a07)
  *   
engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/SnapshotStrategy.java
 (86ae532)
  *   
engine/storage/datamotion/src/org/apache/cloudstack/storage/motion/AncientDataMotionStrategy.java
 (96d1f5a)
  *   
engine/storage/image/src/org/apache/cloudstack/storage/image/store/ImageStoreImpl.java
 (855d8cb)
  *   
engine/storage/integration-test/test/org/apache/cloudstack/storage/test/SnapshotTestWithFakeData.java
 (2aaabda)
  *   
engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotServiceImpl.java
 (3ead93f)
  *   
engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotStrategyBase.java
 (1b57922)
  *   
engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/XenserverSnapshotStrategy.java
 (60d9407)
  *   
engine/storage/src/org/apache/cloudstack/storage/endpoint/DefaultEndPointSelector.java
 (fdc12bf)
  *   
engine/storage/src/org/apache/cloudstack/storage/helper/HypervisorHelper.java 
(PRE-CREATION)
  *   
engine/storage/src/org/apache/cloudstack/storage/helper/HypervisorHelperImpl.java
 (PRE-CREATION)
  *   
plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java
 (82fd2ce)
  *   
plugins/hypervisors/simulator/src/com/cloud/resource/SimulatorStorageProcessor.java
 (c7768aa)
  *   
plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageProcessor.java
 (4982d87)
  *   
plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServerStorageProcessor.java
 (739b974)
  *   server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java (2297e6a)
  *   
services/secondary-storage/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java
 (3ef950b)

View Diff<https://reviews.apache.org/r/14477/diff/>


Reply via email to