Ok, so you do in fact want to change all of the calls in
LibvirtComputingResource to pass storage adaptor type instead of defaulting
to libvirt. That's what I was after.


On Mon, Dec 10, 2012 at 2:49 PM, Edison Su <edison...@citrix.com> wrote:

> One api: ****
>
> public KVMStoragePool getStoragePool(String storageAdaptorType, String
> uuid)****
>
> should be enough.****
>
> Where the storageAdaptorType coming from? storageAdaptorType should be
> passed down by mgt server  in StorageFilerTO. Whenever you call
>  KVMStoragePoolManager, always pass the storageAdaptorType. In each
> KVMStoragePoolManager’s api, call getStorageAdaptor at first, find out the
> corresponding adaptor, then call it.****
>
> ** **
>
> For example, ****
>
>
>  public KVMStoragePool createStoragePool(String name, String host, int port, 
> String path,
> ****
>
>   
> 56<https://git-wip-us.apache.org/repos/asf?p=incubator-cloudstack.git;a=blob;f=plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStoragePoolManager.java;h=2c0e0ac9b6f5d4e6862cbcfb5a6fd3fe9b5d29d6;hb=HEAD#l56>
>                                             String userInfo, StoragePoolType 
> type) {
> ****
>
> ** **
>
> may be implemented like this:****
>
>   storageadaptor adaptor = getstorageadaptor(type);****
>
> adaptor.createPool(…)****
>
> ** **
>
> getStorageAadaptor can be implemented like this:****
>
> storageadaptor getStorageAdaptor(StoragePoolType type) {****
>
>          storageadaptor adaptor = storageMapper.get(type.toString());****
>
>        if (adaptor == null) {****
>
>             adaptor = storageMapper.get(“libvirt”);****
>
>        }****
>
>           return adaptor;****
>
> }****
>
> *From:* Marcus Sorensen [mailto:shadow...@gmail.com]
> *Sent:* Monday, December 10, 2012 4:25 PM
>
> *To:* Edison Su
> *Cc:* cloudstack-dev@incubator.apache.org
> *Subject:* Re: pluggable storage implementation****
>
> ** **
>
> I'm not quite sure what you mean on that last part. I was just thinking as
> far as not having to go through and change all of the existing code to pass
> 'null' or 'libvirt' when we mean to use libvirt. Also, some of these items
> in KVMStoragePoolManager (see createStoragePool, createDiskFromTemplate)
> have code for libvirt specific things (like 'pass this to
> LibvirtStorageAdaptor if pool is RBD), so to avoid messing with those maybe
> we keep things working with libvirt as default. ****
>
> ** **
>
> Something like:****
>
>     private final Map<String, StorageAdaptor> _storageMapper = new
> HashMap<String, StorageAdaptor>();****
>
> ** **
>
>     _storageMapper.add("new-storage-adaptor-v1", new
> MyNewV1StorageAdaptor(storagelayer));****
>
>     _storageMapper.add("new-storage-adaptor-v2", new
> MyNewV2StorageAdaptor(storagelayer));****
>
> ** **
>
>     //existing code****
>
>     public KVMStoragePoolManager(StorageLayer storagelayer, KVMHAMonitor
> monitor) {****
>
>         this._storageAdaptor = new LibvirtStorageAdaptor(storagelayer);***
> *
>
>         this._haMonitor = monitor;****
>
>     }****
>
> ** **
>
>     public KVMStoragePool getStoragePool(String uuid) {****
>
>         return this._storageAdaptor.getStoragePool(uuid);****
>
>     }****
>
> ** **
>
>     // pluggable getStoragePool****
>
>     public KVMStoragePool getStoragePool(String storageAdaptorType, String
> uuid) {****
>
>         StorageAdaptor sa = storageMapper.get(storageAdaptorType);****
>
> ** **
>
>         return sa.getStoragePool();****
>
>     }****
>
> ** **
>
> ** **
>
> or alternatively... (but the libvirt specific portions will have to be
> reworked)****
>
> ** **
>
>     public KVMStoragePool getStoragePool(String uuid) {****
>
>         return getStoragePool("libvirt", uuid);****
>
>     }****
>
> ** **
>
>     // pluggable getStoragePool****
>
>     public KVMStoragePool getStoragePool(String storageAdaptorType, String
> uuid) {****
>
>         StorageAdaptor sa = storageMapper.get(storageAdaptorType);****
>
> ** **
>
>         return sa.getStoragePool();****
>
>     }****
>
> ** **
>
>
>
>
> ****
>
> ** **
>
> On Mon, Dec 10, 2012 at 2:05 PM, Edison Su <edison...@citrix.com> wrote:**
> **
>
>  ****
>
>  ****
>
> *From:* Marcus Sorensen [mailto:shadow...@gmail.com]
> *Sent:* Monday, December 10, 2012 3:37 PM****
>
>
> *To:* Edison Su
> *Cc:* cloudstack-dev@incubator.apache.org
> *Subject:* Re: pluggable storage implementation****
>
>  ****
>
> Ok, that makes sense. So this will be a part of the storage refactor? If
> you're not already working on it I'll play with it and see if I can create
> a working implementation. ****
>
> No plan yet, so many stuff on the management server side to refactor. If
> you will work on it, that’ll be great!****
>
>  ****
>
> I'm assuming we'd have in your example both a getStoragePool(String uuid)
> that selects the old/default LibvirtStorageAdaptor and a
> getStoragePool(String storagePoolType, String uuid), so as not to have to
> redo any existing code?****
>
> If you are just implementing a new storage for primary storage, then add a
> new api called getprimarystorage(string pooltype, string uuid).****
>
> On Mon, Dec 10, 2012 at 1:31 PM, Edison Su <edison...@citrix.com> wrote:**
> **
>
> KVMStoragePoolManager should manage the mapping between storage pool type
> and storageadaptor. ****
>
> 1.  In KVMStoragePoolManager’s constructor, create a map between storage
> pool type and storageadaptor:****
>
> sample code:****
>
> map<String, storageadaptor> storageMapper = new HashMap<String,
> storageadaptor>();****
>
> storageMapper.add(“your-storage-type”, new your-storage-adaptor);****
>
> storageMapper.add(“libvirt-managed-storage”, new LibvirtStorageAdaptor);**
> **
>
> 2.  For each api of KVMStoragePoolManager, should pass down a storage
> pool type, e.g:****
>
> public KVMStoragePool getStoragePool(String storagePoolType, String uuid) {
> ****
>
>        storageadaptor adaptor = storageMapper.get(storagepoolType);****
>
>        if (adaptor == null) {****
>
>               adaptor = storageMapper.get(“libvirt-managed-storage”);****
>
> }****
>
> return adaptor.getStoragePool(uuid);****
>
> }****
>
>  ****
>
>  ****
>
>  ****
>
>  ****
>
> *From:* Marcus Sorensen [mailto:shadow...@gmail.com] ****
>
> *Sent:* Monday, December 10, 2012 3:06 PM
> *To:* Edison Su
> *Cc:* cloudstack-dev@incubator.apache.org****
>
> *Subject:* Re: pluggable storage implementation****
>
>  ****
>
> Yeah, but I'm not seeing an easy/pluggable way to implement a storage
> adaptor, where LibvirtComputingResource relies exclusively on
> KVMStoragePoolManager, which is implementing LibvirtStorageAdaptor. I don't
> see how to switch between storage adaptors in KVMStoragePoolManager.java
> based on what primary storage type I happen to be acting upon.****
>
>  ****
>
> On Mon, Dec 10, 2012 at 12:51 PM, Edison Su <edison...@citrix.com> wrote:*
> ***
>
>  ****
>
>  ****
>
> *From:* Marcus Sorensen [mailto:shadow...@gmail.com]
> *Sent:* Monday, December 10, 2012 2:06 PM
> *To:* Edison Su
> *Cc:* cloudstack-dev@incubator.apache.org
> *Subject:* pluggable storage implementation****
>
>  ****
>
> Just curious, hadn't thought about this before but it seems that at least
> on KVM (probably similar in Xen and VMware too?), there are two separate
> issues with storage in the existing code. First, adding a new storage type
> is a matter of adding in a new 'else if' or something in a bunch of
> different places, as well as tweaking behavior to match the storage type.
> Second, everything about the storage is tightly integrated with Libvirt,
> meaning that if your storage type is not supported by Libvirt it's much,
> much more difficult to implement.****
>
>  ****
>
> Are these both being addressed by the storage changes, for example can we
> write a storage plugin that creates pools/volumes that libvirt doesn't know
> about and still attach those to instances? Or would we need to patch
> libvirt to utilize our storage first?****
>
>  ****
>
> [Edison] That’s the storageadaptor used for:
> https://git-wip-us.apache.org/repos/asf?p=incubator-cloudstack.git;a=blob;f=plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/StorageAdaptor.java;h=ef1e7c9302ab6ac8f197cf75bbf7235bba0235cf;hb=HEAD
> ****
>
> The LibvirtStorageAdaptor  is one of implementation of storageadaptor,
> which is totally based on libvirt, If you have a new storage, not supported
> by libvirt, then you can add a new implementation of storageadaptor.****
>
>  ****
>
>  ****
>
> ** **
>

Reply via email to