Re: [Qemu-devel] [PATCH V9 00/11] Quorum block driver

2013-10-29 Thread Benoît Canet
Le Friday 04 Oct 2013 à 16:31:56 (+0200), Max Reitz a écrit :
 On 2013-10-02 14:39, Benoît Canet wrote:
 It must be applied on top of block: Add 
 BlockDriver.bdrv_check_ext_snapshot.
 
 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.
 
 v9: integrate latests comments from kevin
 
 Benoît Canet (11):
quorum: Create quorum.c, add QuorumSingleAIOCB and QuorumAIOCB.
quorum: Create BDRVQuorumState and BlkDriver and do init.
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_get_block_status.
quorum: Add quorum_co_flush().
quorum: Add quorum_open() and quorum_close().
 
   block/Makefile.objs   |1 +
   block/blkverify.c |  108 +
   block/quorum.c| 1035 
  +
   configure |   36 ++
   include/monitor/monitor.h |2 +
   include/qemu-common.h |2 +
   monitor.c |2 +
   util/iov.c|  103 +
   8 files changed, 1183 insertions(+), 106 deletions(-)
   create mode 100644 block/quorum.c
 
 
 Could you add a qemu-iotest if possible?

I don't see how to specify quorum to qemu-io for bytes checking.

Best regards

Benoît

 
 Max
 



Re: [Qemu-devel] [PATCH V9 00/11] Quorum block driver

2013-10-29 Thread Max Reitz
Am 29.10.2013 08:59, schrieb Benoît Canet:
 Le Friday 04 Oct 2013 à 16:31:56 (+0200), Max Reitz a écrit :
 On 2013-10-02 14:39, Benoît Canet wrote:
 It must be applied on top of block: Add 
 BlockDriver.bdrv_check_ext_snapshot.

 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.

 v9: integrate latests comments from kevin

 Benoît Canet (11):
   quorum: Create quorum.c, add QuorumSingleAIOCB and QuorumAIOCB.
   quorum: Create BDRVQuorumState and BlkDriver and do init.
   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_get_block_status.
   quorum: Add quorum_co_flush().
   quorum: Add quorum_open() and quorum_close().

  block/Makefile.objs   |1 +
  block/blkverify.c |  108 +
  block/quorum.c| 1035 
 +
  configure |   36 ++
  include/monitor/monitor.h |2 +
  include/qemu-common.h |2 +
  monitor.c |2 +
  util/iov.c|  103 +
  8 files changed, 1183 insertions(+), 106 deletions(-)
  create mode 100644 block/quorum.c

 Could you add a qemu-iotest if possible?
 I don't see how to specify quorum to qemu-io for bytes checking.

 Best regards

 Benoît

As of commit b543c5cd, you can pass options to the block driver through
qemu-io -c open. The problem for quorum is that it cannot handle the
filename option (which qemu-io will always set). I've attached a diff to
change this behavior (which makes the path parameter for open optional
and passes NULL to bdrv_open if it is not given). You're free to make
use of it. ;-)

If this diff is applied, you can invoke qemu-io with quorum for example
as following:
qemu-io -c 'open -o
file.driver=quorum,file.children.0.file.filename=[Image
1],file.children.1.file.filename=[Image 2],file.vote_threshold=[x]'

Max



Re: [Qemu-devel] [PATCH V9 00/11] Quorum block driver

2013-10-29 Thread Max Reitz
Am 29.10.2013 18:55, schrieb Max Reitz:
 Am 29.10.2013 08:59, schrieb Benoît Canet:
 Le Friday 04 Oct 2013 à 16:31:56 (+0200), Max Reitz a écrit :
 On 2013-10-02 14:39, Benoît Canet wrote:
 It must be applied on top of block: Add 
 BlockDriver.bdrv_check_ext_snapshot.

 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.

 v9: integrate latests comments from kevin

 Benoît Canet (11):
   quorum: Create quorum.c, add QuorumSingleAIOCB and QuorumAIOCB.
   quorum: Create BDRVQuorumState and BlkDriver and do init.
   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_get_block_status.
   quorum: Add quorum_co_flush().
   quorum: Add quorum_open() and quorum_close().

  block/Makefile.objs   |1 +
  block/blkverify.c |  108 +
  block/quorum.c| 1035 
 +
  configure |   36 ++
  include/monitor/monitor.h |2 +
  include/qemu-common.h |2 +
  monitor.c |2 +
  util/iov.c|  103 +
  8 files changed, 1183 insertions(+), 106 deletions(-)
  create mode 100644 block/quorum.c

 Could you add a qemu-iotest if possible?
 I don't see how to specify quorum to qemu-io for bytes checking.

 Best regards

 Benoît
 As of commit b543c5cd, you can pass options to the block driver through
 qemu-io -c open. The problem for quorum is that it cannot handle the
 filename option (which qemu-io will always set). I've attached a diff to
 change this behavior (which makes the path parameter for open optional
 and passes NULL to bdrv_open if it is not given). You're free to make
 use of it. ;-)

 If this diff is applied, you can invoke qemu-io with quorum for example
 as following:
 qemu-io -c 'open -o
 file.driver=quorum,file.children.0.file.filename=[Image
 1],file.children.1.file.filename=[Image 2],file.vote_threshold=[x]'

 Max

