[libvirt] [Libvirt] [PATCH v2] Fix bug #611823 prohibit pools with duplicate storage

Lei Li lilei at linux.vnet.ibm.com
Tue Aug 2 16:52:50 UTC 2011


On 08/02/2011 07:11 PM, Daniel P. Berrange wrote:
> On Mon, Aug 01, 2011 at 02:12:51PM -0600, Eric Blake wrote:
>> On 07/31/2011 10:58 PM, Lei Li wrote:
>>> Make sure the unique storage pool defined and create from different directory to avoid inconsistent version of volume pool created.
>> Wrap your commit messages; typically at 70 columns or so (since 'git
>> log' adds some indentation, but you want the end result to still fit
>> in 80 columns for legibility).
>>
>>> Signed-off-by: Lei Li<lilei at linux.vnet.ibm.com>
>>> ---
>>>   src/conf/storage_conf.c      |   36 ++++++++++++++++++++++++++++++++++++
>>>   src/conf/storage_conf.h      |    4 ++++
>>>   src/libvirt_private.syms     |    2 ++
>>>   src/storage/storage_driver.c |    6 ++++++
>>>   4 files changed, 48 insertions(+), 0 deletions(-)
>>>
>>> +virStoragePoolObjPtr
>>> +virStoragePoolObjFindByPath(virStoragePoolObjListPtr pools,
>>> +                            const char *path) {
>>> +    unsigned int i;
>>> +
>>> +    for (i = 0 ; i<   pools->count ; i++) {
>>> +        virStoragePoolObjLock(pools->objs[i]);
>>> +        if (STREQ(pools->objs[i]->def->target.path, path))
>>> +            return pools->objs[i];
>>> +        virStoragePoolObjUnlock(pools->objs[i]);
>>> +    }
>>> +
>>> +    return NULL;
>>> +}
>> This one is good; in fact, we may even want to expose it as a public
>> API, parallel to other virStoragePoolLookupBy* functions (but not
>> until after 0.9.4 is released)
> No, this API is flawed because def->target.path is not required to
> be unique for all types of storage pool.
>
> Daniel
Yes, in the beginning it seems like target->path is not required to be unique. But for this bug https://bugzilla.redhat.com/show_bug.cgi?id=611823
you reported, you said that "For example, if two directory pools point to the same directory, and one pool is used to create a volume,
  the other pool will remain unaware of the new volume until it is refreshed."  And I have test it when use 'virsh pool-define/create' it will create more
than two pools not two have the same directory. I think maybe you should look at the description of the bug first.
This API virStoragePoolObjFindByPath() just provide a method to search pool obj by path and can be use to avoid duplicate target path to fix this bug you mentioned.
BTW, I found that there are 3 method provide ways to search by 'key','name','path' in storage volume also.


-- 
Lei




More information about the libvir-list mailing list