mbox series

[v4,0/7] copy-before-write: on-cbw-error and cbw-timeout

Message ID 20220407132726.85114-1-vsementsov@openvz.org
Headers show
Series copy-before-write: on-cbw-error and cbw-timeout | expand

Message

Vladimir Sementsov-Ogievskiy April 7, 2022, 1:27 p.m. UTC
Hi all!

v4: Now based on master
01: add assertion and r-b
02: s/7.0/7.1/ and r-b
03: switch to QEMUMachine, touch-up pylintrc,  drop r-b
04,05,06: add r-b
07: switch to QEMUMachine


Here are two new options for copy-before-write filter:

on-cbw-error allows to alter the behavior on copy-before-write operation
failure: not break guest write but break the snapshot (and therefore
backup process)

cbw-timeout allows to limit cbw operation by some timeout.

So, for example, using cbw-timeout=60 and on-cbw-error=break-snapshot
you can be sure that guest write will not stuck for more than 60
seconds and will never fail due to backup problems.

Vladimir Sementsov-Ogievskiy (7):
  block/copy-before-write: refactor option parsing
  block/copy-before-write: add on-cbw-error open parameter
  iotests: add copy-before-write: on-cbw-error tests
  util: add qemu-co-timeout
  block/block-copy: block_copy(): add timeout_ns parameter
  block/copy-before-write: implement cbw-timeout option
  iotests: copy-before-write: add cases for cbw-timeout option

 qapi/block-core.json                          |  31 ++-
 include/block/block-copy.h                    |   4 +-
 include/qemu/coroutine.h                      |  13 ++
 block/block-copy.c                            |  33 ++-
 block/copy-before-write.c                     | 111 ++++++---
 util/qemu-co-timeout.c                        |  89 ++++++++
 tests/qemu-iotests/pylintrc                   |   5 +
 tests/qemu-iotests/tests/copy-before-write    | 213 ++++++++++++++++++
 .../qemu-iotests/tests/copy-before-write.out  |   5 +
 util/meson.build                              |   1 +
 10 files changed, 466 insertions(+), 39 deletions(-)
 create mode 100644 util/qemu-co-timeout.c
 create mode 100755 tests/qemu-iotests/tests/copy-before-write
 create mode 100644 tests/qemu-iotests/tests/copy-before-write.out

Comments

Vladimir Sementsov-Ogievskiy May 26, 2022, 4:46 p.m. UTC | #1
On 4/7/22 16:27, Vladimir Sementsov-Ogievskiy wrote:
> Hi all!
> 
> v4: Now based on master
> 01: add assertion and r-b
> 02: s/7.0/7.1/ and r-b
> 03: switch to QEMUMachine, touch-up pylintrc,  drop r-b
> 04,05,06: add r-b
> 07: switch to QEMUMachine
> 
> 
> Here are two new options for copy-before-write filter:
> 
> on-cbw-error allows to alter the behavior on copy-before-write operation
> failure: not break guest write but break the snapshot (and therefore
> backup process)
> 
> cbw-timeout allows to limit cbw operation by some timeout.
> 
> So, for example, using cbw-timeout=60 and on-cbw-error=break-snapshot
> you can be sure that guest write will not stuck for more than 60
> seconds and will never fail due to backup problems.
> 
> Vladimir Sementsov-Ogievskiy (7):
>    block/copy-before-write: refactor option parsing
>    block/copy-before-write: add on-cbw-error open parameter
>    iotests: add copy-before-write: on-cbw-error tests
>    util: add qemu-co-timeout
>    block/block-copy: block_copy(): add timeout_ns parameter
>    block/copy-before-write: implement cbw-timeout option
>    iotests: copy-before-write: add cases for cbw-timeout option
> 
>   qapi/block-core.json                          |  31 ++-
>   include/block/block-copy.h                    |   4 +-
>   include/qemu/coroutine.h                      |  13 ++
>   block/block-copy.c                            |  33 ++-
>   block/copy-before-write.c                     | 111 ++++++---
>   util/qemu-co-timeout.c                        |  89 ++++++++
>   tests/qemu-iotests/pylintrc                   |   5 +
>   tests/qemu-iotests/tests/copy-before-write    | 213 ++++++++++++++++++
>   .../qemu-iotests/tests/copy-before-write.out  |   5 +
>   util/meson.build                              |   1 +
>   10 files changed, 466 insertions(+), 39 deletions(-)
>   create mode 100644 util/qemu-co-timeout.c
>   create mode 100755 tests/qemu-iotests/tests/copy-before-write
>   create mode 100644 tests/qemu-iotests/tests/copy-before-write.out
> 

