mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
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:
1 parent
539d271eff
commit
cd48fe7de0
1 file changed
+12
-7
@@ -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:
|
||||
|
||||