Always reload StateFile before getting or modifying the stored values.

This change does not solve using multiple instances of StateFile concurently
because there is no use for it in near future. Instead this solves an issue of loosing
records when more instances of StateFile are interleaved in sequential code.

https://fedorahosted.org/freeipa/ticket/4901

Reviewed-By: Martin Basti <mbasti@redhat.com>
This commit is contained in:
David Kupka authored and Tomas Babej committed 2015-03-18 12:42:16 +01:00
1 parent 26d6c6fbbb
commit 082c55fb9c
1 file changed
+11 -2
+11 -2
View File
@@ -283,8 +283,11 @@ class FileStore:
class StateFile:
"""A metadata file for recording system state which can
be backed up and later restored. The format is something
like:
be backed up and later restored.
StateFile gets reloaded every time to prevent loss of information
recorded by child processes. But we do not solve concurrency
because there is no need for it right now.
The format is something like:
[httpd]
running=True
@@ -363,6 +366,8 @@ class StateFile:
if not isinstance(value, (str, bool, unicode)):
raise ValueError("Only strings, booleans or unicode strings are supported")
self._load()
if not self.modules.has_key(module):
self.modules[module] = {}
@@ -378,6 +383,8 @@ class StateFile:
If the item doesn't exist, #None will be returned, otherwise
the original string or boolean value is returned.
"""
self._load()
if not self.modules.has_key(module):
return None
@@ -389,6 +396,8 @@ class StateFile:
If the item doesn't exist, no change is done.
"""
self._load()
try:
del self.modules[module][key]
except KeyError: