Re: [Qemu-devel] [PATCH] qmp: Deprecate query-nodes option of query-blockstats

2019-01-28 Thread Anton Kuchin



On 28/01/2019 18:37, Kevin Wolf wrote:

Am 28.01.2019 um 16:15 hat Anton Kuchin geschrieben:

This option is broken since a6baa60807 in v2.9 and returns mostly
zeroes instead of real stats because actual querring of BlockStats
that resides in blk is missing.

And it makes no sense because with this option BlockDriverState-s
are iterated but BlockAcctStats belong to BlockBackend and not BDS
since 7f0e9da6f13 in v2.5

Signed-off-by: Anton Kuchin 

Isn't query-nodes the only way to get wr_highest_offset for the protocol
layer? oVirt depends on this, as far as I know.


Isn't it reported without query-nodes parameter as "wr_highest_offset" 
of "parent" stats entry?


What we get with query-nodes is essentially the same output, but without 
correct data from backend and with one more copy of almost empty data 
from protocol layer.


I'll try to find usages of this option in oVirt code.



Kevin





Re: [Qemu-devel] [PATCH] qmp: Deprecate query-nodes option of query-blockstats

2019-01-28 Thread Thomas Huth
On 2019-01-28 16:15, Anton Kuchin wrote:
> This option is broken since a6baa60807 in v2.9 and returns mostly
> zeroes instead of real stats because actual querring of BlockStats

s/querring/querying/

> that resides in blk is missing.
> 
> And it makes no sense because with this option BlockDriverState-s
> are iterated but BlockAcctStats belong to BlockBackend and not BDS
> since 7f0e9da6f13 in v2.5
> 
> Signed-off-by: Anton Kuchin 
> ---
[...]
> @@ -577,21 +576,10 @@ BlockStatsList *qmp_query_blockstats(bool 
> has_query_nodes,
>  {
>  BlockStatsList *head = NULL, **p_next = &head;
>  BlockBackend *blk;
> -BlockDriverState *bs;
>  
>  /* Just to be safe if query_nodes is not always initialized */
>  if (has_query_nodes && query_nodes) {
> -for (bs = bdrv_next_node(NULL); bs; bs = bdrv_next_node(bs)) {
> -BlockStatsList *info = g_malloc0(sizeof(*info));
> -AioContext *ctx = bdrv_get_aio_context(bs);
> -
> -aio_context_acquire(ctx);
> -info->value = bdrv_query_bds_stats(bs, false);
> -aio_context_release(ctx);
> -
> -*p_next = info;
> -p_next = &info->next;
> -}
> +error_setg(errp, "Option query_nodes is deprecated");

You don't only deprecate the option here, you completely disable it ...
that does not make too much sense IMHO. If it is really broken since
multiple releases already and nobody complained or tried to fix it so
far, I think it could be simply removed immediately. Otherwise, if it is
only partly broken, please leave it in the current state (if it is not
fixable), and only mark it as deprecated in the qemu-deprecated.texi and
block-core.json documentation.

>  } else {
>  for (blk = blk_all_next(NULL); blk; blk = blk_all_next(blk)) {
>  BlockStatsList *info;
> @@ -604,7 +592,7 @@ BlockStatsList *qmp_query_blockstats(bool has_query_nodes,
>  }
>  
>  aio_context_acquire(ctx);
> -s = bdrv_query_bds_stats(blk_bs(blk), true);
> +s = bdrv_query_bds_stats(blk_bs(blk));
>  s->has_device = true;
>  s->device = g_strdup(blk_name(blk));
>  
> diff --git a/qapi/block-core.json b/qapi/block-core.json
> index 91685be6c2..2dd5f6032c 100644
> --- a/qapi/block-core.json
> +++ b/qapi/block-core.json
> @@ -892,13 +892,7 @@
>  #
>  # Query the @BlockStats for all virtual block devices.
>  #
> -# @query-nodes: If true, the command will query all the block nodes
> -#   that have a node name, in a list which will include "parent"
> -#   information, but not "backing".
> -#   If false or omitted, the behavior is as before - query all 
> the
> -#   device backends, recursively including their "parent" and
> -#   "backing". Filter nodes that were created implicitly are
> -#   skipped over in this mode. (Since 2.3)
> +# @query-nodes: deprecated since 3.2
>  #
>  # Returns: A list of @BlockStats for each virtual block devices.
>  #
> diff --git a/qemu-deprecated.texi b/qemu-deprecated.texi
> index 219206a836..e1e04ced7d 100644
> --- a/qemu-deprecated.texi
> +++ b/qemu-deprecated.texi
> @@ -112,6 +112,11 @@ Use ``device_add'' for hotplugging vCPUs instead of 
> ``cpu-add''.  See
>  documentation of ``query-hotpluggable-cpus'' for additional
>  details.
>  
> +@subsection query-blockstats (since 3.2)
> +
> +"query-nodes" parameter is not supported anymore because blockstats
> +are not a prorerty of node.

s/prorerty/property/

>  @section Human Monitor Protocol (HMP) commands
>  
>  @subsection The hub_id parameter of 'hostfwd_add' / 'hostfwd_remove' (since 
> 3.1)
> 

 Thomas



Re: [Qemu-devel] [PATCH] qmp: Deprecate query-nodes option of query-blockstats

2019-01-28 Thread Kevin Wolf
Am 28.01.2019 um 16:15 hat Anton Kuchin geschrieben:
> This option is broken since a6baa60807 in v2.9 and returns mostly
> zeroes instead of real stats because actual querring of BlockStats
> that resides in blk is missing.
> 
> And it makes no sense because with this option BlockDriverState-s
> are iterated but BlockAcctStats belong to BlockBackend and not BDS
> since 7f0e9da6f13 in v2.5
> 
> Signed-off-by: Anton Kuchin 

Isn't query-nodes the only way to get wr_highest_offset for the protocol
layer? oVirt depends on this, as far as I know.

Kevin