block/export: Add BLOCK_EXPORT_DELETED event
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> Message-Id: <20200924152717.287415-22-kwolf@redhat.com> Acked-by: Stefan Hajnoczi <stefanha@redhat.com> Reviewed-by: Max Reitz <mreitz@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
3c3bc462ad
commit
1a9f7a804f
@ -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);
|
||||
|
||||
|
@ -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' } }
|
||||
|
@ -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 \
|
||||
|
@ -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' }
|
||||
|
@ -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": {}}
|
||||
|
Loading…
Reference in New Issue
Block a user