Message ID | 20200907182011.521007-22-kwolf@redhat.com |
---|---|
State | New |
Headers | show |
Series | block/export: Add infrastructure and QAPI for block exports | expand |
On 07.09.20 20:20, Kevin Wolf wrote: > 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.out | 1 + > tests/qemu-iotests/223.out | 4 ++++ > 4 files changed, 19 insertions(+) Reviewed-by: Max Reitz <mreitz@redhat.com>
On 07.09.20 20:20, Kevin Wolf wrote: > 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.out | 1 + > tests/qemu-iotests/223.out | 4 ++++ > 4 files changed, 19 insertions(+) It appears I had started a reply and for overlooked it when I gave my R-b: > diff --git a/qapi/block-export.json b/qapi/block-export.json > index 77a6b595e8..dac3250f08 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 it's id can be reused. *its Max
On 07.09.20 20:20, Kevin Wolf wrote: > 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.out | 1 + > tests/qemu-iotests/223.out | 4 ++++ > 4 files changed, 19 insertions(+) > > diff --git a/qapi/block-export.json b/qapi/block-export.json > index 77a6b595e8..dac3250f08 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 it's 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 4af3b69186..ae7879e6a9 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.out b/tests/qemu-iotests/140.out > index 86b985da75..f1db409b26 100644 > --- a/tests/qemu-iotests/140.out > +++ b/tests/qemu-iotests/140.out > @@ -15,6 +15,7 @@ read 65536/65536 bytes at offset 0 > 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' } > +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_EXPORT_DELETED", "data": {"id": "drv"}} > {"return": {}} > {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}} > *** done With -qed, this event appears immediately when the drive is ejected, so this test now fails (for qed). I’m not sure whether there’s much of a point in fixing it or just marking qed as unsupported. Max
diff --git a/qapi/block-export.json b/qapi/block-export.json index 77a6b595e8..dac3250f08 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 it's 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 4af3b69186..ae7879e6a9 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.out b/tests/qemu-iotests/140.out index 86b985da75..f1db409b26 100644 --- a/tests/qemu-iotests/140.out +++ b/tests/qemu-iotests/140.out @@ -15,6 +15,7 @@ read 65536/65536 bytes at offset 0 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' } +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_EXPORT_DELETED", "data": {"id": "drv"}} {"return": {}} {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}} *** done 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": {}}
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.out | 1 + tests/qemu-iotests/223.out | 4 ++++ 4 files changed, 19 insertions(+)