copyPaths(): Use queryValidPaths() to reduce SSH latency
This commit is contained in:
		
							parent
							
								
									91d67692cf
								
							
						
					
					
						commit
						c5b83d8913
					
				
					 10 changed files with 45 additions and 37 deletions
				
			
		| 
						 | 
				
			
			@ -252,10 +252,10 @@ connected:
 | 
			
		|||
        string line;
 | 
			
		||||
        if (!getline(cin, line))
 | 
			
		||||
            throw Error("hook caller didn't send inputs");
 | 
			
		||||
        auto inputs = tokenizeString<std::list<string>>(line);
 | 
			
		||||
        auto inputs = tokenizeString<PathSet>(line);
 | 
			
		||||
        if (!getline(cin, line))
 | 
			
		||||
            throw Error("hook caller didn't send outputs");
 | 
			
		||||
        auto outputs = tokenizeString<Strings>(line);
 | 
			
		||||
        auto outputs = tokenizeString<PathSet>(line);
 | 
			
		||||
        AutoCloseFD uploadLock = openLockFile(currentLoad + "/" + hostName + ".upload-lock", true);
 | 
			
		||||
        auto old = signal(SIGALRM, handleAlarm);
 | 
			
		||||
        alarm(15 * 60);
 | 
			
		||||
| 
						 | 
				
			
			@ -269,11 +269,15 @@ connected:
 | 
			
		|||
        printError("building ‘%s’ on ‘%s’", drvPath, hostName);
 | 
			
		||||
        sshStore->buildDerivation(drvPath, readDerivation(drvPath));
 | 
			
		||||
 | 
			
		||||
        std::remove_if(outputs.begin(), outputs.end(), [=](const Path & path) { return store->isValidPath(path); });
 | 
			
		||||
        if (!outputs.empty()) {
 | 
			
		||||
            setenv("NIX_HELD_LOCKS", concatStringsSep(" ", outputs).c_str(), 1); /* FIXME: ugly */
 | 
			
		||||
            copyPaths(ref<Store>(sshStore), store, outputs);
 | 
			
		||||
        PathSet missing;
 | 
			
		||||
        for (auto & path : outputs)
 | 
			
		||||
            if (!store->isValidPath(path)) missing.insert(path);
 | 
			
		||||
 | 
			
		||||
        if (!missing.empty()) {
 | 
			
		||||
            setenv("NIX_HELD_LOCKS", concatStringsSep(" ", missing).c_str(), 1); /* FIXME: ugly */
 | 
			
		||||
            copyPaths(ref<Store>(sshStore), store, missing);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return;
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue