cloudstack-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Mike Tutkowski <mike.tutkow...@solidfire.com>
Subject Re: Review Request 14381: KVM: add connect/disconnect capabilities to StorageAdaptors so that external storage services can attach/detach devices on-demand
Date Tue, 22 Oct 2013 04:57:44 GMT
Thanks for that info, Marcus.

By the way, I wanted to see if I could attach my volume to a VM in the
Stopped State.

The attach logic didn't trigger any exceptions; however, when I started the
VM, I received an Insufficient Capacity exception.

If I detach the volume and then start the VM, the VM starts just fine.

I noticed a problem here (in StoragePoolHostDaoImpl):

    @Override

    public StoragePoolHostVO findByPoolHost(long poolId, long hostId) {

        SearchCriteria<StoragePoolHostVO> sc = PoolHostSearch.create();

        sc.setParameters("pool_id", poolId);

        sc.setParameters("host_id", hostId);

        return findOneIncludingRemovedBy(sc);

    }
The findOneIncludingRemovedBy method returns null (the poolId is my storage
pool's ID and the hostId is the expected host ID).

I'm not sure what this method is trying to do.

I looked in the storage_pool_host_ref table (is that the correct table?)
and it only has one row, which maps the local storage pool of the KVM host
to the KVM host (which explains why no match is found for my situation).

Do you understand what this logic is trying to do?

Thanks!



On Mon, Oct 21, 2013 at 8:08 PM, Marcus Sorensen <shadowsor@gmail.com>wrote:

> Do you have the capability to clone the root disk? Normally the
> template is installed to primary, and then cloned for each root disk.
> In some cases (such as CLVM), this isn't efficient and so the template
> is copied fresh to populate each root disk.
>
> I'm actually not 100% sure how this works in the new code. It used to
> be handled by copyPhysicalDisk in the storage adaptor, called by
> copyTemplateToPrimaryStorage, which runs on the agent. It would pass
> template/secondary storage info, and the destination volume/primary
> storage info, and copyPhysicalDisk would do the work of installing the
> image to the destination.  Then subsequent root disks would be cloned
> in CreateCommand by calling createDiskFromTemplate.
>
> In master it looks like this was moved to KVMStorageProcessor
> 'cloneVolumeFromBaseTemplate', although I think this just takes over
> as default, and there's something in your storage driver that should
> be capable of cloning templates on the mgmt server side. I'm less sure
> about how the template gets to primary storage in the first place, I
> assume copyTemplateToPrimaryStorage in KVMStorageProcessor calling
> copyPhysicalDisk in your adaptor. It's a bit tough for me to tell
> since our earlier storage adaptor did everything on the host it mostly
> just worked with the default stuff.
>
> On Mon, Oct 21, 2013 at 4:49 PM, Mike Tutkowski
> <mike.tutkowski@solidfire.com> wrote:
> > Hey Marcus,
> >
> > So...now that this works well for data disks, I was wondering what might
> be
> > involved in getting this process to work for root disks.
> >
> > Can you point me in the right direction as far as what gets invoked when
> a
> > VM is being created on KVM (so that its root disk can be created and the
> > necessary template laid down or ISO installed)?
> >
> > Thanks!
> >
> >
> > On Mon, Oct 21, 2013 at 1:14 PM, Mike Tutkowski
> > <mike.tutkowski@solidfire.com> wrote:
> >>
> >> Hey Marcus,
> >>
> >> Just wanted to let you know the branch of mine that has your code and
> mine
> >> appears to work well with regards to attaching a data disk to a running
> VM:
> >>
> >> fdisk -l from hypervisor:
> >>
> >> http://i.imgur.com/NkP5fo0.png
> >>
> >> fdisk -l from within VM:
> >>
> >> http://i.imgur.com/8YwiiC7.png
> >>
> >> I plan to do more testing on this over the coming days.
> >>
> >> If all goes well, perhaps we can check this code in by the end of the
> >> week?
> >>
> >> Talk to you later,
> >> Mike
> >>
> >>
> >> On Sun, Oct 20, 2013 at 10:23 PM, Mike Tutkowski
> >> <mike.tutkowski@solidfire.com> wrote:
> >>>
> >>> Don't ask me, but it works now (I've been having this trouble quite a
> >>> while today).
> >>>
> >>> I guess the trick is to send you an e-mail. :)
> >>>
> >>>
> >>> On Sun, Oct 20, 2013 at 10:05 PM, Marcus Sorensen <shadowsor@gmail.com
> >
> >>> wrote:
> >>>>
> >>>> Did you create a service offering that uses local storage, or add a
> >>>> shared primary storage? By default there is no storage that matches
> the
> >>>> built in offerings.
> >>>>
> >>>> On Oct 20, 2013 9:39 PM, "Mike Tutkowski" <
> mike.tutkowski@solidfire.com>
> >>>> wrote:
> >>>>>
> >>>>> Hey Marcus,
> >>>>>
> >>>>> So, I went back to the branch of mine that has your code and mine
and
> >>>>> was able to create a new CloudStack install from scratch with it
> (once
> >>>>> again, after manually deleting what was in /var/lib/libvirt/images
> to the
> >>>>> get system VMs to start).
> >>>>>
> >>>>> Anyways, my system VMs are running now and I tried to kick off a
VM
> >>>>> using the CentOS 6.3 image you provided me a while back.
> >>>>>
> >>>>> The virtual router has a Status of Running; however, my VM fails
to
> >>>>> start (with the generic message of Insufficient Capacity).
> >>>>>
> >>>>> I've not seen this exception before (related to the VR). Do you
have
> >>>>> any insight into this?:
> >>>>>
> >>>>> com.cloud.exception.ResourceUnavailableException: Resource [Pod:1]
is
> >>>>> unreachable: Unable to apply userdata and password entry on router
> >>>>> at
> >>>>>
> com.cloud.network.router.VirtualNetworkApplianceManagerImpl.applyRules(VirtualNetworkApplianceManagerImpl.java:3793)
> >>>>> at
> >>>>>
> com.cloud.network.router.VirtualNetworkApplianceManagerImpl.applyUserData(VirtualNetworkApplianceManagerImpl.java:3017)
> >>>>> at
> >>>>>
> com.cloud.network.element.VirtualRouterElement.addPasswordAndUserdata(VirtualRouterElement.java:933)
> >>>>> at
> >>>>>
> org.apache.cloudstack.engine.orchestration.NetworkOrchestrator.prepareElement(NetworkOrchestrator.java:1172)
> >>>>> at
> >>>>>
> org.apache.cloudstack.engine.orchestration.NetworkOrchestrator.prepareNic(NetworkOrchestrator.java:1288)
> >>>>> at
> >>>>>
> org.apache.cloudstack.engine.orchestration.NetworkOrchestrator.prepare(NetworkOrchestrator.java:1224)
> >>>>> at
> >>>>>
> com.cloud.vm.VirtualMachineManagerImpl.advanceStart(VirtualMachineManagerImpl.java:826)
> >>>>> at
> >>>>>
> com.cloud.vm.VirtualMachineManagerImpl.start(VirtualMachineManagerImpl.java:508)
> >>>>> at
> >>>>>
> org.apache.cloudstack.engine.cloud.entity.api.VMEntityManagerImpl.deployVirtualMachine(VMEntityManagerImpl.java:227)
> >>>>> at
> >>>>>
> org.apache.cloudstack.engine.cloud.entity.api.VirtualMachineEntityImpl.deploy(VirtualMachineEntityImpl.java:209)
> >>>>> at
> >>>>>
> com.cloud.vm.UserVmManagerImpl.startVirtualMachine(UserVmManagerImpl.java:3338)
> >>>>> at
> >>>>>
> com.cloud.vm.UserVmManagerImpl.startVirtualMachine(UserVmManagerImpl.java:2919)
> >>>>> at
> >>>>>
> com.cloud.vm.UserVmManagerImpl.startVirtualMachine(UserVmManagerImpl.java:2905)
> >>>>> at
> >>>>>
> com.cloud.utils.component.ComponentInstantiationPostProcessor$InterceptorDispatcher.intercept(ComponentInstantiationPostProcessor.java:125)
> >>>>> at
> >>>>>
> org.apache.cloudstack.api.command.user.vm.DeployVMCmd.execute(DeployVMCmd.java:421)
> >>>>> at com.cloud.api.ApiDispatcher.dispatch(ApiDispatcher.java:161)
> >>>>> at
> >>>>>
> com.cloud.api.ApiAsyncJobDispatcher.runJobInContext(ApiAsyncJobDispatcher.java:109)
> >>>>> at
> >>>>>
> com.cloud.api.ApiAsyncJobDispatcher$1.run(ApiAsyncJobDispatcher.java:66)
> >>>>> at
> >>>>>
> org.apache.cloudstack.managed.context.impl.DefaultManagedContext$1.call(DefaultManagedContext.java:56)
> >>>>> at
> >>>>>
> org.apache.cloudstack.managed.context.impl.DefaultManagedContext.callWithContext(DefaultManagedContext.java:103)
> >>>>> at
> >>>>>
> org.apache.cloudstack.managed.context.impl.DefaultManagedContext.runWithContext(DefaultManagedContext.java:53)
> >>>>> at
> >>>>>
> com.cloud.api.ApiAsyncJobDispatcher.runJob(ApiAsyncJobDispatcher.java:63)
> >>>>> at
> >>>>>
> org.apache.cloudstack.framework.jobs.impl.AsyncJobManagerImpl$1.runInContext(AsyncJobManagerImpl.java:532)
> >>>>> at
> >>>>>
> org.apache.cloudstack.managed.context.ManagedContextRunnable$1.run(ManagedContextRunnable.java:49)
> >>>>> at
> >>>>>
> org.apache.cloudstack.managed.context.impl.DefaultManagedContext$1.call(DefaultManagedContext.java:56)
> >>>>> at
> >>>>>
> org.apache.cloudstack.managed.context.impl.DefaultManagedContext.callWithContext(DefaultManagedContext.java:103)
> >>>>> at
> >>>>>
> org.apache.cloudstack.managed.context.impl.DefaultManagedContext.runWithContext(DefaultManagedContext.java:53)
> >>>>> at
> >>>>>
> org.apache.cloudstack.managed.context.ManagedContextRunnable.run(ManagedContextRunnable.java:46)
> >>>>> at
> >>>>>
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
> >>>>> at java.util.concurrent.FutureTask.run(FutureTask.java:262)
> >>>>> at
> >>>>>
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
> >>>>> at
> >>>>>
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
> >>>>> at java.lang.Thread.run(Thread.java:724)
> >>>>>
> >>>>> Thanks!
> >>>
> >>>
> >>>
> >>>
> >>> --
> >>> Mike Tutkowski
> >>> Senior CloudStack Developer, SolidFire Inc.
> >>> e: mike.tutkowski@solidfire.com
> >>> o: 303.746.7302
> >>> Advancing the way the world uses the cloud™
> >>
> >>
> >>
> >>
> >> --
> >> Mike Tutkowski
> >> Senior CloudStack Developer, SolidFire Inc.
> >> e: mike.tutkowski@solidfire.com
> >> o: 303.746.7302
> >> Advancing the way the world uses the cloud™
> >
> >
> >
> >
> > --
> > Mike Tutkowski
> > Senior CloudStack Developer, SolidFire Inc.
> > e: mike.tutkowski@solidfire.com
> > o: 303.746.7302
> > Advancing the way the world uses the cloud™
>



-- 
*Mike Tutkowski*
*Senior CloudStack Developer, SolidFire Inc.*
e: mike.tutkowski@solidfire.com
o: 303.746.7302
Advancing the way the world uses the
cloud<http://solidfire.com/solution/overview/?video=play>
*™*

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message