[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] Merging the quorum block driver
From: |
Stefan Hajnoczi |
Subject: |
[Qemu-devel] Merging the quorum block driver |
Date: |
Tue, 17 Sep 2013 14:44:13 +0200 |
User-agent: |
Mutt/1.5.21 (2010-09-15) |
Hi Benoit,
Kevin and I had a chance to chat face-to-face and we discussed what
concrete changes are necessary to merge quorum (without solving all the
other block layers problems at once).
I think quorum could be merged relatively quickly (and without massive
BlockFilter investments) by changing the following:
1. Defining children on the command-line
Existing "filter" drivers use the protocol filename to embed their
children, for example the blkverify driver. This is a big hack because
we have no proper syntax or escaping for the embedded drive definitions
in the file= option.
This was one of the main arguments against merging quorum. Now that
Kevin has implemented driver-specific open options (see
block/qcow2.c:qcow2_runtime_opts), it is possible for the quorum driver
to open children specific on the command-line:
-drive if=none,file.driver=quorum,format=raw,\
file.children0.file=/nfs1/test.qcow2,\
file.children1.file=/nfs2/test.qcow2,\
file.children2.file=/nfs3/test.qcow2
Here is pseudo-code for quorum_open(). It extracts the children from
the command-line and opens BlockDriverStates for them:
def quorum_open(qdict):
for key in qdict:
# Parse out child index
match = key.match('^children(\d+)\.')
if not match:
continue
idx = match.group(0)
# block.c:extract_subqdict() already lets you extract a new
# qdict with the fields starting with a prefix. You could make
# this function common.
child_dict = extract_subqdict(qdict, 'children%d.' % idx)
# Finally open the child with its specific options
children[idx] = bdrv_open(child_dict)
After doing this we no longer need to embed the children into the file=
option as a string and driver-specific options can be used for the
children.
2. Prevent external snapshots
The user may wish to snapshot above or below the quorum BDS. There is
no syntax to express the BDS tree node where snapshotting should happen.
Implementing this fully is a distraction and requires additional work.
For quorum it is simplest to add a BDS interface so block drivers can
forbid snapshots. This is called recursively on the whole BDS tree, so
quorum can veto the snapshot operation. An error is returned saying the
device does not support snapshots.
In the future this limitation can be lifted but for the near-term this
is a simple step to make quorum mergable.
With these changes quorum should be mergable. Implementing full
BlockFilter support is not necessary yet but we can discuss it in
separate thread, if you want.
Stefan
- [Qemu-devel] Merging the quorum block driver,
Stefan Hajnoczi <=
- Re: [Qemu-devel] Merging the quorum block driver, Benoît Canet, 2013/09/17
- Re: [Qemu-devel] Merging the quorum block driver, Benoît Canet, 2013/09/18
- Re: [Qemu-devel] Merging the quorum block driver, Stefan Hajnoczi, 2013/09/19
- Re: [Qemu-devel] Merging the quorum block driver, Kevin Wolf, 2013/09/19
- Re: [Qemu-devel] Merging the quorum block driver, Benoît Canet, 2013/09/19
- Re: [Qemu-devel] Merging the quorum block driver, Kevin Wolf, 2013/09/19
- Re: [Qemu-devel] Merging the quorum block driver, Benoît Canet, 2013/09/19
- Re: [Qemu-devel] Merging the quorum block driver, Kevin Wolf, 2013/09/19
- Re: [Qemu-devel] Merging the quorum block driver, Benoît Canet, 2013/09/20
- Re: [Qemu-devel] Merging the quorum block driver, Kevin Wolf, 2013/09/20