Il 14/03/2012 10:38, Eric Blake ha scritto: >> 2) in case the snapshotting is aborted early for any reason, oVirt has >> to do a rebase operation manually. This is currently O(size-of-disk), >> not O(changes-in-the-last-image), so it wastes both disk space and time. > > I don't follow the argument for this. It may be a valid complaint, but > I'm not yet seeing why you think oVirt has to do a rebase operation > manually, or why that operation will cost O(disk) rather than > O(changes). If I have: > > base <- snap1 > > and request a snapshot that mirrors to snap2 in two locations, but abort > half-way through, then I can just call > virDomainSnapshotDelete(VIR_DOMAIN_SNAPSHOT_DELETE_METADATA) which makes > libvirt forget that it attempted to take a snapshot, but without losing > the XML that says that the disk is now based on snap2. That means > restarting the domain would use: > > base <- snap1 <- snap2 > > as its backing file, and virDomainBlockRebase can be used to initiate a > 'block_stream' to collapse it back to a shorter backing chain. Yeah, but that's O(changes in snap1), not O(changes in snap2). In the worst case it's O(changes in base). >> virDomainBlockCopy(dom, "disk", >> "/dst/disk.img", "/src/base.img", >> bandwidth, flags) > > Yes, a new API would ultimately be nicer, [...] but it goes against my > stated goal of implementing a first-cut working solution for oVirt that > [...] doesn't require a .so bump > >> I think you also need VIR_DOMAIN_SNAPSHOT_DELETE_REMOVE_MIRROR, to be >> used in case of abort so that the domain can actually be started. Or it >> could be an event MIRROR_DROPPED or something like that. > > Good call. VIR_DOMAIN_SNAPSHOT_DELETE_METADATA_ONLY says to drop > libvirt's notion of the snapshot object, but it won't stop qemu from > mirroring; so an additional flag that tells libvirt to 'drive-reopen' > back to the source to discard any mirroring would be handy. > [...] it does point out that I should probably either prevent the use of a > <domainsnapshot> with <mirror> on persistent domains Yes, that makes sense. And perhaps do that downstream only. :) Paolo -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list