[libvirt] [PATCH] rpm: explicitly enable & start virlockd/virtlogd sockets on install
by Daniel P. Berrange
When installing the libvirt-daemon RPM, we have a %post rule to
enable the libvirtd.service, virtlockd.socket and virtlogd.socket
files. This is only done, however, when the RPM is first installed,
not when upgrading RPMs.
This adds a separate rule to explicitly enable the virtlockd.socket
and virtlogd.socket units upon RPM upgrade, if libvirtd.service
is marked as enabled. It also adds a rule to start the socket
units if libvirtd.service is running.
The downside with taking this approach is that it is impossible
for a user to have libvirtd.service enabled and disable socket
activation, because we'll re-enable it on every upgrade. Similarly
we'll be starting the socket listeners on every upgrade if libvirtd
is running. This is a pretty nasty thing to have to keep in libvirt
for the long term, given this upgrade problem is a one-time only
pain point.
For this reason I am recommending *NOT* applying this patch to GIT.
Instead, I think we just have to release note the fact that after
upgrading you should enable the virtlockd.socket unit.
---
libvirt.spec.in | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/libvirt.spec.in b/libvirt.spec.in
index 1f76f24..48e5632 100644
--- a/libvirt.spec.in
+++ b/libvirt.spec.in
@@ -1703,6 +1703,18 @@ if [ $1 -eq 1 ] ; then
libvirtd.service >/dev/null 2>&1 || :
fi
%endif
+
+# In upgrade scenario we must explicitly enable virtlockd/virtlogd
+# sockets, if libvirtd is already enabled and start them if
+# libvirtd is running, otherwise you'll get failures to start
+# guests
+if [ $1 -ge 1 ] ; then
+ /bin/systemctl is-enabled libvirtd.service 1>/dev/null 2>&1 &&
+ /bin/systemctl enable virtlockd.socket virtlogd.socket
+ /bin/systemctl is-active libvirtd.service 1>/dev/null 2>&1 &&
+ /bin/systemctl start virtlockd.socket virtlogd.socket
+fi
+
%else
%if %{with_cgconfig}
# Starting with Fedora 16/RHEL-7, systemd automounts all cgroups,
--
2.5.0
9 years, 3 months
[libvirt] Sparse image volDownload
by Michal Privoznik
Dear list,
I'd like to hear your opinion on the following bug:
https://bugzilla.redhat.com/show_bug.cgi?id=1282859
Long story short, Imagine the following scenario:
1. Create 4GB file full of zeroes
2. virsh vol-download it
What happens is that all those 4GB are transferred byte after byte
through our RPC system. Not only this puts needles pressure on our event
loop, it's suboptimal for network and other resources too.
I'd like to explore our options here keeping in mind that the original
volume might have been sparse and we ought to keep it sparse on the
destination too.
In the bug the reporter (Matthew Booth) suggests introducing new type of
RPC message that will let us keep our APIs unchanged. The source will
scan the file for windows of zeroes bigger than some value. When found
the new type of message is passed to client without need to copy those
zeroes. Yes, this is very similar to RLE.
If we are going that way, should we enable users to put a compression
program in between read()/write() and our RPC? Well, should we let users
to choose what compression program we will put there? Because there are
better compression algorithms than RLE.
Michal
9 years, 3 months
[libvirt] [PATCH] rpm: explicitly enable & start virtlogd on install
by Daniel P. Berrange
When installing the libvirt-daemon RPM, we have a %post rule to
enable the libvirtd.service, virtlockd.socket and virtlogd.socket
files. This is only done, however, when the RPM is first installed,
not when upgrading RPMs. So virtlogd will not get activated on
upgrading, which is a problem as libvirt qemu driver will expect
it to be available by default.
This adds a trigger that is run when uninstalling libvirt-daemon
older than 1.3.0 that will enable & start virtlogd.socket if
libvirtd is enabled and/or started. Using the trigger rather
than %post ensures that it only runs once, allowing admins to
disable it explicitly thereafter without future upgrades
re-enabling it.
Signed-off-by: Daniel P. Berrange <berrange(a)redhat.com>
---
libvirt.spec.in | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/libvirt.spec.in b/libvirt.spec.in
index 1f76f24..ff25881 100644
--- a/libvirt.spec.in
+++ b/libvirt.spec.in
@@ -1779,6 +1779,25 @@ if [ "$1" -ge "1" ]; then
fi
%endif
+# In upgrade scenario we must explicitly enable virtlockd/virtlogd
+# sockets, if libvirtd is already enabled and start them if
+# libvirtd is running, otherwise you'll get failures to start
+# guests
+%triggerpostun daemon -- libvirt-daemon < 1.3.0
+if [ $1 -ge 1 ] ; then
+ %if %{with_systemd}
+ /bin/systemctl is-enabled libvirtd.service 1>/dev/null 2>&1 &&
+ /bin/systemctl enable virtlogd.socket || :
+ /bin/systemctl is-active libvirtd.service 1>/dev/null 2>&1 &&
+ /bin/systemctl start virtlogd.socket || :
+ %else
+ /sbin/chkconfig libvirtd 1>/dev/null 2>&1 &&
+ /bin/chkconfig virtlogd on || :
+ /sbin/service libvirtd status 1>/dev/null 2>&1 &&
+ /bin/service virtlogd start || :
+ %endif
+fi
+
%if %{with_network}
%post daemon-config-network
if test $1 -eq 1 && test ! -f %{_sysconfdir}/libvirt/qemu/networks/default.xml ; then
--
2.5.0
9 years, 3 months
[libvirt] libvirt-php 0.5.1 uneeded files
by Remi Collet
Installing the new 0.5.1 version:
libvirt-php.la
libvirt-php.so -> libvirt-php.so.0.0.0
libvirt-php.so.0 -> libvirt-php.so.0.0.0
libvirt-php.so.0.0.0
This is not a versioned library but a PHP extension so having those
have no sense.
Only libvirt-php.so is needed.
Notice: I think it will be simpler to switch to the standard PHP
extension build system (phpize; configure; make)
Especially, this will allow to use the --with-php-config option (an
thus, build for not standard PHP, e.g. TS build or SCL build)
Remi.
9 years, 3 months
[libvirt] [PATCH] libvirtd: enable virtlockd/virtlogd socket activation on install
by Daniel P. Berrange
When someone does 'systemctl enable libvirtd.service' we should
also enable virtlockd.socket/virtlogd.socket, so that they can
be auto-activated if libvirtd tries to access the sockets.
Without this, people have to manually enable the units themselves
via 'systemctl enable virtdlogd.socket'.
This also ensures that if distros uses 'systemctl preset' for
enabling 'libvirtd.service', then the virtdlogd.socket gets
enabled without having to wait for the distro to update their
presets file.
Signed-off-by: Daniel P. Berrange <berrange(a)redhat.com>
---
daemon/libvirtd.service.in | 2 ++
1 file changed, 2 insertions(+)
diff --git a/daemon/libvirtd.service.in b/daemon/libvirtd.service.in
index 9e67e43..608221c 100644
--- a/daemon/libvirtd.service.in
+++ b/daemon/libvirtd.service.in
@@ -22,3 +22,5 @@ Restart=on-failure
[Install]
WantedBy=multi-user.target
+Also=virtlockd.socket
+Also=virtlogd.socket
--
2.5.0
9 years, 3 months
[libvirt] [libvirt-glib][PATCH] Drop unused finalize function
by Michal Privoznik
After 1225a160ac3b4 where I'm dropping some unused variables, the
functions I was touching became sort of redundant too.
Specifically, gvir_domain_disk_finalize() and
gvir_domain_interface_finalize().
Signed-off-by: Michal Privoznik <mprivozn(a)redhat.com>
---
libvirt-gobject/libvirt-gobject-domain-disk.c | 8 --------
libvirt-gobject/libvirt-gobject-domain-interface.c | 8 --------
2 files changed, 16 deletions(-)
diff --git a/libvirt-gobject/libvirt-gobject-domain-disk.c b/libvirt-gobject/libvirt-gobject-domain-disk.c
index 7f34ebd..bb2a682 100644
--- a/libvirt-gobject/libvirt-gobject-domain-disk.c
+++ b/libvirt-gobject/libvirt-gobject-domain-disk.c
@@ -49,16 +49,8 @@ gvir_domain_disk_error_quark(void)
return g_quark_from_static_string("gvir-domain-disk");
}
-static void gvir_domain_disk_finalize(GObject *object)
-{
- G_OBJECT_CLASS(gvir_domain_disk_parent_class)->finalize(object);
-}
-
static void gvir_domain_disk_class_init(GVirDomainDiskClass *klass)
{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->finalize = gvir_domain_disk_finalize;
g_type_class_add_private(klass, sizeof(GVirDomainDiskPrivate));
}
diff --git a/libvirt-gobject/libvirt-gobject-domain-interface.c b/libvirt-gobject/libvirt-gobject-domain-interface.c
index 443a2b6..beae11e 100644
--- a/libvirt-gobject/libvirt-gobject-domain-interface.c
+++ b/libvirt-gobject/libvirt-gobject-domain-interface.c
@@ -49,16 +49,8 @@ gvir_domain_interface_error_quark(void)
return g_quark_from_static_string("gvir-domain-interface");
}
-static void gvir_domain_interface_finalize(GObject *object)
-{
- G_OBJECT_CLASS(gvir_domain_interface_parent_class)->finalize(object);
-}
-
static void gvir_domain_interface_class_init(GVirDomainInterfaceClass *klass)
{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->finalize = gvir_domain_interface_finalize;
g_type_class_add_private(klass, sizeof(GVirDomainInterfacePrivate));
}
--
2.4.10
9 years, 3 months
[libvirt] [libvirt-glib][PATCH] gobject: Drop some unused variables
by Michal Privoznik
After abe983ddf8a569 there are some variables, that are unused:
CC libvirt_gobject_1_0_la-libvirt-gobject-domain-disk.lo
CC libvirt_gobject_1_0_la-libvirt-gobject-domain-interface.lo
CC libvirt_gobject_1_0_la-libvirt-gobject-domain.lo
CC libvirt_gobject_1_0_la-libvirt-gobject-interface.lo
../../libvirt-gobject/libvirt-gobject-domain-interface.c: In function 'gvir_domain_interface_finalize':
../../libvirt-gobject/libvirt-gobject-domain-interface.c:54:26: error: unused variable 'self' [-Werror=unused-variable]
GVirDomainInterface *self = GVIR_DOMAIN_INTERFACE(object);
^
cc1: all warnings being treated as errors
Makefile:724: recipe for target 'libvirt_gobject_1_0_la-libvirt-gobject-domain-interface.lo' failed
make[3]: *** [libvirt_gobject_1_0_la-libvirt-gobject-domain-interface.lo] Error 1
make[3]: *** Waiting for unfinished jobs....
../../libvirt-gobject/libvirt-gobject-domain-disk.c: In function 'gvir_domain_disk_finalize':
../../libvirt-gobject/libvirt-gobject-domain-disk.c:54:21: error: unused variable 'self' [-Werror=unused-variable]
GVirDomainDisk *self = GVIR_DOMAIN_DISK(object);
^
cc1: all warnings being treated as errors
Makefile:717: recipe for target 'libvirt_gobject_1_0_la-libvirt-gobject-domain-disk.lo' failed
Signed-off-by: Michal Privoznik <mprivozn(a)redhat.com>
---
Pushed under trivial rule.
libvirt-gobject/libvirt-gobject-domain-disk.c | 2 --
libvirt-gobject/libvirt-gobject-domain-interface.c | 2 --
2 files changed, 4 deletions(-)
diff --git a/libvirt-gobject/libvirt-gobject-domain-disk.c b/libvirt-gobject/libvirt-gobject-domain-disk.c
index 770acff..7f34ebd 100644
--- a/libvirt-gobject/libvirt-gobject-domain-disk.c
+++ b/libvirt-gobject/libvirt-gobject-domain-disk.c
@@ -51,8 +51,6 @@ gvir_domain_disk_error_quark(void)
static void gvir_domain_disk_finalize(GObject *object)
{
- GVirDomainDisk *self = GVIR_DOMAIN_DISK(object);
-
G_OBJECT_CLASS(gvir_domain_disk_parent_class)->finalize(object);
}
diff --git a/libvirt-gobject/libvirt-gobject-domain-interface.c b/libvirt-gobject/libvirt-gobject-domain-interface.c
index 57896fd..443a2b6 100644
--- a/libvirt-gobject/libvirt-gobject-domain-interface.c
+++ b/libvirt-gobject/libvirt-gobject-domain-interface.c
@@ -51,8 +51,6 @@ gvir_domain_interface_error_quark(void)
static void gvir_domain_interface_finalize(GObject *object)
{
- GVirDomainInterface *self = GVIR_DOMAIN_INTERFACE(object);
-
G_OBJECT_CLASS(gvir_domain_interface_parent_class)->finalize(object);
}
--
2.4.10
9 years, 3 months
[libvirt] [PATCH v2] libxl: free ifname on libxlDomainMigrationPrepareDef
by Joao Martins
Commit d2e5538b1 changes virDomainDef to include ifnames
that autogenerated by libxl, and that are also cleared
on domain cleanup. One place that's missing is on
migration, when domain xml is sent to dst libvirtd and
would contain ifnames from the source libvirtd. This
would lead to erronous behaviour (as seen in osstest CI)
such as failing to migrate when a vif with the same name
existed (belonging to another domain) on destination.
This patch adds a helper libxlDomainFreeIfaceNames for
clearing ifnames on both migration prepare phase and domain
cleanup. It is done on prepare phase so that we don't affect
source domain (specially in cases when the migration fails),
while still allowing interface stats to be consulted during
the migration.
Signed-off-by: Joao Martins <joao.m.martins(a)oracle.com>
---
Changes since v1:
- Commit message is changed
- Clear ifnames on prepare phase as opposed to begin phase.
---
src/libxl/libxl_domain.c | 32 ++++++++++++++++++++++----------
src/libxl/libxl_domain.h | 3 +++
src/libxl/libxl_migration.c | 2 ++
3 files changed, 27 insertions(+), 10 deletions(-)
diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c
index ef92974..487589d 100644
--- a/src/libxl/libxl_domain.c
+++ b/src/libxl/libxl_domain.c
@@ -728,16 +728,7 @@ libxlDomainCleanup(libxlDriverPrivatePtr driver,
}
}
- if ((vm->def->nnets)) {
- size_t i;
-
- for (i = 0; i < vm->def->nnets; i++) {
- virDomainNetDefPtr net = vm->def->nets[i];
-
- if (STRPREFIX(net->ifname, "vif"))
- VIR_FREE(net->ifname);
- }
- }
+ libxlDomainFreeIfaceNames(vm->def);
if (virAsprintf(&file, "%s/%s.xml", cfg->stateDir, vm->def->name) > 0) {
if (unlink(file) < 0 && errno != ENOENT && errno != ENOTDIR)
@@ -923,6 +914,27 @@ libxlDomainCreateIfaceNames(virDomainDefPtr def, libxl_domain_config *d_config)
}
}
+/*
+ * Removes autogenerated interface names for the network devices in
+ * parameter def. User-provided interface names are skipped.
+ */
+void
+libxlDomainFreeIfaceNames(virDomainDefPtr def)
+{
+ size_t i;
+
+ for (i = 0; i < def->nnets; i++) {
+ virDomainNetDefPtr net = def->nets[i];
+
+ if (!net->ifname)
+ continue;
+
+ if (STRPREFIX(net->ifname, "vif"))
+ VIR_FREE(net->ifname);
+ }
+}
+
+
/*
* Start a domain through libxenlight.
diff --git a/src/libxl/libxl_domain.h b/src/libxl/libxl_domain.h
index 44b3e0b..70c139c 100644
--- a/src/libxl/libxl_domain.h
+++ b/src/libxl/libxl_domain.h
@@ -135,6 +135,9 @@ int
libxlDomainSetVcpuAffinities(libxlDriverPrivatePtr driver,
virDomainObjPtr vm);
+void
+libxlDomainFreeIfaceNames(virDomainDefPtr def);
+
int
libxlDomainStart(libxlDriverPrivatePtr driver,
virDomainObjPtr vm,
diff --git a/src/libxl/libxl_migration.c b/src/libxl/libxl_migration.c
index 0d23e5f..1ca31ab 100644
--- a/src/libxl/libxl_migration.c
+++ b/src/libxl/libxl_migration.c
@@ -288,6 +288,8 @@ libxlDomainMigrationPrepareDef(libxlDriverPrivatePtr driver,
VIR_DOMAIN_DEF_PARSE_INACTIVE)))
goto cleanup;
+ libxlDomainFreeIfaceNames(def);
+
if (dname) {
name = def->name;
if (VIR_STRDUP(def->name, dname) < 0) {
--
2.1.4
9 years, 3 months
[libvirt] [PATCH RFC 0/3] Add a "flags" element to storage pool source
by John Ferlan
https://bugzilla.redhat.com/show_bug.cgi?id=1265694
Posting as an RFC mainly to get buyin/feedback over the concept of using
a <flags> field in the <pool> <source> as a way to allow or direct the
pool/storage backend code to use specific algorithms.
The issue is described in the bz, but the shorter version is the disk
backend needs a way to tell libvirt_parthelper to format output for
dm-multipath volumes in a slight different manner. In order to do that
I chose a new flag to call libvirt_parthelper to indicate the way to
output, but I needed a way to have the disk backend determine whether
to add the flag or not. Could have read /etc/multipath.conf - not a
good option... Don't want to read their config file. If there was an
API to get that data, it would have been nice, but then we'd have to
rely on a specific version of multipath that had the API (a dependency
that we don't want). So I chose to roll our own.
I figure there could be other uses of such kind of flags - for example
currently logical volume pools use a model of thin volume support that
is "older". A newer model is there, but IIRC the "format" of the lvs
output wouldn't mesh. So if there was a way to say, use this format of
support in preference, then we could easily add that support with the
caveat that one couldn't expect an "old" thin pool to work. IOW, use
the much improved algorithm knowing that it's a "new" pool rather than
having to mess with "conversions"... Perhaps other pools may find uses,
but this one came to mind since I have a long dormant set of changes
that uses the new thin pool options...
John Ferlan (3):
conf: Add flags to the storage pool source
storage: Add new flag for libvirt_parthelper
conf: Parse/use a flags argument in the storage pool xml
docs/formatstorage.html.in | 33 ++++++++++++++++++++
docs/schemas/storagepool.rng | 9 ++++++
src/conf/storage_conf.c | 41 +++++++++++++++++++++++++
src/conf/storage_conf.h | 11 +++++++
src/storage/parthelper.c | 15 +++++++--
src/storage/storage_backend_disk.c | 7 +++++
tests/storagepoolxml2xmlin/pool-disk-flags.xml | 15 +++++++++
tests/storagepoolxml2xmlout/pool-disk-flags.xml | 15 +++++++++
tests/storagepoolxml2xmltest.c | 1 +
9 files changed, 144 insertions(+), 3 deletions(-)
create mode 100644 tests/storagepoolxml2xmlin/pool-disk-flags.xml
create mode 100644 tests/storagepoolxml2xmlout/pool-disk-flags.xml
--
2.5.0
9 years, 3 months