[Kimchi-devel] [RFC] Do not block operations due to ref_cnt
Royce Lv
lvroyce at linux.vnet.ibm.com
Fri Apr 3 08:49:38 UTC 2015
On 04/02/2015 04:16 AM, Aline Manera wrote:
>
>
> On 31/03/2015 22:57, Royce Lv wrote:
>> On 03/31/2015 07:03 AM, Crístian Viana wrote:
>>> Hi,
>>>
>>> I'd like to propose a change to how Kimchi uses the resource field
>>> "ref_cnt".
>>>
>>> Currently, "ref_cnt" - which stands for "reference count" - is one
>>> of the fields returned when looking up a storage volume. Its purpose
>>> is to indicate how many times that resource is being used at the
>>> moment. For example, if the resource
>>> /storagepools/pool/storagevolumes/vol has ref_cnt=1, it means that
>>> the disk is attached to 1 VM right now and thus it cannot be
>>> attached to another VM. I believe the original idea of this feature
>>> is to prevent the same resource from being attached more than once
>>> at the same time. However, IMO, that might not always be the desired
>>> behavior and there's no way to enforce it completely as those
>>> resources can be used outside of Kimchi, where "ref_cnt" doesn't
>>> exist. For example, if I have one VM which uses the disk "vol", I'm
>>> not able to attach it to another VM via Kimchi; but if I use another
>>> libvirt-based VM manager (e.g. virsh), I am able to attach that disk
>>> to a different VM. This becomes even trickier when we consider other
>>> operations, like snapshots, which can attach/detach disks while
>>> they're being reverted to. Also, suppose I might want to inspect one
>>> VM's disk from another VM, and then I'd need to attach one disk
>>> twice; Kimchi wouldn't allow that by stating that the disk is
>>> already in use.
>>>
>>> I propose Kimchi should stop using "ref_cnt" as a blocking method.
>>> The field may still exist for information/warning messages (e.g.
>>> "are you sure you want to attach this disk? it's already being used
>>> by another VM.") but no operation should be blocked because of it,
>>> as it is the case now. As inconsistencies with that value may happen
>>> and we have no way to make sure it will always work, we shouldn't
>>> annoy the user by stopping them from doing something that may be
>>> perfectly valid.
>> Let me explain the context of this design:
>> As kimchi always create a disk internally with VM, we do not want
>> these disks we know belong to given VM to be attached to others at
>> the same time, because it can easily cause corruption. And openstack
>> nova also has this logic to prevent cinder volumes to be attached to
>> multiple VMs.
>>
>> I agree that are some use cases we need shared disk:
>> clustered application can deal with concurrent access of disk
>> (concurrent filesystem, databases with shared table-space). I think
>> for these cases we need to label these disks as "shared", let users
>> aware that these disks have concurrent access control on these disks,
>> we can refer to ovirt's shared raw disk if we want:
>> http://www.ovirt.org/Features/SharedRawDisk.
>>
>> What I do not agree is we lay the burdern of preventing corruption to
>> user by chopping away ref_cnt just because we think handle it bothers
>> us. For the use case you mentioned:
>> 1. virsh/virt-manager allows attach twice: right, but it will not
>> handle the corruption disk of concurrent access. Two vms writing the
>> disk meta-data will surely course corruption.
>> 2. snapshots: because a disk ref_cnt is neither 0 or 1 for now. we
>> can scan the xml to decide its ref_cnt after snapshots revert is done.
>> 3. inspect one VM's disk from another VM: if from two running VM, the
>> disk may corrupt, if one is down and another is running (e.g. for
>> emergency recovery) I would suggest to detach it from the paniced VM
>> first like what we do to physical machine.
>
> Royce,
>
> I don't think Cristian is proposing to discard the ref_cnt parameter.
> From my understanding, he is proposing we don't consider the ref_cnt
> value as a blocking method.
> We will keep the ref_cnt parameter and do our best to have the right
> value set there, but when the user wants to attach a disk with ref_cnt
> != 0 we will warn he that some disk corruption may happen as other VM
> is using the same disk.
>
> Based on that proposal, I want also to suggest to change the ref_cnt
> to used_by and list the VM names. So we can properly inform the user
> which VMs are using which disks.
>
Sorry for not read and understand it thoroughly, Cristian. Then I'm on that!
>>>
>>> Any feedback will be very welcome.
>>>
>>> Best regards,
>>> Crístian.
>>>
>>> _______________________________________________
>>> Kimchi-devel mailing list
>>> Kimchi-devel at ovirt.org
>>> http://lists.ovirt.org/mailman/listinfo/kimchi-devel
>>
>> _______________________________________________
>> Kimchi-devel mailing list
>> Kimchi-devel at ovirt.org
>> http://lists.ovirt.org/mailman/listinfo/kimchi-devel
>
More information about the Kimchi-devel
mailing list