[libvirt] [PATCH 09/10 v5] list: Use virConnectListAllStoragePools in virsh
Osier Yang
jyang at redhat.com
Thu Sep 6 14:47:36 UTC 2012
On 2012年09月06日 00:52, Eric Blake wrote:
> On 09/05/2012 12:36 AM, Osier Yang wrote:
>> tools/virsh-pool.c:
>> * vshStoragePoolSorter to sort the pool list by pool name.
>>
>> * struct vshStoragePoolList to present the pool list, pool info
>> is collected by list->poolinfo if 'details' is specified by
>> user.
>>
>> * vshStoragePoolListFree to free the pool list
>>
>> * vshStoragePoolListCollect to collect the pool list, new API
>> virStorageListAllPools is tried first, if it's not supported,
>> fall back to older APIs.
>>
>> * New options --persistent, --transient, --autostart, --no-autostart
>> and --type for pool-list. --persistent or --transient is to filter
>> the returned pool list by whether the pool is persistent or not.
>> --autostart or --no-autostart is to filter the returned pool list
>> by whether the pool is autostarting or not. --type is to filter
>> the pools by pool types. E.g.
>>
>> % virsh pool-list --all --persistent --type dir,disk
>>
>> tools/virsh.pod:
>> * Add documentations for the new options.
>> ---
>
> If you rename things to VSH_MATCH in 8/10, then this patch will be impacted.
>
>> +++ b/tools/virsh-pool.c
>> @@ -36,6 +36,7 @@
>> #include "memory.h"
>> #include "util.h"
>> #include "xml.h"
>> +#include "conf/storage_conf.h"
>
> I'm not sure if virsh is supposed to be able to use conf/*.h files;
> you're not the first offender, but the more we do this, the more we are
> admitting that our public API is insufficient. I'm wondering if we
> should move the filter group constants into libvirt.h, and make them
> part of the public API...
>
> Regardless of what we decide about the above, though, I think it would
> be independent cleanup patches and doesn't affect this patch.
>
>> +static vshStoragePoolListPtr
>> +vshStoragePoolListCollect(vshControl *ctl,
>> + unsigned int flags)
>> +{
>> + vshStoragePoolListPtr list = vshMalloc(ctl, sizeof(*list));
>> + int i;
>> + int ret;
>> + char **names = NULL;
>> + virStoragePoolPtr pool;
>> + bool success = false;
>> + size_t deleted = 0;
>> + int persistent;
>> + int autostart;
>> + int nActivePools = 0;
>> + int nInactivePools = 0;
>> + int nAllPools = 0;
>> +
>> + /* try the list with flags support (0.10.0 and later) */
>
> 0.10.2
Updated when pushing.
>
>
>> +
>> + if (last_error&& last_error->code == VIR_ERR_INVALID_ARG) {
>
> Why two spaces after ==?
>
>> +
>> +fallback:
>> + /* fall back to old method (0.9.13 and older) */
>
> 0.10.1
Updated when pushing.
>
>> @@ -563,6 +790,11 @@ static const vshCmdInfo info_pool_list[] = {
>> static const vshCmdOptDef opts_pool_list[] = {
>> {"inactive", VSH_OT_BOOL, 0, N_("list inactive pools")},
>> {"all", VSH_OT_BOOL, 0, N_("list inactive& active pools")},
>> + {"transient", VSH_OT_BOOL, 0, N_("list transient pools")},
>> + {"persistent", VSH_OT_BOOL, 0, N_("list persistent pools")},
>> + {"autostart", VSH_OT_BOOL, 0, N_("list pools with autostart enabled")},
>> + {"no-autostart", VSH_OT_BOOL, 0, N_("list pools with autostart disabled")},
>> + {"type", VSH_OT_STRING, 0, N_("only list pool of specified type(s) (if supported)")},
>
> Missing a plural, and the parenthetical '(if supported)' doesn't add any
> value. Maybe:
>
> N_("filter pools by type (multiple types separated by commas)")
Likewise.
>
>> + if (type) {
>> + int poolType = -1;
>> + char **poolTypes = NULL;
>> + int npoolTypes = 0;
>> +
>> + npoolTypes = vshStringToArray((char *)type,&poolTypes);
>> +
>> + for (i = 0; i< npoolTypes; i++) {
>> + if ((poolType = virStoragePoolTypeFromString(poolTypes[i]))< 0) {
>> + vshError(ctl, "%s", _("Invalid pool type"));
>
> Hmm. What happens if we add new pool types in the future? If libvirt
> 0.10.3 supports the new pool type 'foo', but I am connecting with virsh
> 0.10.2 as the client, then I am unable to specify the pool type, even
> though it is valid to the server. But I don't have any good suggestions
> on how to make the full list of supported pool types available, and
> which bits they map to, unless we do something like add a new API to
> return a list of supported pool types and then have this virsh function
> consult that list instead of hard-coding the list at the time of the
> libvirt release when virsh was compiled. Probably not worth the effort.
>
>> + case VIR_STORAGE_POOL_RBD:
>> + flags |= VIR_CONNECT_LIST_STORAGE_POOLS_RBD;
>> + break;
>> + default:
>> + break;
>
> If we hit the default case, that means that conf/storage_conf.h has
> added new pool types but we forgot to update this case statement to cope
> with them. I think you want to raise an error here instead of doing
> silent fallthrough, so that we can diagnose such an issue.
Added ...
vshError(ctl, "%s", _("Unknown pool type"));
... when pushing.
>
>> +++ b/tools/virsh.pod
>> @@ -2185,13 +2185,33 @@ variables, and defaults to C<vi>.
>>
>> Returns basic information about the I<pool> object.
>>
>> -=item B<pool-list> [I<--inactive> | I<--all>] [I<--details>]
>> +=item B<pool-list> [I<--inactive>] [I<--all>]
>> + [I<--persistent>] [I<--transient>]
>> + [I<--autostart>] [I<--no-autostart>]
>> + [[I<--details>] [<type>]
>>
>> List pool objects known to libvirt. By default, only active pools
>> are listed; I<--inactive> lists just the inactive pools, and I<--all>
>> -lists all pools. The I<--details> option instructs virsh to additionally
>> +lists all pools.
>> +
>> +Except the default, I<--inactive>, and I<--all>, you may want to specify more
>
> Reads awkwardly. How about:
>
> In addition, there are several sets of
Updated when pushing.
>
>> +filtering flags. I<--persistent> is to list the persistent pools, I<--transient>
>> +is to list the transient pools. I<--autostart> is to list the autostarting pools,
>> +I<--no-autostart> is to list the pools with autostarting disabled.
>
> s/is to list/lists/g
Likewise.
>
> I think the things that I pointed out are either too big (and would
> deserve a separate patch if we decide to do anything at all), or are
> easily fixable, so I'm okay giving:
>
> ACK with findings fixed.
>
More information about the libvir-list
mailing list