[oe-commits] [bitbake] 06/06: cache: Don't interleave pickle cache file writing
git at git.openembedded.org
git at git.openembedded.org
Fri Jul 22 10:41:52 UTC 2016
rpurdie pushed a commit to branch master-next
in repository bitbake.
commit 14ec47f5f0566dbd280fae8a03160c8500ad3929
Author: Richard Purdie <richard.purdie at linuxfoundation.org>
AuthorDate: Fri Jul 22 11:28:57 2016 +0100
cache: Don't interleave pickle cache file writing
For some reason the data written in this way is coming back out the
files out of order. I've not been able to simplify the test case to a
point where this was standalone reproducible. Simplify the code and
write out the cache files sequentially since this seems to avoid the
errors and makes the code more readable.
Signed-off-by: Richard Purdie <richard.purdie at linuxfoundation.org>
---
lib/bb/cache.py | 27 ++++++++++-----------------
1 file changed, 10 insertions(+), 17 deletions(-)
diff --git a/lib/bb/cache.py b/lib/bb/cache.py
index 439565f..c09f929 100644
--- a/lib/bb/cache.py
+++ b/lib/bb/cache.py
@@ -601,26 +601,19 @@ class Cache(object):
logger.debug(2, "Cache is clean, not saving.")
return
- file_dict = {}
- pickler_dict = {}
for cache_class in self.caches_array:
cache_class_name = cache_class.__name__
cachefile = getCacheFile(self.cachedir, cache_class.cachefile, self.data_hash)
- file_dict[cache_class_name] = open(cachefile, "wb")
- pickler_dict[cache_class_name] = pickle.Pickler(file_dict[cache_class_name], pickle.HIGHEST_PROTOCOL)
- pickler_dict[cache_class_name].dump(__cache_version__)
- pickler_dict[cache_class_name].dump(bb.__version__)
-
- try:
- for key, info_array in self.depends_cache.items():
- for info in info_array:
- cache_class_name = info.__class__.__name__
- pickler_dict[cache_class_name].dump(key)
- pickler_dict[cache_class_name].dump(info)
- finally:
- for cache_class in self.caches_array:
- cache_class_name = cache_class.__name__
- file_dict[cache_class_name].close()
+ with open(cachefile, "wb") as f:
+ p = pickle.Pickler(f, pickle.HIGHEST_PROTOCOL)
+ p.dump(__cache_version__)
+ p.dump(bb.__version__)
+
+ for key, info_array in self.depends_cache.items():
+ for info in info_array:
+ if isinstance(info, RecipeInfoCommon) and info.__class__.__name__ == cache_class_name:
+ p.dump(key)
+ p.dump(info)
del self.depends_cache
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the Openembedded-commits
mailing list