All of lore.kernel.org
 help / color / mirror / Atom feed
From: Markus Armbruster <armbru@redhat.com>
To: Guillaume Vincke <guillaume.vincke@ovhcloud.com>
Cc: <qemu-devel@nongnu.org>,  <qemu-block@nongnu.org>,
	 <eblake@redhat.com>, <vsementsov@yandex-team.ru>,
	 <kwolf@redhat.com>,  <hreitz@redhat.com>
Subject: Re: [PATCH 1/2] nbd: Add an unstable query for the client state
Date: Tue, 10 Nov 2026 13:53:07 +0100	[thread overview]
Message-ID: <87v764yhjg.fsf@pond.sub.org> (raw)
In-Reply-To: <20261109160609.1434289-2-guillaume.vincke@ovhcloud.com> (Guillaume Vincke's message of "Mon, 9 Nov 2026 17:06:08 +0100")

Guillaume Vincke <guillaume.vincke@ovhcloud.com> writes:

> At the moment, NBD client internals cannot be accessed. Therefore,
> tests have to infer the client state from I/O results and wait with
> sleeps, which is racy.
>
> Add the x-debug-query-nbd-client QMP command that reports the state of
> the client's connection and of its connector. Other fields will be
> added when needed.
>
> The next patch uses this command to make the nbd-stale-connection test
> deterministic.
>
> Signed-off-by: Guillaume Vincke <guillaume.vincke@ovhcloud.com>

[...]

> diff --git a/qapi/block-core.json b/qapi/block-core.json
> index 23c5787d99..973be06dfd 100644
> --- a/qapi/block-core.json
> +++ b/qapi/block-core.json

Why block-core.json and not block-export.json?

> @@ -2217,6 +2217,85 @@
>    'features': [ 'unstable' ],
>    'allow-preconfig': true }
>  
> +##
> +# @XDbgNbdClientState:
> +#     Enum of NBD client state.

"An enumeration of NBD client states" for consistency with enum
descriptions elsewhere.  Or maybe simply "NBD client state".

> +#
> +# @connecting-wait: No active connection.  A request waits for the
> +#     connection attempt to finish, while reconnect-delay has not
> +#     expired.
> +#
> +# @connecting-nowait: No active connection.  A request fails at once
> +#     if no channel is ready.
> +#
> +# @connected: Client has a valid connection.

Double-checking: when we're in this state, there is a client connected.
Correct?

> +#
> +# @quit: Client will not reconnect.

What does this one mean exactly?

> +#
> +# Since: 11.2

Making 11.2 seems unlikely.

> +##
> +{ 'enum': 'XDbgNbdClientState',
> +  'data': [ 'connecting-wait', 'connecting-nowait', 'connected', 'quit' ] }
> +
> +##
> +# @XDbgNbdClientConnectorState:
> +#     Enum of NBD client connector state.

Again, "Enumeration of ... states".

> +#
> +# @running: Connection attempt is in progress.
> +#
> +# @parked: Connection was successful and channel is kept for the next
> +#     request.
> +#
> +# Since: 11.2
> +##
> +{ 'enum': 'XDbgNbdClientConnectorState',
> +  'data': [ 'running', 'parked' ] }
> +
> +##
> +# @XDbgNbdClientConnector:
> +#     The NBD connector information.
> +#
> +# @state: State of the connector.
> +#
> +# Since: 11.2
> +##
> +{ 'struct': 'XDbgNbdClientConnector',
> +  'data': { 'state': 'XDbgNbdClientConnectorState' } }
> +
> +##
> +# @XDbgNbdClient:
> +#     The NBD connection state of the client and its connector.
> +#     The two members are read independently and may not reflect a
> +#     single point in time.

That's unfortunate.  It'll do for debugging.  Could it create robustness
issues in tests?

> +#
> +# @state: The client state.
> +#
> +# @connector: The connector details.  Only present while a connection
> +#     attempt is running or its channel is parked.
> +#
> +# Since: 11.2
> +##
> +{ 'struct': 'XDbgNbdClient',
> +  'data': { 'state': 'XDbgNbdClientState',
> +            '*connector': 'XDbgNbdClientConnector' } }

How the combined state machine works is not clear to me.  Is it
documented anywhere?

> +
> +##
> +# @x-debug-query-nbd-client:
> +#     Get the NBD client state.
> +#
> +# @node-name: node name of the NBD client to query.

How would I find the valid node names?  query-block-exports?

> +#
> +# Features:
> +#
> +# @unstable: This command is meant for debugging and testing.
> +#
> +# Since: 11.2
> +##
> +{ 'command': 'x-debug-query-nbd-client',
> +  'data': { 'node-name': 'str' },
> +  'returns': 'XDbgNbdClient',
> +  'features': [ 'unstable' ] }
> +
>  ##
>  # @drive-mirror:
>  #     Start mirroring a block device's writes to a new destination.



  reply	other threads:[~2026-11-10 12:54 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-11-09 16:06 [PATCH 0/2] nbd: Add an unstable query for the client state Guillaume Vincke
2026-11-09 16:06 ` [PATCH 1/2] " Guillaume Vincke
2026-11-10 12:53   ` Markus Armbruster [this message]
2026-11-10 15:07     ` guillaume vincke
2026-11-10 15:51       ` Eric Blake
2026-11-11 14:22       ` Markus Armbruster
2026-11-12 17:27         ` guillaume vincke
2026-11-09 16:06 ` [PATCH 2/2] iotests: Make nbd-stale-connection test deterministic Guillaume Vincke

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87v764yhjg.fsf@pond.sub.org \
    --to=armbru@redhat.com \
    --cc=eblake@redhat.com \
    --cc=guillaume.vincke@ovhcloud.com \
    --cc=hreitz@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=vsementsov@yandex-team.ru \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.