LegacySSHStore: Provide a faster implementation of computeFSClosure()
This avoids the latency of the standard implementation, which can make a huge difference (e.g. 16.5s -> 0.5s on a NixOS system closure).
This commit is contained in:
		
							parent
							
								
									7a716ef2a5
								
							
						
					
					
						commit
						ea7fa88131
					
				
					 2 changed files with 23 additions and 1 deletions
				
			
		|  | @ -204,6 +204,28 @@ struct LegacySSHStore : public Store | |||
|     bool isTrusted() override | ||||
|     { return true; } | ||||
| 
 | ||||
|     void computeFSClosure(const PathSet & paths, | ||||
|         PathSet & out, bool flipDirection = false, | ||||
|         bool includeOutputs = false, bool includeDerivers = false) override | ||||
|     { | ||||
|         if (flipDirection || includeDerivers) { | ||||
|             Store::computeFSClosure(paths, out, flipDirection, includeOutputs, includeDerivers); | ||||
|             return; | ||||
|         } | ||||
| 
 | ||||
|         auto conn(connections->get()); | ||||
| 
 | ||||
|         conn->to | ||||
|             << cmdQueryClosure | ||||
|             << includeOutputs | ||||
|             << paths; | ||||
|         conn->to.flush(); | ||||
| 
 | ||||
|         auto res = readStorePaths<PathSet>(*this, conn->from); | ||||
| 
 | ||||
|         out.insert(res.begin(), res.end()); | ||||
|     } | ||||
| 
 | ||||
| }; | ||||
| 
 | ||||
| static RegisterStoreImplementation regStore([]( | ||||
|  |  | |||
|  | @ -511,7 +511,7 @@ public: | |||
|        `storePath' is returned; that is, the closures under the | ||||
|        `referrers' relation instead of the `references' relation is | ||||
|        returned. */ | ||||
|     void computeFSClosure(const PathSet & paths, | ||||
|     virtual void computeFSClosure(const PathSet & paths, | ||||
|         PathSet & out, bool flipDirection = false, | ||||
|         bool includeOutputs = false, bool includeDerivers = false); | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue