qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Kevin Wolf <kwolf@redhat.com>
To: qemu-block@nongnu.org
Cc: kwolf@redhat.com, qemu-devel@nongnu.org, stefanha@redhat.com,
	mreitz@redhat.com
Subject: [PATCH v2 21/31] block/export: Add BLOCK_EXPORT_DELETED event
Date: Thu, 24 Sep 2020 17:27:07 +0200	[thread overview]
Message-ID: <20200924152717.287415-22-kwolf@redhat.com> (raw)
In-Reply-To: <20200924152717.287415-1-kwolf@redhat.com>

Clients may want to know when an export has finally disappeard
(block-export-del returns earlier than that in the general case), so add
a QAPI event for it.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
 qapi/block-export.json     | 12 ++++++++++++
 block/export/export.c      |  2 ++
 tests/qemu-iotests/140     |  9 ++++++++-
 tests/qemu-iotests/140.out |  2 +-
 tests/qemu-iotests/223.out |  4 ++++
 5 files changed, 27 insertions(+), 2 deletions(-)

diff --git a/qapi/block-export.json b/qapi/block-export.json
index 0ba4d84c97..3551c2e748 100644
--- a/qapi/block-export.json
+++ b/qapi/block-export.json
@@ -233,3 +233,15 @@
 ##
 { 'command': 'block-export-del',
   'data': { 'id': 'str', '*mode': 'BlockExportRemoveMode' } }
+
+##
+# @BLOCK_EXPORT_DELETED:
+#
+# Emitted when a block export is removed and its id can be reused.
+#
+# @id: Block export id.
+#
+# Since: 5.2
+##
+{ 'event': 'BLOCK_EXPORT_DELETED',
+  'data': { 'id': 'str' } }
diff --git a/block/export/export.c b/block/export/export.c
index d186beffe9..87940d5c40 100644
--- a/block/export/export.c
+++ b/block/export/export.c
@@ -19,6 +19,7 @@
 #include "block/nbd.h"
 #include "qapi/error.h"
 #include "qapi/qapi-commands-block-export.h"
+#include "qapi/qapi-events-block-export.h"
 #include "qemu/id.h"
 
 static const BlockExportDriver *blk_exp_drivers[] = {
@@ -113,6 +114,7 @@ static void blk_exp_delete_bh(void *opaque)
     assert(exp->refcount == 0);
     QLIST_REMOVE(exp, next);
     exp->drv->delete(exp);
+    qapi_event_send_block_export_deleted(exp->id);
     g_free(exp->id);
     g_free(exp);
 
diff --git a/tests/qemu-iotests/140 b/tests/qemu-iotests/140
index 8d2ce5d9e3..309b177e77 100755
--- a/tests/qemu-iotests/140
+++ b/tests/qemu-iotests/140
@@ -81,10 +81,17 @@ $QEMU_IO_PROG -f raw -r -c 'read -P 42 0 64k' \
     "nbd+unix:///drv?socket=$SOCK_DIR/nbd" 2>&1 \
     | _filter_qemu_io | _filter_nbd
 
+# The order of 'return' and the BLOCK_EXPORT_DELETED event is undefined. Just
+# wait until we've twice seen one of them. Filter the 'return' line out so that
+# the output is defined.
 _send_qemu_cmd $QEMU_HANDLE \
     "{ 'execute': 'eject',
        'arguments': { 'device': 'drv' }}" \
-    'return'
+    'return\|BLOCK_EXPORT_DELETED' |
+    grep -v 'return'
+
+_send_qemu_cmd $QEMU_HANDLE '' 'return\|BLOCK_EXPORT_DELETED' |
+    grep -v 'return'
 
 $QEMU_IO_PROG -f raw -r -c close \
     "nbd+unix:///drv?socket=$SOCK_DIR/nbd" 2>&1 \
diff --git a/tests/qemu-iotests/140.out b/tests/qemu-iotests/140.out
index 86b985da75..62d9c3ab3c 100644
--- a/tests/qemu-iotests/140.out
+++ b/tests/qemu-iotests/140.out
@@ -11,7 +11,7 @@ wrote 65536/65536 bytes at offset 0
 read 65536/65536 bytes at offset 0
 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 { 'execute': 'eject', 'arguments': { 'device': 'drv' }}
-{"return": {}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "BLOCK_EXPORT_DELETED", "data": {"id": "drv"}}
 qemu-io: can't open device nbd+unix:///drv?socket=SOCK_DIR/nbd: Requested export not available
 server reported: export 'drv' not present
 { 'execute': 'quit' }
diff --git a/tests/qemu-iotests/223.out b/tests/qemu-iotests/223.out
index 31ce9e6fe0..f6eac23f04 100644
--- a/tests/qemu-iotests/223.out
+++ b/tests/qemu-iotests/223.out
@@ -102,8 +102,10 @@ read 2097152/2097152 bytes at offset 2097152
 {"execute":"nbd-server-remove", "arguments":{"name":"n"}}
 {"return": {}}
 {"execute":"nbd-server-remove", "arguments":{"name":"n2"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "BLOCK_EXPORT_DELETED", "data": {"id": "n"}}
 {"return": {}}
 {"execute":"nbd-server-remove", "arguments":{"name":"n2"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "BLOCK_EXPORT_DELETED", "data": {"id": "n2"}}
 {"error": {"class": "GenericError", "desc": "Export 'n2' is not found"}}
 {"execute":"nbd-server-stop"}
 {"return": {}}
@@ -183,8 +185,10 @@ read 2097152/2097152 bytes at offset 2097152
 {"execute":"nbd-server-remove", "arguments":{"name":"n"}}
 {"return": {}}
 {"execute":"nbd-server-remove", "arguments":{"name":"n2"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "BLOCK_EXPORT_DELETED", "data": {"id": "n"}}
 {"return": {}}
 {"execute":"nbd-server-remove", "arguments":{"name":"n2"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": "BLOCK_EXPORT_DELETED", "data": {"id": "n2"}}
 {"error": {"class": "GenericError", "desc": "Export 'n2' is not found"}}
 {"execute":"nbd-server-stop"}
 {"return": {}}
-- 
2.25.4



  parent reply	other threads:[~2020-09-24 16:15 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-09-24 15:26 [PATCH v2 00/31] block/export: Add infrastructure and QAPI for block exports Kevin Wolf
2020-09-24 15:26 ` [PATCH v2 01/31] nbd: Remove unused nbd_export_get_blockdev() Kevin Wolf
2020-09-24 15:26 ` [PATCH v2 02/31] qapi: Create block-export module Kevin Wolf
2020-09-24 15:26 ` [PATCH v2 03/31] qapi: Rename BlockExport to BlockExportOptions Kevin Wolf
2020-09-24 15:26 ` [PATCH v2 04/31] block/export: Add BlockExport infrastructure and block-export-add Kevin Wolf
2020-09-25 13:18   ` Eric Blake
2020-09-24 15:26 ` [PATCH v2 05/31] qemu-storage-daemon: Use qmp_block_export_add() Kevin Wolf
2020-09-24 15:26 ` [PATCH v2 06/31] qemu-nbd: Use raw block driver for --offset Kevin Wolf
2020-09-24 15:26 ` [PATCH v2 07/31] block/export: Remove magic from block-export-add Kevin Wolf
2020-09-24 15:26 ` [PATCH v2 08/31] nbd: Add max-connections to nbd-server-start Kevin Wolf
2020-09-24 15:26 ` [PATCH v2 09/31] nbd: Add writethrough to block-export-add Kevin Wolf
2020-09-24 15:26 ` [PATCH v2 10/31] nbd: Remove NBDExport.close callback Kevin Wolf
2020-09-24 15:26 ` [PATCH v2 11/31] qemu-nbd: Use blk_exp_add() to create the export Kevin Wolf
2020-09-24 15:26 ` [PATCH v2 12/31] nbd/server: Simplify export shutdown Kevin Wolf
2020-09-24 15:26 ` [PATCH v2 13/31] block/export: Move refcount from NBDExport to BlockExport Kevin Wolf
2020-09-24 15:27 ` [PATCH v2 14/31] block/export: Move AioContext " Kevin Wolf
2020-09-24 15:27 ` [PATCH v2 15/31] block/export: Add node-name to BlockExportOptions Kevin Wolf
2020-09-24 15:27 ` [PATCH v2 16/31] block/export: Allocate BlockExport in blk_exp_add() Kevin Wolf
2020-09-24 15:27 ` [PATCH v2 17/31] block/export: Add blk_exp_close_all(_type) Kevin Wolf
2020-09-24 15:27 ` [PATCH v2 18/31] block/export: Add 'id' option to block-export-add Kevin Wolf
2020-09-24 15:27 ` [PATCH v2 19/31] block/export: Move strong user reference to block_exports Kevin Wolf
2020-09-24 15:27 ` [PATCH v2 20/31] block/export: Add block-export-del Kevin Wolf
2020-09-24 15:27 ` Kevin Wolf [this message]
2020-09-25 12:34   ` [PATCH v2 21/31] block/export: Add BLOCK_EXPORT_DELETED event Max Reitz
2020-09-24 15:27 ` [PATCH v2 22/31] block/export: Move blk to BlockExport Kevin Wolf
2020-09-24 15:27 ` [PATCH v2 23/31] block/export: Create BlockBackend in blk_exp_add() Kevin Wolf
2020-09-24 15:27 ` [PATCH v2 24/31] block/export: Add query-block-exports Kevin Wolf
2020-09-24 15:27 ` [PATCH v2 25/31] block/export: Move writable to BlockExportOptions Kevin Wolf
2020-09-24 15:27 ` [PATCH v2 26/31] nbd: Merge nbd_export_new() and nbd_export_create() Kevin Wolf
2020-09-25 12:42   ` Max Reitz
2020-09-24 15:27 ` [PATCH v2 27/31] nbd: Deprecate nbd-server-add/remove Kevin Wolf
2020-09-25 12:43   ` Max Reitz
2020-09-24 15:27 ` [PATCH v2 28/31] iotests: Factor out qemu_tool_pipe_and_status() Kevin Wolf
2020-09-25 12:48   ` Max Reitz
2020-09-24 15:27 ` [PATCH v2 29/31] iotests: Introduce qemu_nbd_list_log() Kevin Wolf
2020-09-25 12:55   ` Max Reitz
2020-09-24 15:27 ` [PATCH v2 30/31] iotests: Allow supported and unsupported formats at the same time Kevin Wolf
2020-09-25 12:59   ` Max Reitz
2020-09-24 15:27 ` [PATCH v2 31/31] iotests: Test block-export-* QMP interface Kevin Wolf
2020-09-25 13:02   ` Max Reitz
2020-09-24 17:21 ` [PATCH v2 00/31] block/export: Add infrastructure and QAPI for block exports no-reply
2020-09-25  8:45   ` Stefan Hajnoczi
2020-09-25  8:51 ` Stefan Hajnoczi
2020-09-28 15:29 ` Kevin Wolf

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=20200924152717.287415-22-kwolf@redhat.com \
    --to=kwolf@redhat.com \
    --cc=mreitz@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@redhat.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).