qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [RFC V6 00/11] Quorum block filter.
@ 2013-01-17 15:51 Benoît Canet
  2013-01-17 15:51 ` [Qemu-devel] [RFC V6 01/11] quorum: Create quorum.c, add QuorumSingleAIOCB and QuorumAIOCB Benoît Canet
                   ` (10 more replies)
  0 siblings, 11 replies; 15+ messages in thread
From: Benoît Canet @ 2013-01-17 15:51 UTC (permalink / raw)
  To: qemu-devel; +Cc: kwolf, pbonzini, Benoît Canet, stefanha

Hello I am resuming the work on the quorum patchset.

This patchset create a block driver implementing a quorum using total qemu disk
images. Writes are mirrored on the $total files.
For the reading part the $total files are read at the same time and a vote is
done to determine if a qiov version is present $threshold or more times. It then
return this majority version to the upper layers.
When i < $threshold versions of the data are returned by the lower layer the
quorum is broken and the read return -EIO.

The goal of this patchset is to be turned in a QEMU block filter living just
above raw-*.c and below qcow2/qed when the required infrastructure will be done.

Main use of this feature will be people using NFS appliances which can be
subjected to bitflip errors.

This patchset can be used to replace blkverify and the out of tree blkmirror.

usage: -drive
file=quorum:threshold/total:image_1.raw:...:image_total.raw,if=virtio,cache=none


since latest RFC:
    fix commit message of "quorum: Add quorum_open() and quorum_close()." [Eric]
    return error after a vote in quorum_co_flush [Eric]
    Fix bitrot caused by headers and structures renaming [Benoît]
    initialize finished to NULL to prevent crash [Benoît]
    convert internal quorum code to uint64_t instead of int64_t [Benoît]

V5:

Eric Blake: revert back separator to ":"
            rewrite quorum_getlength

Benoît Canet: use memcmp to compare iovec excepted for the blkverify case
              use strstart to parse argument in open

Benoît Canet (11):
  quorum: Create quorum.c, add QuorumSingleAIOCB and QuorumAIOCB.
  quorum: Create BDRVQuorumState and BlkDriver and do init.
  quorum: Add quorum_open() and quorum_close().
  quorum: Add quorum_aio_writev and its dependencies.
  blkverify: Extract qemu_iovec_clone() and qemu_iovec_compare() from
    blkverify.
  quorum: Add quorum_aio_readv.
  quorum: Add quorum mechanism.
  quorum: Add quorum_getlength().
  quorum: Add quorum_invalidate_cache().
  quorum: Add quorum_co_is_allocated.
  quorum: Add quorum_co_flush().

 block/Makefile.objs   |    1 +
 block/blkverify.c     |  108 +-------
 block/quorum.c        |  707 +++++++++++++++++++++++++++++++++++++++++++++++++
 include/qemu-common.h |    2 +
 iov.c                 |  103 +++++++
 5 files changed, 815 insertions(+), 106 deletions(-)
 create mode 100644 block/quorum.c

-- 
1.7.10.4

^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2013-01-18 15:18 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-01-17 15:51 [Qemu-devel] [RFC V6 00/11] Quorum block filter Benoît Canet
2013-01-17 15:51 ` [Qemu-devel] [RFC V6 01/11] quorum: Create quorum.c, add QuorumSingleAIOCB and QuorumAIOCB Benoît Canet
2013-01-17 15:51 ` [Qemu-devel] [RFC V6 02/11] quorum: Create BDRVQuorumState and BlkDriver and do init Benoît Canet
2013-01-17 15:51 ` [Qemu-devel] [RFC V6 03/11] quorum: Add quorum_open() and quorum_close() Benoît Canet
2013-01-17 22:13   ` Eric Blake
2013-01-17 15:51 ` [Qemu-devel] [RFC V6 04/11] quorum: Add quorum_aio_writev and its dependencies Benoît Canet
2013-01-17 15:51 ` [Qemu-devel] [RFC V6 05/11] blkverify: Extract qemu_iovec_clone() and qemu_iovec_compare() from blkverify Benoît Canet
2013-01-17 15:51 ` [Qemu-devel] [RFC V6 06/11] quorum: Add quorum_aio_readv Benoît Canet
2013-01-17 15:51 ` [Qemu-devel] [RFC V6 07/11] quorum: Add quorum mechanism Benoît Canet
2013-01-17 22:23   ` Eric Blake
2013-01-18 15:19     ` Benoît Canet
2013-01-17 15:51 ` [Qemu-devel] [RFC V6 08/11] quorum: Add quorum_getlength() Benoît Canet
2013-01-17 15:51 ` [Qemu-devel] [RFC V6 09/11] quorum: Add quorum_invalidate_cache() Benoît Canet
2013-01-17 15:51 ` [Qemu-devel] [RFC V6 10/11] quorum: Add quorum_co_is_allocated Benoît Canet
2013-01-17 15:51 ` [Qemu-devel] [RFC V6 11/11] quorum: Add quorum_co_flush() Benoît Canet

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).