• E
    snapshot: framework for more efficient relation traversal · 7ec6f7bd
    Eric Blake 提交于
    No one was using virDomainSnapshotHasChildren, but that was an
    O(n) function.  Exposing and tracking a bit more metadata for each
    snapshot will allow the same query to be made with an O(1) query
    of the member field.  For single snapshot operations (create,
    delete), callers can be trusted to maintain the metadata themselves,
    but for reloading, we can't compute parents as we go since there
    is no guarantee that parents were parsed before children, so we also
    provide a function to refresh the relationships, and which can
    be used to detect if the user has ignored our warnings and been
    directly modifying files in /var/lib/libvirt/qemu/snapshot.  This
    patch only adds metadata; later patches will actually use it.
    
    This layout intentionally hardcodes the size of each snapshot struct,
    by tracking sibling pointers, rather than having to deal with the
    headache of yet more memory management by directly sticking a
    dynamically sized child[] on each parent.
    
    * src/conf/domain_conf.h (_virDomainSnapshotObj)
    (_virDomainSnapshotObjList): Add members.
    (virDomainSnapshotUpdateRelations, virDomainSnapshotDropParent):
    New prototypes.
    (virDomainSnapshotHasChildren): Delete.
    * src/conf/domain_conf.c (virDomainSnapshotSetRelations)
    (virDomainSnapshotUpdateRelations, virDomainSnapshotDropParent):
    New functions.
    (virDomainSnapshotHasChildren): Drop unused function.
    * src/libvirt_private.syms (domain_conf): Update exports.
    7ec6f7bd
domain_conf.h 59.4 KB