Only save sites.json if fully loaded to avoid data loss
This commit is contained in:
parent
8f3dfd7435
commit
0418a3e6de
1 changed files with 12 additions and 2 deletions
|
@ -19,12 +19,14 @@ class SiteManager(object):
|
|||
self.log = logging.getLogger("SiteManager")
|
||||
self.log.debug("SiteManager created.")
|
||||
self.sites = None
|
||||
self.loaded = False
|
||||
gevent.spawn(self.saveTimer)
|
||||
atexit.register(self.save)
|
||||
|
||||
# Load all sites from data/sites.json
|
||||
def load(self, cleanup=True):
|
||||
self.log.debug("Loading sites...")
|
||||
self.loaded = False
|
||||
from Site import Site
|
||||
if self.sites is None:
|
||||
self.sites = {}
|
||||
|
@ -54,10 +56,15 @@ class SiteManager(object):
|
|||
|
||||
if added:
|
||||
self.log.debug("SiteManager added %s sites" % added)
|
||||
self.loaded = True
|
||||
|
||||
def save(self):
|
||||
if not self.sites:
|
||||
self.log.debug("Save: No sites found")
|
||||
self.log.debug("Save skipped: No sites found")
|
||||
return
|
||||
if not self.loaded:
|
||||
self.log.debug("Save skipped: Not loaded")
|
||||
return
|
||||
s = time.time()
|
||||
data = {}
|
||||
# Generate data file
|
||||
|
@ -68,7 +75,10 @@ class SiteManager(object):
|
|||
data[address]["cache"]["bad_files"] = site.bad_files
|
||||
data[address]["cache"]["hashfield"] = site.content_manager.hashfield.tostring().encode("base64")
|
||||
|
||||
helper.atomicWrite("%s/sites.json" % config.data_dir, json.dumps(data, indent=2, sort_keys=True))
|
||||
if data:
|
||||
helper.atomicWrite("%s/sites.json" % config.data_dir, json.dumps(data, indent=2, sort_keys=True))
|
||||
else:
|
||||
self.log.debug("Save error: No data")
|
||||
# Remove cache from site settings
|
||||
for address, site in self.list().iteritems():
|
||||
site.settings["cache"] = {}
|
||||
|
|
Loading…
Reference in a new issue