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(a)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