Write the new version of the persisted config to a tempfile and then rename it,

to avoid corrupting the file on failure.

Signed-off-by: Ewan Mellor <ewan@xensource.com>
This commit is contained in:
Ewan Mellor committed 2006-12-15 17:19:00 +00:00
1 parent 539d271eff
commit cd48fe7de0
1 file changed
+12 -7
+12 -7
View File
@@ -26,6 +26,7 @@ import os
import stat
import shutil
import socket
import tempfile
import threading
import xen.lowlevel.xc
@@ -280,16 +281,20 @@ class XendDomain:
make_or_raise(domain_config_dir)
try:
sxp_cache_file = open(self._managed_config_path(dom_uuid),'w')
prettyprint(dominfo.sxpr(), sxp_cache_file, width = 78)
sxp_cache_file.close()
fd, fn = tempfile.mkstemp()
f = os.fdopen(fd, 'w+b')
try:
prettyprint(dominfo.sxpr(), f, width = 78)
finally:
f.close()
try:
os.rename(fn, self._managed_config_path(dom_uuid))
except:
log.exception("Renaming %s" % fn)
os.remove(fn)
except:
log.exception("Error occurred saving configuration file " +
"to %s" % domain_config_dir)
try:
self._managed_domain_remove(dom_uuid)
except:
pass
raise XendError("Failed to save configuration file to: %s" %
domain_config_dir)
else:
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.