| 
					
				 | 
			
			
				@@ -1300,13 +1300,31 @@ class ChunksProcessor: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         # to get rid of .chunks_healthy, as it might not correspond to .chunks any more. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if self.rechunkify and "chunks_healthy" in item: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             del item.chunks_healthy 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        for chunk in chunk_iter: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            cle = chunk_processor(chunk) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            item.chunks.append(cle) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            self.current_volume += cle[1] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if show_progress: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                stats.show_progress(item=item, dt=0.2) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            self.maybe_checkpoint(item) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for chunk in chunk_iter: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                cle = chunk_processor(chunk) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                item.chunks.append(cle) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                self.current_volume += cle[1] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if show_progress: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    stats.show_progress(item=item, dt=0.2) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                self.maybe_checkpoint(item) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        except BackupOSError: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            # something went wrong (e.g. an I/O error while reading a source file), try to avoid orphan content chunks: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            # case A: "no checkpoint archive has been created yet": 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            # we have incref'd (written) some chunks, no commit yet, no file item for these chunks yet. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            # -> item.chunks has a list of orphaned content chunks, we need to decref them. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            # case B: "some checkpoint archives have been created already": 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            # at the time we commit them, everything is fine and consistent: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            # we have incref'd (written) some chunks, created a part file item referencing them, committed. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            # directly after commit, we have removed the part file item, but kept chunks in the repo, kept refcounts. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            # maybe we have incref'd (written) some more chunks after the commit, no file item for these chunks yet. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            # -> item.chunks has a list of orphaned content chunks, we need to decref them. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            # So, cases A and B need same treatment. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for chunk in item.chunks: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                cache.chunk_decref(chunk.id, stats, wait=False) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            # now that we have cleaned up the chunk references, we can re-raise the exception 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            # this will skip THIS processing of this file, but continue with the next one. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            raise 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 class FilesystemObjectProcessors: 
			 |