[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