Added possibility to specify garbage collection levels for store paths; so packages can share intermediate results of compilation and GC will collect it automatically while never touching tarballs, for example.
This commit is contained in:
		
							parent
							
								
									5b74a59570
								
							
						
					
					
						commit
						6fc60e2060
					
				
					 2 changed files with 21 additions and 4 deletions
				
			
		|  | @ -4,6 +4,7 @@ | ||||||
| #include "local-store.hh" | #include "local-store.hh" | ||||||
| #include "db.hh" | #include "db.hh" | ||||||
| #include "util.hh" | #include "util.hh" | ||||||
|  | #include "gc.hh" | ||||||
| 
 | 
 | ||||||
| #include <boost/shared_ptr.hpp> | #include <boost/shared_ptr.hpp> | ||||||
| 
 | 
 | ||||||
|  | @ -445,6 +446,8 @@ void LocalStore::collectGarbage(GCAction action, const PathSet & pathsToDelete, | ||||||
|         queryBoolSetting("gc-keep-outputs", false); |         queryBoolSetting("gc-keep-outputs", false); | ||||||
|     bool gcKeepDerivations = |     bool gcKeepDerivations = | ||||||
|         queryBoolSetting("gc-keep-derivations", true); |         queryBoolSetting("gc-keep-derivations", true); | ||||||
|  |     unsigned int gcKeepOutputsThreshold =  | ||||||
|  |         queryIntSetting ("gc-keep-outputs-threshold", defaultGcLevel); | ||||||
| 
 | 
 | ||||||
|     /* Acquire the global GC root.  This prevents
 |     /* Acquire the global GC root.  This prevents
 | ||||||
|        a) New roots from being added. |        a) New roots from being added. | ||||||
|  | @ -496,6 +499,14 @@ void LocalStore::collectGarbage(GCAction action, const PathSet & pathsToDelete, | ||||||
|              i != livePaths.end(); ++i) |              i != livePaths.end(); ++i) | ||||||
|             if (isDerivation(*i)) { |             if (isDerivation(*i)) { | ||||||
|                 Derivation drv = derivationFromPath(*i); |                 Derivation drv = derivationFromPath(*i); | ||||||
|  | 
 | ||||||
|  | 		string gcLevelStr = drv.env["__gcLevel"]; | ||||||
|  | 		int gcLevel; | ||||||
|  | 		if (!string2Int(gcLevelStr,gcLevel)) { | ||||||
|  | 		    gcLevel = defaultGcLevel; | ||||||
|  | 		} | ||||||
|  | 		 | ||||||
|  | 		if (gcLevel >= gcKeepOutputsThreshold)     | ||||||
| 		    for (DerivationOutputs::iterator j = drv.outputs.begin(); | 		    for (DerivationOutputs::iterator j = drv.outputs.begin(); | ||||||
| 		            j != drv.outputs.end(); ++j) | 		            j != drv.outputs.end(); ++j) | ||||||
| 			if (store->isValidPath(j->second.path)) | 			if (store->isValidPath(j->second.path)) | ||||||
|  |  | ||||||
							
								
								
									
										6
									
								
								src/libstore/gc.hh
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								src/libstore/gc.hh
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | ||||||
|  | #ifndef  __GC_H_INCLUDED | ||||||
|  | #define  __GC_H_INCLUDED | ||||||
|  | 
 | ||||||
|  | const unsigned int defaultGcLevel = 1000; | ||||||
|  | 
 | ||||||
|  | #endif //__GC_H_INCLUDED
 | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue