| 
					
				 | 
			
			
				@@ -502,25 +502,32 @@ class LocalCache(CacheStatsMixin): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         self.files = {} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         self._newest_cmtime = None 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         logger.debug('Reading files cache ...') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        with IntegrityCheckedFile(path=os.path.join(self.path, 'files'), write=False, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                  integrity_data=self.cache_config.integrity.get('files')) as fd: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            u = msgpack.Unpacker(use_list=True) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            while True: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                data = fd.read(64 * 1024) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if not data: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    break 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                u.feed(data) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                try: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    for path_hash, item in u: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        entry = FileCacheEntry(*item) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        # in the end, this takes about 240 Bytes per file 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        self.files[path_hash] = msgpack.packb(entry._replace(age=entry.age + 1)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                except (TypeError, ValueError) as exc: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    logger.warning('The files cache seems corrupt, ignoring it. ' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                   'Expect lower performance. [%s]' % str(exc)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    self.files = {} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        msg = None 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            with IntegrityCheckedFile(path=os.path.join(self.path, 'files'), write=False, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                      integrity_data=self.cache_config.integrity.get('files')) as fd: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                u = msgpack.Unpacker(use_list=True) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                while True: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    data = fd.read(64 * 1024) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if not data: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        break 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    u.feed(data) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    try: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        for path_hash, item in u: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            entry = FileCacheEntry(*item) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            # in the end, this takes about 240 Bytes per file 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            self.files[path_hash] = msgpack.packb(entry._replace(age=entry.age + 1)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    except (TypeError, ValueError) as exc: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        msg = "The files cache seems invalid. [%s]" % str(exc) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        break 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        except OSError as exc: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            msg = "The files cache can't be read. [%s]" % str(exc) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        except FileIntegrityError as fie: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            msg = "The files cache is corrupted. [%s]" % str(fie) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if msg is not None: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            logger.warning(msg) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            logger.warning('Continuing without files cache - expect lower performance.') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            self.files = {} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     def begin_txn(self): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         # Initialize transaction snapshot 
			 |