On Wed, Dec 17, 2014 at 10:53 AM, Matthias Gatto <matthias.gatto@xxxxxxxxxxxx> wrote: > On Mon, Dec 8, 2014 at 7:31 PM, Matthias Gatto > <matthias.gatto@xxxxxxxxxxxx> 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(-) >> >> -- >> 1.8.3.1 >> > > ping ping -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list