[libvirt] [PATCH 4/4] read saved vm status on libvirtd startup

Daniel P. Berrange berrange at redhat.com
Mon Jan 19 13:39:51 UTC 2009


On Sun, Jan 18, 2009 at 08:28:59PM +0100, Guido G?nther wrote:
> connect back to running vms. 
> 
> changes:
>   * don't use proc
>   * don't bother about stdin
>   * don't use global qemu_driver directly
> Cheer,
>  -- Guido
> 
> +static int
> +qemudReconnectVMs(struct qemud_driver *driver)
> +{
> +    int i;
> +
> +    for (i = 0 ; i < driver->domains.count ; i++) {
> +        virDomainObjPtr vm = driver->domains.objs[i];
> +        qemudDomainStatusPtr status = NULL;
> +        char *config = NULL;
> +        int rc;
> +
> +        virDomainObjLock(vm);
> +        if ((rc = virFileReadPid(driver->stateDir, vm->def->name, &vm->pid)) == 0)
> +            DEBUG("Found pid %d for '%s'", vm->pid, vm->def->name);
> +        else
> +            goto next;
> +
> +        if ((config = virDomainConfigFile(NULL,
> +                                          driver->stateDir,
> +                                          vm->def->name)) == NULL) {
> +            qemudLog(QEMUD_ERR, _("Failed to read domain status for %s\n"),
> +                     vm->def->name);
> +            goto next_error;
> +        }
> +
> +        status = qemudDomainStatusParseFile(NULL, driver->caps, config, 0);
> +        if (status) {
> +            vm->newDef = vm->def;
> +            vm->def = status->def;
> +        } else {
> +            qemudLog(QEMUD_ERR, _("Failed to parse domain status for %s\n"),
> +                     vm->def->name);
> +            goto next_error;
> +        }
> +
> +        if ((rc = qemudOpenMonitor(NULL, driver, vm, status->monitorpath, 1)) != 0) {
> +            qemudLog(QEMUD_ERR, _("Failed to reconnect monitor for %s: %d\n"),
> +                     vm->def->name, rc);
> +            goto next_error;
> +        } else
> +            vm->monitorpath = status->monitorpath;
> +
> +        if((vm->logfile = qemudLogFD(NULL, driver->logDir, vm->def->name)) < 0)
> +            return -1;
> +
> +        vm->stdout_fd = vm->stderr_fd = vm->logfile;

If nothing is actaully using the stdout/err FDs anymore we can just
leave them at -1.

Aside from that,  ACK to this patch.

Daniel
-- 
|: Red Hat, Engineering, London   -o-   http://people.redhat.com/berrange/ :|
|: http://libvirt.org  -o-  http://virt-manager.org  -o-  http://ovirt.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505  -o-  F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|




More information about the libvir-list mailing list