[libvirt] [PATCH v6 1/9] Revert "snapshot: Add virDomainSnapshotObjListParse"

Eric Blake eblake at redhat.com
Tue Mar 26 06:13:45 UTC 2019


This reverts commit 1b57269cbcfcfe998a065c0c9f0f8db408710d87, and
subsequent refactorings of the function into new files.  There are no
callers of this function - I had originally proposed it for
implementing a new bulk snapshot API, but that proved to be too
invasive given RPC limits. I also tried using it for streamlining how
the qemu driver stores snapshot state across libvirtd restarts
internally, but in the end, the risks of a new internal format
outweighed the benefits of one file per snapshot.

Signed-off-by: Eric Blake <eblake at redhat.com>
---
 src/conf/virdomainsnapshotobjlist.h |   6 --
 src/conf/virdomainsnapshotobjlist.c | 105 ----------------------------
 src/libvirt_private.syms            |   1 -
 3 files changed, 112 deletions(-)

diff --git a/src/conf/virdomainsnapshotobjlist.h b/src/conf/virdomainsnapshotobjlist.h
index 3691662b4c..626cdcafa7 100644
--- a/src/conf/virdomainsnapshotobjlist.h
+++ b/src/conf/virdomainsnapshotobjlist.h
@@ -30,12 +30,6 @@
 virDomainSnapshotObjListPtr virDomainSnapshotObjListNew(void);
 void virDomainSnapshotObjListFree(virDomainSnapshotObjListPtr snapshots);

-int virDomainSnapshotObjListParse(const char *xmlStr,
-                                  const unsigned char *domain_uuid,
-                                  virDomainSnapshotObjListPtr snapshots,
-                                  virCapsPtr caps,
-                                  virDomainXMLOptionPtr xmlopt,
-                                  unsigned int flags);
 int virDomainSnapshotObjListFormat(virBufferPtr buf,
                                    const char *uuidstr,
                                    virDomainSnapshotObjListPtr snapshots,
diff --git a/src/conf/virdomainsnapshotobjlist.c b/src/conf/virdomainsnapshotobjlist.c
index 9057ecf587..20f4ff22f2 100644
--- a/src/conf/virdomainsnapshotobjlist.c
+++ b/src/conf/virdomainsnapshotobjlist.c
@@ -39,111 +39,6 @@ struct _virDomainSnapshotObjList {
 };


-/* Parse a <snapshots> XML entry into snapshots, which must start
- * empty.  Any <domain> sub-elements of a <domainsnapshot> must match
- * domain_uuid.  @flags is virDomainSnapshotParseFlags. Return the
- * number of snapshots parsed, or -1 on error.
- */
-int
-virDomainSnapshotObjListParse(const char *xmlStr,
-                              const unsigned char *domain_uuid,
-                              virDomainSnapshotObjListPtr snapshots,
-                              virCapsPtr caps,
-                              virDomainXMLOptionPtr xmlopt,
-                              unsigned int flags)
-{
-    int ret = -1;
-    xmlDocPtr xml;
-    xmlNodePtr root;
-    xmlXPathContextPtr ctxt = NULL;
-    int n;
-    size_t i;
-    int keepBlanksDefault = xmlKeepBlanksDefault(0);
-    virDomainMomentObjPtr snap;
-    VIR_AUTOFREE(xmlNodePtr *) nodes = NULL;
-    VIR_AUTOFREE(char *) current = NULL;
-
-    if (!(flags & VIR_DOMAIN_SNAPSHOT_PARSE_REDEFINE) ||
-        (flags & VIR_DOMAIN_SNAPSHOT_PARSE_INTERNAL)) {
-        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
-                       _("incorrect flags for bulk parse"));
-        return -1;
-    }
-    if (virDomainMomentObjListSize(snapshots->base) != 0) {
-        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-                       _("bulk define of snapshots only possible with "
-                         "no existing snapshot"));
-        return -1;
-    }
-
-    if (!(xml = virXMLParse(NULL, xmlStr, _("(domain_snapshot)"))))
-        return -1;
-
-    root = xmlDocGetRootElement(xml);
-    if (!virXMLNodeNameEqual(root, "snapshots")) {
-        virReportError(VIR_ERR_XML_ERROR,
-                       _("unexpected root element <%s>, "
-                         "expecting <snapshots>"), root->name);
-        goto cleanup;
-    }
-    ctxt = xmlXPathNewContext(xml);
-    if (ctxt == NULL) {
-        virReportOOMError();
-        goto cleanup;
-    }
-    ctxt->node = root;
-    current = virXMLPropString(root, "current");
-
-    if ((n = virXPathNodeSet("./domainsnapshot", ctxt, &nodes)) < 0)
-        goto cleanup;
-
-    for (i = 0; i < n; i++) {
-        virDomainSnapshotDefPtr def;
-
-        def = virDomainSnapshotDefParseNode(xml, nodes[i], caps, xmlopt, NULL,
-                                            flags);
-        if (!def)
-            goto cleanup;
-        if (!(snap = virDomainSnapshotAssignDef(snapshots, def))) {
-            virDomainSnapshotDefFree(def);
-            goto cleanup;
-        }
-        if (virDomainSnapshotRedefineValidate(def, domain_uuid, NULL, NULL,
-                                              flags) < 0)
-            goto cleanup;
-    }
-
-    if (virDomainSnapshotUpdateRelations(snapshots) < 0) {
-        virReportError(VIR_ERR_XML_ERROR, "%s",
-                       _("<snapshots> contains inconsistent parent-child "
-                         "relationships"));
-        goto cleanup;
-    }
-
-    if (current) {
-        snap = virDomainSnapshotFindByName(snapshots, current);
-        if (!snap) {
-            virReportError(VIR_ERR_NO_DOMAIN_SNAPSHOT,
-                           _("no snapshot matching current='%s'"), current);
-            goto cleanup;
-        }
-        virDomainSnapshotSetCurrent(snapshots, snap);
-    }
-
-    ret = n;
- cleanup:
-    if (ret < 0) {
-        /* There were no snapshots before this call; so on error, just
-         * blindly delete anything created before the failure. */
-        virDomainMomentObjListRemoveAll(snapshots->base);
-    }
-    xmlXPathFreeContext(ctxt);
-    xmlFreeDoc(xml);
-    xmlKeepBlanksDefault(keepBlanksDefault);
-    return ret;
-}
-
-
 /* Struct and callback function used as a hash table callback; each call
  * appends another snapshot XML to buf, with the caller clearing the
  * buffer if any callback fails. */
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index bf5625fbf4..03b4db98fe 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -1001,7 +1001,6 @@ virDomainSnapshotObjListFree;
 virDomainSnapshotObjListGetNames;
 virDomainSnapshotObjListNew;
 virDomainSnapshotObjListNum;
-virDomainSnapshotObjListParse;
 virDomainSnapshotObjListRemove;
 virDomainSnapshotObjListRemoveAll;
 virDomainSnapshotSetCurrent;
-- 
2.20.1




More information about the libvir-list mailing list