On 08.12.2014 19:31, Matthias Gatto wrote:
The purpose of these patches is to introduce quorum for libvirt
I've try to follow this proposal:
http://www.redhat.com/archives/libvir-list/2014-May/msg00533.html

This feature ask for 6 task:

1) Allow a _virStorageSource
to contain more than one backing store.

Therefore we have to treat the field virStorageSourcePtr backingStores
as an array instead of a pointer.
But doing that, most of the backingStore field would be an array contening
only one element.
So I've decide to allocate the array only if there is more than 1
backing store in a _virStorageSource.
Because all the actual libvirt code use the backingStore field
as a pointer and we needs want to change that, I've decide to encapsulate
the backingStore field to simplifie the array manipulation.

2) Add the missing field a quorum need in _virStorageSource and
the VIR_STORAGE_TYPE_QUORUM and VIR_STORAGE_FILE_QUORUM in
their respectives enums.

3) Parse and format the xml
Because a quorum allows to have more than one backing store at the same level
we need to change virDomainDiskDefFormat and virDomainDiskDefParseXML
to call virDomainDiskBackingStoreFormat and virDomainDiskBackingStoreParse
in a loop.
virDomainDiskBackingStoreFormat and virDomainDiskBackingStoreParse can
call themself recursively in a loop because a quorum can contain another
quorum

4) Add nodename
We need to add nodename support in _virStorageSource because qemu
use them for their child.

5) Build qemu string
As for the xml, we have to call the function which create quorum recursively.
But this task have the problem explained here:
http://www.redhat.com/archives/libvir-list/2014-October/msg00529.html
The _virStorageSource missing some informations that can be passed to
a child, and therefore this version of quorum is incomplet.

6) Allow to hotplug/change a disk in a quorum
This part is not present in these patches because for this task
we have to use blockdev-add, and currently libvirt use
device_add for hotpluging that doesn't allow to hotplug quorum childs.

There is 3 way to handle this problem:
       1) create a virDomainBlockDevAdd function in libvirt witch call
       blockdev-add.

       2) use blockdev-add instead of device_add in qemuMonitorJSONAddDevice

       3) write a hack which uses blockdev-add when only attaching quorum
       (but i'm pretty sure this solution is not the good one)

Matthias Gatto (9):
   virstoragefile: Add virStorageSourceGetBackingStore
   virstoragefile: Always use virStorageSourceGetBackingStore to get
     backing store
   virstoragefile: Add virStorageSourceSetBackingStore
   virstoragefile: Always use virStorageSourceSetBackingStore to set
     backing store
   virstoragefile: Treat backingStore as a pointer or an array
   virstoragefile: Add quorum in virstoragefile
   domain_conf: Read and Write quorum config
   qemu: Add quorum support in qemuBuildDriveDevStr
   virstoragefile: Add node-name

  src/conf/domain_conf.c                | 193 ++++++++++++++++++++++++++--------
  src/conf/storage_conf.c               |   7 +-
  src/libvirt_private.syms              |   3 +
  src/qemu/qemu_cgroup.c                |   4 +-
  src/qemu/qemu_command.c               | 114 ++++++++++++++++++++
  src/qemu/qemu_domain.c                |   3 +-
  src/qemu/qemu_driver.c                |  20 ++--
  src/security/security_dac.c           |   2 +-
  src/security/security_selinux.c       |   4 +-
  src/security/virt-aa-helper.c         |   2 +-
  src/storage/storage_backend.c         |  12 +--
  src/storage/storage_backend_fs.c      |  12 +--
  src/storage/storage_backend_logical.c |   4 +-
  src/storage/storage_driver.c          |   2 +-
  src/util/virstoragefile.c             | 136 +++++++++++++++++++++---
  src/util/virstoragefile.h             |  12 +++
  tests/virstoragetest.c                |  18 ++--
  17 files changed, 445 insertions(+), 103 deletions(-)


In general, looks good to me. However, I can't ACK it due to missing documentation. Moreover, you may want to rebase and resend - the code has changed and there are new places where access backingStore directly.

Michal

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to