Thanks for review, applied to my new block branch at https://gitlab.com/vsementsov/qemu.git
Vladimir Sementsov-Ogievskiy May 26, 2022, 6:51 p.m. UTC | #2
On 5/26/22 19:46, Vladimir Sementsov-Ogievskiy wrote:
> On 4/7/22 16:27, Vladimir Sementsov-Ogievskiy wrote:
>> Hi all!
>>
>> v4: Now based on master
>> 01: add assertion and r-b
>> 02: s/7.0/7.1/ and r-b
>> 03: switch to QEMUMachine, touch-up pylintrc,  drop r-b
>> 04,05,06: add r-b
>> 07: switch to QEMUMachine
>>
>>
>> Here are two new options for copy-before-write filter:
>>
>> on-cbw-error allows to alter the behavior on copy-before-write operation
>> failure: not break guest write but break the snapshot (and therefore
>> backup process)
>>
>> cbw-timeout allows to limit cbw operation by some timeout.
>>
>> So, for example, using cbw-timeout=60 and on-cbw-error=break-snapshot
>> you can be sure that guest write will not stuck for more than 60
>> seconds and will never fail due to backup problems.
>>
>> Vladimir Sementsov-Ogievskiy (7):
>>    block/copy-before-write: refactor option parsing
>>    block/copy-before-write: add on-cbw-error open parameter
>>    iotests: add copy-before-write: on-cbw-error tests
>>    util: add qemu-co-timeout
>>    block/block-copy: block_copy(): add timeout_ns parameter
>>    block/copy-before-write: implement cbw-timeout option
>>    iotests: copy-before-write: add cases for cbw-timeout option
>>
>>   qapi/block-core.json                          |  31 ++-
>>   include/block/block-copy.h                    |   4 +-
>>   include/qemu/coroutine.h                      |  13 ++
>>   block/block-copy.c                            |  33 ++-
>>   block/copy-before-write.c                     | 111 ++++++---
>>   util/qemu-co-timeout.c                        |  89 ++++++++
>>   tests/qemu-iotests/pylintrc                   |   5 +
>>   tests/qemu-iotests/tests/copy-before-write    | 213 ++++++++++++++++++
>>   .../qemu-iotests/tests/copy-before-write.out  |   5 +
>>   util/meson.build                              |   1 +
>>   10 files changed, 466 insertions(+), 39 deletions(-)
>>   create mode 100644 util/qemu-co-timeout.c
>>   create mode 100755 tests/qemu-iotests/tests/copy-before-write
>>   create mode 100644 tests/qemu-iotests/tests/copy-before-write.out
>>
> 
> Thanks for review, applied to my new block branch at https://gitlab.com/vsementsov/qemu.git
> 

Or not. I still need an acc for QAPI interface (Eric or Markus could you please look?).

Also, may be I should rename qemu-co-timeout.c to qemu-coroutine-timeout.c, to match "F: util/*coroutine*" in MAINTAINERS.. Stefan, Kevin, could you please look at it?
Vladimir Sementsov-Ogievskiy June 9, 2022, 3:15 p.m. UTC | #3
On 5/26/22 21:51, Vladimir Sementsov-Ogievskiy wrote:
> On 5/26/22 19:46, Vladimir Sementsov-Ogievskiy wrote:
>> On 4/7/22 16:27, Vladimir Sementsov-Ogievskiy wrote:
>>> Hi all!
>>>
>>> v4: Now based on master
>>> 01: add assertion and r-b
>>> 02: s/7.0/7.1/ and r-b
>>> 03: switch to QEMUMachine, touch-up pylintrc,  drop r-b
>>> 04,05,06: add r-b
>>> 07: switch to QEMUMachine
>>>
>>>
>>> Here are two new options for copy-before-write filter:
>>>
>>> on-cbw-error allows to alter the behavior on copy-before-write operation
>>> failure: not break guest write but break the snapshot (and therefore
>>> backup process)
>>>
>>> cbw-timeout allows to limit cbw operation by some timeout.
>>>
>>> So, for example, using cbw-timeout=60 and on-cbw-error=break-snapshot
>>> you can be sure that guest write will not stuck for more than 60
>>> seconds and will never fail due to backup problems.
>>>
>>> Vladimir Sementsov-Ogievskiy (7):
>>>    block/copy-before-write: refactor option parsing
>>>    block/copy-before-write: add on-cbw-error open parameter
>>>    iotests: add copy-before-write: on-cbw-error tests
>>>    util: add qemu-co-timeout
>>>    block/block-copy: block_copy(): add timeout_ns parameter
>>>    block/copy-before-write: implement cbw-timeout option
>>>    iotests: copy-before-write: add cases for cbw-timeout option
>>>
>>>   qapi/block-core.json                          |  31 ++-
>>>   include/block/block-copy.h                    |   4 +-
>>>   include/qemu/coroutine.h                      |  13 ++
>>>   block/block-copy.c                            |  33 ++-
>>>   block/copy-before-write.c                     | 111 ++++++---
>>>   util/qemu-co-timeout.c                        |  89 ++++++++
>>>   tests/qemu-iotests/pylintrc                   |   5 +
>>>   tests/qemu-iotests/tests/copy-before-write    | 213 ++++++++++++++++++
>>>   .../qemu-iotests/tests/copy-before-write.out  |   5 +
>>>   util/meson.build                              |   1 +
>>>   10 files changed, 466 insertions(+), 39 deletions(-)
>>>   create mode 100644 util/qemu-co-timeout.c
>>>   create mode 100755 tests/qemu-iotests/tests/copy-before-write
>>>   create mode 100644 tests/qemu-iotests/tests/copy-before-write.out
>>>
>>
>> Thanks for review, applied to my new block branch at https://gitlab.com/vsementsov/qemu.git
>>
> 
> Or not. I still need an acc for QAPI interface (Eric or Markus could you please look?).
> 
> Also, may be I should rename qemu-co-timeout.c to qemu-coroutine-timeout.c, to match "F: util/*coroutine*" in MAINTAINERS.. Stefan, Kevin, could you please look at it?
> 
> 

OK, I think, I can stage it, if no more comments. API changes are quite usual and new qemu_co_timeout is isolated. Applied to my block branch https://gitlab.com/vsementsov/qemu/-/commits/block

I think, I'll prepare a pull request on Monday, and include also my "[PATCH] MAINTAINERS: update Vladimir's address and repositories" if Stefan don't send it earlier.