Devel
Threads by month
- ----- 2026 -----
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
May 2015
- 81 participants
- 233 discussions
It's out ! Libvirt 1.2.15 is released, I tagged it in git and
provided signed tarballs and rpms available at the usual place:
ftp://libvirt.org/libvirt/
I also pushed a python bindings release too at:
ftp://libvirt.org/libvirt/python/
This is again a reasonably large release with around 375 patches
merged in, including a fairly large set of bug fixes across all
areas. A few user visible features and a large set of improvements
are there too:
Features:
- Implement virDomainAddIOThread and virDomainDelIOThread (John Ferlan)
- libxl: Introduce configuration file for libxl driver (Jim Fehlig)
- Add VIR_DOMAIN_EVENT_ID_DEVICE_ADDED event (Ján Tomko)
- various improvements to parallels driver (Maxim Nestratov, Dmitry Guryanov)
Documentation:
- qemu: Fix comment for timeDelta (Jiri Denemark)
- Fix typo in comment about memory binding (zhang bo)
- virhostdev: Fix comments for virHostdevReAttachPCIDevices (John Ferlan)
- Add articles to virDomainDeviceDetachFlags docs (Ján Tomko)
- lib: snapshot: Explain that only one layer of images is inserted (Peter Krempa)
- Visually separate snapshot disk subelements (Ján Tomko)
- Add info (where necessary) that paths should be specified as absolute (Erik Skultety)
- Typos: Get rid of dependan(t|cies) (Martin Kletzander)
- Add Host sFlow into monitoring apps (Martin Kletzander)
Portability:
- Fix building virnetserverclientmock with MinGW (Martin Kletzander)
- Cleanup parameters for mock libraries (Martin Kletzander)
- Cleanup srcdir usage (Michal Privoznik)
- Add missing linker flags for MinGW build (Pavel Fedin)
- build: add pragma directive to fix build on some gcc (Pavel Hrdina)
- build: avoid obsolete index() (Eric Blake)
- util: fix build on non-Linux (Roman Bogorodskiy)
- vircapstest: fix build without LXC, QEMU or XEN (Roman Bogorodskiy)
- virbuffer: fix build on rhel-6 (Pavel Hrdina)
- tests: fix build on old 32-bit platforms (Eric Blake)
- build: provide virNetDevSysfsFile on non-Linux (Eric Blake)
- build: include correct header for time() (Eric Blake)
- xen: fix build error on rhel-5 (Pavel Hrdina)
- qemu: Avoid shadow of 'sync' symbol (Peter Krempa)
Bug Fixes:
- qemu: Fix bus and lun checks when scsi-disk.channel not present (John Ferlan)
- rpm-build: update %files section for libxl (Pavel Hrdina)
- qemu: blockjob: Call qemuDomainSupportsBlockJobs only on online VMs (Peter Krempa)
- qemu: Check address type for USB disks (Jiri Denemark)
- cpu: Honor vendor_id override in host-model (Jiri Denemark)
- iscsi: do not fail to stop a stopped pool (Ján Tomko)
- qemu: conf: Reject memory device if it would exceed configured max size (Peter Krempa)
- qemu: blockCopy: Allow reuse of raw image for shallow block copy (Peter Krempa)
- tests: free ChardevInfo correctly in qemumonitorjsontest (Zhang Bo)
- storage: fs: Ignore volumes that fail to open with EACCESS/EPERM (Cole Robinson)
- storage: If driver startup state syncing fails, delete statefile (Cole Robinson)
- storage: Don't leave stale state file if pool startup fails (Cole Robinson)
- storage: Fix autostart dir for qemu:///session (Cole Robinson)
- qemu: qemuProcessDetectIOThreadPIDs invert checks (John Ferlan)
- conf: Resolve some Coverity errors (John Ferlan)
- network: check newDef for used bridge names in addition to def (Laine Stump)
- network: check for bridge name conflict with existing devices (Laine Stump)
- network: move auto-assign of bridge name from XML parser to net driver (Laine Stump)
- test: Fix actual vs. expected in virtTestCompareFiles (Laine Stump)
- qemu: Resolve Coverity DEADCODE (John Ferlan)
- util: fix memleak in virStorageSourceClear (zhang bo)
- storage: Resolve Coverity UNINIT (John Ferlan)
- Fix check for return value of qemuDomainAgentAvailable() (Martin Kletzander)
- conf: fix memleak in virDomainHostdevDefClear (Zhang Bo)
- conf: fix memleak in virDomainNetIpParseXML (Zhang Bo)
- qemu: fix memleak in virCapabilitiesDomainDataLookup (Zhang Bo)
- qemu: fix memleaks in qemuBuildCommandLine (Zhang Bo)
- util: fix memleak in virFindSCSIHostByPCI (Zhang Bo)
- tests: fix some memleaks in tests (Zhang Bo)
- qemu: Fix domain object leak in qemuDomainInterfaceAddresses (Peter Krempa)
- libxl: initialize sdl.opengl defbool in libxlMakeVfb (Jim Fehlig)
- libxl: initialize vfb defbools in libxlMakeVfb (Olaf Hering)
- parallels: fix crash in prlsdkAddNet in case of CT definition (Maxim Nestratov)
- bhyve: fix build in tests (Roman Bogorodskiy)
- Fix memory leak in virNetSocketNewConnectUNIX (Jiri Denemark)
- parallels: fix IS_CT macro (Maxim Nestratov)
- rng: fix port number range validation (Daniel P. Berrange)
- qemu: Don't fail to reboot domains with unresponsive agent (zhang bo)
- bhyve: fix build in tests (Roman Bogorodskiy)
- spec: Fix libxl build with driver modules (Cole Robinson)
- configure: Fix --loader-nvram typo (Cole Robinson)
- parallels: don't forget to unlock domain after successful virDomainObjListFindByUUID call (Maxim Nestratov)
- vircommand: fix polling in virCommandProcessIO (Roman Bogorodskiy)
- util: storage: Fix possible crash when source path is NULL (Peter Krempa)
- qemu: Fix issues with maxMemory in qemuDomainSetMemoryFlags() (Luyao Huang)
- qemu: set macvtap physdevs online when macvtap is set online (Laine Stump)
- util: set MAC address for VF via netlink message to PF+VF# when possible (Laine Stump)
- qemu: Always refresh capabilities if no <guests> found (Cole Robinson)
- scsi: Adjust return values from processLU (John Ferlan)
- storage: Fix check for stable path check (John Ferlan)
- domtop: Properly free cpu status (Michal Privoznik)
- parallels: fix return status for parallelsConnectOpen (Nikolay Shirokovskiy)
- lxc: fix starting a domain with non-strict numa memory mode (Luyao Huang)
- lxc: fix starting a domain with a cpuset but no numatune (Luyao Huang)
- rng: Forbid to validate mismatched <disk> 'device' and 'type' attributes (Erik Skultety)
- domcaps: Check for architecture more wisely (Michal Privoznik)
- virNetSocketNewConnectUNIX: Don't unlink(NULL) (Michal Privoznik)
- libxl: drop virDomainObj lock when destroying a domain (Jim Fehlig)
- libxl: acquire a job when destroying a domain (Jim Fehlig)
- virCondWaitUntil: calculate timespec correctly (Michael Chapman)
- qemu: bulk stats: Ignore errors from missing/inaccessible disks (Peter Krempa)
- Strip control codes in virBufferEscapeString (Ján Tomko)
- Ignore storage volumes with control codes in their names (Ján Tomko)
- Strip control characters from sysfs attributes (Ján Tomko)
- tests: Resolve Coverity RESOURCE_LEAK (John Ferlan)
- virsh: fix regression in 'virsh event' by domain (Eric Blake)
- qemu: monitor: Fix qemuMonitorGetAllBlockStatsInfo with HMP (Peter Krempa)
- qemu: monitor: Ensure that qemuMonitorSetLink is called with non-null name (Peter Krempa)
- virNetSocketNewConnectUNIX: Use flocks when spawning a daemon (Michal Privoznik)
- sanlock: Use VIR_ERR_RESOURCE_BUSY if sanlock_acquire fails (Jiri Denemark)
- hostdev: fix loop index error when resetvfnetconfig (Huanle Han)
- qemu: fix index error when clean up vport profile (Huanle Han)
- virt-aa-helper: add unix channels (esp for qemu-guest-agent) (Serge Hallyn)
- qemu: save domain status after set memory parameters (Shanzhi Yu)
- virsh: improve the error for wrong memtune parameters (Shanzhi Yu)
- qemu: drivePivot: Fix assumption when 'block-job-complete' fails (Peter Krempa)
- qemu: Fix condition for checking vcpu when pinning vcpus (Peter Krempa)
- qemu: Enforce WWN to be unique among VM's disks (Peter Krempa)
- virBitmap: Place virBitmapIsAllClear check after virBitmapParse calls (Erik Skultety)
- Fix usb device version parsing issues (Ján Tomko)
- Support IPv6 in networkGetNetworkAddress (Ján Tomko)
- util: Update virNetDevGetIPAddress to get IPv6 addresses (Luyao Huang)
- parallels: fix virDomainDefineXML for domain in saved state (Dmitry Guryanov)
- conf: fix virDomainDefFormatInternal for parallels (Dmitry Guryanov)
- conf: fix virDomainDefParseXML for parallels (Dmitry Guryanov)
- storage: Don't duplicate efforts of backend driver (John Ferlan)
- storage: Need to update freeExtent at delete primary partition (John Ferlan)
- storage: Fix issues in storageVolResize (John Ferlan)
- Open /proc/PID/ns/* read-only to avoid getting permission denied (Cédric Bosdonnat)
- lxc: create the required directories upon driver start (Lubomir Rintel)
- util: file: Don't carelessly sanitize URIs (Peter Krempa)
- fix memleak in qemuRestoreCgroupState (Luyao Huang)
- qemuProcessHook: Call virNuma*() only when needed (Michal Privoznik)
- parallels: delete old networks in prlsdkDoApplyConfig before adding new ones (Maxim Nestratov)
- util: fix removal of callbacks in virCloseCallbacksRun (Michael Chapman)
- qemu: fix race between disk mirror fail and cancel (Michael Chapman)
- qemu: fix error propagation in qemuMigrationBegin (Michael Chapman)
- qemu: fix crash in qemuProcessAutoDestroy (Michael Chapman)
- virQEMUDriverGetConfig: Fix memleak (Michal Privoznik)
- virDomainVirtioSerialAddrSetFree: Fix memleak (Michal Privoznik)
- qemuSetupCgroupForVcpu: Fix memleak (Michal Privoznik)
- libvirt: virsh: Kill all uses of __FUNCTION__ in error messages (Noella Ashu)
- virsh: Fix domifaddr output in quiet mode (Luyao Huang)
- libxl: fix dom0 balloon logic (Jim Fehlig)
- hostdev: Fix index error in loop after remove an element (Huanle Han)
- Fix xlconfigtest with older libxl (Ján Tomko)
- iscsi: Fix exit path for virStorageBackendISCSIFindLUs failure (John Ferlan)
- qemuDomainBlockCopy: Check @granularity to be a power of two (Luyao Huang)
- nodeinfodata: Remove broken symlinks and uneeded files (Michal Privoznik)
- qemu: lifecycle: make agent-mode shutdown and reboot timeout (zhang bo)
Improvements:
- main: add new generated files to .gitignore (Pavel Hrdina)
- libxl: provide integration with lock manager (Jim Fehlig)
- domain: conf: Drop unused OSTYPE_AIX (Cole Robinson)
- qemu: migration: use sync block job helpers (Michael Chapman)
- qemuDomainBlockJobAbort: use sync block job helpers (Michael Chapman)
- qemuProcessStop: wake up pending sync block jobs (Michael Chapman)
- qemuBlockJobSync*: introduce sync block job helpers (Michael Chapman)
- qemuBlockJobEventProcess: move to new source file (Michael Chapman)
- qemu: Validate available slot count for memory devices (Peter Krempa)
- qemu: command: Validate that memory devices slot ID is in range (Peter Krempa)
- parallels: implement domainDetachDevice and domainDetachDeviceFlags (Maxim Nestratov)
- parallels: add prlsdkDelDisk and prlsdkGetDiskIndex functions (Maxim Nestratov)
- qemu: make qemuMonitorChardevInfoFree non-static (Zhang Bo)
- storage: Break out storageDriverLoadPoolState (Cole Robinson)
- qemu: Remove need for qemuMonitorIOThreadInfoFree (John Ferlan)
- qemu: Remove need for qemuDomainParseIOThreadAlias (John Ferlan)
- conf: explicitly initialize 'cpumask' variable (Roman Bogorodskiy)
- virsh: Add iothreadadd and iothreaddel commands (John Ferlan)
- qemu: Add support to Add/Delete IOThreads (John Ferlan)
- domain: Introduce virDomainIOThreadSchedDelId (John Ferlan)
- remote: Add support for AddIOThread and DelIOThread (John Ferlan)
- conf: Adjust the iothreadsched expectations (John Ferlan)
- Move iothreadspin information into iothreadids (John Ferlan)
- conf: Move virDomainPinIsDuplicate and make static (John Ferlan)
- qemu: Use domain iothreadids to IOThread's 'thread_id' (John Ferlan)
- conf: Add new domain XML element 'iothreadids' (John Ferlan)
- openvz: Drop useless domain lookup (Michal Privoznik)
- qemu: Connect to guest agent after channel hotplug (Peter Krempa)
- qemu: agent: Differentiate errors when the agent channel was hotplugged (Peter Krempa)
- qemu: Reuse qemuDomainAgentAvailable in qemuDomainInterfaceAddresses (Peter Krempa)
- qemu: agent: Reuse virJSONValueObjectCreateVArgs in qemuAgentMakeCommand (Peter Krempa)
- libxl: remove duplicate check for pci subsystem type (Olaf Hering)
- libxl: use pci init and dispose functions (Olaf Hering)
- hostdev: fix net config restore error (Huanle Han)
- hostdev: Create virHostdevIsPCINetDevice (Huanle Han)
- qemu: Build nvram directory at driver startup (Cole Robinson)
- qemu: Build channel autosocket directory at driver startup (Cole Robinson)
- qemu: chown autoDumpPath on driver startup (Cole Robinson)
- qemu: conf: Clarify paths that are relative to libDir (Cole Robinson)
- tests: qemu: Couple aarch64 CPU tests (Cole Robinson)
- migration: Usable time statistics without requiring NTP (Jiri Denemark)
- uml: s/virDomainObjListFindByID/virDomainObjListFindByUUID/ (Michal Privoznik)
- virDomainObjList: Introduce yet another hash table (Michal Privoznik)
- virDomainObjListFindByName: Return referenced object (Michal Privoznik)
- Introduce virDomainObjEndAPI (Michal Privoznik)
- virDomainObjListNew: Use virObjectFreeHashData (Michal Privoznik)
- virDomainObjListAddLocked: s/false/NULL/ for @oldDef (Michal Privoznik)
- parallels: implement .domainGetMaxMemory (Dmitry Guryanov)
- Apparmor: allow reading block-rbd.so (Cédric Bosdonnat)
- Allow access to vendor and device file for PCI device passthrough (Cédric Bosdonnat)
- qemu: cgroup: Fix priorities when setting emulatorpin (Peter Krempa)
- tests: Add VIR_TEST_REGENERATE_OUTPUT (Cole Robinson)
- tests: Add virtTestCompareToFile (Cole Robinson)
- tests: Use *DefParseFile more (Cole Robinson)
- tests: Add VIR_TEST_DEBUG and VIR_TEST_VERBOSE (Cole Robinson)
- parallels_sdk: Utilize parallelsDomObjFromDomain() (Michal Privoznik)
- parallels_driver: Utilize parallelsDomObjFromDomain() (Michal Privoznik)
- parallels: Introduce parallelsDomObjFromDomain() (Michal Privoznik)
- struct _parallelsConn: Mark @domains as immutable pointer (Michal Privoznik)
- spec: Point fedora --with-loader-nvram at nightly firmware repo (Cole Robinson)
- configure: Report --with-loader-nvram value in summary (Cole Robinson)
- locking: relax PID requirement (Jim Fehlig)
- util: storage: Improve error message when requesting image above 'start' (Peter Krempa)
- util: storage: Add hint to error message that indexed access was used (Peter Krempa)
- util: command: Deduplicate code in virCommandNewArgList (Peter Krempa)
- qemu: migration: Refactor hostdev validation in migration check (Peter Krempa)
- processNicRxFilterChangedEvent: Take appropriate actions for NET_TYPE_NETWORK too (Michal Privoznik)
- virDomainActualNetDefContentsFormat: Format class_id only for status XML (Michal Privoznik)
- scsi: Change return values for virStorageBackendSCSIFindLUs (John Ferlan)
- scsi: Adjust return value for virStorageBackendSCSINewLun (John Ferlan)
- storage: Split out the stable path check (John Ferlan)
- xend: Remove a couple of unused function prototypes. (Richard W.M. Jones)
- domain: conf: Drop expectedVirtTypes (Cole Robinson)
- caps: Use DomainDataLookup to replace GuestDefault* (Cole Robinson)
- domain: conf: Use CapabilitiesDomainDataLookup for caps validation (Cole Robinson)
- domain: conf: Do ostype/arch/machine parsing earlier (Cole Robinson)
- caps: Add virCapabilitiesDomainDataLookup (Cole Robinson)
- caps: Convert to use VIR_DOMAIN_VIRT internally (Cole Robinson)
- domain: Convert os.type to VIR_DOMAIN_OSTYPE enum (Cole Robinson)
- caps: Switch AddGuest to take VIR_DOMAIN_OSTYPE value (Cole Robinson)
- caps: Use an enum internally for ostype value (Cole Robinson)
- domain: conf: Don't validate VM ostype/arch at daemon startup (Cole Robinson)
- domain: conf: Better errors on bad os <type> values (Cole Robinson)
- parallels: make device addressing consistent (Nikolay Shirokovskiy)
- rng: Move sgio attr definition to a separate block (Erik Skultety)
- Apparmor: removed duplicate nscd rules (Cédric Bosdonnat)
- schema: Allow multiple machines for VMs and unite architectures (Martin Kletzander)
- qemuDomainShutdownFlags: Set fakeReboot more frequently (zhang bo)
- Introduce virNetDevBandwidthUpdateFilter (Michal Privoznik)
- virnetdevbandwidth.c: Separate tc filter creation to a function (Michal Privoznik)
- virNetDevBandwidthSet: Add priority to filter (Michal Privoznik)
- virDomainActualNetDefContentsFormat: Format class_id more frequently (Michal Privoznik)
- nwfilter: Partly initialize driver even for non-privileged users (Michal Privoznik)
- lxc: move wireless PHYs to a network namespace (Lubomir Rintel)
- libxl: Move job acquisition in libxlDomainStart to callers (Jim Fehlig)
- libxl: support HVM direct kernel boot (Jim Fehlig)
- xenconfig: don't use "kernel" for hvmloader (Jim Fehlig)
- xenconfig: move <os> parsing/formating to config-specific files (Jim Fehlig)
- xenconfig: remove redunant parsing of device_model (Jim Fehlig)
- xenconfig: export xenConfigCopyString (Jim Fehlig)
- storage: Refactor virStorageBackendSCSINewLun (John Ferlan)
- qemu: monitor: Refactor and fix monitor checking (Peter Krempa)
- daemon: Prefix sysctl configuration filename with a number (Jiri Denemark)
- RNG schema: allow plain @floor to <bandwidth/> (Michal Privoznik)
- virNetDevBandwidthPlug: Update function description (Michal Privoznik)
- Add functions dealing with control characters in strings (Ján Tomko)
- tests: rename testStripIPv6BracketsData to testStripData (Ján Tomko)
- Add an example for EVENT_ID_DEVICE_ADDED (Ján Tomko)
- Emit VIR_DOMAIN_EVENT_ID_DEVICE_ADDED in the QEMU driver (Ján Tomko)
- Cleanup "/sys/class/net" usage (Michal Privoznik)
- tests: Add virnetdevtestdata to EXTRA_DIST (Michal Privoznik)
- node: udev: Remove some redundant error reports (Peter Krempa)
- virPidFileConstructPath: Drop useless VIR_FREE() (Michal Privoznik)
- qemu: monitor: @running in qemuMonitorGetStatus is always non-NULL (Peter Krempa)
- qemu: monitor: Don't use 'ret' variable where not necessary (Peter Krempa)
- qemu: monitor: Sanitize control flow in qemuMonitorSetCapabilities (Peter Krempa)
- qemu: monitor: Clean up coding style (Peter Krempa)
- json: export non-static functions (Martin Kletzander)
- Change virConnectPtr into virObjectLocklable (Martin Kletzander)
- closeCallback is already lockable, initialize it as such (Martin Kletzander)
- configure: Align messages (Martin Kletzander)
- storage: Add duplicate devices check for zfs pool def (John Ferlan)
- storage: Add duplicate source pool for Gluster pool def (John Ferlan)
- storage: Add duplicate host check for Sheepdog pool def (John Ferlan)
- storage: Remove default from switch in virStoragePoolSourceFindDuplicate (John Ferlan)
- storage: Use virStoragePoolSourceMatchSingleHost for NETFS (John Ferlan)
- storage: Add check for different ports for host duplicate matching (John Ferlan)
- storage: Create virStoragePoolSourceMatchSingleHost (John Ferlan)
- storage: Refactor iSCSI Source matching (John Ferlan)
- Introduce virnetdevtest (Michal Privoznik)
- cfg: Disallow usage of 'index' as variable name (John Ferlan)
- nwfilter: Change 'index' to 'idx' (John Ferlan)
- snapshot: Change 'index' to 'idx' (John Ferlan)
- util: Use 'idx' instead of 'index' (John Ferlan)
- qemu: Adjust the prototype to match the function (John Ferlan)
- sparc: Add default PCI root controller (Martin Kletzander)
- qemu: Use 'idx' instead of 'index' for variable name (John Ferlan)
- qemu: Refactor qemuDomainBlockJobAbort() (Peter Krempa)
- qemu: blockPull: Refactor the rest of qemuDomainBlockJobImpl (Peter Krempa)
- qemu: blockjob: Separate qemuDomainBlockJobAbort from qemuDomainBlockJobImpl (Peter Krempa)
- qemu: blockjob: Split qemuDomainBlockJobSetSpeed from qemuDomainBlockJobImpl (Peter Krempa)
- qemu: monitor: Extract handling of JSON block job error codes (Peter Krempa)
- qemu: monitor: json: Refactor error code class checker (Peter Krempa)
- conf: Refactor virDomainVcpuPinDefParseXML (Peter Krempa)
- conf: Error out if iothread id is missing in iothreadpin (Peter Krempa)
- onf: Split up virDomainVcpuPinDefParseXML (Peter Krempa)
- conf: Split out parsing of emulatorpin (Peter Krempa)
- conf: ABI: Check WWN in disk abi stability check (Peter Krempa)
- Convert virDomainPinIsDuplicate into bool return (John Ferlan)
- Rename qemuCheckIothreads to qemuCheckIOThreads (John Ferlan)
- Rewrite vshParseCPUList (Ján Tomko)
- Rewrite vshPrintPinInfo (Ján Tomko)
- Parallels: implemented domainAttachDevice (Alexander Burluka)
- Parallels: implement domainAttachDeviceFlags (Alexander Burluka)
- Parallels: remove disk serial number check (Alexander Burluka)
- Remove overengineered loop (Ján Tomko)
- Introduce struct _virStorageBackendQemuImgInfo (Ján Tomko)
- Rename virStorageBackendCreateQemuImgCmd (Ján Tomko)
- Use XPath when parsing snapshot disk definition (Ján Tomko)
- Split out storage format 'compat' attribute sanity check (Ján Tomko)
- Remove feature formating funcs from pool-specific options (Ján Tomko)
- Rewrite usb device version parsing (Ján Tomko)
- Do xml->xml test for usb-redir-filter (Ján Tomko)
- Do not require virtio-pci devices when using virtio-mmio (Ján Tomko)
- qemuMigrationPrecreateStorage: Fix debug message (Michal Privoznik)
- qemu_migration.c: sleep first before checking for migration status. (Xing Lin)
- conf: Don't output <cpu> tag if it contains no information. (Andrea Bolognani)
- qemu: qemuDomainHotplugVcpus - separate out pin adjustment code (John Ferlan)
- AUTHORS: Add my email address to AUTHORS.in (Dmitry Guryanov)
- util: Replace virNetDevGetIPv4Address with virNetDevGetIPAddress (John Ferlan)
- parallels: add implicit input devices (Dmitry Guryanov)
- conf: add input device type for parallels containers (Dmitry Guryanov)
- conf: return proper default video type for parallels (Dmitry Guryanov)
- conf: add VIR_DOMAIN_VIDEO_TYPE_PARALLELS video type (Dmitry Guryanov)
- parallels: don't fill net adapter model for containers (Dmitry Guryanov)
- parallels: fill adapter model in virDomainNetDef (Dmitry Guryanov)
- parallels: add controllers in prlsdkLoadDomain (Dmitry Guryanov)
- parallels: report, that cdroms are readonly (Dmitry Guryanov)
- parallels: implement virDomainManagedSave (Dmitry Guryanov)
- parallels: split prlsdkDomainChangeState function (Dmitry Guryanov)
- parallels: fix headers in parallels_sdk.h (Dmitry Guryanov)
- qemu: qemuDomainHotplugVcpus - separate out the del cgroup and pin (John Ferlan)
- qemu: qemuDomainHotplugVcpus - separate out the add cgroup (John Ferlan)
- cgroup: Use virCgroupNewThread (John Ferlan)
- cgroup: Introduce virCgroupNewThread (John Ferlan)
- qemu: blockPivot: Don't pause the VM any more since we don't use drive-reopen (Peter Krempa)
- qemu: Clean up old leftovers in qemuMonitorDrivePivot (Peter Krempa)
- qemu: blockjob: Use the new helpers in qemuDomainGetBlockJobInfo (Peter Krempa)
- qemu: domain: Add helper to check block job support (Peter Krempa)
- qemu: domain: Introduce helper to retrieve domain monitor object (Peter Krempa)
- Apparmor qemu abstraction fixes for SLES (Cédric Bosdonnat)
- test: Add tests for virFileSanitizePath (Peter Krempa)
- virLXCControllerSetupResourceLimits: Call virNuma*() iff needed (Michal Privoznik)
- vbox: Implement virDomainSendKey (Dawid Zamirski)
- vbox: Register IKeyboard with the unified API. (Dawid Zamirski)
- vircgroup: Introduce virCgroupControllerAvailable (Michal Privoznik)
- qemu_driver: check caps after starting block job (Michael Chapman)
- qemu_migrate: use nested job when adding NBD to cookie (Michael Chapman)
- storage: Introduce storagePoolUpdateAllState function (Erik Skultety)
- conf: Introduce virStoragePoolLoadAllState && virStoragePoolLoadState (Erik Skultety)
- storage: Add support for storage pool state XML (Erik Skultety)
- hostdev: Report the domain name for used hostdevs during nodedev-detach (Shivaprasad G Bhat)
- virsh: Improve change-media success message (Cole Robinson)
- interface: allow multiple IPv4 addresses in interface XML (Laine Stump)
- virsh.pod: Remove redundant --config from attach-interface (Jiri Denemark)
- esx: esxNodeGetFreeMemory return info from host. (Dawid Zamirski)
- esx: add esxVI_GetInt (Dawid Zamirski)
- conf: Change virStoragePoolSaveConfig prototype s/configDir/configFile (Erik Skultety)
- conf: Introduce virStoragePoolSaveState (Erik Skultety)
- conf: Introduce virStoragePoolDefFormatBuf (Erik Skultety)
- Auto add virtio-serial controllers (Ján Tomko)
- Assign an address when hotplugging a virtio-serial device (Ján Tomko)
- Expand the address set when attaching a virtio-serial controller (Ján Tomko)
- Allocate virtio-serial addresses when starting a domain (Ján Tomko)
- Add functions to track virtio-serial addresses (Ján Tomko)
- Add test for virtio serial port assignment (Ján Tomko)
- scsi: Remove unused 'type_path' in processLU (John Ferlan)
- iscsi: Use error message from virStorageBackendSCSIFindLUs (John Ferlan)
- conf: Introduce virStoragePoolSaveXML (Erik Skultety)
- storage: Remove unused attribute conn from 'checkPool' callback (Erik Skultety)
- Fix indentation in cmdVcpuPin (Ján Tomko)
- virsh: remove stale comment (Ján Tomko)
- conf: Rename virDomainHasDiskMirror and detect block jobs properly (Shanzhi Yu)
- qemu: snapshot: Check for block jobs individually (Peter Krempa)
- Remove unnecessary includes from virsh.h (Ján Tomko)
- Remove unused includes from virsh (Ján Tomko)
- Clean up headers in src/util/virutil.h (Ján Tomko)
- Do not include cpu_map.h in libvirtd.c (Ján Tomko)
- Use the DEFAULT_DRIVER_DIR macro (Ján Tomko)
- Remove unused macros (Ján Tomko)
- qemu: Copy bitmap in a sane way (Peter Krempa)
- qemu: cgroup: Kill qemuSetupCgroupVcpuPin() (Peter Krempa)
- qemu: cgroup: Kill qemuSetupCgroupIOThreadsPin() (Peter Krempa)
- qemu: cgroup: Rename qemuSetupCgroupEmulatorPin to qemuSetupCgroupCpusetCpus (Peter Krempa)
- qemu: cgroup: Use priv->autoCpuset instead of using qemuPrepareCpumap() (Peter Krempa)
- qemu: cgroup: Properly set up vcpu pinning (Peter Krempa)
- qemu: cgroup: Refactor setup for IOThread cgroups (Peter Krempa)
- qemu: cgroup: Store auto cpuset instead of re-creating it on demand (Peter Krempa)
So thanks everybody for your contributions for this release, be it
ideas, bug reports, documentations, patches, reviews ... all those releases
represent a massive amount of work !
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/
1
0
I'm a little late, but I have now tagged candidate release 1 for
1.2.15 in git and pushed signed tarballs and rpms to the usual place:
ftp://libvirt.org/libvirt/
this seems to work for me in my limited testing, but please give
it a try, especially on less common platforms.
The https://ci.centos.org/ seems to indicate issues on building the
Perl tests as well as virt-manager regression testing, can someone dig
into what is happening there ?
I will likely push an rc2 on Thursday, and then the final release over the
week-end,
thanks!
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/
3
4
01 May '15
Provide integration with libvirt's lock manager in the libxl driver.
Signed-off-by: Jim Fehlig <jfehlig(a)suse.com>
---
V3 of
https://www.redhat.com/archives/libvir-list/2015-April/msg01006.html
In V3, call virDomainLockProcessStart() with 'paused' parameter
set to 'true' and add a call to virDomainLockProcessResume().
src/Makefile.am | 12 +++++++++
src/libxl/libvirtd_libxl.aug | 2 ++
src/libxl/libxl.conf | 10 +++++++
src/libxl/libxl_conf.c | 14 ++++++++++
src/libxl/libxl_conf.h | 6 +++++
src/libxl/libxl_domain.c | 51 +++++++++++++++++++++++++++++++++++-
src/libxl/libxl_domain.h | 1 +
src/libxl/libxl_driver.c | 25 ++++++++++++++++++
src/libxl/libxl_migration.c | 6 +++++
src/libxl/test_libvirtd_libxl.aug.in | 1 +
10 files changed, 127 insertions(+), 1 deletion(-)
diff --git a/src/Makefile.am b/src/Makefile.am
index 9a5f16c..1438174 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -2246,6 +2246,12 @@ BUILT_SOURCES += locking/qemu-lockd.conf
DISTCLEANFILES += locking/qemu-lockd.conf
endif WITH_QEMU
+if WITH_LIBXL
+nodist_conf_DATA += locking/libxl-lockd.conf
+BUILT_SOURCES += locking/libxl-lockd.conf
+DISTCLEANFILES += locking/libxl-lockd.conf
+endif WITH_LIBXL
+
locking/%-lockd.conf: $(srcdir)/locking/lockd.conf
$(AM_V_GEN)$(MKDIR_P) locking ; \
cp $< $@
@@ -2431,6 +2437,12 @@ nodist_conf_DATA += locking/qemu-sanlock.conf
BUILT_SOURCES += locking/qemu-sanlock.conf
DISTCLEANFILES += locking/qemu-sanlock.conf
endif WITH_QEMU
+
+if WITH_LIBXL
+nodist_conf_DATA += locking/libxl-sanlock.conf
+BUILT_SOURCES += locking/libxl-sanlock.conf
+DISTCLEANFILES += locking/libxl-sanlock.conf
+endif WITH_LIBXL
else ! WITH_SANLOCK
EXTRA_DIST += $(LOCK_DRIVER_SANLOCK_SOURCES)
endif ! WITH_SANLOCK
diff --git a/src/libxl/libvirtd_libxl.aug b/src/libxl/libvirtd_libxl.aug
index f225954..d5aa150 100644
--- a/src/libxl/libvirtd_libxl.aug
+++ b/src/libxl/libvirtd_libxl.aug
@@ -25,9 +25,11 @@ module Libvirtd_libxl =
(* Config entry grouped by function - same order as example config *)
let autoballoon_entry = bool_entry "autoballoon"
+ let lock_entry = str_entry "lock_manager"
(* Each entry in the config is one of the following ... *)
let entry = autoballoon_entry
+ | lock_entry
let comment = [ label "#comment" . del /#[ \t]*/ "# " . store /([^ \t\n][^\n]*)?/ . del /\n/ "\n" ]
let empty = [ label "#empty" . eol ]
diff --git a/src/libxl/libxl.conf b/src/libxl/libxl.conf
index c104d40..ba3de7a 100644
--- a/src/libxl/libxl.conf
+++ b/src/libxl/libxl.conf
@@ -10,3 +10,13 @@
# autoballoon setting.
#
#autoballoon = 1
+
+
+# In order to prevent accidentally starting two domains that
+# share one writable disk, libvirt offers two approaches for
+# locking files: sanlock and virtlockd. sanlock is an external
+# project which libvirt integrates with via the libvirt-lock-sanlock
+# package. virtlockd is a libvirt implementation that is enabled with
+# "lockd". Accepted values are "sanlock" and "lockd".
+#
+#lock_manager = "lockd"
diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c
index 1b504fa..29498d5 100644
--- a/src/libxl/libxl_conf.c
+++ b/src/libxl/libxl_conf.c
@@ -102,6 +102,7 @@ libxlDriverConfigDispose(void *obj)
VIR_FREE(cfg->libDir);
VIR_FREE(cfg->saveDir);
VIR_FREE(cfg->autoDumpDir);
+ VIR_FREE(cfg->lockManagerName);
}
@@ -1495,6 +1496,7 @@ int libxlDriverConfigLoadFile(libxlDriverConfigPtr cfg,
const char *filename)
{
virConfPtr conf = NULL;
+ virConfValuePtr p;
int ret = -1;
/* Check the file is readable before opening it, otherwise
@@ -1512,6 +1514,18 @@ int libxlDriverConfigLoadFile(libxlDriverConfigPtr cfg,
if (libxlGetAutoballoonConf(cfg, conf) < 0)
goto cleanup;
+ if ((p = virConfGetValue(conf, "lock_manager"))) {
+ if (p->type != VIR_CONF_STRING) {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ "%s",
+ _("Unexpected type for 'lock_manager' setting"));
+ goto cleanup;
+ }
+
+ if (VIR_STRDUP(cfg->lockManagerName, p->str) < 0)
+ goto cleanup;
+ }
+
ret = 0;
cleanup:
diff --git a/src/libxl/libxl_conf.h b/src/libxl/libxl_conf.h
index 5ba1a71..0a1c0db 100644
--- a/src/libxl/libxl_conf.h
+++ b/src/libxl/libxl_conf.h
@@ -38,6 +38,7 @@
# include "virobject.h"
# include "virchrdev.h"
# include "virhostdev.h"
+# include "locking/lock_manager.h"
# define LIBXL_DRIVER_NAME "xenlight"
# define LIBXL_VNC_PORT_MIN 5900
@@ -98,6 +99,8 @@ struct _libxlDriverConfig {
* memory for new domains from domain0. */
bool autoballoon;
+ char *lockManagerName;
+
/* Once created, caps are immutable */
virCapsPtr caps;
@@ -144,6 +147,9 @@ struct _libxlDriverPrivate {
/* Immutable pointer, lockless APIs*/
virSysinfoDefPtr hostsysinfo;
+
+ /* Immutable pointer. lockless access */
+ virLockManagerPluginPtr lockManager;
};
# define LIBXL_SAVE_MAGIC "libvirt-xml\n \0 \r"
diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c
index 3039427..5f5f8e5 100644
--- a/src/libxl/libxl_domain.c
+++ b/src/libxl/libxl_domain.c
@@ -34,6 +34,7 @@
#include "virlog.h"
#include "virstring.h"
#include "virtime.h"
+#include "locking/domain_lock.h"
#define VIR_FROM_THIS VIR_FROM_LIBXL
@@ -217,12 +218,36 @@ libxlDomainObjPrivateFree(void *data)
{
libxlDomainObjPrivatePtr priv = data;
+ VIR_FREE(priv->lockState);
virObjectUnref(priv);
}
+static int
+libxlDomainObjPrivateXMLParse(xmlXPathContextPtr ctxt, void *data)
+{
+ libxlDomainObjPrivatePtr priv = data;
+
+ priv->lockState = virXPathString("string(./lockstate)", ctxt);
+
+ return 0;
+}
+
+static int
+libxlDomainObjPrivateXMLFormat(virBufferPtr buf, void *data)
+{
+ libxlDomainObjPrivatePtr priv = data;
+
+ if (priv->lockState)
+ virBufferAsprintf(buf, "<lockstate>%s</lockstate>\n", priv->lockState);
+
+ return 0;
+}
+
virDomainXMLPrivateDataCallbacks libxlDomainXMLPrivateDataCallbacks = {
.alloc = libxlDomainObjPrivateAlloc,
.free = libxlDomainObjPrivateFree,
+ .parse = libxlDomainObjPrivateXMLParse,
+ .format = libxlDomainObjPrivateXMLFormat,
};
@@ -667,6 +692,11 @@ libxlDomainCleanup(libxlDriverPrivatePtr driver,
virHostdevReAttachDomainDevices(hostdev_mgr, LIBXL_DRIVER_NAME,
vm->def, VIR_HOSTDEV_SP_PCI, NULL);
+ VIR_FREE(priv->lockState);
+ if (virDomainLockProcessPause(driver->lockManager, vm, &priv->lockState) < 0)
+ VIR_WARN("Unable to release lease on %s", vm->def->name);
+ VIR_DEBUG("Preserving lock state '%s'", NULLSTR(priv->lockState));
+
vm->def->id = -1;
if (priv->deathW) {
@@ -960,6 +990,20 @@ libxlDomainStart(libxlDriverPrivatePtr driver, virDomainObjPtr vm,
vm->def, VIR_HOSTDEV_SP_PCI) < 0)
goto cleanup;
+ if (virDomainLockProcessStart(driver->lockManager,
+ "xen:///system",
+ vm,
+ true,
+ NULL) < 0)
+ goto cleanup;
+
+ if (virDomainLockProcessResume(driver->lockManager,
+ "xen:///system",
+ vm,
+ priv->lockState) < 0)
+ goto cleanup;
+ VIR_FREE(priv->lockState);
+
/* Unlock virDomainObj while creating the domain */
virObjectUnlock(vm);
@@ -990,7 +1034,7 @@ libxlDomainStart(libxlDriverPrivatePtr driver, virDomainObjPtr vm,
virReportError(VIR_ERR_INTERNAL_ERROR,
_("libxenlight failed to restore domain '%s'"),
d_config.c_info.name);
- goto cleanup;
+ goto release_dom;
}
/*
@@ -1003,6 +1047,7 @@ libxlDomainStart(libxlDriverPrivatePtr driver, virDomainObjPtr vm,
if (libxl_evenable_domain_death(cfg->ctx, vm->def->id, 0, &priv->deathW))
goto cleanup_dom;
+
if ((dom_xml = virDomainDefFormat(vm->def, 0)) == NULL)
goto cleanup_dom;
@@ -1040,6 +1085,7 @@ libxlDomainStart(libxlDriverPrivatePtr driver, virDomainObjPtr vm,
goto cleanup;
cleanup_dom:
+ ret = -1;
if (priv->deathW) {
libxl_evdisable_domain_death(cfg->ctx, priv->deathW);
priv->deathW = NULL;
@@ -1048,6 +1094,9 @@ libxlDomainStart(libxlDriverPrivatePtr driver, virDomainObjPtr vm,
vm->def->id = -1;
virDomainObjSetState(vm, VIR_DOMAIN_SHUTOFF, VIR_DOMAIN_SHUTOFF_FAILED);
+ release_dom:
+ virDomainLockProcessPause(driver->lockManager, vm, &priv->lockState);
+
cleanup:
libxl_domain_config_dispose(&d_config);
VIR_FREE(dom_xml);
diff --git a/src/libxl/libxl_domain.h b/src/libxl/libxl_domain.h
index aa647b8..8c73cc4 100644
--- a/src/libxl/libxl_domain.h
+++ b/src/libxl/libxl_domain.h
@@ -64,6 +64,7 @@ struct _libxlDomainObjPrivate {
virChrdevsPtr devs;
libxl_evgen_domain_death *deathW;
unsigned short migrationPort;
+ char *lockState;
struct libxlDomainJobObj job;
};
diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
index 6a54c73..1ecfd71 100644
--- a/src/libxl/libxl_driver.c
+++ b/src/libxl/libxl_driver.c
@@ -57,6 +57,7 @@
#include "viratomic.h"
#include "virhostdev.h"
#include "network/bridge_driver.h"
+#include "locking/domain_lock.h"
#define VIR_FROM_THIS VIR_FROM_LIBXL
@@ -411,6 +412,7 @@ libxlStateCleanup(void)
virObjectUnref(libxl_driver->domains);
virObjectUnref(libxl_driver->reservedVNCPorts);
virObjectUnref(libxl_driver->migrationPorts);
+ virLockManagerPluginUnref(libxl_driver->lockManager);
virObjectEventStateFree(libxl_driver->domainEventState);
virSysinfoDefFree(libxl_driver->hostsysinfo);
@@ -590,6 +592,14 @@ libxlStateInitialize(bool privileged,
goto error;
}
+ if (!(libxl_driver->lockManager =
+ virLockManagerPluginNew(cfg->lockManagerName ?
+ cfg->lockManagerName : "nop",
+ "libxl",
+ cfg->configBaseDir,
+ 0)))
+ goto error;
+
/* read the host sysinfo */
libxl_driver->hostsysinfo = virSysinfoRead();
@@ -2860,11 +2870,21 @@ libxlDomainAttachDeviceDiskLive(virDomainObjPtr vm, virDomainDeviceDefPtr dev)
if (libxlMakeDisk(l_disk, &x_disk) < 0)
goto cleanup;
+ if (virDomainLockDiskAttach(libxl_driver->lockManager,
+ "xen:///system",
+ vm, l_disk) < 0)
+ goto cleanup;
+
if ((ret = libxl_device_disk_add(cfg->ctx, vm->def->id,
&x_disk, NULL)) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("libxenlight failed to attach disk '%s'"),
l_disk->dst);
+ if (virDomainLockDiskDetach(libxl_driver->lockManager,
+ vm, l_disk) < 0) {
+ VIR_WARN("Unable to release lock on %s",
+ virDomainDiskGetSource(l_disk));
+ }
goto cleanup;
}
@@ -3005,6 +3025,11 @@ libxlDomainDetachDeviceDiskLive(virDomainObjPtr vm, virDomainDeviceDefPtr dev)
goto cleanup;
}
+ if (virDomainLockDiskDetach(libxl_driver->lockManager,
+ vm, l_disk) < 0)
+ VIR_WARN("Unable to release lock on %s",
+ virDomainDiskGetSource(l_disk));
+
virDomainDiskRemove(vm->def, idx);
virDomainDiskDefFree(l_disk);
diff --git a/src/libxl/libxl_migration.c b/src/libxl/libxl_migration.c
index 51993c6..1efd98f 100644
--- a/src/libxl/libxl_migration.c
+++ b/src/libxl/libxl_migration.c
@@ -41,6 +41,7 @@
#include "libxl_driver.h"
#include "libxl_conf.h"
#include "libxl_migration.h"
+#include "locking/domain_lock.h"
#define VIR_FROM_THIS VIR_FROM_LIBXL
@@ -469,6 +470,7 @@ libxlDomainMigrationPerform(libxlDriverPrivatePtr driver,
const char *dname ATTRIBUTE_UNUSED,
unsigned int flags)
{
+ libxlDomainObjPrivatePtr priv = vm->privateData;
char *hostname = NULL;
unsigned short port = 0;
char portstr[100];
@@ -503,6 +505,10 @@ libxlDomainMigrationPerform(libxlDriverPrivatePtr driver,
sockfd = virNetSocketDupFD(sock, true);
virObjectUnref(sock);
+ if (virDomainLockProcessPause(driver->lockManager, vm, &priv->lockState) < 0)
+ VIR_WARN("Unable to release lease on %s", vm->def->name);
+ VIR_DEBUG("Preserving lock state '%s'", NULLSTR(priv->lockState));
+
/* suspend vm and send saved data to dst through socket fd */
virObjectUnlock(vm);
ret = libxlDoMigrateSend(driver, vm, flags, sockfd);
diff --git a/src/libxl/test_libvirtd_libxl.aug.in b/src/libxl/test_libvirtd_libxl.aug.in
index 23e667c..baa8c79 100644
--- a/src/libxl/test_libvirtd_libxl.aug.in
+++ b/src/libxl/test_libvirtd_libxl.aug.in
@@ -3,3 +3,4 @@ module Test_libvirtd_libxl =
test Libvirtd_libxl.lns get conf =
{ "autoballoon" = "1" }
+{ "lock_manager" = "lockd" }
--
1.8.4.5
3
6