* Randomise the order in which we delete entries to make the collector
less biased towards deleting paths that come alphabetically first (e.g. /nix/store/000...). This matters when using --max-freed etc.
This commit is contained in:
		
							parent
							
								
									ca50c83fbb
								
							
						
					
					
						commit
						f9e766db98
					
				
					 1 changed files with 10 additions and 2 deletions
				
			
		|  | @ -7,6 +7,7 @@ | |||
| 
 | ||||
| #include <functional> | ||||
| #include <queue> | ||||
| #include <algorithm> | ||||
| 
 | ||||
| #include <sys/types.h> | ||||
| #include <sys/stat.h> | ||||
|  | @ -646,13 +647,20 @@ void LocalStore::collectGarbage(const GCOptions & options, GCResults & results) | |||
|         printMsg(lvlError, format("reading the Nix store...")); | ||||
|         Paths entries = readDirectory(nixStore); | ||||
| 
 | ||||
|         /* Randomise the order in which we delete entries to make the
 | ||||
|            collector less biased towards deleting paths that come | ||||
|            alphabetically first (e.g. /nix/store/000...).  This | ||||
|            matters when using --max-freed etc. */ | ||||
|         vector<Path> entries_(entries.begin(), entries.end()); | ||||
|         random_shuffle(entries_.begin(), entries_.end()); | ||||
| 
 | ||||
|         if (doDelete(state.options.action)) | ||||
|             printMsg(lvlError, format("deleting garbage...")); | ||||
|         else | ||||
|             printMsg(lvlError, format("determining live/dead paths...")); | ||||
|      | ||||
|         try { | ||||
|             foreach (Paths::iterator, i, entries) | ||||
|             foreach (vector<Path>::iterator, i, entries_) | ||||
|                 tryToDelete(state, canonPath(nixStore + "/" + *i)); | ||||
|         } catch (GCLimitReached & e) { | ||||
|         } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue