Move some Download-specific settings to download.cc
This commit is contained in:
parent
737ed88f35
commit
c1d445ecec
|
@ -29,6 +29,26 @@ using namespace std::string_literals;
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
|
struct DownloadSettings : Config
|
||||||
|
{
|
||||||
|
Setting<bool> enableHttp2{this, true, "http2",
|
||||||
|
"Whether to enable HTTP/2 support."};
|
||||||
|
|
||||||
|
Setting<std::string> userAgentSuffix{this, "", "user-agent-suffix",
|
||||||
|
"String appended to the user agent in HTTP requests."};
|
||||||
|
|
||||||
|
Setting<size_t> httpConnections{this, 25, "http-connections",
|
||||||
|
"Number of parallel HTTP connections.",
|
||||||
|
{"binary-caches-parallel-connections"}};
|
||||||
|
|
||||||
|
Setting<unsigned long> connectTimeout{this, 0, "connect-timeout",
|
||||||
|
"Timeout for connecting to servers during downloads. 0 means use curl's builtin default."};
|
||||||
|
};
|
||||||
|
|
||||||
|
static DownloadSettings downloadSettings;
|
||||||
|
|
||||||
|
static GlobalConfig::Register r1(&downloadSettings);
|
||||||
|
|
||||||
std::string resolveUri(const std::string & uri)
|
std::string resolveUri(const std::string & uri)
|
||||||
{
|
{
|
||||||
if (uri.compare(0, 8, "channel:") == 0)
|
if (uri.compare(0, 8, "channel:") == 0)
|
||||||
|
@ -54,8 +74,6 @@ 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;
|
||||||
|
@ -221,12 +239,12 @@ struct CurlDownloader : public Downloader
|
||||||
curl_easy_setopt(req, CURLOPT_NOSIGNAL, 1);
|
curl_easy_setopt(req, CURLOPT_NOSIGNAL, 1);
|
||||||
curl_easy_setopt(req, CURLOPT_USERAGENT,
|
curl_easy_setopt(req, CURLOPT_USERAGENT,
|
||||||
("curl/" LIBCURL_VERSION " Nix/" + nixVersion +
|
("curl/" LIBCURL_VERSION " Nix/" + nixVersion +
|
||||||
(settings.userAgentSuffix != "" ? " " + settings.userAgentSuffix.get() : "")).c_str());
|
(downloadSettings.userAgentSuffix != "" ? " " + downloadSettings.userAgentSuffix.get() : "")).c_str());
|
||||||
#if LIBCURL_VERSION_NUM >= 0x072b00
|
#if LIBCURL_VERSION_NUM >= 0x072b00
|
||||||
curl_easy_setopt(req, CURLOPT_PIPEWAIT, 1);
|
curl_easy_setopt(req, CURLOPT_PIPEWAIT, 1);
|
||||||
#endif
|
#endif
|
||||||
#if LIBCURL_VERSION_NUM >= 0x072f00
|
#if LIBCURL_VERSION_NUM >= 0x072f00
|
||||||
if (downloader.enableHttp2)
|
if (downloadSettings.enableHttp2)
|
||||||
curl_easy_setopt(req, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2TLS);
|
curl_easy_setopt(req, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2TLS);
|
||||||
#endif
|
#endif
|
||||||
curl_easy_setopt(req, CURLOPT_WRITEFUNCTION, DownloadItem::writeCallbackWrapper);
|
curl_easy_setopt(req, CURLOPT_WRITEFUNCTION, DownloadItem::writeCallbackWrapper);
|
||||||
|
@ -258,7 +276,7 @@ struct CurlDownloader : public Downloader
|
||||||
curl_easy_setopt(req, CURLOPT_SSL_VERIFYHOST, 0);
|
curl_easy_setopt(req, CURLOPT_SSL_VERIFYHOST, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
curl_easy_setopt(req, CURLOPT_CONNECTTIMEOUT, settings.connectTimeout.get());
|
curl_easy_setopt(req, CURLOPT_CONNECTTIMEOUT, downloadSettings.connectTimeout.get());
|
||||||
|
|
||||||
curl_easy_setopt(req, CURLOPT_LOW_SPEED_LIMIT, 1L);
|
curl_easy_setopt(req, CURLOPT_LOW_SPEED_LIMIT, 1L);
|
||||||
curl_easy_setopt(req, CURLOPT_LOW_SPEED_TIME, lowSpeedTimeout);
|
curl_easy_setopt(req, CURLOPT_LOW_SPEED_TIME, lowSpeedTimeout);
|
||||||
|
@ -401,11 +419,9 @@ struct CurlDownloader : public Downloader
|
||||||
#endif
|
#endif
|
||||||
#if LIBCURL_VERSION_NUM >= 0x071e00 // Max connections requires >= 7.30.0
|
#if LIBCURL_VERSION_NUM >= 0x071e00 // Max connections requires >= 7.30.0
|
||||||
curl_multi_setopt(curlm, CURLMOPT_MAX_TOTAL_CONNECTIONS,
|
curl_multi_setopt(curlm, CURLMOPT_MAX_TOTAL_CONNECTIONS,
|
||||||
settings.binaryCachesParallelConnections.get());
|
downloadSettings.httpConnections.get());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
enableHttp2 = settings.enableHttp2;
|
|
||||||
|
|
||||||
wakeupPipe.create();
|
wakeupPipe.create();
|
||||||
fcntl(wakeupPipe.readSide.get(), F_SETFL, O_NONBLOCK);
|
fcntl(wakeupPipe.readSide.get(), F_SETFL, O_NONBLOCK);
|
||||||
|
|
||||||
|
|
|
@ -256,13 +256,6 @@ public:
|
||||||
Setting<Strings> secretKeyFiles{this, {}, "secret-key-files",
|
Setting<Strings> secretKeyFiles{this, {}, "secret-key-files",
|
||||||
"Secret keys with which to sign local builds."};
|
"Secret keys with which to sign local builds."};
|
||||||
|
|
||||||
Setting<size_t> binaryCachesParallelConnections{this, 25, "http-connections",
|
|
||||||
"Number of parallel HTTP connections.",
|
|
||||||
{"binary-caches-parallel-connections"}};
|
|
||||||
|
|
||||||
Setting<bool> enableHttp2{this, true, "http2",
|
|
||||||
"Whether to enable HTTP/2 support."};
|
|
||||||
|
|
||||||
Setting<unsigned int> tarballTtl{this, 60 * 60, "tarball-ttl",
|
Setting<unsigned int> tarballTtl{this, 60 * 60, "tarball-ttl",
|
||||||
"How soon to expire files fetched by builtins.fetchTarball and builtins.fetchurl."};
|
"How soon to expire files fetched by builtins.fetchTarball and builtins.fetchurl."};
|
||||||
|
|
||||||
|
@ -329,12 +322,6 @@ public:
|
||||||
Setting<bool> enableImportFromDerivation{this, true, "allow-import-from-derivation",
|
Setting<bool> enableImportFromDerivation{this, true, "allow-import-from-derivation",
|
||||||
"Whether the evaluator allows importing the result of a derivation."};
|
"Whether the evaluator allows importing the result of a derivation."};
|
||||||
|
|
||||||
Setting<unsigned long> connectTimeout{this, 0, "connect-timeout",
|
|
||||||
"Timeout for connecting to servers during downloads. 0 means use curl's builtin default."};
|
|
||||||
|
|
||||||
Setting<std::string> userAgentSuffix{this, "", "user-agent-suffix",
|
|
||||||
"String appended to the user agent in HTTP requests."};
|
|
||||||
|
|
||||||
#if __linux__
|
#if __linux__
|
||||||
Setting<bool> filterSyscalls{this, true, "filter-syscalls",
|
Setting<bool> filterSyscalls{this, true, "filter-syscalls",
|
||||||
"Whether to prevent certain dangerous system calls, such as "
|
"Whether to prevent certain dangerous system calls, such as "
|
||||||
|
|
|
@ -553,7 +553,7 @@ static void performOp(TunnelLogger * logger, ref<LocalStore> store,
|
||||||
;
|
;
|
||||||
else if (trusted
|
else if (trusted
|
||||||
|| name == settings.buildTimeout.name
|
|| name == settings.buildTimeout.name
|
||||||
|| name == settings.connectTimeout.name)
|
|| name == "connect-timeout")
|
||||||
settings.set(name, value);
|
settings.set(name, value);
|
||||||
else if (setSubstituters(settings.substituters))
|
else if (setSubstituters(settings.substituters))
|
||||||
;
|
;
|
||||||
|
|
Loading…
Reference in a new issue