1. 13 12月, 2012 19 次提交
    • D
      Add ability to maintain disk leases indirectly · f14fdae3
      Daniel P. Berrange 提交于
      The default lockd driver behavour is to acquire leases
      directly on the disk files. This introduces an alternative
      mode, where leases are acquire indirectly on a file that
      is based on a SHA256 hash of the disk filename.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      f14fdae3
    • D
      Add a virtlockd client as a lock driver impl · eb8268a4
      Daniel P. Berrange 提交于
      This adds a 'lockd' lock driver which is just a client which
      talks to the lockd daemon to perform all locking. This will
      be the default lock driver for any hypervisor which needs one.
      
      * src/Makefile.am: Add lockd.so plugin
      * src/locking/lock_driver_lockd.c: Lockd driver impl
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      eb8268a4
    • D
      Add support for re-exec() of virtlockd upon SIGUSR1 · f234dc93
      Daniel P. Berrange 提交于
      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: NDaniel P. Berrange <berrange@redhat.com>
      f234dc93
    • D
      Enable systemd socket activation with virtlockd · 74c0353e
      Daniel P. Berrange 提交于
      This enhancement virtlockd so that it can receive a pre-opened
      UNIX domain socket from systemd at launch time, and adds the
      systemd service/socket unit files
      
      * daemon/libvirtd.service.in: Require virtlockd to be running
      * libvirt.spec.in: Add virtlockd systemd files
      * src/Makefile.am: Install systemd files
      * src/locking/lock_daemon.c: Support socket activation
      * src/locking/virtlockd.service.in, src/locking/virtlockd.socket.in:
        systemd unit files
      * src/rpc/virnetserverservice.c, src/rpc/virnetserverservice.h:
        Add virNetServerServiceNewFD() method
      * src/rpc/virnetsocket.c, src/rpc/virnetsocket.h: Add virNetSocketNewListenFD
        method
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      74c0353e
    • D
      Implement dispatch functions for lock protocol in virtlockd · 0e49b839
      Daniel P. Berrange 提交于
      Introduce a lock_daemon_dispatch.c file which implements the
      server side dispatcher the RPC APIs previously defined in the
      lock protocol.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      0e49b839
    • D
      Define a wire protocol for talking to the virtlockd daemon · ad39fd83
      Daniel P. Berrange 提交于
      The virtlockd daemon will be responsible for managing locks
      on virtual machines. Communication will be via the standard
      RPC infrastructure. This provides the XDR protocol definition
      
      * src/locking/lock_protocol.x: Wire protocol for virtlockd
      * src/Makefile.am: Include lock_protocol.[ch] in virtlockd
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      ad39fd83
    • D
      Introduce basic infrastructure for virtlockd daemon · c57e3d89
      Daniel P. Berrange 提交于
      The virtlockd daemon will maintain locks on behalf of libvirtd.
      There are two reasons for it to be separate
      
       - Avoid risk of other libvirtd threads accidentally
         releasing fcntl() locks by opening + closing a file
         that is locked
       - Ensure locks can be preserved across libvirtd restarts.
         virtlockd will need to be able to re-exec itself while
         maintaining locks. This is simpler to achieve if its
         sole job is maintaining locks
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      c57e3d89
    • D
      Refactor creation of lock manager plugins · f199f75e
      Daniel P. Berrange 提交于
      Refactor virLockManagerPluginNew() so that the caller does
      not need to pass in the config file path itself - just the
      config directory and driver name.
      
      Fix QEMU to actually pass in a config file when creating the
      default lock manager plugin, rather than NULL.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      f199f75e
    • D
      Fix error reporting when fetching SCSI/LVM keys · 41ac222e
      Daniel P. Berrange 提交于
      The current  virStorageFileGet{LVM,SCSI}Key methods return
      the key as the return value. Unfortunately it is desirable
      for "NULL" to be a valid return value, as well as an error
      indicator. Thus the returned key must instead be provided
      as an out-parameter.
      
      When we invoke lvs or scsi_id to extract ID for block devices,
      we don't want virCommandWait logging errors messages. Thus we
      must explicitly check 'status != 0', rather than letting
      virCommandWait do it.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      41ac222e
    • J
      Support network boot for HVM guests in libxl · f6b5ed5e
      Jim Fehlig 提交于
      The libxl driver ignored boot devices in the domain config,
      preventing PXE booting HVM domains.  This patch accounts for
      user-specified boot devices when building the libxl domain
      configuration.
      f6b5ed5e
    • D
      Fix probing of QED file format · 32bef82a
      Daniel P. Berrange 提交于
      The QED file format is non-versioned, so although the magic
      value matched, libvirt rejected it due to lack of a version
      number to compare against. We need to distinguish this case
      by allowing a value of '-2' to indicate a non-versioned file
      where only the magic is required to match
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      32bef82a
    • D
      24643c78
    • D
      Log warning if storage magic matches, but version does not · dfba3704
      Daniel P. Berrange 提交于
      To help us detect when new storage file versions come into
      existance log a warning if the storage file magic matches,
      but the version does not
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      dfba3704
    • D
      Fix memory leak in QEMU QMP capabilities initialization · f6bd0a88
      Daniel P. Berrange 提交于
      The qemuCapsInitQMP method never frees the QEMU 'package'
      version string.
      f6bd0a88
    • D
      Change virCgroupGetAppRoot stub on non-Linux to avoid unused param warning · cc5c7f98
      Daniel P. Berrange 提交于
      Fully stub out the virCgroupGetAppRoot method as done with other
      methods in the file, rather than just the body. This lets us
      annotate the unused parameter to avoid a warning
      cc5c7f98
    • E
      network: match xml warning message · 7339bc4c
      Eric Blake 提交于
      I noticed that /var/lib/libvirt/dnsmasq/*.conf used the wrong word;
      it was intended to match the wording in src/util/xml.c.
      
      * src/network/bridge_driver.c (networkDnsmasqConfContents): Fix typo.
      * tests/networkxml2confdata/*.conf: Update accordingly.
      7339bc4c
    • R
      Qemu FreeBSD: fix compilation · 9a2f36ec
      Roman Bogorodskiy 提交于
      * Autotools changes:
        - Don't assume Qemu is Linux-only
        - Check Linux headers only on Linux
        - Disable firewalld on FreeBSD
      * Initctl:
        Initctl seem to present only on Linux, so stub it on other platforms
      * Raw I/O: Linux-only as well
      * Headers cleanup
      9a2f36ec
    • R
      Drop mntent.h include. · b467e932
      Roman Bogorodskiy 提交于
      It's no longer used and also causes build fail on FreeBSD.
      b467e932
    • V
      Fix make check with different object directory · f1f9a7ac
      Viktor Mihajlovski 提交于
      make check fails in check-symsorting if configure is not run in
      the source directory. Prefixing symfile names with $(srcdir)
      fixes this.
      Signed-off-by: NViktor Mihajlovski <mihajlov@linux.vnet.ibm.com>
      f1f9a7ac
  2. 12 12月, 2012 21 次提交