Call queryMissing() prior to building
Without this, substitute info is fetched sequentially, which is superslow. In the old UI (e.g. nix-build), we call printMissing(), which calls queryMissing(), thereby preheating the binary cache cache. But the new UI doesn't do that.
This commit is contained in:
		
							parent
							
								
									fd73c1e20a
								
							
						
					
					
						commit
						bbdf08bc0f
					
				
					 2 changed files with 14 additions and 0 deletions
				
			
		| 
						 | 
					@ -4166,10 +4166,20 @@ void Worker::markContentsGood(const Path & path)
 | 
				
			||||||
//////////////////////////////////////////////////////////////////////
 | 
					//////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void primeCache(Store & store, const PathSet & paths)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    PathSet willBuild, willSubstitute, unknown;
 | 
				
			||||||
 | 
					    unsigned long long downloadSize, narSize;
 | 
				
			||||||
 | 
					    store.queryMissing(paths, willBuild, willSubstitute, unknown, downloadSize, narSize);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void LocalStore::buildPaths(const PathSet & drvPaths, BuildMode buildMode)
 | 
					void LocalStore::buildPaths(const PathSet & drvPaths, BuildMode buildMode)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    Worker worker(*this);
 | 
					    Worker worker(*this);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    primeCache(*this, drvPaths);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Goals goals;
 | 
					    Goals goals;
 | 
				
			||||||
    for (auto & i : drvPaths) {
 | 
					    for (auto & i : drvPaths) {
 | 
				
			||||||
        DrvPathWithOutputs i2 = parseDrvPathWithOutputs(i);
 | 
					        DrvPathWithOutputs i2 = parseDrvPathWithOutputs(i);
 | 
				
			||||||
| 
						 | 
					@ -4220,6 +4230,8 @@ void LocalStore::ensurePath(const Path & path)
 | 
				
			||||||
    /* If the path is already valid, we're done. */
 | 
					    /* If the path is already valid, we're done. */
 | 
				
			||||||
    if (isValidPath(path)) return;
 | 
					    if (isValidPath(path)) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    primeCache(*this, {path});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Worker worker(*this);
 | 
					    Worker worker(*this);
 | 
				
			||||||
    GoalPtr goal = worker.makeSubstitutionGoal(path);
 | 
					    GoalPtr goal = worker.makeSubstitutionGoal(path);
 | 
				
			||||||
    Goals goals = {goal};
 | 
					    Goals goals = {goal};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -107,6 +107,8 @@ void Store::queryMissing(const PathSet & targets,
 | 
				
			||||||
    PathSet & willBuild_, PathSet & willSubstitute_, PathSet & unknown_,
 | 
					    PathSet & willBuild_, PathSet & willSubstitute_, PathSet & unknown_,
 | 
				
			||||||
    unsigned long long & downloadSize_, unsigned long long & narSize_)
 | 
					    unsigned long long & downloadSize_, unsigned long long & narSize_)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    Activity act(*logger, lvlDebug, actUnknown, "querying info about missing paths");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    downloadSize_ = narSize_ = 0;
 | 
					    downloadSize_ = narSize_ = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ThreadPool pool;
 | 
					    ThreadPool pool;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue