On Thu, Oct 06, 2011 at 12:22:01PM +0200, Jiri Denemark wrote:
When saving domain XML (either config or status) we just overwrite
old
content of the file. In case something fails during that process (e.g.
disk gets full) we lose both old and new content. This patch makes the
process more robust by writing the new content into a separate file and
only if that succeeds the original file is atomically replaced with the
new one.
---
src/conf/domain_conf.c | 25 +++++++++++++++++++++----
1 files changed, 21 insertions(+), 4 deletions(-)
By doing this you've almost addressed this BZ...
https://bugzilla.redhat.com/show_bug.cgi?id=489946
...almost...
Checkout slides 78 -> 119 of the presentation linked there,
paying note to the horrible tales of woe about OS-X and fsync() :-(
We probably want to add some kind of virFileSync(int fd) API call
that does the neccessary black magic.
if (VIR_CLOSE(fd) < 0) {
virReportSystemError(errno,
_("cannot save config file '%s'"),
- configFile);
+ newfile);
+ goto cleanup;
+ }
+
+ if (rename(newfile, configFile) < 0) {
+ virReportSystemError(errno,
+ _("cannot rename config file '%s' as
'%s'"),
+ newfile, configFile);
goto cleanup;
}
Regards,
Daniel
--
|:
http://berrange.com -o-
http://www.flickr.com/photos/dberrange/ :|
|:
http://libvirt.org -o-
http://virt-manager.org :|
|:
http://autobuild.org -o-
http://search.cpan.org/~danberr/ :|
|:
http://entangle-photo.org -o-
http://live.gnome.org/gtk-vnc :|