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 = logging.getLogger("SiteManager")
|
||||||
self.log.debug("SiteManager created.")
|
self.log.debug("SiteManager created.")
|
||||||
self.sites = None
|
self.sites = None
|
||||||
|
self.loaded = False
|
||||||
gevent.spawn(self.saveTimer)
|
gevent.spawn(self.saveTimer)
|
||||||
atexit.register(self.save)
|
atexit.register(self.save)
|
||||||
|
|
||||||
# Load all sites from data/sites.json
|
# Load all sites from data/sites.json
|
||||||
def load(self, cleanup=True):
|
def load(self, cleanup=True):
|
||||||
self.log.debug("Loading sites...")
|
self.log.debug("Loading sites...")
|
||||||
|
self.loaded = False
|
||||||
from Site import Site
|
from Site import Site
|
||||||
if self.sites is None:
|
if self.sites is None:
|
||||||
self.sites = {}
|
self.sites = {}
|
||||||
|
@ -54,10 +56,15 @@ class SiteManager(object):
|
||||||
|
|
||||||
if added:
|
if added:
|
||||||
self.log.debug("SiteManager added %s sites" % added)
|
self.log.debug("SiteManager added %s sites" % added)
|
||||||
|
self.loaded = True
|
||||||
|
|
||||||
def save(self):
|
def save(self):
|
||||||
if not self.sites:
|
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()
|
s = time.time()
|
||||||
data = {}
|
data = {}
|
||||||
# Generate data file
|
# Generate data file
|
||||||
|
@ -68,7 +75,10 @@ class SiteManager(object):
|
||||||
data[address]["cache"]["bad_files"] = site.bad_files
|
data[address]["cache"]["bad_files"] = site.bad_files
|
||||||
data[address]["cache"]["hashfield"] = site.content_manager.hashfield.tostring().encode("base64")
|
data[address]["cache"]["hashfield"] = site.content_manager.hashfield.tostring().encode("base64")
|
||||||
|
|
||||||
|
if data:
|
||||||
helper.atomicWrite("%s/sites.json" % config.data_dir, json.dumps(data, indent=2, sort_keys=True))
|
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
|
# Remove cache from site settings
|
||||||
for address, site in self.list().iteritems():
|
for address, site in self.list().iteritems():
|
||||||
site.settings["cache"] = {}
|
site.settings["cache"] = {}
|
||||||
|
|
Loading…
Reference in a new issue