- 26 2月, 2014 12 次提交
-
-
由 Eric Blake 提交于
On Fedora 20, I added this to my '~/.rpmmacros': %_without_udev 1 %_without_storage_mpath 1 %_without_storage_disk 1 and uninstalled systemd-devel (which also removed device-mapper-devel). Then I ran 'make rpm', and inspected the results: $ ldd ~/rpmbuild/BUILD/libvirt-1.2.2/daemon/.libs/libvirtd | grep syst $ Then I reinstalled systemd-devel, where I now see: $ ldd ~/rpmbuild/BUILD/libvirt-1.2.2/daemon/.libs/libvirtd | grep syst libsystemd-daemon.so.0 => /lib64/libsystemd-daemon.so.0 (0x00007ffb858ba000) $ Oops - the build is non-deterministic, where the final binary depends on my build environment. The fix is to require systemd-devel in all situations where the code base uses it. Now ~/.rpmmacros can contain "%define _without_systemd_daemon 1" to explicitly disable use of the library, but the library is now a strict build requirement for normal builds; if systemd-devel is not installed, the user now gets an up-front warning: $ rpmbuild -ta libvirt-1.2.2.tar.gz error: Failed build dependencies: systemd-devel is needed by libvirt-1.2.2-1.fc20.x86_64 * libvirt.spec.in (with_systemd_daemon): New variable. (BuildRequires): Require systemd-devel for more than just udev. (%configure): Make choice of systemd_daemon explicit. Signed-off-by: NEric Blake <eblake@redhat.com>
-
由 Eric Blake 提交于
On Fedora 20, with the following in my ~/.rpmmacros: %_without_udev 1 %_without_storage_mpath 1 and with device-mapper-devel uninstalled, 'make rpm' fails with: checking for libdevmapper.h... no configure: error: You must install device-mapper-devel/libdevmapper >= 1.0.0 to compile libvirt error: Bad exit status from /var/tmp/rpm-tmp.Wo9pOG (%build) This is a rather late point to be issuing an error; better is to flag missing packages up front. The fix is to match the logic in configure.ac on when devmapper is required (for both mpath and storage). While at it, rbd storage is not dependent on mpath. With this patch applied, I now get: $ rpmbuild -ta libvirt-1.2.2.tar.gz error: Failed build dependencies: device-mapper-devel is needed by libvirt-1.2.2-1.fc20.x86_64 until either installing the package or further modifying ~/.rpmmacros to add "%_without_storage_disk 1". * libvirt.spec.in (BuildRequires): Fix build when mpath is disabled. Signed-off-by: NEric Blake <eblake@redhat.com>
-
由 Eric Blake 提交于
Generally, we try to make the spec file tweakable via user variables, so that they can select a different subset of sub-rpms to build. We also try to explicitly list all driver config options, rather than leaving the chance that the rpm build may be non-deterministic based on what the user had installed locally. But in the case of the recent bhyve hypervisor driver, there is no port of bhyve to Linux, so it is easier to just blindly disable it for now. If someone ever does try to port bhyve to Fedora, we can make the spec file conditional at that point. * libvirt.spec.in (%configure): Don't try to build bhyve. Signed-off-by: NEric Blake <eblake@redhat.com>
-
由 Eric Blake 提交于
Commit 68954fb2 added a configure option --with-systemd_daemon, which violates the conventions of configure files preferring dash in all option names. This fixes it, before we hit a release where the tarball is baked with an awkward name. * m4/virt-lib.m4 (LIBVIRT_CHECK_LIB, LIBVIRT_CHECK_LIB_ALT) (LIBVIRT_CHECK_PKG): Favor - over _ in configure option names. Signed-off-by: NEric Blake <eblake@redhat.com>
-
由 Peter Krempa 提交于
RHEL still uses the 3.4.0 package of libgfapi and the package is built only for x86_64.
-
由 Laine Stump 提交于
According to commit b4e0299d if networkAllocateActualDevice() was successful, it will *always* allocate an iface->data.network.actual, so we can use this during networkReleaseActualDevice() to know if there is really anything to undo. We were properly using this information to only decrement the network connections counter if it had previously been incremented, but we were unconditionally unplugging bandwidth and calling the "unplugged" network hook for *all* interfaces (during qemuProcessStop()) whether they had been previously plugged or not. This caused problems if a domain failed to start at some time prior to all interfaces being allocated. (I encountered this when an interface had a bandwidth floor set but no inbound QoS). This patch changes both the call to networkUnplugBandwidth() and the call to networkRunHook() to only be called if there was a previous call to "plug" for the same interface.
-
由 Laine Stump 提交于
networkAllocateActualDevice() is called for *all* interfaces, not just those with type='network'. In that case, it will jump down to its validate: label immediately, without allocating anything. After validation is done, two counters are potentially updated (one for the network, and one for any particular physical device that is chosen), and then networkRunHook() is called. This patch refactors that code a slight bit so that networkRunHook() doesn't get called if netdef is NULL (i.e. type != network) and to place the conditional increment of dev->connections inside the "if (netdef)" as well - dev can never be non-null if netdef is null (because "dev" is the pointer to a device in a network's pool of devices), so this doesn't have any functional effect, it just makes the code clearer.
-
由 Nehal J Wani 提交于
While running virscsitest, it was found that valgrind pointed out the following memory leak: ==320== 5 bytes in 1 blocks are definitely lost in loss record 4 of 37 ==320== at 0x4A069EE: malloc (vg_replace_malloc.c:270) ==320== by 0x3E6CE81171: strdup (strdup.c:43) ==320== by 0x4CB28DF: virStrdup (virstring.c:554) ==320== by 0x4CAC987: virSCSIDeviceSetUsedBy (virscsi.c:289) ==320== by 0x402321: test2 (virscsitest.c:100) ==320== by 0x403231: virtTestRun (testutils.c:199) ==320== by 0x402121: mymain (virscsitest.c:180) ==320== by 0x4039AD: virtTestMain (testutils.c:782) ==320== by 0x3E6CE1ED1C: (below main) (libc-start.c:226) ==320== Introduced by commit fd243fc4. Signed-off-by: NJán Tomko <jtomko@redhat.com>
-
由 Michal Privoznik 提交于
Consider dozen of LXC domains, each of them having this type of interface: <interface type='network'> <mac address='52:54:00:a7:05:4b'/> <source network='default'/> </interface> When starting these domain in parallel, all workers may meet in virNetDevVethCreate() where a race starts. Race over allocating veth pairs because allocation requires two steps: 1) find first nonexistent '/sys/class/net/vnet%d/' 2) run 'ip link add ...' command Now consider two threads. Both of them find N as the first unused veth index but only one of them succeeds allocating it. The other one fails. For such cases, we are running the allocation in a loop with 10 rounds. However this is very flaky synchronization. It should be rather used when libvirt is competing with other process than when libvirt threads fight each other. Therefore, internally we should use mutex to serialize callers, and do the allocation in loop (just in case we are competing with a different process). By the way we have something similar already since 1cf97c87. Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
-
由 Eric Blake 提交于
Running ./autobuild.sh complained during the mingw cross-compile: CC libvirportallocatormock_la-virportallocatortest.lo ../../tests/virportallocatortest.c:32:20: fatal error: dlfcn.h: No such file or directory # include <dlfcn.h> ^ compilation terminated. With that fixed, the next failure was: CCLD qemuxml2argvmock.la libtool: link: libtool library `qemuxml2argvmock.la' must begin with `lib' libtool: link: Try `libtool --help --mode=link' for more information. While we don't need to limit all LD_PRELOAD tests to just Linux, we do need to limit them to platforms that actually support loading; we also need to avoid building qemu tests when qemu is not enabled. * tests/virportallocatortest.c: Make conditional on <dlfcn.h>. * tests/Makefile.am (test_libraries): Only build qemu mock library when building qemu tests. Signed-off-by: NEric Blake <eblake@redhat.com>
-
由 Eric Blake 提交于
Running ./autobuild.sh detected a mingw failure: CCLD libvirt.la Cannot export virCgroupGetPercpuStats: symbol not defined Cannot export virCgroupSetOwner: symbol not defined * src/util/vircgroup.c (virCgroupGetPercpuStats) (virCgroupSetOwner): Implement stubs. Signed-off-by: NEric Blake <eblake@redhat.com>
-
由 Jim Fehlig 提交于
The shutdown handler may restart a domain when handling a reboot event or when <on_*> is set to 'restart'. Restarting consists of calling libxlVmCleanup followed by libxlVmStart. libxlVmStart will emit a VIR_DOMAIN_EVENT_STARTED event, but the SHUTDOWN event is not emitted until exiting the shutdown handler, after the STARTED event. This patch changes the logic a bit to queue the event at the start of the shutdown action, ensuring it is queued before any subsequent events that may be generated while executing the shutdown action. Signed-off-by: NJim Fehlig <jfehlig@suse.com>
-
- 25 2月, 2014 18 次提交
-
-
由 Laine Stump 提交于
The network hook script gets called whenever an interface is plugged into or unplugged from a network, but even though the full XML of both the network and the domain is included, there is no reasonable way to determine what exact resources the plugged interface is using: 1) Prior to a recent patch which modified the status XML of interfaces to include the information about actual hardware resources used, it would be possible to scan through the domain XML output sent to the hook, and from there find the correct interface, but that interface definition would not include any runtime info (e.g. bandwidth or vlan taken from a portgroup, or which physdev was used in case of a macvtap network). 2) After the patch modifying the status XML of interfaces, the network name would no longer be included in the domain XML, so it would be completely impossible to determine which interface was the one being plugged. To solve that problem, this patch includes a single <interface> element at the beginning of the XML sent to the network hook for "plugged" and "unplugged" (just inside <hookData>) that is the status XML of the interface being plugged. This XML will include all info gathered from the chosen network and portgroup. NB: due to hardcoded spaces in all of the device *Format() functions, the <interface> element inside the <hookData> will be indented by 6 spaces rather than 2. I had intended to fix this, but it turns out that to make virDomainNetDefFormat() indentation relative, I would have to do the same to virDomainDeviceInfoFormat(), and that function is called from 19 places - making that a prerequisite of this patch would cause too many merge difficulties if we needed to backport network hooks, so I chose to ignore the problem here and fix the problem for *all* devices in a followup later.
-
由 Laine Stump 提交于
Until now, the "live" XML status of an <interface type='network'> device would always show the network information, rather than the exact hardware device that was used. It would also show the name of any portgroup the interface belonged to, rather than providing the configuration that was derived from that portgroup. As an example, given the following network definition: [A] <network> <name>testnet</name> <forward type='bridge' dev='p4p1_0'> <interface dev='p4p1_0'/> <interface dev='p4p1_1'/> <interface dev='p4p1_2'/> <interface dev='p4p1_3'/> </forward> <portgroup name='admin'> <bandwidth> <inbound average='1000' peak='5000' burst='1024'/> <outbound average='128' peak='256' burst='256'/> </bandwidth> </portgroup> </network> and the following domain <interface>: [B] <interface type='network'> <source network='testnet' portgroup='admin'/> </interface> the output of "virsh dumpxml $domain" while the domain was running would yield something like this: [C] <interface type='network'> <source network='testnet' portgroup='admin'/> <target dev='macvtap0'/> <alias name='net0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface> In order to learn the exact bandwidth information of the interface, a management application would need to retrieve the XML for testnet, then search for the portgroup named "admin". Even worse, there was no simple and standard way to learn which host physdev the macvtap0 device is attached to. Internally, libvirt has always kept this information in the virDomainDef that is held in memory, as well as storing it in the (libvirt-internal-only) domain status XML (in /var/run/libvirt/qemu/$domain.xml). In order to not confuse the runtime "actual state" with the config of the device, it's internally stored like this: [D] <interface type='network'> <source network='testnet' portgroup='admin'/> <actual type='direct'> <source dev='p4p1_0' mode='bridge'/> <bandwidth> <inbound average='1000' peak='5000' burst='1024'/> <outbound average='128' peak='256' burst='256'/> </bandwidth> </actual> <target dev='macvtap0'/> <alias name='net0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface> This was never exposed outside of libvirt though, because I thought it would be too awkward for a management application to need to look in two places for the same information, but I also wasn't sure that it would be okay to overwrite the config info (in this case "<source network='testnet' portgroup='admin'/>") with the actual runtime info (everything inside <actual> above). Now we have a need for this information to be made available to management applications (in particular, so that a network "plugged" hook will have full information about the device that is being plugged in), so it's time to take the leap and decide that it is acceptable for the config info to be replaced with actual runtime state (but *only* when reporting domain live status, *not* when saving state in /var/run/libvirt/qemu/$domain.xml - that remains the same so that there is no loss of information). That is what this patch does - once applied, the output of "virsh dumpxml $domain" when the domain is running will contain something like this: [E] <interface type='direct'> <source dev='p4p1_0' mode='bridge'/> <bandwidth> <inbound average='1000' peak='5000' burst='1024'/> <outbound average='128' peak='256' burst='256'/> </bandwidth> <target dev='macvtap0'/> <alias name='net0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface> In effect, everything that is internally stored within <actual> is moved up a level to where a management application will expect it. This means that the management application will only look in a single place to learn - the type of interface in use, the name of the physdev (if relevant), the <bandwidth>, <vlan>, and <virtualport> settings in use. The potential downside is that a management app looking at this output will not see that the physdev 'p4p1_0' was actually allocated from the network named 'testnet', or that the bandwidth numbers were taken from the portgroup 'admin'. However, if they are interested in that info, they can always get the "inactive" XML for the domain. An example of where this could cause problems is in virt-manager's network device display, which shows the status of the device, but allows you to edit that status info and save it as the new config. Previously virt-manager would always display the information in example [C] above, and allow editing that. With this patch, it will instead display what is in [E] and allow editing it directly, which could lead to some confusion. I would suggest that virt-manager have an "edit" button which would change the display from the "live" xml to the "inactive" xml, so that editing would be done on that; such a change would both handle the new situation, and also be compatible with older releases.
-
由 Laine Stump 提交于
This function is currently only called from one place, but in a subsequent patch will be called from a 2nd place. The new function exactly replicates the original behavior of the part of virDomainActualNetDefFormat() that it replaces, but takes a virDomainNetDefPtr instead of virDomainActualNetDefPtr, and uses the virDomainNetGetActual*() functions whenever possible, rather than reaching into def->data.network.actual - this is to be sure that we are reporting exactly what is being used internally, just in case there are any discrepancies (there shouldn't be).
-
由 Laine Stump 提交于
This moves the call to virNetDevBandwidthFormat() in virDomainNetDefFormat() to be called right after the call to virNetDevVPortProfileFormat(), so that a single chunk of that function can be placed inside an if that conditionally calls virDomainActualNetDefContentsFormat() instead (next patch). The re-ordering necessitates modifying a couple of test data files.
-
由 Laine Stump 提交于
We will need to call virDomainNetDefFormat() from the network hook (in the network driver).
-
由 Laine Stump 提交于
Other *Format() functions (e.g. virNetDevBandwidthFormat()) return with no action when called with a NULL *Def pointer. This makes virNetDevVlanFormat() consistent with that behavior.
-
由 Laine Stump 提交于
In practice, if a virDomainNetDef has a virDomainActualNetDef allocated, the ActualNetDef will *always* contain the bandwidth and vlan data from the NetDef (unless there was also a portgroup involved - see networkAllocateActualDevice()). However, virDomainNetGetActual(Bandwidth|Vlan)() were coded to make it appear as if it might be possible to have a valid bandwidth/vlan in the NetDef, but a NULL in the ActualNetDef. Believing this un-truth could lead to writing unnecessarily defensive code when dealing with the virDomainGetActual*() functions, so this patch makes it more obvious: If there is an ActualNetDef, it will always have a copy of the various appropriate bits from its parent NetDef, and the virDomainGetActual* function will *always* return the data from the ActualNetDef, not from the NetDef. The reason for this effective-NOP patch is that a subsequent patch to change virDomainNetDefFormat will rely on the above rule.
-
由 Wido den Hollander 提交于
These timeout values make librados/librbd return -ETIMEDOUT when a operation is blocking due to a failing/unreachable Ceph cluster. By having the operations time out libvirt will not block.
-
由 Wido den Hollander 提交于
With this information it's easier for the user to debug what is going wrong.
-
由 Chen Hanxiao 提交于
Fix a -Werror=maybe-uninitialized issue. Signed-off-by: NChen Hanxiao <chenhanxiao@cn.fujitsu.com> Signed-off-by: NJán Tomko <jtomko@redhat.com>
-
由 Eric Blake 提交于
I noticed this while shortening switch statements via VIR_ENUM. Basically, the only ways virAsprintf can fail are if we pass a bogus format string (but we're not THAT bad) or if we run out of memory (but it already warns on our behalf in that case). Throw away the cruft that tries too hard to diagnose a printf failure. * tools/virsh-volume.c (cmdVolList): Simplify. * tools/virsh-pool.c (cmdPoolList): Likewise. Signed-off-by: NEric Blake <eblake@redhat.com>
-
由 Eric Blake 提交于
Dan Berrange suggested that using VIR_ENUM_IMPL is more compact than open-coding switch statements, and still just as forceful at making us remember to update lists if we add enum values in the future. Make this change throughout virsh. Sure enough, doing this change caught that we missed at least VIR_STORAGE_VOL_NETDIR. * tools/virsh-domain-monitor.c (vshDomainIOErrorToString) (vshDomainControlStateToString, vshDomainStateToString) (vshDomainStateReasonToString): Change switch to enum lookup. (cmdDomControl, cmdDominfo): Update caller. * tools/virsh-domain.c (vshDomainVcpuStateToString) (vshDomainEventToString, vshDomainEventDetailToString): Change switch to enum lookup. (vshDomainBlockJobToString, vshDomainJobToString): New functions. (cmdVcpuinfo, cmdBlockJob, cmdDomjobinfo, cmdEvent): Update callers. * tools/virsh-network.c (vshNetworkEventToString): Change switch to enum lookup. * tools/virsh-pool.c (vshStoragePoolStateToString): New function. (cmdPoolList, cmdPoolInfo): Update callers. * tools/virsh-volume.c (vshVolumeTypeToString): Change switch to enum lookup. (cmdVolInfo, cmdVolList): Update callers. Signed-off-by: NEric Blake <eblake@redhat.com>
-
由 Ján Tomko 提交于
Change the logic of the function to return false by default and move the freeing of the buffer to the cleanup section. https://bugzilla.redhat.com/show_bug.cgi?id=1067338
-
由 Jim Fehlig 提交于
Add support for coredump-{destroy,restart} actions of <on_crash> event. Signed-off-by: NJim Fehlig <jfehlig@suse.com>
-
由 Jim Fehlig 提交于
Signed-off-by: NJim Fehlig <jfehlig@suse.com>
-
由 Jim Fehlig 提交于
The libxl driver was ignoring the <on_*> domain event configuration, causing e.g. a domain to be rebooted even when on_reboot is set to destroy. This patch honors the <on_*> configuration in the shutdown event handler. Signed-off-by: NJim Fehlig <jfehlig@suse.com>
-
- 24 2月, 2014 7 次提交
-
-
由 Richard Weinberger 提交于
This function is needed for user namespaces, where we need to chmod() the cgroup to the initial uid/gid such that systemd is allowed to use the cgroup. Signed-off-by: NRichard Weinberger <richard@nod.at> Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
-
由 Roman Bogorodskiy 提交于
- Implement nodeGetCPUStats using nodeGetCPUStats() - Implement nodeGetMemoryStats using nodeGetMemoryStats()
-
由 Daniel P. Berrange 提交于
Add a virStringReplace method to virstring.{h,c} to perform substring matching and replacement Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
-
由 Manuel VIVES 提交于
Add a virStringSearch method to virstring.{c,h} which performs a regex match against a string and returns the matching substrings. Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
-
由 Michal Privoznik 提交于
Systemd does not forget about the cases, where client service needs to wait for daemon service to initialize and start accepting new clients. Setting a dependency in client is not enough as systemd doesn't know when the daemon has initialized itself and started accepting new clients. However, it offers a mechanism to solve this. The daemon needs to call a special systemd function by which the daemon tells "I'm ready to accept new clients". This is exactly what we need with libvirtd-guests (client) and libvirtd (daemon). So now, with this change, libvirt-guests.service is invoked not any sooner than libvirtd.service calls the systemd notify function. Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
-
由 Michal Privoznik 提交于
I've noticed that in some cases systemd was quick enough and even if libvirt-guests.service is marked to be started after the libvirtd.service my guests were not resumed as libvirt-guests.sh failed to connect. This is because of a simple fact: systemd correctly starts libvirt-guests after it execs libvirtd. However, the daemon is not able to accept connections right from the start. It's doing some initialization which may take ages. This problem is not limited to systemd only, indeed. Any init system that is able to startup services in parallel (e.g. OpenRC) may run into this situation. The fix is to try connecting not only once, but continuously a few times with a small sleep in between tries. Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
-
由 Michal Privoznik 提交于
https://bugzilla.redhat.com/show_bug.cgi?id=1031696 When creating a new domain, we let systemd know about it by calling CreateMachine() function via dbus. Systemd then creates a scope and places domain into it. However, later when the host is shutting down, systemd computes the shutdown order to see what processes can be shut down in parallel. And since we were not setting dependencies at all, the slices (and thus domains) were most likely killed before libvirt-guests.service. So user domains that had to be saved, shut off, whatever were in fact killed. This problem can be solved by letting systemd know that scopes we're creating must not be killed before libvirt-guests.service. Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
-
- 22 2月, 2014 2 次提交
-
-
由 Eric Blake 提交于
vircgrouptest.c: In function 'testCgroupGetPercpuStats': vircgrouptest.c:543: warning: integer constatnt is too large for 'long' type Signed-off-by: NEric Blake <eblake@redhat.com>
-
由 Eric Blake 提交于
Based on a report from Pavel Hrdina, gnulib was fixed to support AC_PROG_SED even when using ancient autoconf 2.59 of RHEL 5. * .gnulib: Update to latest, to fix build on RHEL 5. Signed-off-by: NEric Blake <eblake@redhat.com>
-
- 21 2月, 2014 1 次提交
-
-
由 Ján Tomko 提交于
There has been a new field introduced in iscsiadm --mode session output [1], but our regex only expects four fields. This breaks startup of iscsi pools: error: Failed to start pool iscsi error: internal error: cannot find session Fix this by ignoring anything after the fourth field. https://bugzilla.redhat.com/show_bug.cgi?id=1067173 [1] https://github.com/mikechristie/open-iscsi/commit/181af9a
-