Fallback to simple file copy if rename failed

This commit is contained in:
HelloZeroNet 2016-04-09 19:43:44 +02:00
parent 1beb4fc2cb
commit 561bd80aa3
2 changed files with 10 additions and 4 deletions

View file

@ -175,7 +175,7 @@ class SiteStorage:
err = None err = None
break break
except Exception, err: except Exception, err:
self.log.error("%s rename error: %s" % (inner_path_before, err)) self.log.error("%s rename error: %s (retry #%s)" % (inner_path_before, err, retry))
time.sleep(0.1 + retry) time.sleep(0.1 + retry)
if err: if err:
raise err raise err

View file

@ -3,7 +3,7 @@ import time
import sys import sys
import hashlib import hashlib
import os import os
import re import shutil
import gevent import gevent
@ -383,8 +383,14 @@ class UiWebsocket(object):
import base64 import base64
content = base64.b64decode(content_base64) content = base64.b64decode(content_base64)
# Save old file to generate patch later # Save old file to generate patch later
if self.site.storage.isFile(inner_path) and not self.site.storage.isFile(inner_path+"-old"): if inner_path.endswith(".json") and self.site.storage.isFile(inner_path) and not self.site.storage.isFile(inner_path + "-old"):
self.site.storage.rename(inner_path, inner_path+"-old") try:
self.site.storage.rename(inner_path, inner_path + "-old")
except Exception:
# Rename failed, fall back to standard file write
f_old = self.site.storage.open(inner_path, "rb")
f_new = self.site.storage.open(inner_path + "-old", "wb")
shutil.copyfileobj(f_old, f_new)
self.site.storage.write(inner_path, content) self.site.storage.write(inner_path, content)
except Exception, err: except Exception, err: