[Qemu-devel] [PATCH v6 0/7] NBD reconnect

Vladimir Sementsov-Ogievskiy posted 7 patches 6 years, 7 months ago
Failed in applying to current master (apply log)
Test docker-mingw@fedora passed
Test docker-clang@ubuntu passed
Test checkpatch passed
Test asan passed
There is a newer version of this series
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
[Qemu-devel] [PATCH v6 0/7] NBD reconnect
Posted by Vladimir Sementsov-Ogievskiy 6 years, 7 months ago
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


Re: [Qemu-devel] [PATCH v6 0/7] NBD reconnect
Posted by Vladimir Sementsov-Ogievskiy 6 years, 6 months ago
Ping

Best regards,
Vladimir
[Qemu-devel] ping Re: [PATCH v6 0/7] NBD reconnect
Posted by Vladimir Sementsov-Ogievskiy 6 years, 5 months ago
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
[Qemu-devel] ping Re: [PATCH v6 0/7] NBD reconnect
Posted by Vladimir Sementsov-Ogievskiy 6 years, 5 months ago
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