[libvirt] [PATCH 09/14] Add support for re-exec() of virtlockd upon SIGUSR1
Michal Privoznik
mprivozn at redhat.com
Wed Dec 12 18:14:34 UTC 2012
On 11.12.2012 21:41, Daniel P. Berrange wrote:
> From: "Daniel P. Berrange" <berrange at redhat.com>
>
> The virtlockd daemon maintains file locks on behalf of libvirtd
> and any VMs it is running. These file locks must be held for as
> long as any VM is running. If virtlockd itself ever quits, then
> it is expected that a node would be fenced/rebooted. Thus to
> allow for software upgrads on live systemd, virtlockd needs the
> ability to re-exec() itself.
>
> Upon receipt of SIGUSR1, virtlockd will save its current live
> state out to a file /var/run/virtlockd-restart-exec.json
> It then re-exec()'s itself with exactly the same argv as it
> originally had, and loads the state file, reconstructing any
> objects as appropriate.
>
> The state file contains information about all locks held and
> all network services and clients currently active. An example
> state document is
>
> {
> "server": {
> "min_workers": 1,
> "max_workers": 20,
> "priority_workers": 0,
> "max_clients": 20,
> "keepaliveInterval": 4294967295,
> "keepaliveCount": 0,
> "keepaliveRequired": false,
> "services": [
> {
> "auth": 0,
> "readonly": false,
> "nrequests_client_max": 1,
> "socks": [
> {
> "fd": 6,
> "errfd": -1,
> "pid": 0,
> "isClient": false
> }
> ]
> }
> ],
> "clients": [
> {
> "auth": 0,
> "readonly": false,
> "nrequests_max": 1,
> "sock": {
> "fd": 9,
> "errfd": -1,
> "pid": 0,
> "isClient": true
> },
> "privateData": {
> "restricted": true,
> "ownerPid": 1722,
> "ownerId": 6,
> "ownerName": "f18x86_64",
> "ownerUUID": "97586ba9-df27-9459-c806-f016c8bbd224"
> }
> },
> {
> "auth": 0,
> "readonly": false,
> "nrequests_max": 1,
> "sock": {
> "fd": 10,
> "errfd": -1,
> "pid": 0,
> "isClient": true
> },
> "privateData": {
> "restricted": true,
> "ownerPid": 1784,
> "ownerId": 7,
> "ownerName": "f16x86_64",
> "ownerUUID": "7b8e5e42-b875-61e9-b981-91ad8fa46979"
> }
> }
> ]
> },
> "defaultLockspace": {
> "resources": [
> {
> "name": "/var/lib/libvirt/images/f16x86_64.raw",
> "path": "/var/lib/libvirt/images/f16x86_64.raw",
> "fd": 14,
> "lockHeld": true,
> "flags": 0,
> "owners": [
> 1784
> ]
> },
> {
> "name": "/var/lib/libvirt/images/shared.img",
> "path": "/var/lib/libvirt/images/shared.img",
> "fd": 12,
> "lockHeld": true,
> "flags": 1,
> "owners": [
> 1722,
> 1784
> ]
> },
> {
> "name": "/var/lib/libvirt/images/f18x86_64.img",
> "path": "/var/lib/libvirt/images/f18x86_64.img",
> "fd": 11,
> "lockHeld": true,
> "flags": 0,
> "owners": [
> 1722
> ]
> }
> ]
> },
> "lockspaces": [
>
> ],
> "magic": "30199"
> }
>
> Signed-off-by: Daniel P. Berrange <berrange at redhat.com>
> ---
> libvirt.spec.in | 5 +-
> src/locking/lock_daemon.c | 417 ++++++++++++++++++++++++++++++++++++++++++++--
> 2 files changed, 409 insertions(+), 13 deletions(-)
>
ACK
Michal
More information about the libvir-list
mailing list