Obviously forgot to attach the diff.

Max
diff --git a/qemu-io.c b/qemu-io.c
index 3b3340a..4d0e9f6 100644
--- a/qemu-io.c
+++ b/qemu-io.c
@@ -57,8 +57,13 @@ static int openfile(char *name, int flags, int growable, 
QDict *opts)
 
 if (growable) {
 if (bdrv_file_open(qemuio_bs, name, opts, flags, local_err)) {
-fprintf(stderr, %s: can't open device %s: %s\n, progname, name,
-error_get_pretty(local_err));
+if (name) {
+fprintf(stderr, %s: can't open device %s: %s\n, progname,
+name, error_get_pretty(local_err));
+} else {
+fprintf(stderr, %s: can't open device: %s\n, progname,
+error_get_pretty(local_err));
+}
 error_free(local_err);
 return 1;
 }
@@ -66,8 +71,13 @@ static int openfile(char *name, int flags, int growable, 
QDict *opts)
 qemuio_bs = bdrv_new(hda);
 
 if (bdrv_open(qemuio_bs, name, opts, flags, NULL, local_err)  0) {
-fprintf(stderr, %s: can't open device %s: %s\n, progname, name,
-error_get_pretty(local_err));
+if (name) {
+fprintf(stderr, %s: can't open device %s: %s\n, progname,
+name, error_get_pretty(local_err));
+} else {
+fprintf(stderr, %s: can't open device: %s\n, progname,
+error_get_pretty(local_err));
+}
 error_free(local_err);
 bdrv_unref(qemuio_bs);
 qemuio_bs = NULL;
@@ -127,6 +137,7 @@ static int open_f(BlockDriverState *bs, int argc, char 
**argv)
 int c;
 QemuOpts *qopts;
 QDict *opts = NULL;
+char *filename = NULL;
 
 while ((c = getopt(argc, argv, snrgo:)) != EOF) {
 switch (c) {
@@ -160,11 +171,13 @@ static int open_f(BlockDriverState *bs, int argc, char 
**argv)
 flags |= BDRV_O_RDWR;
 }
 
-if (optind != argc - 1) {
+if (optind == argc - 1) {
+filename = argv[optind];
+} else if (optind  

Re: [Qemu-devel] [PATCH V9 00/11] Quorum block driver

2013-10-29 Thread Benoît Canet
Le Tuesday 29 Oct 2013 à 18:56:34 (+0100), Max Reitz a écrit :
 Am 29.10.2013 18:55, schrieb Max Reitz:
  Am 29.10.2013 08:59, schrieb Benoît Canet:
  Le Friday 04 Oct 2013 à 16:31:56 (+0200), Max Reitz a écrit :
  On 2013-10-02 14:39, Benoît Canet wrote:
  It must be applied on top of block: Add 
  BlockDriver.bdrv_check_ext_snapshot.
 
  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.
 
  v9: integrate latests comments from kevin
 
  Benoît Canet (11):
quorum: Create quorum.c, add QuorumSingleAIOCB and QuorumAIOCB.
quorum: Create BDRVQuorumState and BlkDriver and do init.
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_get_block_status.
quorum: Add quorum_co_flush().
quorum: Add quorum_open() and quorum_close().
 
   block/Makefile.objs   |1 +
   block/blkverify.c |  108 +
   block/quorum.c| 1035 
  +
   configure |   36 ++
   include/monitor/monitor.h |2 +
   include/qemu-common.h |2 +
   monitor.c |2 +
   util/iov.c|  103 +
   8 files changed, 1183 insertions(+), 106 deletions(-)
   create mode 100644 block/quorum.c
 
  Could you add a qemu-iotest if possible?
  I don't see how to specify quorum to qemu-io for bytes checking.
 
  Best regards
 
  Benoît
  As of commit b543c5cd, you can pass options to the block driver through
  qemu-io -c open. The problem for quorum is that it cannot handle the
  filename option (which qemu-io will always set). I've attached a diff to
  change this behavior (which makes the path parameter for open optional
  and passes NULL to bdrv_open if it is not given). You're free to make
  use of it. ;-)
 
  If this diff is applied, you can invoke qemu-io with quorum for example
  as following:
  qemu-io -c 'open -o
  file.driver=quorum,file.children.0.file.filename=[Image
  1],file.children.1.file.filename=[Image 2],file.vote_threshold=[x]'
 
  Max
 
 Obviously forgot to attach the diff.
 
 Max

 diff --git a/qemu-io.c b/qemu-io.c
 index 3b3340a..4d0e9f6 100644
 --- a/qemu-io.c
 +++ b/qemu-io.c
 @@ -57,8 +57,13 @@ static int openfile(char *name, int flags, int growable, 
 QDict *opts)
  
  if (growable) {
  if (bdrv_file_open(qemuio_bs, name, opts, flags, local_err)) {
 -fprintf(stderr, %s: can't open device %s: %s\n, progname, name,
 -error_get_pretty(local_err));
 +if (name) {
 +fprintf(stderr, %s: can't open device %s: %s\n, progname,
 +name, error_get_pretty(local_err));
 +} else {
 +fprintf(stderr, %s: can't open device: %s\n, progname,
 +error_get_pretty(local_err));
 +}
  error_free(local_err);
  return 1;
  }
 @@ -66,8 +71,13 @@ static int openfile(char *name, int flags, int growable, 
 QDict *opts)
  qemuio_bs = bdrv_new(hda);
  
  if (bdrv_open(qemuio_bs, name, opts, flags, NULL, local_err)  0) {
 -fprintf(stderr, %s: can't open device %s: %s\n, progname, name,
 -error_get_pretty(local_err));
 +if (name) {
 +fprintf(stderr, %s: can't open device %s: %s\n, progname,
 +name, error_get_pretty(local_err));
 +} else {
 +fprintf(stderr, %s: can't open device: %s\n, progname,
 +error_get_pretty(local_err));
 +}
  error_free(local_err);
  bdrv_unref(qemuio_bs);
  qemuio_bs = NULL;
 @@ -127,6 +137,7 @@ static int open_f(BlockDriverState *bs, int argc, char 
 **argv)
  int c;
  QemuOpts *qopts;
  QDict *opts = NULL;
 +char *filename = NULL;
  
  while ((c = getopt(argc, argv, snrgo:)) != EOF) {
  switch (c) {
 @@ -160,11 +171,13 @@ static int 

Re: [Qemu-devel] [PATCH V9 00/11] Quorum block driver

2013-10-04 Thread Max Reitz

On 2013-10-02 14:39, Benoît Canet wrote:

It must be applied on top of block: Add BlockDriver.bdrv_check_ext_snapshot.

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.

v9: integrate latests comments from kevin

Benoît Canet (11):
   quorum: Create quorum.c, add QuorumSingleAIOCB and QuorumAIOCB.
   quorum: Create BDRVQuorumState and BlkDriver and do init.
   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_get_block_status.
   quorum: Add quorum_co_flush().
   quorum: Add quorum_open() and quorum_close().

  block/Makefile.objs   |1 +
  block/blkverify.c |  108 +
  block/quorum.c| 1035 +
  configure |   36 ++
  include/monitor/monitor.h |2 +
  include/qemu-common.h |2 +
  monitor.c |2 +
  util/iov.c|  103 +
  8 files changed, 1183 insertions(+), 106 deletions(-)
  create mode 100644 block/quorum.c



Could you add a qemu-iotest if possible?

Max



Re: [Qemu-devel] [PATCH V9 00/11] Quorum block driver

2013-10-04 Thread Benoît Canet
Le Friday 04 Oct 2013 à 16:31:56 (+0200), Max Reitz a écrit :
 On 2013-10-02 14:39, Benoît Canet wrote:
 It must be applied on top of block: Add 
 BlockDriver.bdrv_check_ext_snapshot.
 
 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.
 
 v9: integrate latests comments from kevin
 
 Benoît Canet (11):
quorum: Create quorum.c, add QuorumSingleAIOCB and QuorumAIOCB.
quorum: Create BDRVQuorumState and BlkDriver and do init.
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_get_block_status.
quorum: Add quorum_co_flush().
quorum: Add quorum_open() and quorum_close().
 
   block/Makefile.objs   |1 +
   block/blkverify.c |  108 +
   block/quorum.c| 1035 
  +
   configure |   36 ++
   include/monitor/monitor.h |2 +
   include/qemu-common.h |2 +
   monitor.c |2 +
   util/iov.c|  103 +
   8 files changed, 1183 insertions(+), 106 deletions(-)
   create mode 100644 block/quorum.c
 
 
 Could you add a qemu-iotest if possible?

Thanks for the review Max.
I will iterate.

Best regards

Benoît

 
 Max
 



[Qemu-devel] [PATCH V9 00/11] Quorum block driver

2013-10-02 Thread Benoît Canet
It must be applied on top of block: Add BlockDriver.bdrv_check_ext_snapshot.

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.

v9: integrate latests comments from kevin

Benoît Canet (11):
  quorum: Create quorum.c, add QuorumSingleAIOCB and QuorumAIOCB.
  quorum: Create BDRVQuorumState and BlkDriver and do init.
  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_get_block_status.
  quorum: Add quorum_co_flush().
  quorum: Add quorum_open() and quorum_close().

 block/Makefile.objs   |1 +
 block/blkverify.c |  108 +
 block/quorum.c| 1035 +
 configure |   36 ++
 include/monitor/monitor.h |2 +
 include/qemu-common.h |2 +
 monitor.c |2 +
 util/iov.c|  103 +
 8 files changed, 1183 insertions(+), 106 deletions(-)
 create mode 100644 block/quorum.c

-- 
1.8.1.2