[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 4/5] pr-manager: add query-pr-managers QMP comma
From: |
Michal Privoznik |
Subject: |
Re: [Qemu-devel] [PATCH 4/5] pr-manager: add query-pr-managers QMP command |
Date: |
Tue, 26 Jun 2018 18:31:16 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.8.0 |
On 06/26/2018 05:40 PM, Paolo Bonzini wrote:
> This command lets you query the connection status of each pr-manager-helper
> object.
>
> Signed-off-by: Paolo Bonzini <address@hidden>
> ---
> include/scsi/pr-manager.h | 2 ++
> qapi/block.json | 27 +++++++++++++++++++++++
> scsi/pr-manager-helper.c | 13 +++++++++++
> scsi/pr-manager.c | 45 +++++++++++++++++++++++++++++++++++++++
> 4 files changed, 87 insertions(+)
>
> diff --git a/include/scsi/pr-manager.h b/include/scsi/pr-manager.h
> index 5d2f13a5e4..adadca7954 100644
> --- a/include/scsi/pr-manager.h
> +++ b/include/scsi/pr-manager.h
> @@ -33,8 +33,10 @@ typedef struct PRManagerClass {
>
> /* <public> */
> int (*run)(PRManager *pr_mgr, int fd, struct sg_io_hdr *hdr);
> + bool (*is_connected)(PRManager *pr_mgr);
> } PRManagerClass;
>
> +bool pr_manager_is_connected(PRManager *pr_mgr);
> BlockAIOCB *pr_manager_execute(PRManager *pr_mgr,
> AioContext *ctx, int fd,
> struct sg_io_hdr *hdr,
> diff --git a/qapi/block.json b/qapi/block.json
> index c694524002..dc3323c954 100644
> --- a/qapi/block.json
> +++ b/qapi/block.json
> @@ -77,6 +77,33 @@
> { 'struct': 'BlockdevSnapshotInternal',
> 'data': { 'device': 'str', 'name': 'str' } }
>
> +##
> +# @PRManagerInfo:
> +#
> +# Information about a persistent reservation manager
> +#
> +# @id: the identifier of the persistent reservation manager
> +#
> +# @is-connected: whether the persistent reservation manager is connected to
> +# the underlying storage or helper
> +#
> +# Since: 3.0
> +##
> +{ 'struct': 'PRManagerInfo',
> + 'data': {'id': 'str', 'is-connected': 'bool'} }
> +
> +##
> +# @query-pr-managers:
> +#
> +# Returns a list of information about each persistent reservation manager.
> +#
> +# Returns: a list of @PRManagerInfo for each persistent reservation manager
> +#
> +# Since: 3.0
> +##
> +{ 'command': 'query-pr-managers', 'returns': ['PRManagerInfo'] }
> +
> +
> ##
> # @blockdev-snapshot-internal-sync:
> #
> diff --git a/scsi/pr-manager-helper.c b/scsi/pr-manager-helper.c
> index 0c0fe389b7..b11481be9e 100644
> --- a/scsi/pr-manager-helper.c
> +++ b/scsi/pr-manager-helper.c
> @@ -235,6 +235,18 @@ out:
> return ret;
> }
>
> +static bool pr_manager_helper_is_connected(PRManager *p)
> +{
> + PRManagerHelper *pr_mgr = PR_MANAGER_HELPER(p);
> + bool result;
> +
> + qemu_mutex_lock(&pr_mgr->lock);
> + result = (pr_mgr->ioc != NULL);
I worry it is not that easy. pr_mgr->ioc is unset only when there's
PR_IN/PR_OUT command coming from the guest (in pr_manager_helper_run ->
pr_manager_helper_write). In fact, after 5/5 that is also the time when
the event is delivered. But that might be too late for mgmt app to
restart the helper process (although pr_manager_helper_run() tries to
reconnect for 5 seconds before giving up).
The patch is good code-wise though.
Michal
[Qemu-devel] [PATCH 2/5] pr-helper: fix assertion failure on failed multipath PERSISTENT RESERVE IN, Paolo Bonzini, 2018/06/26
[Qemu-devel] [PATCH 5/5] pr-manager-helper: report event on connection/disconnection, Paolo Bonzini, 2018/06/26