On 12/05/2012 04:14 AM, Osier Yang wrote:
On 2012年12月05日 19:03, Jiri Denemark wrote:
> On Wed, Dec 05, 2012 at 18:54:42 +0800, Osier Yang wrote:
> ...
>>> However, the mainly reason I choosed to use a sub-list of domain names
>>> is for future extenstion, I.E. Assuming there are other disk setting
>>> (you never known how many they will be), we have to guarantee they are
>>> same among guests in future. Looking up the disk def with domain and
>>> disk path gives us much flexibility IMHO.
>>>
>>
>> So the point of the argument is: the trade between the flexibility and
>> the uncomfortable locks.
>
> OK, I guess we can store more info in the sharedDisks list (either
> today or
> later when we need it), we may even store the domain list there, but
> we don't
> definitely want to go through all the domains to get the required
> details.
>
I think it should be just a few guests share the disk in practice,
which means in practice the sharedDisks->disks[i]->ndomains should
be short. And that's the other reason why I can live with the
locks. Though in theory, it can be all domains (assuming it's large
number) share the disk.
The other question is: Aren't we already go through all domain objects
in many places?
I'm stepping in a bit late, and haven't fully looked at the series yet,
but one of the things that I would love for libvirt to someday have is a
way to get a list of all virStorageVolPtr associated with any given
virDomainPtr, and conversely, given a virStorageVolPtr, return a list of
all virDomainPtr that use the file (whether directly, or whether as a
backing file). To get to that point, I envision having a way for every
<disk> element to be tied to a virStorageVolPtr, even if it means the
implicit creation of a transient virStoragePoolPtr directory-based pool
for any <disk> specified without an explicit pool. Then, creation of a
new domain, as well as hot-plugging of any disks to an existing domain,
will update each affected virStorageVolPtr; and you really _should_ be
maintaining a list of all associated domains with the disk object.
Thus, I think searching whether a shared disk is allowed should be a
matter of asking that shared disk what domains it is already associated
with, rather than asking each domain whether it uses the shared disk.
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library
http://libvirt.org