[libvirt] Release planning suggestions for next releases
by Daniel Veillard
I just checked and we have "only" 63 commits since 1.0.0 was released,
so even if we were to increase the rate dramatically next week, it
doesn't look like there is a high pressure for a release at the end
of the month. Taking into account the extra factors that end of
December is usually low traffic, and that I'm trying to take real
vacations first week of December (nearly no internet access), I think
we could slightly change the two next release schedules to accomodate
those:
- push 1.0.1 mid-December
- push 1.0.2 at the end of January
Did I miss a reason to not delay the push of 1.0.1 and keep it at the
end of the month ? Or other problems with this plan ?
Daniel
--
Daniel Veillard | Open Source and Standards, Red Hat
veillard(a)redhat.com | libxml Gnome XML XSLT toolkit http://xmlsoft.org/
http://veillard.com/ | virtualization library http://libvirt.org/
12 years
[libvirt] [PATCH 0/5] Structured error logging and syslog support
by Miloslav Trmač
This is sort of a v2 of the "Structured syslog" series.
Patches 1-4 allow callers virLogMessage to add arbitrary additional data,
and use it in virRaiseErrorFull and its callers. This data is sent
to journal (and ignored for other outputs).
Because the additional fields for errors include virErrorDomain and
virErrorNumber, this allows _programs_ to _automatically_ detect the event
and react to it, perhaps alerting the user.
Patch 5 adds the "syslog/json" log output type, in a way that is comparably
async-signal-safe to the other log outputs (i.e. it's not safe by the letter
of the standard, but safe in practice). I still think that having this
format output is desirable, but I'll accept it if you decide that it is
not wanted in libvirt.
Miloslav Trmač (5):
Add a metadata parameter to virLog{,V}Message
Add metadata to virLogOutputFunc
Use helper functions to format the journal iov array
Add detailed error information to journal
Add "syslog/json" log output format.
docs/logging.html.in | 3 +
src/util/logging.c | 445 +++++++++++++++++++++++++++++++++++++++++++--------
src/util/logging.h | 27 +++-
src/util/viraudit.c | 4 +-
src/util/virterror.c | 33 +++-
tests/testutils.c | 1 +
6 files changed, 437 insertions(+), 76 deletions(-)
--
1.7.11.7
12 years
[libvirt] [PATCH v2] qemu: Allow the user to specify vendor and product for disk
by Osier Yang
QEMU supports to set vendor and product strings for disk since
1.2.0 (only scsi-disk, scsi-hd, scsi-cd support it), this patch
exposes it with new XML elements <vendor> and <product> of disk
device.
---
docs/formatdomain.html.in | 12 ++++++
docs/schemas/domaincommon.rng | 10 +++++
src/conf/domain_conf.c | 42 ++++++++++++++++++++
src/conf/domain_conf.h | 2 +
src/libvirt_private.syms | 1 +
src/qemu/qemu_command.c | 29 +++++++++++++
src/util/util.c | 12 ++++++
src/util/util.h | 2 +
...qemuxml2argv-disk-scsi-disk-vpd-build-error.xml | 35 ++++++++++++++++
...qemuxml2argv-disk-scsi-disk-vpd-parse-error.xml | 36 +++++++++++++++++
.../qemuxml2argv-disk-scsi-disk-vpd.args | 13 ++++++
.../qemuxml2argv-disk-scsi-disk-vpd.xml | 36 +++++++++++++++++
tests/qemuxml2argvtest.c | 12 ++++++
13 files changed, 242 insertions(+), 0 deletions(-)
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-disk-vpd-build-error.xml
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-disk-vpd-parse-error.xml
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-disk-vpd.args
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-disk-vpd.xml
diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
index c8da33d..a5a7418 100644
--- a/docs/formatdomain.html.in
+++ b/docs/formatdomain.html.in
@@ -1657,6 +1657,18 @@
of 16 hexadecimal digits.
<span class='since'>Since 0.10.1</span>
</dd>
+ <dt><code>vendor</code></dt>
+ <dd>If present, this element specifies the vendor of a virtual hard
+ disk or CD-ROM device. It must not be longer than 8 alphanumeric
+ characters.
+ <span class='since'>Since 1.0.1</span>
+ </dd>
+ <dt><code>product</code></dt>
+ <dd>If present, this element specifies the product of a virtual hard
+ disk or CD-ROM device. It must not be longer than 16 alphanumeric
+ characters.
+ <span class='since'>Since 1.0.1</span>
+ </dd>
<dt><code>host</code></dt>
<dd>The <code>host</code> element has two attributes "name" and "port",
which specify the hostname and the port number. The meaning of this
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index 2beb035..ed7d1d0 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -905,6 +905,16 @@
<ref name="wwn"/>
</element>
</optional>
+ <optional>
+ <element name="vendor">
+ <text/>
+ </element>
+ </optional>
+ <optional>
+ <element name="product">
+ <text/>
+ </element>
+ </optional>
</interleave>
</define>
<define name="snapshot">
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 99f03a9..e2f729e 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -979,6 +979,8 @@ void virDomainDiskDefFree(virDomainDiskDefPtr def)
VIR_FREE(def->mirror);
VIR_FREE(def->auth.username);
VIR_FREE(def->wwn);
+ VIR_FREE(def->vendor);
+ VIR_FREE(def->product);
if (def->auth.secretType == VIR_DOMAIN_DISK_SECRET_TYPE_USAGE)
VIR_FREE(def->auth.secret.usage);
virStorageEncryptionFree(def->encryption);
@@ -3498,6 +3500,8 @@ cleanup:
goto cleanup;
}
+#define VENDOR_LEN 8
+#define PRODUCT_LEN 16
/* Parse the XML definition for a disk
* @param node XML nodeset to parse for disk definition
@@ -3550,6 +3554,8 @@ virDomainDiskDefParseXML(virCapsPtr caps,
char *logical_block_size = NULL;
char *physical_block_size = NULL;
char *wwn = NULL;
+ char *vendor = NULL;
+ char *product = NULL;
if (VIR_ALLOC(def) < 0) {
virReportOOMError();
@@ -3888,6 +3894,36 @@ virDomainDiskDefParseXML(virCapsPtr caps,
if (!virValidateWWN(wwn))
goto error;
+ } else if (!vendor &&
+ xmlStrEqual(cur->name, BAD_CAST "vendor")) {
+ vendor = (char *)xmlNodeGetContent(cur);
+
+ if (strlen(vendor) > VENDOR_LEN) {
+ virReportError(VIR_ERR_XML_ERROR, "%s",
+ _("disk vendor is more than 8 characters"));
+ goto error;
+ }
+
+ if (!virStrIsAlpha(vendor)) {
+ virReportError(VIR_ERR_XML_ERROR, "%s",
+ _("disk vendor is not alphanemuric string"));
+ goto error;
+ }
+ } else if (!product &&
+ xmlStrEqual(cur->name, BAD_CAST "product")) {
+ product = (char *)xmlNodeGetContent(cur);
+
+ if (strlen(vendor) > PRODUCT_LEN) {
+ virReportError(VIR_ERR_XML_ERROR, "%s",
+ _("disk product is more than 16 characters"));
+ goto error;
+ }
+
+ if (!virStrIsAlpha(product)) {
+ virReportError(VIR_ERR_XML_ERROR, "%s",
+ _("disk product is not alphanemuric string"));
+ goto error;
+ }
} else if (xmlStrEqual(cur->name, BAD_CAST "boot")) {
/* boot is parsed as part of virDomainDeviceInfoParseXML */
}
@@ -4184,6 +4220,10 @@ virDomainDiskDefParseXML(virCapsPtr caps,
serial = NULL;
def->wwn = wwn;
wwn = NULL;
+ def->vendor = vendor;
+ vendor = NULL;
+ def->product = product;
+ product = NULL;
if (driverType) {
def->format = virStorageFileFormatTypeFromString(driverType);
@@ -4257,6 +4297,8 @@ cleanup:
VIR_FREE(logical_block_size);
VIR_FREE(physical_block_size);
VIR_FREE(wwn);
+ VIR_FREE(vendor);
+ VIR_FREE(product);
ctxt->node = save_ctxt;
return def;
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 6539281..c7c1ca6 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -591,6 +591,8 @@ struct _virDomainDiskDef {
char *serial;
char *wwn;
+ char *vendor;
+ char *product;
int cachemode;
int error_policy; /* enum virDomainDiskErrorPolicy */
int rerror_policy; /* enum virDomainDiskErrorPolicy */
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 5a07139..3bcdf68 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -1279,6 +1279,7 @@ virSetUIDGID;
virSkipSpaces;
virSkipSpacesAndBackslash;
virSkipSpacesBackwards;
+virStrIsAlpha;
virStrToDouble;
virStrToLong_i;
virStrToLong_l;
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 1e96982..ec2bbd8 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -2428,6 +2428,13 @@ qemuBuildDriveDevStr(virDomainDefPtr def,
}
}
+ if ((disk->vendor || disk->product) &&
+ disk->bus != VIR_DOMAIN_DISK_BUS_SCSI) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("Only scsi disk supports vendor and product"));
+ goto error;
+ }
+
if (disk->device == VIR_DOMAIN_DISK_DEVICE_LUN) {
/* make sure that both the bus and the qemu binary support
* type='lun' (SG_IO).
@@ -2455,6 +2462,11 @@ qemuBuildDriveDevStr(virDomainDefPtr def,
_("Setting wwn is not supported for lun device"));
goto error;
}
+ if (disk->vendor || disk->product) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("Setting vendor or product is not supported for lun device"));
+ goto error;
+ }
}
switch (disk->bus) {
@@ -2504,6 +2516,17 @@ qemuBuildDriveDevStr(virDomainDefPtr def,
goto error;
}
+ /* Properties wwn, vendor and product were introduced in the
+ * same QEMU release (1.2.0).
+ */
+ if ((disk->vendor || disk->product) &&
+ !qemuCapsGet(caps, QEMU_CAPS_SCSI_DISK_WWN)) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("Setting vendor or product for scsi disk is not "
+ "supported by this QEMU"));
+ goto error;
+ }
+
controllerModel =
virDomainDiskFindControllerModel(def, disk,
VIR_DOMAIN_CONTROLLER_TYPE_SCSI);
@@ -2649,6 +2672,12 @@ qemuBuildDriveDevStr(virDomainDefPtr def,
if (disk->wwn)
virBufferAsprintf(&opt, ",wwn=%s", disk->wwn);
+ if (disk->vendor)
+ virBufferAsprintf(&opt, ",vendor=%s", disk->vendor);
+
+ if (disk->product)
+ virBufferAsprintf(&opt, ",product=%s", disk->product);
+
if (virBufferError(&opt)) {
virReportOOMError();
goto error;
diff --git a/src/util/util.c b/src/util/util.c
index 75b18c1..26a22c4 100644
--- a/src/util/util.c
+++ b/src/util/util.c
@@ -3114,3 +3114,15 @@ virValidateWWN(const char *wwn) {
return true;
}
+
+bool
+virStrIsAlpha(const char *str)
+{
+ int i;
+
+ for (i = 0; str[i]; i++)
+ if (!c_isalnum(str[i]))
+ return false;
+
+ return true;
+}
diff --git a/src/util/util.h b/src/util/util.h
index 4316ab1..64e047c 100644
--- a/src/util/util.h
+++ b/src/util/util.h
@@ -280,4 +280,6 @@ bool virIsDevMapperDevice(const char *dev_name) ATTRIBUTE_NONNULL(1);
bool virValidateWWN(const char *wwn);
+bool virStrIsAlpha(const char *str);
+
#endif /* __VIR_UTIL_H__ */
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-disk-vpd-build-error.xml b/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-disk-vpd-build-error.xml
new file mode 100644
index 0000000..6ed363b
--- /dev/null
+++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-disk-vpd-build-error.xml
@@ -0,0 +1,35 @@
+<domain type='qemu'>
+ <name>QEMUGuest1</name>
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+ <memory unit='KiB'>219136</memory>
+ <currentMemory unit='KiB'>219136</currentMemory>
+ <vcpu placement='static'>1</vcpu>
+ <os>
+ <type arch='i686' machine='pc'>hvm</type>
+ <boot dev='hd'/>
+ </os>
+ <clock offset='utc'/>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>restart</on_reboot>
+ <on_crash>destroy</on_crash>
+ <devices>
+ <emulator>/usr/bin/qemu</emulator>
+ <disk type='block' device='cdrom'>
+ <source dev='/dev/HostVG/QEMUGuest1'/>
+ <target dev='sda' bus='virtio'/>
+ <vendor>SEAGATE</vendor>
+ <product>ST3146707LC</product>
+ </disk>
+ <disk type='block' device='disk'>
+ <source dev='/dev/HostVG/QEMUGuest2'/>
+ <target dev='sdb' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='0'/>
+ <vendor>SEAGATE</vendor>
+ <product>ST3567807GD</product>
+ </disk>
+ <controller type='usb' index='0'/>
+ <controller type='scsi' index='0' model='virtio-scsi'/>
+ <controller type='scsi' index='1' model='lsilogic'/>
+ <memballoon model='virtio'/>
+ </devices>
+</domain>
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-disk-vpd-parse-error.xml b/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-disk-vpd-parse-error.xml
new file mode 100644
index 0000000..b2b127d
--- /dev/null
+++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-disk-vpd-parse-error.xml
@@ -0,0 +1,36 @@
+<domain type='qemu'>
+ <name>QEMUGuest1</name>
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+ <memory unit='KiB'>219136</memory>
+ <currentMemory unit='KiB'>219136</currentMemory>
+ <vcpu placement='static'>1</vcpu>
+ <os>
+ <type arch='i686' machine='pc'>hvm</type>
+ <boot dev='hd'/>
+ </os>
+ <clock offset='utc'/>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>restart</on_reboot>
+ <on_crash>destroy</on_crash>
+ <devices>
+ <emulator>/usr/bin/qemu</emulator>
+ <disk type='block' device='cdrom'>
+ <source dev='/dev/HostVG/QEMUGuest1'/>
+ <target dev='sda' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='1' unit='0'/>
+ <vendor>SEAGATE1111</vendor>
+ <product>ST_3146707LC</product>
+ </disk>
+ <disk type='block' device='disk'>
+ <source dev='/dev/HostVG/QEMUGuest2'/>
+ <target dev='sdb' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='0'/>
+ <vendor>SEAGATE</vendor>
+ <product>ST3567807GD</product>
+ </disk>
+ <controller type='usb' index='0'/>
+ <controller type='scsi' index='0' model='virtio-scsi'/>
+ <controller type='scsi' index='1' model='lsilogic'/>
+ <memballoon model='virtio'/>
+ </devices>
+</domain>
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-disk-vpd.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-disk-vpd.args
new file mode 100644
index 0000000..4aefb7f
--- /dev/null
+++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-disk-vpd.args
@@ -0,0 +1,13 @@
+LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test \
+/usr/bin/qemu -S -M pc -m 214 -smp 1 -nographic -nodefconfig -nodefaults \
+-monitor unix:/tmp/test-monitor,server,nowait -no-acpi -boot c \
+-device virtio-scsi-pci,id=scsi0,bus=pci.0,addr=0x3 \
+-device lsi,id=scsi1,bus=pci.0,addr=0x4 \
+-usb \
+-drive file=/dev/HostVG/QEMUGuest1,if=none,id=drive-scsi0-0-1-0 \
+-device scsi-cd,bus=scsi0.0,channel=0,scsi-id=1,lun=0,drive=drive-scsi0-0-1-0,\
+id=scsi0-0-1-0,vendor=SEAGATE,product=ST3146707LC \
+-drive file=/dev/HostVG/QEMUGuest2,if=none,id=drive-scsi0-0-0-0 \
+-device scsi-hd,bus=scsi0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0-0-0-0,\
+id=scsi0-0-0-0,vendor=SEAGATE,product=ST3567807GD \
+-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x5
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-disk-vpd.xml b/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-disk-vpd.xml
new file mode 100644
index 0000000..4918e37
--- /dev/null
+++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-disk-vpd.xml
@@ -0,0 +1,36 @@
+<domain type='qemu'>
+ <name>QEMUGuest1</name>
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+ <memory unit='KiB'>219136</memory>
+ <currentMemory unit='KiB'>219136</currentMemory>
+ <vcpu placement='static'>1</vcpu>
+ <os>
+ <type arch='i686' machine='pc'>hvm</type>
+ <boot dev='hd'/>
+ </os>
+ <clock offset='utc'/>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>restart</on_reboot>
+ <on_crash>destroy</on_crash>
+ <devices>
+ <emulator>/usr/bin/qemu</emulator>
+ <disk type='block' device='cdrom'>
+ <source dev='/dev/HostVG/QEMUGuest1'/>
+ <target dev='sda' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='1' unit='0'/>
+ <vendor>SEAGATE</vendor>
+ <product>ST3146707LC</product>
+ </disk>
+ <disk type='block' device='disk'>
+ <source dev='/dev/HostVG/QEMUGuest2'/>
+ <target dev='sdb' bus='scsi'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='0'/>
+ <vendor>SEAGATE</vendor>
+ <product>ST3567807GD</product>
+ </disk>
+ <controller type='usb' index='0'/>
+ <controller type='scsi' index='0' model='virtio-scsi'/>
+ <controller type='scsi' index='1' model='lsilogic'/>
+ <memballoon model='virtio'/>
+ </devices>
+</domain>
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
index 48e09ab..651351b 100644
--- a/tests/qemuxml2argvtest.c
+++ b/tests/qemuxml2argvtest.c
@@ -505,6 +505,18 @@ mymain(void)
QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
QEMU_CAPS_SCSI_CD, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI_PCI,
QEMU_CAPS_SCSI_DISK_WWN);
+ DO_TEST("disk-scsi-disk-vpd",
+ QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
+ QEMU_CAPS_SCSI_CD, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI_PCI,
+ QEMU_CAPS_SCSI_DISK_WWN);
+ DO_TEST_PARSE_ERROR("disk-scsi-disk-vpd-parse-error",
+ QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
+ QEMU_CAPS_SCSI_CD, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI_PCI,
+ QEMU_CAPS_SCSI_DISK_WWN);
+ DO_TEST_FAILURE("disk-scsi-disk-vpd-build-error",
+ QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
+ QEMU_CAPS_SCSI_CD, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI_PCI,
+ QEMU_CAPS_SCSI_DISK_WWN);
DO_TEST("disk-scsi-vscsi",
QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
DO_TEST("disk-scsi-virtio-scsi",
--
1.7.7.6
12 years
[libvirt] [PATCH 1/2] init qemu_driver's qemuImgBinary field
by liguang
Signed-off-by: liguang <lig.fnst(a)cn.fujitsu.com>
---
src/qemu/qemu_domain.c | 2 +-
src/qemu/qemu_driver.c | 3 +++
2 files changed, 4 insertions(+), 1 deletions(-)
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index a5592b9..eb5a3d1 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -1647,7 +1647,7 @@ qemuDomainSnapshotForEachQcow2Raw(struct qemud_driver *driver,
int i;
bool skipped = false;
- qemuimgarg[0] = qemuFindQemuImgBinary(driver);
+ qemuimgarg[0] = driver->qemuImgBinary;
if (qemuimgarg[0] == NULL) {
/* qemuFindQemuImgBinary set the error */
return -1;
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 5f91688..a25fb53 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -626,6 +626,9 @@ qemudStartup(int privileged) {
if (!qemu_driver->domainEventState)
goto error;
+ /* find kvm-img or qemu-img */
+ qemuFindQemuImgBinary(qemu_driver);
+
/* read the host sysinfo */
if (privileged)
qemu_driver->hostsysinfo = virSysinfoRead();
--
1.7.1
12 years
[libvirt] [PATCH v3] Autogenerate AUTHORS
by Cole Robinson
AUTHORS.in tracks the maintainers, as well as some folks who were
previously in AUTHORS but don't have a git commit with proper
attribution.
Generated output is sorted alphabetically and lacks pretty spacing, so
tweak AUTHORS.in to follow the same format.
Additionally, drop the syntax-check rule that previously validated
AUTHORS against git log.
---
I couldn't get the latter chunk of sed magic working... and since nothing
really makes me reach my frustration limit faster than Makefiles and
shell trickery, I just stuck with the basic changes.
v3:
Fix VPATH builds
Use sort -u
Sort AUTHORS.in
Condense bootstrap.conf change
.gitignore | 1 +
.mailmap | 15 +++-
AUTHORS | 279 ---------------------------------------------------------
AUTHORS.in | 90 +++++++++++++++++++
Makefile.am | 12 ++-
bootstrap.conf | 4 +-
cfg.mk | 15 ----
7 files changed, 118 insertions(+), 298 deletions(-)
delete mode 100644 AUTHORS
create mode 100644 AUTHORS.in
diff --git a/.gitignore b/.gitignore
index c185cbc..804eda4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -26,6 +26,7 @@
.memdump
.sc-start-sc_*
/ABOUT-NLS
+/AUTHORS
/COPYING
/ChangeLog
/GNUmakefile
diff --git a/.mailmap b/.mailmap
index 98ff6dc..c430200 100644
--- a/.mailmap
+++ b/.mailmap
@@ -3,7 +3,6 @@
# Email consolidation:
# <Preferred address in AUTHORS> <other alias used by same author>
-<amy.griffis(a)hp.com> <aron.griffis(a)hp.com>
<bozzolan(a)gmail.com> <redshift(a)gmx.com>
<charles_duffy(a)messageone.com> <charles(a)dyfis.net>
<dfj(a)redhat.com> <dfj(a)dfj.bne.redhat.com>
@@ -35,6 +34,8 @@
<gerd(a)egidy.de> <gerd.von.egidy(a)intra2net.com>
<benoar(a)dolka.fr> <benjamin.cama(a)telecom-bretagne.eu>
<zhlcindy(a)linux.vnet.ibm.com> <zhlcindy(a)gmail.com>
+<serge.hallyn(a)canonical.com> <serue(a)us.ibm.com>
+<pritesh.kothari(a)sun.com> <Pritesh.Kothari(a)Sun.COM>
# Name consolidation:
# Preferred author spelling <preferred email>
@@ -43,3 +44,15 @@ Royce Lv <lvroyce(a)linux.vnet.ibm.com>
Daniel J Walsh <dwalsh(a)redhat.com>
Ján Tomko <jtomko(a)redhat.com>
Gerd von Egidy <gerd(a)egidy.de>
+MATSUDA Daiki <matsudadik(a)intellilink.co.jp>
+Tang Chen <tangchen(a)cn.fujitsu.com>
+Peng Zhou <ailvpeng25(a)gmail.com>
+Dirk Herrendoerfer <d.herrendoerfer(a)herrendoerfer.name>
+Thibault VINCENT <thibault.vincent(a)smartjog.com>
+Aurelien Rougemont <beorn(a)binaries.fr>
+Serge E. Hallyn <serge.hallyn(a)canonical.com>
+Henrik Persson E <henrik.e.persson(a)ericsson.com>
+Philipp Hahn <hahn(a)univention.de>
+Marco Bozzolan <bozzolan(a)gmail.com>
+Marco Bozzolan <redshift(a)gmx.com>
+Pritesh Kothari <pritesh.kothari(a)sun.com>
diff --git a/AUTHORS b/AUTHORS
deleted file mode 100644
index 27c4eda..0000000
--- a/AUTHORS
+++ /dev/null
@@ -1,279 +0,0 @@
- libvirt Authors
- ===============
-
-The libvirt project was initiated by:
-
- Daniel Veillard <veillard(a)redhat.com> or <daniel(a)veillard.com>
-
-The primary maintainers and people with commit access rights:
-
- Daniel Veillard <veillard(a)redhat.com>
- Daniel Berrange <berrange(a)redhat.com>
- Richard W.M. Jones <rjones(a)redhat.com>
- Mark McLoughlin <markmc(a)redhat.com>
- Anthony Liguori <aliguori(a)us.ibm.com>
- Jim Meyering <meyering(a)redhat.com>
- Jim Fehlig <jfehlig(a)suse.com>
- Chris Lalancette <clalance(a)redhat.com>
- Cole Robinson <crobinso(a)redhat.com>
- Guido Günther <agx(a)sigxcpu.org>
- John Levon <john.levon(a)sun.com>
- Matthias Bolte <matthias.bolte(a)googlemail.com>
- Jiří Denemark <jdenemar(a)redhat.com>
- Dave Allan <dallan(a)redhat.com>
- Laine Stump <laine(a)redhat.com>
- Stefan Berger <stefanb(a)us.ibm.com>
- Eric Blake <eblake(a)redhat.com>
- Justin Clift <jclift(a)redhat.com>
- Osier Yang <jyang(a)redhat.com>
- Wen Congyang <wency(a)cn.fujitsu.com>
- Michal Prívozník <mprivozn(a)redhat.com>
- Peter Krempa <pkrempa(a)redhat.com>
- Christophe Fergeau <cfergeau(a)redhat.com>
- Alex Jia <ajia(a)redhat.com>
- Martin Kletzander <mkletzan(a)redhat.com>
-
-Previous maintainers:
- Karel Zak <kzak(a)redhat.com>
- Atsushi SAKAI <sakaia(a)jp.fujitsu.com>
- Dave Leskovec <dlesko(a)linux.vnet.ibm.com>
- Dan Smith <danms(a)us.ibm.com>
-
-Patches have also been contributed by:
-
- David Lutterkort <dlutter(a)redhat.com>
- Andrew Puch <apuch(a)redhat.com>
- Philippe Berthault <philippe.berthault(a)Bull.net>
- Hugh Brock <hbrock(a)redhat.com>
- Michel Ponceau <michel.ponceau(a)bull.net>
- Jeremy Katz <katzj(a)redhat.com>
- Pete Vetere <pvetere(a)redhat.com>
- Kazuki Mizushima <mizushima.kazuk(a)jp.fujitsu.com>
- Saori Fukuta <fukuta.saori(a)jp.fujitsu.com>
- Tatsuro Enokura <fj7716hz(a)aa.jp.fujitsu.com>
- Takahashi Tomohiro <takatom(a)jp.fujitsu.com>
- Nobuhiro Itou <fj0873gn(a)aa.jp.fujitsu.com>
- Masayuki Sunou <fj1826dm(a)aa.jp.fujitsu.com>
- Mark Johnson <johnson.nh(a)gmail.com>
- Christian Ehrhardt <ehrhardt(a)linux.vnet.ibm.com>
- Shuveb Hussain <shuveb(a)binarykarma.com>
- Jim Paris <jim(a)jtan.com>
- Daniel Hokka Zakrisson <daniel(a)hozac.com>
- Mads Chr. Olesen <shiyee(a)shiyee.dk>
- Anton Protopopov <aspsk2(a)gmail.com>
- Stefan de Konink <dekonink(a)kinkrsoftware.nl>
- Kaitlin Rupert <kaitlin(a)linux.vnet.ibm.com>
- Evgeniy Sokolov <evg(a)openvz.org>
- David Lively <dlively(a)virtualiron.com>
- Charles Duffy <Charles_Duffy(a)messageone.com>
- Nguyen Anh Quynh <aquynh(a)gmail.com>
- James Morris <jmorris(a)namei.org>
- Chris Wright <chrisw(a)redhat.com>
- Ben Guthro <ben.guthro(a)gmail.com>
- Shigeki Sakamoto <fj0588di(a)aa.jp.fujitsu.com>
- Gerd von Egidy <gerd(a)egidy.de>
- Itamar Heim <iheim(a)redhat.com>
- Markus Armbruster <armbru(a)redhat.com>
- Ryota Ozaki <ozaki.ryota(a)gmail.com>
- Daniel J Walsh <dwalsh(a)redhat.com>
- Maximilian Wilhelm <max(a)rfc2324.org>
- Pritesh Kothari <Pritesh.Kothari(a)Sun.COM>
- Amit Shah <amit.shah(a)redhat.com>
- Florian Vichot <florian.vichot(a)diateam.net>
- Serge E. Hallyn <serue(a)us.ibm.com>
- Soren Hansen <soren(a)linux2go.dk>
- Abel Míguez Rodríguez<amiguezr(a)pdi.ucm.es>
- Doug Goldstein <cardoe(a)cardoe.com>
- Javier Fontan <jfontan(a)gmail.com>
- Federico Simoncelli <fsimonce(a)redhat.com>
- Amy Griffis <amy.griffis(a)hp.com>
- Henrik Persson E <henrik.e.persson(a)ericsson.com>
- Satoru SATOH <satoru.satoh(a)gmail.com>
- Paolo Bonzini <pbonzini(a)redhat.com>
- Miloslav Trmač <mitr(a)redhat.com>
- Jamie Strandboge <jamie(a)canonical.com>
- Gerhard Stenzel <gerhard.stenzel(a)de.ibm.com>
- Matthew Booth <mbooth(a)redhat.com>
- Diego Elio Pettenò <flameeyes(a)gmail.com>
- Adam Litke <agl(a)us.ibm.com>
- Steve Yarmie <steve.yarmie(a)gmail.com>
- Dan Kenigsberg <danken(a)redhat.com>
- Yuji NISHIDA <nishidy(a)nict.go.jp>
- Dustin Xiong <x_k_123(a)hotmail.com>
- Rolf Eike Beer <eike(a)sf-mail.de>
- Wolfgang Mauerer <wolfgang.mauerer(a)siemens.com>
- Philipp Hahn <hahn(a)univention.de>
- Ed Swierk <eswierk(a)aristanetworks.com>
- Paolo Smiraglia <paolo.smiraglia(a)gmail.com>
- Sharadha Prabhakar <sharadha.prabhakar(a)citrix.com>
- Chris Wong <wongc-redhat(a)hoku.net>
- Daniel Berteaud <daniel(a)firewall-services.com>
- Dustin Kirkland <kirkland(a)canonical.com>
- Luiz Capitulino <lcapitulino(a)redhat.com>
- Ryan Harper <ryanh(a)us.ibm.com>
- Spencer Shimko <sshimko(a)tresys.com>
- Marco Bozzolan <bozzolan(a)gmail.com>
- Alex Williamson <alex.williamson(a)redhat.com>
- Ersek Laszlo <lacos(a)caesar.elte.hu>
- Kenneth Nagin <NAGIN(a)il.ibm.com>
- Klaus Ethgen <Klaus(a)Ethgen.de>
- Bryan Kearney <bkearney(a)redhat.com>
- Darry L. Pierce <dpierce(a)redhat.com>
- David Jorm <dfj(a)redhat.com>
- Eduardo Otubo <otubo(a)linux.vnet.ibm.com>
- Garry Dolley <gdolley(a)arpnetworks.com>
- Harshavardhana <harsha(a)gluster.com>
- Jonas Eriksson <jonas.j.eriksson(a)ericsson.com>
- Jun Koi <junkoi2004(a)gmail.com>
- Olivier Fourdan <ofourdan(a)redhat.com>
- Ron Yorston <rmy(a)tigress.co.uk>
- Shahar Klein <shaharklein(a)yahoo.com>
- Taizo ITO <taizo.ito(a)hde.co.jp>
- Thomas Treutner <thomas(a)scripty.at>
- Jean-Baptiste Rouault <jean-baptiste.rouault(a)diateam.net>
- Марк Коренберг <socketpair(a)gmail.com>
- Alan Pevec <apevec(a)redhat.com>
- Aurelien Rougemont <beorn(a)binaries.fr>
- Patrick Dignan <pat_dignan(a)dell.com>
- Serge Hallyn <serge.hallyn(a)canonical.com>
- Nikunj A. Dadhania <nikunj(a)linux.vnet.ibm.com>
- Lai Jiangshan <laijs(a)cn.fujitsu.com>
- Harsh Prateek Bora <harsh(a)linux.vnet.ibm.com>
- John Morrissey <jwm(a)horde.net>
- KAMEZAWA Hiroyuki <kamezawa.hiroyu(a)jp.fujitsu.com>
- Hu Tao <hutao(a)cn.fujitsu.com>
- Laurent Léonard <laurent(a)open-minds.org>
- MORITA Kazutaka <morita.kazutaka(a)lab.ntt.co.jp>
- Josh Durgin <josh.durgin(a)inktank.com>
- Roopa Prabhu <roprabhu(a)cisco.com>
- Paweł Krześniak <pawel.krzesniak(a)gmail.com>
- Kay Schubert <kayegypt(a)web.de>
- Marc-André Lureau <marcandre.lureau(a)redhat.com>
- Juerg Haefliger <juerg.haefliger(a)hp.com>
- Matthias Dahl <mdvirt(a)designassembly.de>
- Niels de Vos <ndevos(a)redhat.com>
- Davidlohr Bueso <dave(a)gnu.org>
- Alon Levy <alevy(a)redhat.com>
- Hero Phương <herophuong93(a)gmail.com>
- Zdenek Styblik <stybla(a)turnovfree.net>
- Gui Jianfeng <guijianfeng(a)cn.fujitsu.com>
- Michal Novotny <minovotn(a)redhat.com>
- Markus Groß <gross(a)univention.de>
- Phil Petty <phpetty(a)cisco.com>
- Taku Izumi <izumi.taku(a)jp.fujitsu.com>
- Minoru Usui <usui(a)mxm.nes.nec.co.jp>
- Tiziano Mueller <dev-zero(a)gentoo.org>
- Thibault VINCENT <thibault.vincent(a)smartjog.com>
- Naoya Horiguchi <n-horiguchi(a)ah.jp.nec.com>
- Jesse Cook <code.crashenx(a)gmail.com>
- Alexander Todorov <atodorov(a)otb.bg>
- Richard Laager <rlaager(a)wiktel.com>
- Mark Wu <dwu(a)redhat.com>
- Yufang Zhang <yuzhang(a)redhat.com>
- Supriya Kannery <supriyak(a)linux.vnet.ibm.com>
- Dirk Herrendoerfer <d.herrendoerfer(a)herrendoerfer.name>
- Taisuke Yamada <tai(a)rakugaki.org>
- Heath Petersen <HeathPetersen(a)Kandre.com>
- Neil Wilson <neil(a)aldur.co.uk>
- Ohad Levy <ohadlevy(a)gmail.com>
- Michael Chapman <mike(a)very.puzzling.org>
- Daniel Gollub <gollub(a)b1-systems.de>
- David S. Wang <dwang2(a)cisco.com>
- Ruben Kerkhof <ruben(a)rubenkerkhof.com>
- Scott Moser <smoser(a)ubuntu.com>
- Guannan Ren <gren(a)redhat.com>
- John Williams <john.williams(a)petalogix.com>
- Michael Santos <michael.santos(a)gmail.com>
- Oskari Saarenmaa <os(a)ohmu.fi>
- Nan Zhang <nzhang(a)redhat.com>
- Wieland Hoffmann <themineo(a)googlemail.com>
- Douglas Schilling Landgraf <dougsland(a)redhat.com>
- Tom Vijlbrief <tom.vijlbrief(a)xs4all.nl>
- Shradha Shah <sshah(a)solarflare.com>
- Steve Hodgson <shodgson(a)solarflare.com>
- Xu He Jie <xuhj(a)linux.vnet.ibm.com>
- Lei Li <lilei(a)linux.vnet.ibm.com>
- Matthias Witte <witte(a)netzquadrat.de>
- Tang Chen <tangchen(a)cn.fujitsu.com>
- Dan Horák <dan(a)danny.cz>
- Sage Weil <sage(a)newdream.net>
- David L Stevens <dlstevens(a)us.ibm.com>
- Tyler Coumbes <coumbes(a)gmail.com>
- Royce Lv <lvroyce(a)linux.vnet.ibm.com>
- Patrice LACHANCE <patlachance(a)gmail.com>
- Eli Qiao <taget(a)linux.vnet.ibm.com>
- Michael Wood <esiotrot(a)gmail.com>
- Bharata B Rao <bharata(a)linux.vnet.ibm.com>
- Srivatsa S. Bhat <srivatsa.bhat(a)linux.vnet.ibm.com>
- Chang Liu <lingjiao.lc(a)taobao.com>
- Lorin Hochstein <lorin(a)isi.edu>
- Christian Franke <nobody(a)nowhere.ws>
- Prerna Saxena <prerna(a)linux.vnet.ibm.com>
- Michael Ellerman <michael(a)ellerman.id.au>
- Rommer <rommer(a)active.by>
- Yuri Chornoivan <yurchor(a)ukr.net>
- Deepak C Shetty <deepakcs(a)linux.vnet.ibm.com>
- Laszlo Ersek <lersek(a)redhat.com>
- Zeeshan Ali (Khattak) <zeeshanak(a)gnome.org>
- Marcelo Cerri <mhcerri(a)linux.vnet.ibm.com>
- Hendrik Schwartke <hendrik(a)os-t.de>
- Ansis Atteka <aatteka(a)nicira.com>
- Dan Wendlandt <dan(a)nicira.com>
- Kyle Mestery <kmestery(a)cisco.com>
- Lincoln Myers <lincoln_myers(a)yahoo.com>
- Peter Robinson <pbrobinson(a)gmail.com>
- Benjamin Cama <benoar(a)dolka.fr>
- Duncan Rance <libvirt(a)dunquino.com>
- Peng Zhou <ailvpeng25(a)gmail.com>
- Li Zhang <zhlcindy(a)linux.vnet.ibm.com>
- Stef Walter <stefw(a)gnome.org>
- Christian Benvenuti <benve(a)cisco.com>
- Ilja Livenson <ilja.livenson(a)gmail.com>
- Stefan Bader <stefan.bader(a)canonical.com>
- MATSUDA Daiki <matsudadik(a)intellilink.co.jp>
- Jan Kiszka <jan.kiszka(a)siemens.com>
- Ryan Woodsmall <rwoodsmall(a)gmail.com>
- Wido den Hollander <wido(a)widodh.nl>
- Eugen Feller <eugen.feller(a)inria.fr>
- Dmitry Guryanov <dguryanov(a)parallels.com>
- William Jon McCann <william.jon.mccann(a)gmail.com>
- David Weber <wb(a)munzinger.de>
- Marti Raudsepp <marti(a)juffo.org>
- Radu Caragea <dmns_serp(a)yahoo.com>
- Beat Jörg <Beat.Joerg(a)ssatr.ch>
- Gao feng <gaofeng(a)cn.fujitsu.com>
- Dipankar Sarma <dipankar(a)in.ibm.com>
- Gerd Hoffmann <kraxel(a)redhat.com>
- Viktor Mihajlovski <mihajlov(a)linux.vnet.ibm.com>
- Thang Pham <thang.pham(a)us.ibm.com>
- Eiichi Tsukata <eiichi.tsukata.xh(a)hitachi.com>
- Sascha Peilicke <saschpe(a)suse.de>
- Chuck Short <chuck.short(a)canonical.com>
- Sebastian Wiedenroth <wiedi(a)frubar.net>
- Ata E Husain Bohra <ata.husain(a)hotmail.com>
- Ján Tomko <jtomko(a)redhat.com>
- Richa Marwaha <rmarwah(a)linux.vnet.ibm.com>
- Peter Feiner <peter(a)gridcentric.ca>
- Frido Roose <frido.roose(a)gmail.com>
- Asad Saeed <asad.saeed(a)acidseed.com>
- Sukadev Bhattiprolu <sukadev(a)linux.vnet.ibm.com>
- Thomas Woerner <twoerner(a)redhat.com>
- J.B. Joret <jb(a)linux.vnet.ibm.com>
- Stefan Hajnoczi <stefanha(a)linux.vnet.ibm.com>
- Gene Czarcinski <gene(a)czarc.net>
- Nishank Trivedi <nistrive(a)cisco.com>
- Jasper Lievisse Adriaanse <jasper(a)humppa.nl>
- Paul Eggert <eggert(a)cs.ucla.edu>
- Dwight Engen <dwight.engen(a)oracle.com>
- liguang <lig.fnst(a)cn.fujitsu.com>
- Chuck Short <zulcss(a)gmail.com>
- Alexander Larsson <alexl(a)redhat.com>
-
- [....send patches to get your name here....]
-
-The libvirt Logo was designed by Diana Fong
-
--- End
-;; Local Variables:
-;; coding: utf-8
-;; End:
diff --git a/AUTHORS.in b/AUTHORS.in
new file mode 100644
index 0000000..01339f2
--- /dev/null
+++ b/AUTHORS.in
@@ -0,0 +1,90 @@
+ libvirt Authors
+ ===============
+
+The libvirt project was initiated by:
+
+Daniel Veillard <veillard(a)redhat.com> or <daniel(a)veillard.com>
+
+The primary maintainers and people with commit access rights:
+
+Alex Jia <ajia(a)redhat.com>
+Martin Kletzander <mkletzan(a)redhat.com>
+Alex Jia <ajia(a)redhat.com>
+Anthony Liguori <aliguori(a)us.ibm.com>
+Chris Lalancette <clalance(a)redhat.com>
+Christophe Fergeau <cfergeau(a)redhat.com>
+Cole Robinson <crobinso(a)redhat.com>
+Daniel Berrange <berrange(a)redhat.com>
+Daniel Veillard <veillard(a)redhat.com>
+Dave Allan <dallan(a)redhat.com>
+Eric Blake <eblake(a)redhat.com>
+Guido Günther <agx(a)sigxcpu.org>
+Jim Fehlig <jfehlig(a)suse.com>
+Jim Meyering <meyering(a)redhat.com>
+Jiří Denemark <jdenemar(a)redhat.com>
+John Levon <john.levon(a)sun.com>
+Justin Clift <jclift(a)redhat.com>
+Laine Stump <laine(a)redhat.com>
+Mark McLoughlin <markmc(a)redhat.com>
+Martin Kletzander <mkletzan(a)redhat.com>
+Matthias Bolte <matthias.bolte(a)googlemail.com>
+Michal Prívozník <mprivozn(a)redhat.com>
+Osier Yang <jyang(a)redhat.com>
+Peter Krempa <pkrempa(a)redhat.com>
+Richard W.M. Jones <rjones(a)redhat.com>
+Stefan Berger <stefanb(a)us.ibm.com>
+Wen Congyang <wency(a)cn.fujitsu.com>
+
+Previous maintainers:
+
+Atsushi SAKAI <sakaia(a)jp.fujitsu.com>
+Dan Smith <danms(a)us.ibm.com>
+Dave Leskovec <dlesko(a)linux.vnet.ibm.com>
+Karel Zak <kzak(a)redhat.com>
+
+Patches have also been contributed by:
+
+Abel Míguez Rodríguez <amiguezr(a)pdi.ucm.es>
+Amit Shah <amit.shah(a)redhat.com>
+Andrew Puch <apuch(a)redhat.com>
+Anton Protopopov <aspsk2(a)gmail.com>
+Ben Guthro <ben.guthro(a)gmail.com>
+Christian Ehrhardt <ehrhardt(a)linux.vnet.ibm.com>
+Daniel Hokka Zakrisson <daniel(a)hozac.com>
+Dan Wendlandt <dan(a)nicira.com>
+David Lively <dlively(a)virtualiron.com>
+David Lutterkort <dlutter(a)redhat.com>
+Evgeniy Sokolov <evg(a)openvz.org>
+Hugh Brock <hbrock(a)redhat.com>
+Itamar Heim <iheim(a)redhat.com>
+James Morris <jmorris(a)namei.org>
+Javier Fontan <jfontan(a)gmail.com>
+Jeremy Katz <katzj(a)redhat.com>
+Kaitlin Rupert <kaitlin(a)linux.vnet.ibm.com>
+Kazuki Mizushima <mizushima.kazuk(a)jp.fujitsu.com>
+Mads Chr. Olesen <shiyee(a)shiyee.dk>
+Mark Johnson <johnson.nh(a)gmail.com>
+Markus Armbruster <armbru(a)redhat.com>
+Masayuki Sunou <fj1826dm(a)aa.jp.fujitsu.com>
+Matthias Witte <witte(a)netzquadrat.de>
+Michel Ponceau <michel.ponceau(a)bull.net>
+Nobuhiro Itou <fj0873gn(a)aa.jp.fujitsu.com>
+Pete Vetere <pvetere(a)redhat.com>
+Philippe Berthault <philippe.berthault(a)Bull.net>
+Saori Fukuta <fukuta.saori(a)jp.fujitsu.com>
+Shigeki Sakamoto <fj0588di(a)aa.jp.fujitsu.com>
+Shuveb Hussain <shuveb(a)binarykarma.com>
+Stefan de Konink <dekonink(a)kinkrsoftware.nl>
+Takahashi Tomohiro <takatom(a)jp.fujitsu.com>
+Tatsuro Enokura <fj7716hz(a)aa.jp.fujitsu.com>
+
+#authorslist#
+
+[....send patches to get your name here....]
+
+The libvirt logo was designed by Diana Fong
+
+-- End
+;; Local Variables:
+;; coding: utf-8
+;; End:
diff --git a/Makefile.am b/Makefile.am
index 333e300..5ab75b4 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -28,6 +28,7 @@ EXTRA_DIST = \
cfg.mk \
examples/domain-events/events-python \
run.in \
+ AUTHORS.in \
$(XML_EXAMPLES)
pkgconfigdir = $(libdir)/pkgconfig
@@ -78,7 +79,7 @@ MAINTAINERCLEANFILES = .git-module-status
# disable this check
distuninstallcheck:
-dist-hook: gen-ChangeLog
+dist-hook: gen-ChangeLog gen-AUTHORS
# Generate the ChangeLog file (with all entries since the switch to git)
# and insert it into the directory we're about to use to create a tarball.
@@ -91,3 +92,12 @@ gen-ChangeLog:
rm -f $(distdir)/ChangeLog; \
mv $(distdir)/cl-t $(distdir)/ChangeLog; \
fi
+
+.PHONY: gen-AUTHORS
+gen-AUTHORS:
+ if test -d .git; then \
+ out="$$(git log --pretty=format:'%aN <%aE>' | sort -u)" && \
+ cat $(srcdir)/AUTHORS.in | perl -p -e "s/#authorslist#/$$out/" > \
+ $(distdir)/AUTHORS-tmp && \
+ mv -f $(distdir)/AUTHORS-tmp $(distdir)/AUTHORS ; \
+ fi
diff --git a/bootstrap.conf b/bootstrap.conf
index f8b7c4d..5d391fd 100644
--- a/bootstrap.conf
+++ b/bootstrap.conf
@@ -223,8 +223,8 @@ if `(${PYTHON_CONFIG-python-config} --version;
PYTHON_CONFIG=true
fi
-# Automake requires that ChangeLog exist.
-touch ChangeLog || exit 1
+# Automake requires that ChangeLog and AUTHORS exist.
+touch AUTHORS ChangeLog || exit 1
# Override bootstrap's list - we don't use mdate-sh or texinfo.tex.
gnulib_extra_files="
diff --git a/cfg.mk b/cfg.mk
index e1fbf4f..eed7fd8 100644
--- a/cfg.mk
+++ b/cfg.mk
@@ -43,7 +43,6 @@ _test_script_regex = \<\(init\|test-lib\)\.sh\>
# Tests not to run as part of "make distcheck".
local-checks-to-skip = \
changelog-check \
- check-AUTHORS \
makefile-check \
makefile_path_separator_check \
patch-check \
@@ -711,20 +710,6 @@ _autogen:
$(srcdir)/autogen.sh
./config.status
-# Give credit where due:
-# Ensure that each commit author email address (possibly mapped via
-# git log's .mailmap) appears in our AUTHORS file.
-sc_check_author_list:
- @fail=0; \
- for i in $$(git log --pretty=format:%aE%n|sort -u|grep -v '^$$'); do \
- sanitized=$$(echo "$$i"|LC_ALL=C sed 's/\([^a-zA-Z0-9_@-]\)/\\\1/g'); \
- grep -iq "<$$sanitized>" $(srcdir)/AUTHORS \
- || { printf '%s\n' "$$i" >&2; fail=1; }; \
- done; \
- test $$fail = 1 \
- && echo '$(ME): committer(s) not listed in AUTHORS' >&2; \
- test $$fail = 0
-
# regenerate HACKING as part of the syntax-check
syntax-check: $(top_srcdir)/HACKING
--
1.7.11.7
12 years
[libvirt] [PATCH] util: fix index when building lock owners array
by Laine Stump
The "restart" function for locks allocates a new array according to
and pre-sets its length, then reads the owner pids from a JSON
document in a loop. Rather than adding each owner at a different
index, though, it repeatedly overwrites the last element of the array
with all the owners.
---
src/util/virlockspace.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/util/virlockspace.c b/src/util/virlockspace.c
index 7e8c0a7..99b6182 100644
--- a/src/util/virlockspace.c
+++ b/src/util/virlockspace.c
@@ -435,7 +435,7 @@ virLockSpacePtr virLockSpaceNewPostExecRestart(virJSONValuePtr object)
goto error;
}
- res->owners[res->nOwners-1] = (pid_t)owner;
+ res->owners[j] = (pid_t)owner;
}
if (virHashAddEntry(lockspace->resources, res->name, res) < 0) {
--
1.7.11.7
12 years
[libvirt] [PATCH] Fix uninitialized variable in virLXCControllerSetupDevPTS
by Daniel P. Berrange
From: "Daniel P. Berrange" <berrange(a)redhat.com>
The lack of initialization of 'opts' caused a SEGV in the
cleanup: path if the root->src directory did not exist
Pushed under trivial rule
---
src/lxc/lxc_controller.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/lxc/lxc_controller.c b/src/lxc/lxc_controller.c
index a41c903..2f1e8a5 100644
--- a/src/lxc/lxc_controller.c
+++ b/src/lxc/lxc_controller.c
@@ -1144,7 +1144,7 @@ virLXCControllerSetupDevPTS(virLXCControllerPtr ctrl)
{
virDomainFSDefPtr root = virDomainGetRootFilesystem(ctrl->def);
char *mount_options = NULL;
- char *opts;
+ char *opts = NULL;
char *devpts = NULL;
int ret = -1;
--
1.7.11.7
12 years
[libvirt] [libvirt-glib v2] gobject: Fix GMutex leak
by Christophe Fergeau
When GLib deprecated g_mutex_new/g_mutex_free, we introduced a
compatibility wrapper to implement these using non-deprecated
functions. This was done by allocating 0-filled memory by the
mutex, and then letting GLib initialize the structure when
needed. However, we must call g_mutex_clear when destroying
the mutex to free these resources, which this patch fix.
---
libvirt-gobject/libvirt-gobject-compat.c | 16 ++++++++++++++++
libvirt-gobject/libvirt-gobject-compat.h | 8 ++++++--
2 files changed, 22 insertions(+), 2 deletions(-)
diff --git a/libvirt-gobject/libvirt-gobject-compat.c b/libvirt-gobject/libvirt-gobject-compat.c
index 99cd44c..14b5eb3 100644
--- a/libvirt-gobject/libvirt-gobject-compat.c
+++ b/libvirt-gobject/libvirt-gobject-compat.c
@@ -103,3 +103,19 @@ g_simple_async_report_take_gerror_in_idle(GObject *object,
g_object_unref(simple);
}
#endif
+
+GMutex *gvir_mutex_new(void)
+{
+ GMutex *mutex;
+
+ mutex = g_new(GMutex, 1);
+ g_mutex_init(mutex);
+
+ return mutex;
+}
+
+void gvir_mutex_free(GMutex *mutex)
+{
+ g_mutex_clear(mutex);
+ g_free(mutex);
+}
diff --git a/libvirt-gobject/libvirt-gobject-compat.h b/libvirt-gobject/libvirt-gobject-compat.h
index 839dfe1..1d45018 100644
--- a/libvirt-gobject/libvirt-gobject-compat.h
+++ b/libvirt-gobject/libvirt-gobject-compat.h
@@ -27,8 +27,12 @@
#include <gio/gio.h>
#if GLIB_CHECK_VERSION(2, 31, 0)
-#define g_mutex_new() g_new0(GMutex, 1)
-#define g_mutex_free(m) g_free(m)
+
+void gvir_mutex_free(GMutex *mutex);
+GMutex *gvir_mutex_new(void);
+#define g_mutex_new gvir_mutex_new
+#define g_mutex_free gvir_mutex_free
+
#endif
#if !GLIB_CHECK_VERSION(2,26,0)
--
1.8.0
12 years
[libvirt] [RFC PATCH 1/n] snapshot: add revert-and-create branching of external snapshots
by Eric Blake
Right now, libvirt refuses to revert to the state at the time
of an external snapshot, because doing so would reset things so
that the next time the domain boots, we are using the backing
file; but modifying the backing file invalidates all qcow2
files that are based on top of it. There are three possibilities
for lifting this restriction:
1. delete all snapshot metadata and qcow2 files that are
invalidated by the revert (losing changes since the snapshot)
2. perform a block commit (such as with qemu-img commit) to
merge the qcow2 file back into the backing file (keeping the
changes since the snapshot)
3. create NEW qcow2 files that wrap the same base file as
the original snapshot (keeping the changes since the original
snapshot)
This patch documents the API for option 3, by adding a new flag
to virDomainSnapshotCreateXML (the only snapshot-related function
that takes XML, which is required to pass in new file names
during the branch), and wires up virsh to expose it. Later
patches will enhance virDomainRevertToSnapshot to cover options
1 and 2.
API wise, an application wishing to do the revert-and-create
operation must add a <branch>name</branch> element to their
<domainsnapshot> XML, and pass VIR_DOMAIN_SNAPSHOT_CREATE_BRANCH
in the flags argument. In virsh, snapshot-create gains a new
boolean flag --branch that must match the XML passed in, and
snapshot-create-as gains a new --branch=name argument along
with a --current boolean for creating such XML.
* include/libvirt/libvirt.h.in
(VIR_DOMAIN_SNAPSHOT_CREATE_BRANCH): New flag.
* src/libvirt.c (virDomainSnapshotCreateXML): Document it, and
enforce some mutual exclusion.
(virDomainRevertToSnapshot): Mention how to revert to an
external snapshot without having to delete snapshots.
* docs/formatsnapshot.html.in: Document the new <branch> element.
* docs/schemas/domainsnapshot.rng: Allow new element.
* tools/virsh-snapshot.c (cmdSnapshotCreate): Add --branch option.
(cmdSnapshotCreateAs): Likewise, also add --current.
* tools/virsh.pod (snapshot-create, snapshot-create-as): Document
new usage.
---
Sending this patch now, to make sure I'm on the right track. I
have the following plans for the next few patches:
1.
Enhance virDomainSnapshotListFlags to add two new filter groups:
VIR_DOMAIN_SNAPSHOT_LIST_OFFLINE
VIR_DOMAIN_SNAPSHOT_LIST_ONLINE
VIR_DOMAIN_SNAPSHOT_LIST_DISK_ONLY
VIR_DOMAIN_SNAPSHOT_LIST_INTERNAL
VIR_DOMAIN_SNAPSHOT_LIST_EXTERNAL
(and possibly VIR_DOMAIN_SNAPSHOT_LIST_MIXED if we change our stance
and allow mixing internal and external in one snapshot)
2.
Add a flag to virDomainSnapshotParseFlags in src/conf/snapshot_conf.h;
when present, the new element is parsed, and appropriate elements of
the in-memory snapshot representation are copied in from the existing
external snapshot.
3.
Implement the new flag in qemu_driver.c for creation. Note that
branching works for both disk-only (whether offline or online) and
checkpoints - the new snapshot will share the same memory (none or
external) as the original, and all that really changes is the
creation (or reuse) of new backing files.
4.
Think about ramifications on revert - right now, with no options,
revert means to go back to the state where the snapshot was created;
but now that we allow the creation of branches, and since the branches
have external disk state which persists even when not on the branch, we
need a new revert flag that says to revert to an external snapshots
and its subsequent changes
5.
Think about ramifications on delete - for example, if two branches
of external snapshots share a common memory state file, and we delete
only one of the two branches, the memory state file must not be
deleted.
docs/formatsnapshot.html.in | 23 +++++++++++++++++++----
docs/schemas/domainsnapshot.rng | 5 +++++
include/libvirt/libvirt.h.in | 3 +++
src/libvirt.c | 35 ++++++++++++++++++++++++++++++-----
tools/virsh-snapshot.c | 31 ++++++++++++++++++++++++++-----
tools/virsh.pod | 16 ++++++++++++++--
6 files changed, 97 insertions(+), 16 deletions(-)
diff --git a/docs/formatsnapshot.html.in b/docs/formatsnapshot.html.in
index 8fcc04c..5018f41 100644
--- a/docs/formatsnapshot.html.in
+++ b/docs/formatsnapshot.html.in
@@ -87,7 +87,12 @@
sets that snapshot as current, and the prior current snapshot is
the parent of the new snapshot. Branches in the hierarchy can
be formed by reverting to a snapshot with a child, then creating
- another snapshot.
+ another snapshot. In the case of external snapshots, modifying
+ the backing files would invalidate all external files that
+ depend on the backing file, so the action of reverting to a
+ snapshot must be accompanied by either a request to delete all
+ invalidated snapshots, or to create a new snapshot at the same
+ time as the revert.
</p>
<p>
The top-level <code>domainsnapshot</code> element may contain
@@ -188,9 +193,19 @@
</dd>
<dt><code>parent</code></dt>
<dd>The parent of this snapshot. If present, this element
- contains exactly one child element, name. This specifies the
- name of the parent snapshot of this snapshot, and is used to
- represent trees of snapshots. Readonly.
+ contains exactly one child element, <code>name</code>. This
+ specifies the name of the parent snapshot of this snapshot,
+ and is used to represent trees of snapshots. Readonly.
+ </dd>
+ <dt><code>branch</code></dt>
+ <dd>The name of an existing external snapshot that forms the
+ branch point for this snapshot. Required when creating a
+ snapshot with
+ the <code>VIR_DOMAIN_SNAPSHOT_CREATE_BRANCH</code> flag, and
+ not present on output. When creating a branch snapshot, the
+ same set of <code>disks</code> must be external,
+ and <code>memory</code> is copied from the branch
+ point. <span class="since">since 1.0.1</span>.
</dd>
<dt><code>domain</code></dt>
<dd>The domain that this snapshot was taken against. Older
diff --git a/docs/schemas/domainsnapshot.rng b/docs/schemas/domainsnapshot.rng
index 45d55b5..6721e8f 100644
--- a/docs/schemas/domainsnapshot.rng
+++ b/docs/schemas/domainsnapshot.rng
@@ -85,6 +85,11 @@
</element>
</element>
</optional>
+ <optional>
+ <element name='parent'>
+ <text/>
+ </element>
+ </optional>
</interleave>
</element>
</define>
diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in
index bf584a0..53d21ce 100644
--- a/include/libvirt/libvirt.h.in
+++ b/include/libvirt/libvirt.h.in
@@ -3775,6 +3775,9 @@ typedef enum {
VIR_DOMAIN_SNAPSHOT_CREATE_LIVE = (1 << 8), /* create the snapshot
while the guest is
running */
+ VIR_DOMAIN_SNAPSHOT_CREATE_BRANCH = (1 << 9), /* specify an existing
+ external snapshot as
+ the branching point */
} virDomainSnapshotCreateFlags;
/* Take a snapshot of the current VM state */
diff --git a/src/libvirt.c b/src/libvirt.c
index bcb8233..e88effc 100644
--- a/src/libvirt.c
+++ b/src/libvirt.c
@@ -17747,9 +17747,7 @@ virDomainSnapshotGetConnect(virDomainSnapshotPtr snapshot)
* normally fails if snapshot metadata still remains on the source
* machine). When redefining snapshot metadata, the current snapshot
* will not be altered unless the VIR_DOMAIN_SNAPSHOT_CREATE_CURRENT
- * flag is also present. It is an error to request the
- * VIR_DOMAIN_SNAPSHOT_CREATE_CURRENT flag without
- * VIR_DOMAIN_SNAPSHOT_CREATE_REDEFINE. On some hypervisors,
+ * flag is also present. On some hypervisors,
* redefining an existing snapshot can be used to alter host-specific
* portions of the domain XML to be used during revert (such as
* backing filenames associated with disk devices), but must not alter
@@ -17788,6 +17786,15 @@ virDomainSnapshotGetConnect(virDomainSnapshotPtr snapshot)
* is not present, an error is thrown. Moreover, this flag requires
* VIR_DOMAIN_SNAPSHOT_CREATE_DISK_ONLY to be passed as well.
*
+ * If @flags includes VIR_DOMAIN_SNAPSHOT_CREATE_BRANCH, then @xmlDesc
+ * must describe an existing external snapshot as well as actions to
+ * create a new snapshot from the point where the existing snapshot was
+ * created rather than the current state of the guest. In this mode,
+ * the new snapshot branch is created but not activated unless the
+ * VIR_DOMAIN_SNAPSHOT_CREATE_CURRENT flag is also present. It is an
+ * error to request VIR_DOMAIN_SNAPSHOT_CREATE_LIVE or
+ * VIR_DOMAIN_SNAPSHOT_CREATE_QUIESCE in this mode.
+ *
* By default, if the snapshot involves external files, and any of the
* destination files already exist as a non-empty regular file, the
* snapshot is rejected to avoid losing contents of those files.
@@ -17844,9 +17851,11 @@ virDomainSnapshotCreateXML(virDomainPtr domain,
}
if ((flags & VIR_DOMAIN_SNAPSHOT_CREATE_CURRENT) &&
- !(flags & VIR_DOMAIN_SNAPSHOT_CREATE_REDEFINE)) {
+ !(flags & (VIR_DOMAIN_SNAPSHOT_CREATE_REDEFINE |
+ VIR_DOMAIN_SNAPSHOT_CREATE_BRANCH))) {
virReportInvalidArg(flags,
- _("use of 'current' flag in %s requires 'redefine' flag"),
+ _("use of 'current' flag in %s requires 'redefine' "
+ "or 'branch' flag"),
__FUNCTION__);
goto error;
}
@@ -17864,6 +17873,14 @@ virDomainSnapshotCreateXML(virDomainPtr domain,
__FUNCTION__);
goto error;
}
+ if (!!(flags & VIR_DOMAIN_SNAPSHOT_CREATE_REDEFINE) +
+ !!(flags & VIR_DOMAIN_SNAPSHOT_CREATE_LIVE) +
+ !!(flags & VIR_DOMAIN_SNAPSHOT_CREATE_BRANCH) > 1) {
+ virReportInvalidArg(flags,
+ _("'redefine', 'live', and 'branch' flags in %s are mutually exclusive"),
+ __FUNCTION__);
+ goto error;
+ }
if (conn->driver->domainSnapshotCreateXML) {
virDomainSnapshotPtr ret;
@@ -18673,6 +18690,14 @@ error:
* inactive snapshots with a @flags request to start the domain after
* the revert.
*
+ * Reverting to a snapshot with external state and then running the
+ * domain would invalidate all external files that depend on the backing
+ * file. Therefore, this function will fail unless any child external
+ * snapshots of the revert point first been deleted or merged. It is
+ * also possible to effectively revert and create a new snapshot branch
+ * in one operation, without invalidating snapshots, by using the
+ * VIR_DOMAIN_SNAPSHOT_CREATE_BRANCH flag of virDomainSnapshotCreateXML().
+ *
* Returns 0 if the creation is successful, -1 on error.
*/
int
diff --git a/tools/virsh-snapshot.c b/tools/virsh-snapshot.c
index 4281109..3de9878 100644
--- a/tools/virsh-snapshot.c
+++ b/tools/virsh-snapshot.c
@@ -120,7 +120,8 @@ static const vshCmdOptDef opts_snapshot_create[] = {
{"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")},
{"xmlfile", VSH_OT_DATA, 0, N_("domain snapshot XML")},
{"redefine", VSH_OT_BOOL, 0, N_("redefine metadata for existing snapshot")},
- {"current", VSH_OT_BOOL, 0, N_("with redefine, set current snapshot")},
+ {"current", VSH_OT_BOOL, 0,
+ N_("with redefine or branch, set current snapshot")},
{"no-metadata", VSH_OT_BOOL, 0, N_("take snapshot but create no metadata")},
{"halt", VSH_OT_BOOL, 0, N_("halt domain after snapshot is created")},
{"disk-only", VSH_OT_BOOL, 0, N_("capture disk state but not vm state")},
@@ -128,6 +129,7 @@ static const vshCmdOptDef opts_snapshot_create[] = {
{"quiesce", VSH_OT_BOOL, 0, N_("quiesce guest's file systems")},
{"atomic", VSH_OT_BOOL, 0, N_("require atomic operation")},
{"live", VSH_OT_BOOL, 0, N_("take a live snapshot")},
+ {"branch", VSH_OT_BOOL, 0, N_("create a branch snapshot")},
{NULL, 0, 0, NULL}
};
@@ -158,6 +160,8 @@ cmdSnapshotCreate(vshControl *ctl, const vshCmd *cmd)
flags |= VIR_DOMAIN_SNAPSHOT_CREATE_ATOMIC;
if (vshCommandOptBool(cmd, "live"))
flags |= VIR_DOMAIN_SNAPSHOT_CREATE_LIVE;
+ if (vshCommandOptBool(cmd, "branch"))
+ flags |= VIR_DOMAIN_SNAPSHOT_CREATE_BRANCH;
dom = vshCommandOptDomain(ctl, cmd, NULL);
if (dom == NULL)
@@ -306,6 +310,10 @@ static const vshCmdOptDef opts_snapshot_create_as[] = {
{"quiesce", VSH_OT_BOOL, 0, N_("quiesce guest's file systems")},
{"atomic", VSH_OT_BOOL, 0, N_("require atomic operation")},
{"live", VSH_OT_BOOL, 0, N_("take a live snapshot")},
+ {"branch", VSH_OT_DATA, VSH_OFLAG_REQ_OPT,
+ N_("name of external snapshot to use as a branch point")},
+ {"current", VSH_OT_BOOL, 0,
+ N_("with branch, make the new snapshot current")},
{"memspec", VSH_OT_DATA, VSH_OFLAG_REQ_OPT,
N_("memory attributes: [file=]name[,snapshot=type]")},
{"diskspec", VSH_OT_ARGV, 0,
@@ -322,6 +330,7 @@ cmdSnapshotCreateAs(vshControl *ctl, const vshCmd *cmd)
const char *name = NULL;
const char *desc = NULL;
const char *memspec = NULL;
+ const char *branch = NULL;
virBuffer buf = VIR_BUFFER_INITIALIZER;
unsigned int flags = 0;
const vshCmdOpt *opt = NULL;
@@ -340,6 +349,19 @@ cmdSnapshotCreateAs(vshControl *ctl, const vshCmd *cmd)
flags |= VIR_DOMAIN_SNAPSHOT_CREATE_ATOMIC;
if (vshCommandOptBool(cmd, "live"))
flags |= VIR_DOMAIN_SNAPSHOT_CREATE_LIVE;
+ if (vshCommandOptBool(cmd, "branch")) {
+ flags |= VIR_DOMAIN_SNAPSHOT_CREATE_BRANCH;
+ if (vshCommandOptString(cmd, "branch", &branch) < 0) {
+ vshError(ctl, _("argument must not be empty"));
+ goto cleanup;
+ }
+ if (vshCommandOptBool(cmd, "memspec")) {
+ vshError(ctl, _("--branch and --memspec are mutually exclusive"));
+ goto cleanup;
+ }
+ }
+ if (vshCommandOptBool(cmd, "current"))
+ flags |= VIR_DOMAIN_SNAPSHOT_CREATE_CURRENT;
dom = vshCommandOptDomain(ctl, cmd, NULL);
if (dom == NULL)
@@ -352,10 +374,9 @@ cmdSnapshotCreateAs(vshControl *ctl, const vshCmd *cmd)
}
virBufferAddLit(&buf, "<domainsnapshot>\n");
- if (name)
- virBufferEscapeString(&buf, " <name>%s</name>\n", name);
- if (desc)
- virBufferEscapeString(&buf, " <description>%s</description>\n", desc);
+ virBufferEscapeString(&buf, " <name>%s</name>\n", name);
+ virBufferEscapeString(&buf, " <description>%s</description>\n", desc);
+ virBufferEscapeString(&buf, " <branch>%s</branch>\n", branch);
if (vshCommandOptString(cmd, "memspec", &memspec) < 0 ||
vshParseSnapshotMemspec(ctl, &buf, memspec) < 0) {
diff --git a/tools/virsh.pod b/tools/virsh.pod
index 0808d72..a79ed50 100644
--- a/tools/virsh.pod
+++ b/tools/virsh.pod
@@ -2606,7 +2606,7 @@ used to represent properties of snapshots.
=item B<snapshot-create> I<domain> [I<xmlfile>] {[I<--redefine> [I<--current>]]
| [I<--no-metadata>] [I<--halt>] [I<--disk-only>] [I<--reuse-external>]
-[I<--quiesce>] [I<--atomic>] [I<--live>]}
+[I<--quiesce>] [I<--atomic>] [I<--live>] [I<--branch>]}
Create a snapshot for domain I<domain> with the properties specified in
I<xmlfile>. Normally, the only properties settable for a domain snapshot
@@ -2663,6 +2663,12 @@ If I<--live> is specified, libvirt takes the snapshot while the guest is
running. This increases the size of the memory image of the external
checkpoint. This is currently supported only for external checkpoints.
+If I<--branch> is specified, then I<xmlfile> must contain a B<branch>
+element naming an existing external snapshot which the new snapshot
+will branch from. In this usage, the new snapshot must also be
+external, and will not be made current unless I<--current> is also
+requested.
+
Existence of snapshot metadata will prevent attempts to B<undefine>
a persistent domain. However, for transient domains, snapshot
metadata is silently lost when the domain quits running (whether
@@ -2671,7 +2677,8 @@ by command such as B<destroy> or by internal guest action).
=item B<snapshot-create-as> I<domain> {[I<--print-xml>]
| [I<--no-metadata>] [I<--halt>] [I<--reuse-external>]} [I<name>]
[I<description>] [I<--disk-only> [I<--quiesce>]] [I<--atomic>]
-[[I<--live>] [I<--memspec> B<memspec>]] [I<--diskspec>] B<diskspec>]...
+[[I<--live>] [I<--memspec> B<memspec>]] [I<--branch> B<branch> [I<--current>]]
+[I<--diskspec>] B<diskspec>]...
Create a snapshot for domain I<domain> with the given <name> and
<description>; if either value is omitted, libvirt will choose a
@@ -2687,6 +2694,11 @@ by a B<memspec> of the form B<[file=]name[,snapshot=type]>, where
type can be B<none>, B<internal>, or B<external>. To include a literal
comma in B<file=name>, escape it with a second comma.
+The I<--branch> option can be used to create an external snapshot that
+branches from an existing snapshot named B<branch>. In this usage, the
+new snapshot is not made current unless I<--current> is also present.
+Specifying a branch point is incompatible with using I<--memspec>.
+
The I<--diskspec> option can be used to control how I<--disk-only> and
external checkpoints create external files. This option can occur
multiple times, according to the number of <disk> elements in the domain
--
1.7.11.7
12 years
[libvirt] [libvirt-glib] docs: Specify correct function to free GVirDomainInfo
by Zeeshan Ali (Khattak)
From: "Zeeshan Ali (Khattak)" <zeeshanak(a)gnome.org>
---
libvirt-gobject/libvirt-gobject-domain.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/libvirt-gobject/libvirt-gobject-domain.c b/libvirt-gobject/libvirt-gobject-domain.c
index 34d7519..4b82db9 100644
--- a/libvirt-gobject/libvirt-gobject-domain.c
+++ b/libvirt-gobject/libvirt-gobject-domain.c
@@ -957,8 +957,9 @@ gboolean gvir_domain_set_config(GVirDomain *domain,
* gvir_domain_get_info:
* @dom: the domain
*
- * Returns: (transfer full): the info. The returned object should be
- * unreffed with g_object_unref() when no longer needed.
+ * Returns: (transfer full): the info. The returned structure should be
+ * freed using #g_boxed_free() with GVIR_TYPE_DOMAIN_INFO as the first argument
+ * when no longer needed.
*/
GVirDomainInfo *gvir_domain_get_info(GVirDomain *dom,
GError **err)
--
1.8.0
12 years