diff --git a/src/conf/Makefile.inc.am b/src/conf/Makefile.inc.am index d2ff8be8fd..6eb64db9de 100644 --- a/src/conf/Makefile.inc.am +++ b/src/conf/Makefile.inc.am @@ -31,8 +31,8 @@ DOMAIN_CONF_SOURCES = \ conf/virconftypes.h \ conf/virdomainobjlist.c \ conf/virdomainobjlist.h \ - conf/virdomainsnapshotobj.c \ - conf/virdomainsnapshotobj.h \ + conf/virdomainmomentobjlist.c \ + conf/virdomainmomentobjlist.h \ conf/virdomainsnapshotobjlist.c \ conf/virdomainsnapshotobjlist.h \ $(NULL) diff --git a/src/conf/virdomainsnapshotobj.c b/src/conf/virdomainmomentobjlist.c similarity index 91% rename from src/conf/virdomainsnapshotobj.c rename to src/conf/virdomainmomentobjlist.c index d4f5f60d0c..209f92493a 100644 --- a/src/conf/virdomainsnapshotobj.c +++ b/src/conf/virdomainmomentobjlist.c @@ -1,5 +1,5 @@ /* - * virdomainsnapshotobj.c: handle snapshot objects + * virdomainmomentobjlist.c: handle snapshot/checkpoint objects * (derived from snapshot_conf.c) * * Copyright (C) 2006-2019 Red Hat, Inc. @@ -23,15 +23,15 @@ #include #include "internal.h" -#include "virdomainsnapshotobj.h" -#include "snapshot_conf.h" -#include "virdomainsnapshotobjlist.h" +#include "virdomainmomentobjlist.h" #include "virlog.h" #include "virerror.h" +#include "virstring.h" +#include "moment_conf.h" -#define VIR_FROM_THIS VIR_FROM_DOMAIN_SNAPSHOT +#define VIR_FROM_THIS VIR_FROM_DOMAIN -VIR_LOG_INIT("conf.virdomainsnapshotobj"); +VIR_LOG_INIT("conf.virdomainmomentobjlist"); /* Run iter(data) on all direct children of moment, while ignoring all * other entries in moments. Return the number of children @@ -68,8 +68,8 @@ virDomainMomentActOnDescendant(void *payload, (curr->iter)(payload, name, curr->data); curr->number += 1 + virDomainMomentForEachDescendant(obj, - curr->iter, - curr->data); + curr->iter, + curr->data); return 0; } @@ -108,7 +108,7 @@ virDomainMomentDropParent(virDomainMomentObjPtr moment) curr = moment->parent->first_child; while (curr != moment) { if (!curr) { - VIR_WARN("inconsistent snapshot relations"); + VIR_WARN("inconsistent moment relations"); return; } prev = curr; diff --git a/src/conf/virdomainsnapshotobj.h b/src/conf/virdomainmomentobjlist.h similarity index 72% rename from src/conf/virdomainsnapshotobj.h rename to src/conf/virdomainmomentobjlist.h index b18df0eebb..dceb55fca2 100644 --- a/src/conf/virdomainsnapshotobj.h +++ b/src/conf/virdomainmomentobjlist.h @@ -1,5 +1,5 @@ /* - * virdomainsnapshotobj.h: handle snapshot objects + * virdomainmomentobjlist.h: handle a tree of moment objects * (derived from snapshot_conf.h) * * Copyright (C) 2006-2019 Red Hat, Inc. @@ -20,25 +20,33 @@ * . */ -#ifndef LIBVIRT_VIRDOMAINSNAPSHOTOBJ_H -# define LIBVIRT_VIRDOMAINSNAPSHOTOBJ_H +#ifndef LIBVIRT_VIRDOMAINMOMENTOBJLIST_H +# define LIBVIRT_VIRDOMAINMOMENTOBJLIST_H # include "internal.h" # include "virconftypes.h" # include "virhash.h" +/* Struct that allows tracing hierarchical relationships between + * multiple virDomainMoment objects. The opaque type + * virDomainMomentObjList then maintains both a hash of these structs + * (for quick lookup by name) and a metaroot (which is the parent of + * all user-visible roots), so that all other objects always have a + * valid parent object; the tree structure is currently maintained via + * a linked list. */ struct _virDomainMomentObj { + /* Public field */ virDomainMomentDefPtr def; /* non-NULL except for metaroot */ + /* Private fields, use accessors instead */ virDomainMomentObjPtr parent; /* non-NULL except for metaroot, before - virDomainSnapshotUpdateRelations, or + virDomainMomentUpdateRelations, or after virDomainMomentDropParent */ virDomainMomentObjPtr sibling; /* NULL if last child of parent */ size_t nchildren; virDomainMomentObjPtr first_child; /* NULL if no children */ }; - int virDomainMomentForEachChild(virDomainMomentObjPtr moment, virHashIterator iter, void *data); @@ -52,4 +60,4 @@ void virDomainMomentMoveChildren(virDomainMomentObjPtr from, void virDomainMomentSetParent(virDomainMomentObjPtr moment, virDomainMomentObjPtr parent); -#endif /* LIBVIRT_VIRDOMAINSNAPSHOTOBJ_H */ +#endif /* LIBVIRT_VIRDOMAINMOMENTOBJLIST_H */ diff --git a/src/conf/virdomainsnapshotobjlist.h b/src/conf/virdomainsnapshotobjlist.h index e504e40465..7398a5c331 100644 --- a/src/conf/virdomainsnapshotobjlist.h +++ b/src/conf/virdomainsnapshotobjlist.h @@ -24,7 +24,7 @@ # define LIBVIRT_VIRDOMAINSNAPSHOTOBJLIST_H # include "internal.h" -# include "virdomainsnapshotobj.h" +# include "virdomainmomentobjlist.h" # include "virbuffer.h" /* Filter that returns true if a given moment matches the filter flags */ diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index eef215bc31..bf5625fbf4 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -960,6 +960,15 @@ virChrdevFree; virChrdevOpen; +# conf/virdomainmomentobjlist.h +virDomainMomentDropChildren; +virDomainMomentDropParent; +virDomainMomentForEachChild; +virDomainMomentForEachDescendant; +virDomainMomentMoveChildren; +virDomainMomentSetParent; + + # conf/virdomainobjlist.h virDomainObjListAdd; virDomainObjListCollect; @@ -979,15 +988,6 @@ virDomainObjListRemoveLocked; virDomainObjListRename; -# conf/virdomainsnapshotobj.h -virDomainMomentDropChildren; -virDomainMomentDropParent; -virDomainMomentForEachChild; -virDomainMomentForEachDescendant; -virDomainMomentMoveChildren; -virDomainMomentSetParent; - - # conf/virdomainsnapshotobjlist.h virDomainListSnapshots; virDomainSnapshotAssignDef;