Edison, As part of the hack day discussion, I think we need to determine how to establish that layer and invert these dependencies. Hypervisors must know about storage and network devices. A VM is the nexus of a particular set of storage devices/volumes and network devices/interfaces. From an architectural perspective, we sustain a system circular dependencies between these layers. Since VM must know about storage and networking, I want to invert the dependencies such that storage and network are hypervisor agnostic. I believe it is entirely feasible, and will yield a more robust, general purpose storage layer with wider potential use than just to support hypervisors.
Thanks, -John On Jun 17, 2013, at 4:54 PM, Edison Su <edison...@citrix.com> wrote: > But currently there is no such hypervisor layer yet, and to me it's related > to storage, not related to hypervisor. It's a property of a storage to > support one hypervisor, two hypervisors, or all the hypervisors, not a > property of hypervisor. > I agree, that add a hypervisor type on the storagepoolcmd is not a proper > solution, as we already see, it's not flexible enough for Solidfire. > How about add a getSupportedHypervisors on storage plugin, which will return > ImmutableSet<StorageProtocol>? > > >> -----Original Message----- >> From: John Burwell [mailto:jburw...@basho.com] >> Sent: Monday, June 17, 2013 1:42 PM >> To: dev@cloudstack.apache.org >> Subject: Re: Hypervisor Host Type Required at Zone Level for Primary Storage? >> >> Edison, >> >> For me, this issue comes back to the whole notion of the overloaded >> StoragePoolType. A hypervisor plugin should declare a method akin to >> getSupportedStorageProtocols() : ImmutableSet<StorageProtocol> which >> the Hypervisor layer can use to filter the available DataStores from the >> Storage subsystem. For example, as RBD support expands to other >> hypervisors, we should only have to modify those hypervisor plugins -- not >> the Hypervisor orchestration components or any aspect of the Storage layer. >> >> Thanks, >> -John >> >> On Jun 17, 2013, at 4:27 PM, Edison Su <edison...@citrix.com> wrote: >> >>> There are storages which can only work with one hypervisor, e.g. >>> Currently, Ceph can only work on KVM. And the data store created in >> VCenter, can only work with Vmware. >>> >>> >>> >>>> -----Original Message----- >>>> From: Mike Tutkowski [mailto:mike.tutkow...@solidfire.com] >>>> Sent: Monday, June 17, 2013 1:12 PM >>>> To: dev@cloudstack.apache.org >>>> Subject: Re: Hypervisor Host Type Required at Zone Level for Primary >> Storage? >>>> >>>> I figured you might have something to say about this, John. :) >>>> >>>> Yeah, I have no idea behind the motivation for this change other than >>>> what Edison just said in a recent e-mail. >>>> >>>> It sounds like this change went in so that the allocators could look >>>> at the VM characteristics and see the hypervisor type. With this >>>> info, the allocator can decide if a particular zone-wide storage is >>>> acceptable. This doesn't apply for my situation as I'm dealing with a >>>> SAN, but some zone-wide storage is static (just a volume "out there" >>>> somewhere). Once this volume is used for, say, XenServer purposes, it >> can only be used for XenServer going forward. >>>> >>>> For more details, I would recommend Edison comment. >>>> >>>> >>>> On Mon, Jun 17, 2013 at 2:01 PM, John Burwell <jburw...@basho.com> >>>> wrote: >>>> >>>>> Mike, >>>>> >>>>> I know my thoughts will come as a galloping shock, but the idea of a >>>>> hypervisor type being attached to a volume is the type of dependency >>>>> I think we need to remove from the Storage layer. What attributes >>>>> of a DataStore/StoragePool require association to a hypervisor type? >>>>> My thought is that we should expose query methods allow the >>>>> Hypervisor layer to determine if a DataStore/StoragePool requires >>>>> such a reservation, and we track that reservation in the Hypervisor layer. >>>>> >>>>> Thanks, >>>>> -John >>>>> >>>>> On Jun 17, 2013, at 3:48 PM, Mike Tutkowski >>>>> <mike.tutkow...@solidfire.com> >>>>> wrote: >>>>> >>>>>> Hi Edison, >>>>>> >>>>>> How's about if I add this logic into ZoneWideStoragePoolAllocator >>>>> (below)? >>>>>> >>>>>> After filtering storage pools by tags, it saves off the ones that >>>>>> are for any hypervisor. >>>>>> >>>>>> Next, we filter the list down more by hypervisor. >>>>>> >>>>>> Then, we add the storage pools back into the list that were for any >>>>>> hypervisor. >>>>>> >>>>>> @Override >>>>>> >>>>>> protected List<StoragePool> select(DiskProfile dskCh, >>>>>> >>>>>> VirtualMachineProfile<? extends VirtualMachine> vmProfile, >>>>>> >>>>>> DeploymentPlan plan, ExcludeList avoid, int returnUpTo) { >>>>>> >>>>>> s_logger.debug("ZoneWideStoragePoolAllocator to find storage >>>>>> pool"); >>>>>> >>>>>> List<StoragePool> suitablePools = new ArrayList<StoragePool>(); >>>>>> >>>>>> >>>>>> List<StoragePoolVO> storagePools = >>>>>> >>>> >> _storagePoolDao.findZoneWideStoragePoolsByTags(plan.getDataCenterId( >>>>>> ), >>>>>> dskCh.getTags()); >>>>>> >>>>>> >>>>>> if (storagePools == null) { >>>>>> >>>>>> storagePools = new ArrayList<StoragePoolVO>(); >>>>>> >>>>>> } >>>>>> >>>>>> >>>>>> List<StoragePoolVO> anyHypervisorStoragePools = >>>>>> newArrayList<StoragePoolVO>(); >>>>>> >>>>>> >>>>>> for (StoragePoolVO storagePool : storagePools) { >>>>>> >>>>>> if >>>>>> (storagePool.getHypervisor().equals(HypervisorType.Any)) { >>>>>> >>>>>> anyHypervisorStoragePools.add(storagePool); >>>>>> >>>>>> } >>>>>> >>>>>> } >>>>>> >>>>>> >>>>>> List<StoragePoolVO> storagePoolsByHypervisor = >>>>>> >>>>> >>>> >> _storagePoolDao.findZoneWideStoragePoolsByHypervisor(plan.getDataCent >>>> e >>>>> rId(), >>>>>> dskCh.getHypervisorType()); >>>>>> >>>>>> >>>>>> storagePools.retainAll(storagePoolsByHypervisor); >>>>>> >>>>>> >>>>>> storagePools.addAll(anyHypervisorStoragePools); >>>>>> >>>>>> >>>>>> // add remaining pools in zone, that did not match tags, to >>>>>> avoid set >>>>>> >>>>>> List<StoragePoolVO> allPools = >>>>>> >>>> >> _storagePoolDao.findZoneWideStoragePoolsByTags(plan.getDataCenterId( >>>>>> ), >>>>>> null); >>>>>> >>>>>> allPools.removeAll(storagePools); >>>>>> >>>>>> for (StoragePoolVO pool : allPools) { >>>>>> >>>>>> avoid.addPool(pool.getId()); >>>>>> >>>>>> } >>>>>> >>>>>> >>>>>> for (StoragePoolVO storage : storagePools) { >>>>>> >>>>>> if (suitablePools.size() == returnUpTo) { >>>>>> >>>>>> break; >>>>>> >>>>>> } >>>>>> >>>>>> StoragePool pol = (StoragePool)this.dataStoreMgr >>>>>> .getPrimaryDataStore(storage.getId()); >>>>>> >>>>>> if (filter(avoid, pol, dskCh, plan)) { >>>>>> >>>>>> suitablePools.add(pol); >>>>>> >>>>>> } else { >>>>>> >>>>>> avoid.addPool(pol.getId()); >>>>>> >>>>>> } >>>>>> >>>>>> } >>>>>> >>>>>> return suitablePools; >>>>>> >>>>>> } >>>>>> >>>>>> >>>>>> On Mon, Jun 17, 2013 at 11:40 AM, Mike Tutkowski < >>>>>> mike.tutkow...@solidfire.com> wrote: >>>>>> >>>>>>> Hi Edison, >>>>>>> >>>>>>> I haven't looked into this much, so maybe what I suggest here >>>>>>> won't make sense, but here goes: >>>>>>> >>>>>>> What about a Hypervisor.MULTIPLE enum option ('Hypervisor' might >>>>>>> not be the name of the enumeration...I forget). The >>>>> ZoneWideStoragePoolAllocator >>>>>>> could use this to be less choosy about if a storage pool qualifies >>>>>>> to be used. >>>>>>> >>>>>>> Does that make any sense? >>>>>>> >>>>>>> Thanks! >>>>>>> >>>>>>> >>>>>>> On Mon, Jun 17, 2013 at 11:28 AM, Edison Su <edison...@citrix.com> >>>>> wrote: >>>>>>> >>>>>>>> I think it's due to this >>>>>>>> >>>>> https://cwiki.apache.org/confluence/display/CLOUDSTACK/Zone- >>>> wide+prima >>>>> ry+storage+target >>>>>>>> There are zone-wide storages, may only work with one particular >>>>>>>> hypervisor. For example, the data store created on VCenter can be >>>>> shared by >>>>>>>> all the clusters in a DC, but only for vmware. And, CloudStack >>>>>>>> supports multiple hypervisors in one Zone, so, somehow, need a >>>>>>>> way to tell mgt server, for a particular zone-wide storage, which >>>>>>>> can only work with certain hypervisors. >>>>>>>> You can treat hypervisor type on the storage pool, is another >>>>>>>> tag, to help storage pool allocator to find proper storage pool. >>>>>>>> But seems hypervisor type is not enough for your case, as your >>>>>>>> storage pool can >>>>> work >>>>>>>> with both vmware/xenserver, but not for other hypervisors(that's >>>>>>>> your current code's implementation limitation, not your storage >>>>>>>> itself >>>>> can't do >>>>>>>> that). >>>>>>>> So I'd think you need to extend ZoneWideStoragePoolAllocator, >>>>>>>> maybe, a new allocator called: >>>>>>>> solidfirezonewidestoragepoolAllocator. And, >>>>> replace >>>>>>>> the following line in applicationContext.xml: >>>>>>>> <bean id="zoneWideStoragePoolAllocator" >>>>>>>> >>>>> >>>> class="org.apache.cloudstack.storage.allocator.ZoneWideStoragePoolAll >>>> ocat >>>> or" >>>>>>>> /> >>>>>>>> With your solidfirezonewidestoragepoolAllocator >>>>>>>> It also means, for each CloudStack mgt server deployment, admin >>>>>>>> needs >>>>> to >>>>>>>> configure applicationContext.xml for their needs. >>>>>>>> >>>>>>>>> -----Original Message----- >>>>>>>>> From: Mike Tutkowski [mailto:mike.tutkow...@solidfire.com] >>>>>>>>> Sent: Saturday, June 15, 2013 11:34 AM >>>>>>>>> To: dev@cloudstack.apache.org >>>>>>>>> Subject: Hypervisor Host Type Required at Zone Level for Primary >>>>>>>> Storage? >>>>>>>>> >>>>>>>>> Hi, >>>>>>>>> >>>>>>>>> I recently updated my local repo and noticed that we now require >>>>>>>>> a hypervisor type to be associated with zone-wide primary storage. >>>>>>>>> >>>>>>>>> I was wondering what the motivation for this might be? >>>>>>>>> >>>>>>>>> In my case, my zone-wide primary storage represents a SAN. >>>>>>>>> Volumes are carved out of the SAN as needed and can currently be >>>>>>>>> utilized on both >>>>>>>> Xen >>>>>>>>> and VMware (although, of course, once you've used a given >> volume >>>>>>>>> on >>>>> one >>>>>>>>> hypervisor type or the other, you can only continue to use it >>>>>>>>> with >>>>> that >>>>>>>>> hypervisor type). >>>>>>>>> >>>>>>>>> I guess the point being my primary storage can be associated >>>>>>>>> with more >>>>>>>> than >>>>>>>>> one hypervisor type because of its dynamic nature. >>>>>>>>> >>>>>>>>> Can someone fill me in on the reasons behind this recent change >>>>>>>>> and recommendations on how I should proceed here? >>>>>>>>> >>>>>>>>> Thanks! >>>>>>>>> >>>>>>>>> -- >>>>>>>>> *Mike Tutkowski* >>>>>>>>> *Senior CloudStack Developer, SolidFire Inc.* >>>>>>>>> e: mike.tutkow...@solidfire.com >>>>>>>>> o: 303.746.7302 >>>>>>>>> Advancing the way the world uses the >>>>>>>>> cloud<http://solidfire.com/solution/overview/?video=play> >>>>>>>>> *(tm)* >>>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> *Mike Tutkowski* >>>>>>> *Senior CloudStack Developer, SolidFire Inc.* >>>>>>> e: mike.tutkow...@solidfire.com >>>>>>> o: 303.746.7302 >>>>>>> Advancing the way the world uses the cloud< >>>>> http://solidfire.com/solution/overview/?video=play> >>>>>>> *(tm)* >>>>>>> >>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> *Mike Tutkowski* >>>>>> *Senior CloudStack Developer, SolidFire Inc.* >>>>>> e: mike.tutkow...@solidfire.com >>>>>> o: 303.746.7302 >>>>>> Advancing the way the world uses the >>>>>> cloud<http://solidfire.com/solution/overview/?video=play> >>>>>> *(tm)* >>>>> >>>>> >>>> >>>> >>>> -- >>>> *Mike Tutkowski* >>>> *Senior CloudStack Developer, SolidFire Inc.* >>>> e: mike.tutkow...@solidfire.com >>>> o: 303.746.7302 >>>> Advancing the way the world uses the >>>> cloud<http://solidfire.com/solution/overview/?video=play> >>>> *(tm)* >