[libvirt] [PATCH 01/10] qemu: also delete qemuProcessAttach

Ján Tomko jtomko at redhat.com
Sat Jun 15 12:11:30 UTC 2019


Now that the virDomainQemuAttach API returns an error, we can remove the
unused qemuProcessAttach function as well, deleting the only user
that possibly could have requested to open a non-JSON monitor.

Signed-off-by: Ján Tomko <jtomko at redhat.com>
---
 src/qemu/qemu_process.c | 243 ----------------------------------------
 src/qemu/qemu_process.h |   8 --
 2 files changed, 251 deletions(-)

diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index 1626796c19..473b7c2fe2 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -7508,249 +7508,6 @@ void qemuProcessStop(virQEMUDriverPtr driver,
 }
 
 
-int qemuProcessAttach(virConnectPtr conn ATTRIBUTE_UNUSED,
-                      virQEMUDriverPtr driver,
-                      virDomainObjPtr vm,
-                      pid_t pid,
-                      const char *pidfile,
-                      virDomainChrSourceDefPtr monConfig,
-                      bool monJSON)
-{
-    size_t i;
-    qemuDomainLogContextPtr logCtxt = NULL;
-    char *timestamp;
-    qemuDomainObjPrivatePtr priv = vm->privateData;
-    bool running = true;
-    virDomainPausedReason reason;
-    virSecurityLabelPtr seclabel = NULL;
-    virSecurityLabelDefPtr seclabeldef = NULL;
-    bool seclabelgen = false;
-    virSecurityManagerPtr* sec_managers = NULL;
-    const char *model;
-    virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
-    virCapsPtr caps = NULL;
-    bool active = false;
-    virDomainVirtType virtType;
-
-    VIR_DEBUG("Beginning VM attach process");
-
-    if (virDomainObjIsActive(vm)) {
-        virReportError(VIR_ERR_OPERATION_INVALID,
-                       "%s", _("VM is already active"));
-        virObjectUnref(cfg);
-        return -1;
-    }
-
-    if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
-        goto error;
-
-    /* Do this upfront, so any part of the startup process can add
-     * runtime state to vm->def that won't be persisted. This let's us
-     * report implicit runtime defaults in the XML, like vnc listen/socket
-     */
-    VIR_DEBUG("Setting current domain def as transient");
-    if (virDomainObjSetDefTransient(caps, driver->xmlopt, vm) < 0)
-        goto error;
-
-    vm->def->id = qemuDriverAllocateID(driver);
-
-    if (virAtomicIntInc(&driver->nactive) == 1 && driver->inhibitCallback)
-        driver->inhibitCallback(true, driver->inhibitOpaque);
-    active = true;
-
-    if (virFileMakePath(cfg->logDir) < 0) {
-        virReportSystemError(errno,
-                             _("cannot create log directory %s"),
-                             cfg->logDir);
-        goto error;
-    }
-
-    VIR_FREE(priv->pidfile);
-    if (VIR_STRDUP(priv->pidfile, pidfile) < 0)
-        goto error;
-
-    vm->pid = pid;
-
-    VIR_DEBUG("Detect security driver config");
-    sec_managers = qemuSecurityGetNested(driver->securityManager);
-    if (sec_managers == NULL)
-        goto error;
-
-    for (i = 0; sec_managers[i]; i++) {
-        seclabelgen = false;
-        model = qemuSecurityGetModel(sec_managers[i]);
-        seclabeldef = virDomainDefGetSecurityLabelDef(vm->def, model);
-        if (seclabeldef == NULL) {
-            if (!(seclabeldef = virSecurityLabelDefNew(model)))
-                goto error;
-            seclabelgen = true;
-        }
-        seclabeldef->type = VIR_DOMAIN_SECLABEL_STATIC;
-        if (VIR_ALLOC(seclabel) < 0)
-            goto error;
-        if (qemuSecurityGetProcessLabel(sec_managers[i], vm->def,
-                                        vm->pid, seclabel) < 0)
-            goto error;
-
-        if (VIR_STRDUP(seclabeldef->model, model) < 0)
-            goto error;
-
-        if (VIR_STRDUP(seclabeldef->label, seclabel->label) < 0)
-            goto error;
-        VIR_FREE(seclabel);
-
-        if (seclabelgen) {
-            if (VIR_APPEND_ELEMENT(vm->def->seclabels, vm->def->nseclabels, seclabeldef) < 0)
-                goto error;
-            seclabelgen = false;
-        }
-    }
-
-    if (qemuSecurityCheckAllLabel(driver->securityManager, vm->def) < 0)
-        goto error;
-    if (qemuSecurityGenLabel(driver->securityManager, vm->def) < 0)
-        goto error;
-
-    if (qemuDomainPerfRestart(vm) < 0)
-        goto error;
-
-    VIR_DEBUG("Creating domain log file");
-    if (!(logCtxt = qemuDomainLogContextNew(driver, vm,
-                                            QEMU_DOMAIN_LOG_CONTEXT_MODE_ATTACH)))
-        goto error;
-
-    VIR_DEBUG("Determining emulator version");
-    if (qemuDomainUpdateQEMUCaps(vm, driver->qemuCapsCache) < 0)
-        goto error;
-
-    VIR_DEBUG("Preparing monitor state");
-    priv->monConfig = virObjectRef(monConfig);
-    priv->monJSON = monJSON;
-
-    /* Attaching to running QEMU so we need to detect whether it was started
-     * with -no-reboot. */
-    qemuProcessPrepareAllowReboot(vm);
-
-    /*
-     * Normally PCI addresses are assigned in the virDomainCreate
-     * or virDomainDefine methods. We might still need to assign
-     * some here to cope with the question of upgrades. Regardless
-     * we also need to populate the PCI address set cache for later
-     * use in hotplug
-     */
-    VIR_DEBUG("Assigning domain PCI addresses");
-    if ((qemuDomainAssignAddresses(vm->def, priv->qemuCaps,
-                                   driver, vm, false)) < 0) {
-        goto error;
-    }
-
-    if ((timestamp = virTimeStringNow()) == NULL)
-        goto error;
-
-    qemuDomainLogContextWrite(logCtxt, "%s: attaching\n", timestamp);
-    VIR_FREE(timestamp);
-
-    qemuDomainObjTaint(driver, vm, VIR_DOMAIN_TAINT_EXTERNAL_LAUNCH, logCtxt);
-
-    VIR_DEBUG("Waiting for monitor to show up");
-    if (qemuProcessWaitForMonitor(driver, vm, QEMU_ASYNC_JOB_NONE, NULL) < 0)
-        goto error;
-
-    if (qemuConnectAgent(driver, vm) < 0)
-        goto error;
-
-    VIR_DEBUG("Detecting VCPU PIDs");
-    if (qemuDomainRefreshVcpuInfo(driver, vm, QEMU_ASYNC_JOB_NONE, false) < 0)
-        goto error;
-
-    if (qemuDomainValidateVcpuInfo(vm) < 0)
-        goto error;
-
-    VIR_DEBUG("Detecting IOThread PIDs");
-    if (qemuProcessDetectIOThreadPIDs(driver, vm, QEMU_ASYNC_JOB_NONE) < 0)
-        goto error;
-
-    VIR_DEBUG("Getting initial memory amount");
-    qemuDomainObjEnterMonitor(driver, vm);
-    if (qemuMonitorGetBalloonInfo(priv->mon, &vm->def->mem.cur_balloon) < 0)
-        goto exit_monitor;
-    if (qemuMonitorGetStatus(priv->mon, &running, &reason) < 0)
-        goto exit_monitor;
-    if (qemuMonitorGetVirtType(priv->mon, &virtType) < 0)
-        goto exit_monitor;
-    vm->def->virtType = virtType;
-    if (qemuDomainObjExitMonitor(driver, vm) < 0)
-        goto error;
-
-    if (running) {
-        virDomainObjSetState(vm, VIR_DOMAIN_RUNNING,
-                             VIR_DOMAIN_RUNNING_UNPAUSED);
-        if (virDomainDefHasMemballoon(vm->def) &&
-            vm->def->memballoon->period) {
-            qemuDomainObjEnterMonitor(driver, vm);
-            qemuMonitorSetMemoryStatsPeriod(priv->mon, vm->def->memballoon,
-                                            vm->def->memballoon->period);
-            if (qemuDomainObjExitMonitor(driver, vm) < 0)
-                goto error;
-        }
-    } else {
-        virDomainObjSetState(vm, VIR_DOMAIN_PAUSED, reason);
-    }
-
-    VIR_DEBUG("Writing domain status to disk");
-    if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm, driver->caps) < 0)
-        goto error;
-
-    /* Run an hook to allow admins to do some magic */
-    if (virHookPresent(VIR_HOOK_DRIVER_QEMU)) {
-        char *xml = qemuDomainDefFormatXML(driver, vm->def, 0);
-        int hookret;
-
-        hookret = virHookCall(VIR_HOOK_DRIVER_QEMU, vm->def->name,
-                              VIR_HOOK_QEMU_OP_ATTACH, VIR_HOOK_SUBOP_BEGIN,
-                              NULL, xml, NULL);
-        VIR_FREE(xml);
-
-        /*
-         * If the script raised an error abort the launch
-         */
-        if (hookret < 0)
-            goto error;
-    }
-
-    virObjectUnref(logCtxt);
-    VIR_FREE(seclabel);
-    VIR_FREE(sec_managers);
-    virObjectUnref(cfg);
-    virObjectUnref(caps);
-
-    return 0;
-
- exit_monitor:
-    ignore_value(qemuDomainObjExitMonitor(driver, vm));
- error:
-    /* We jump here if we failed to attach to the VM for any reason.
-     * Leave the domain running, but pretend we never attempted to
-     * attach to it.  */
-    if (active && virAtomicIntDecAndTest(&driver->nactive) &&
-        driver->inhibitCallback)
-        driver->inhibitCallback(false, driver->inhibitOpaque);
-
-    qemuMonitorClose(priv->mon);
-    priv->mon = NULL;
-    virObjectUnref(logCtxt);
-    VIR_FREE(seclabel);
-    VIR_FREE(sec_managers);
-    if (seclabelgen)
-        virSecurityLabelDefFree(seclabeldef);
-    virObjectUnref(priv->monConfig);
-    priv->monConfig = NULL;
-    virObjectUnref(cfg);
-    virObjectUnref(caps);
-    return -1;
-}
-
-
 static void
 qemuProcessAutoDestroy(virDomainObjPtr dom,
                        virConnectPtr conn,
diff --git a/src/qemu/qemu_process.h b/src/qemu/qemu_process.h
index d20bd5306e..8a6cb94a1e 100644
--- a/src/qemu/qemu_process.h
+++ b/src/qemu/qemu_process.h
@@ -154,14 +154,6 @@ void qemuProcessStop(virQEMUDriverPtr driver,
                      qemuDomainAsyncJob asyncJob,
                      unsigned int flags);
 
-int qemuProcessAttach(virConnectPtr conn,
-                      virQEMUDriverPtr driver,
-                      virDomainObjPtr vm,
-                      pid_t pid,
-                      const char *pidfile,
-                      virDomainChrSourceDefPtr monConfig,
-                      bool monJSON);
-
 typedef enum {
    VIR_QEMU_PROCESS_KILL_FORCE  = 1 << 0,
    VIR_QEMU_PROCESS_KILL_NOWAIT = 1 << 1,
-- 
2.20.1




More information about the libvir-list mailing list