Here is NBD reconnect. Previously, if connection failed all current and future requests will fail. After the series, nbd-client driver will try to reconnect unlimited times. During first @reconnect-delay seconds of reconnecting all requests will wait for the connection, and if it is established requests will be resent. After @reconnect-delay period all requests will be failed (until successful reconnect).
v4->v6: (some preparing patches from v4 was merged as v5) 01: new 02: new 03: - drop unused things - future states - future s/break/continue/ 04: - fix typos - s/3.1/4.1/ - set 0 as default 05: new 06: - new states and s/break/continue/ moved here from 03 - drop NBDClientSession.receiving, as now in_flight requests used instread - add copyright - go to NBD_CLIENT_CONNECTING_NOWAIT immediately if reconnect_delay is 0 (so, reconnect_delay moved to NBDClientSession) - on close, do qemu_co_sleep_wake(client->connection_co), to not wait for reconnect loop iteration - handle state transition to QUIT during reconnect loop (assert(nbd_client_connecting(s)) was bad idea) - don't try to fail on protocol errors after nbd_client_connect, as we can't distinguish them - decrement in_flight around reconnect sleep to make it possible to drain and exit during it (v4 was based on something before in_flight logic introduced into nbd-client) - changed logic in nbd_client_attach_aio_context 07: - refactor, using log and qmp_log - drop export name - drop strange try/except - add reconnect-delay option (as 0 is a default now) Vladimir Sementsov-Ogievskiy (7): block/nbd-client: split connection_co start out of nbd_client_connect block/nbd-client: use non-blocking io channel for nbd negotiation block/nbd-client: move from quit to state block/nbd: add cmdline and qapi parameter reconnect-delay qemu-coroutine-sleep: introduce qemu_co_sleep_wake block/nbd-client: nbd reconnect iotests: test nbd reconnect qapi/block-core.json | 12 +- block/nbd-client.h | 15 +- include/block/nbd.h | 3 +- include/qemu/coroutine.h | 6 + block/nbd-client.c | 416 +++++++++++++++++++++++++--------- block/nbd.c | 16 +- nbd/client.c | 16 +- qemu-nbd.c | 2 +- util/qemu-coroutine-sleep.c | 20 +- tests/qemu-iotests/249 | 63 +++++ tests/qemu-iotests/249.out | 10 + tests/qemu-iotests/group | 1 + tests/qemu-iotests/iotests.py | 4 + 13 files changed, 468 insertions(+), 116 deletions(-) create mode 100755 tests/qemu-iotests/249 create mode 100644 tests/qemu-iotests/249.out -- 2.18.0