Great writeup! On the wiki page, are "motion" and "migration" interchangeable?

John

On Dec 27, 2012, at 6:41 PM, Edison Su <edison...@citrix.com> wrote:

> Hi All, 
>     Before heading into holiday, I'd like to update the current status of the 
> new storage framework since last collab12.
>    1. Class diagram of primary storage is evolved: 
> https://cwiki.apache.org/confluence/download/attachments/30741569/storage.jpg?version=1&modificationDate=1356640617613
>          Highlight the current design:
>          a.  One storage provider can cover multiple storage protocols for 
> multiple hypervisors. The default storage provider can almost cover all the 
> current primary storage protocols. In most of cases, you don't need to write 
> a new storage provider, what you need to do is to write a new storage 
> configurator. Write a new storage provider needs to write a lot of code, 
> which we should avoid it as much as possible. 
>         b. A new type hierarchy, primaryDataStoreConfigurator, is added. The 
> configurator is a factory for primaryDataStore, which assemble 
> StorageProtocolTransformer, PrimaryDataStoreLifeCycle and 
> PrimaryDataStoreDriver for PrimaryDataStore object, based on the hypervisor 
> type and the storage protocol.  For example, for nfs primary storage on 
> xenserver, there is a class called XenNfsConfigurator, which put 
> DefaultXenPrimaryDataStoreLifeCycle, NfsProtocolTransformer and 
> DefaultPrimaryDataStoreDriverImpl into DefaultPrimaryDataStore. One provider 
> can only have one configurator for a pair of hypervisor type and storage 
> protocol. For example, if you want to add a new nfs protocol configurator for 
> xenserver hypervisor, you need to write a new storage provider.
>        c. A new interface, StorageProtocolTransformer, is added. The main 
> purpose of this interface is to handle the difference between different 
> storage protocols. It has four methods:
>             getInputParamNames: return a list of name of parameters for a 
> particular protocol. E.g. NFS protocol has ["server", "path"], ISCSI has 
> ["iqn", "lun"] etc. UI shouldn't hardcode these parameters any more.
>             normalizeUserInput: given a user input from UI/API, need to 
> validate the input, and break it apart, then store them into database
>             getDataStoreTO/ getVolumeTO: each protocol can have its own 
> volumeTO and primaryStorageTO. TO is the object will be passed down to 
> resource, if your storage has extra information you want to pass to resource, 
> these two methods are the place you can override.
>        d. All the time-consuming API calls related to storage is async.
> 
>       2. Minimal functionalities are implemented:
>            a. Can register a http template, without SSVM
>            b. Can register a NFS primary storage for xenserver
>            c. Can download a template into primary storage directly
>           d. Can create a volume from a template
> 
>       3. All about test:
>           a. TestNG test framework is used, as it can provide parameter for 
> each test case. For integration test, we need to know ip address of 
> hypervisor host, the host uuid(if it's xenserver), the primary storage url, 
> the template url etc. These configurations are better to be parameterized, so 
> for each test run, we don't need to modify test case itself, instead, we 
> provide a test configuration file for each test run. TestNG framework already 
> has this functionality, I just reuse it.
>           b. Every pieces of code can be unit tested, which means:
>                 b.1 the xcp plugin can be unit tested. I wrote a small python 
> code, called mockxcpplugin.py, which can directly call xcp plugin.
>                 b.2 direct agent hypervisor resource can be tested. I wrote a 
> mock agent manger, which can load and initialize hypervisor resource, and 
> also can send command to resource.
>                 b.3 a storage integration test maven project is created, 
> which can test the whole storage subsystem, such as create volume from 
> template, which including both image and volume components. 
>           A new section, called "how to test", is added into 
> https://cwiki.apache.org/confluence/display/CLOUDSTACK/Storage+subsystem+2.0, 
> please check it out.
> 
>      The code is on the javelin branch, the maven projects whose name 
> starting from cloud-engine-storage-* are the code related to storage 
> subsystem. Most of the primary storage code is in cloud-engine-storage-volume 
> project.
>       Any feedback/comment is appreciated. 
> 

Stratosec - Secure Infrastructure as a Service
o: 415.315.9385
@johnlkinsella

Reply via email to