Revive binary-caches-parallel-connections
It's a slight misnomer now because it actually limits *all* downloads, not just binary cache lookups. Also add a "enable-http2" option to allow disabling use of HTTP/2 (enabled by default).
This commit is contained in:
		
							parent
							
								
									90ad02bf62
								
							
						
					
					
						commit
						6656ef7b5b
					
				
					 2 changed files with 11 additions and 6 deletions
				
			
		| 
						 | 
					@ -408,10 +408,9 @@ flag, e.g. <literal>--option gc-keep-outputs false</literal>.</para>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  <varlistentry><term><literal>binary-caches-parallel-connections</literal></term>
 | 
					  <varlistentry><term><literal>binary-caches-parallel-connections</literal></term>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <listitem><para>The maximum number of parallel HTTP connections
 | 
					    <listitem><para>The maximum number of parallel TCP connections
 | 
				
			||||||
    used by the binary cache substituter to get NAR info files.  This
 | 
					    used to fetch files from binary caches and by other downloads. It
 | 
				
			||||||
    number should be high to minimise latency.  It defaults to
 | 
					    defaults to 25. 0 means no limit.</para></listitem>
 | 
				
			||||||
    25.</para></listitem>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  </varlistentry>
 | 
					  </varlistentry>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -40,6 +40,8 @@ struct CurlDownloader : public Downloader
 | 
				
			||||||
    std::random_device rd;
 | 
					    std::random_device rd;
 | 
				
			||||||
    std::mt19937 mt19937;
 | 
					    std::mt19937 mt19937;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    bool enableHttp2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    struct DownloadItem : public std::enable_shared_from_this<DownloadItem>
 | 
					    struct DownloadItem : public std::enable_shared_from_this<DownloadItem>
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        CurlDownloader & downloader;
 | 
					        CurlDownloader & downloader;
 | 
				
			||||||
| 
						 | 
					@ -185,6 +187,7 @@ struct CurlDownloader : public Downloader
 | 
				
			||||||
            curl_easy_setopt(req, CURLOPT_NOSIGNAL, 1);
 | 
					            curl_easy_setopt(req, CURLOPT_NOSIGNAL, 1);
 | 
				
			||||||
            curl_easy_setopt(req, CURLOPT_USERAGENT, ("Nix/" + nixVersion).c_str());
 | 
					            curl_easy_setopt(req, CURLOPT_USERAGENT, ("Nix/" + nixVersion).c_str());
 | 
				
			||||||
            curl_easy_setopt(req, CURLOPT_PIPEWAIT, 1);
 | 
					            curl_easy_setopt(req, CURLOPT_PIPEWAIT, 1);
 | 
				
			||||||
 | 
					            if (downloader.enableHttp2)
 | 
				
			||||||
                curl_easy_setopt(req, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2TLS);
 | 
					                curl_easy_setopt(req, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2TLS);
 | 
				
			||||||
            curl_easy_setopt(req, CURLOPT_WRITEFUNCTION, DownloadItem::writeCallbackWrapper);
 | 
					            curl_easy_setopt(req, CURLOPT_WRITEFUNCTION, DownloadItem::writeCallbackWrapper);
 | 
				
			||||||
            curl_easy_setopt(req, CURLOPT_WRITEDATA, this);
 | 
					            curl_easy_setopt(req, CURLOPT_WRITEDATA, this);
 | 
				
			||||||
| 
						 | 
					@ -291,7 +294,10 @@ struct CurlDownloader : public Downloader
 | 
				
			||||||
        curlm = curl_multi_init();
 | 
					        curlm = curl_multi_init();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        curl_multi_setopt(curlm, CURLMOPT_PIPELINING, CURLPIPE_MULTIPLEX);
 | 
					        curl_multi_setopt(curlm, CURLMOPT_PIPELINING, CURLPIPE_MULTIPLEX);
 | 
				
			||||||
        curl_multi_setopt(curlm, CURLMOPT_MAX_TOTAL_CONNECTIONS, 25); // FIXME: configurable
 | 
					        curl_multi_setopt(curlm, CURLMOPT_MAX_TOTAL_CONNECTIONS,
 | 
				
			||||||
 | 
					            settings.get("binary-caches-parallel-connections", 25));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        enableHttp2 = settings.get("enable-http2", true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        wakeupPipe.create();
 | 
					        wakeupPipe.create();
 | 
				
			||||||
        fcntl(wakeupPipe.readSide.get(), F_SETFL, O_NONBLOCK);
 | 
					        fcntl(wakeupPipe.readSide.get(), F_SETFL, O_NONBLOCK);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue