qemu-devel
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]