ping 11.04.2019 20:27, Vladimir Sementsov-Ogievskiy wrote: > 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 >
-- Best regards, Vladimir