aboutsummaryrefslogtreecommitdiff
path: root/src/libstore/download.cc
AgeCommit message (Collapse)Author
2016-11-26Revert "Get rid of unicode quotes (#1140)"Eelco Dolstra
This reverts commit f78126bfd6b6c8477fcdbc09b2f98772dbe9a1e7. There really is no need for such a massive change...
2016-11-25Get rid of unicode quotes (#1140)Guillaume Maudoux
2016-10-21BinaryCacheStore: Optionally write a NAR listingEelco Dolstra
The store parameter "write-nar-listing=1" will cause BinaryCacheStore to write a file ‘<store-hash>.ls.xz’ for each ‘<store-hash>.narinfo’ added to the binary cache. This file contains an XZ-compressed JSON file describing the contents of the NAR, excluding the contents of regular files. E.g. { "version": 1, "root": { "type": "directory", "entries": { "lib": { "type": "directory", "entries": { "Mcrt1.o": { "type": "regular", "size": 1288 }, "Scrt1.o": { "type": "regular", "size": 3920 }, } } } ... } } (The actual file has no indentation.) This is intended to speed up the NixOS channels programs index generator [1], since fetching gazillions of large NARs from cache.nixos.org is currently a bottleneck for updating the regular (non-small) channel. [1] https://github.com/NixOS/nixos-channel-scripts/blob/master/generate-programs-index.cc
2016-10-19Merge branch 'priorityqueue' of https://github.com/groxxda/nixEelco Dolstra
2016-10-19Fix uninitialised variableEelco Dolstra
2016-10-18downloader: use priority_queueAlexander Ried
2016-10-14CURL_AT_LEAST_VERSION -> LIBCURL_VERSION_NUMEelco Dolstra
http://hydra.nixos.org/build/42025230
2016-10-13Fix HTTP/2 supportEelco Dolstra
Commit 86e8c67efc33cf756500a1dec7fd6313658f2664 broke it, because CURL_* are not actually #defines.
2016-10-13SSL_CERT_FILE -> NIX_SSL_CERT_FILEEelco Dolstra
This prevents collisions with the "native" OpenSSL, in particular on OS X. Fixes #921.
2016-10-05Use std::random_deviceEelco Dolstra
2016-10-04Fix build with older versions of libcurlEelco Dolstra
2016-09-21printMsg(lvlError, ...) -> printError(...) etc.Eelco Dolstra
2016-09-20TweakEelco Dolstra
2016-09-20Improve robustnessEelco Dolstra
2016-09-16Make computeFSClosure() single-threaded againEelco Dolstra
The fact that queryPathInfo() is synchronous meant that we needed a thread for every concurrent binary cache lookup, even though they end up being handled by the same download thread. Requiring hundreds of threads is not a good idea. So now there is an asynchronous version of queryPathInfo() that takes a callback function to process the result. Similarly, enqueueDownload() now takes a callback rather than returning a future. Thus, a command like nix path-info --store https://cache.nixos.org/ -r /nix/store/slljrzwmpygy1daay14kjszsr9xix063-nixos-16.09beta231.dccf8c5 that returns 4941 paths now takes 1.87s using only 2 threads (the main thread and the downloader thread). (This is with a prewarmed CloudFront.)
2016-09-14Revive binary-caches-parallel-connectionsEelco Dolstra
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).
2016-09-14Enable HTTP/2 supportEelco Dolstra
The binary cache store can now use HTTP/2 to do lookups. This is much more efficient than HTTP/1.1 due to multiplexing: we can issue many requests in parallel over a single TCP connection. Thus it's no longer necessary to use a bunch of concurrent TCP connections (25 by default). For example, downloading 802 .narinfo files from https://cache.nixos.org/, using a single TCP connection, takes 11.8s with HTTP/1.1, but only 0.61s with HTTP/2. This did require a fairly substantial rewrite of the Downloader class to use the curl multi interface, because otherwise curl wouldn't be able to do multiplexing for us. As a bonus, we get connection reuse even with HTTP/1.1. All downloads are now handled by a single worker thread. Clients call Downloader::enqueueDownload() to tell the worker thread to start the download, getting a std::future to the result.
2016-08-31download.hh: Fix conflicts from nix-channel-c++ mergeShea Levy
2016-08-31Merge branch 'nix-channel-c++'Shea Levy
2016-08-30Increase the sleep time between download retriesEelco Dolstra
2016-08-15builtins.fetch{url,tarball}: Allow name attributeShea Levy
2016-08-11nix-channel: implement in c++Shea Levy
2016-08-10HttpBinaryCacheStore: Retry on transient HTTP errorsEelco Dolstra
This makes us more robust against 500 errors from CloudFront or S3 (assuming the 500 error isn't cached by CloudFront...).
2016-08-10Show HTTP error codesEelco Dolstra
2016-07-26makeFixedOutputPath(): Drop superfluous HashType argumentEelco Dolstra
2016-07-26builtins.{fetchurl,fetchTarball}: Support a sha256 attributeEelco Dolstra
Also, allow builtins.{fetchurl,fetchTarball} in restricted mode if a hash is specified.
2016-07-21Fix random failures caused by CurlDownloader modifying a shared stringEelco Dolstra
2016-04-29Add fetchgit builtinEelco Dolstra
The function builtins.fetchgit fetches Git repositories at evaluation time, similar to builtins.fetchTarball. (Perhaps the name should be changed, being confusing with respect to Nixpkgs's fetchgit function, with works at build time.) Example: (import (builtins.fetchgit git://github.com/NixOS/nixpkgs) {}).hello or (import (builtins.fetchgit { url = git://github.com/NixOS/nixpkgs-channels; rev = "nixos-16.03"; }) {}).hello Note that the result does not contain a .git directory.
2016-04-20Cache path info lookups in SQLiteEelco Dolstra
This re-implements the binary cache database in C++, allowing it to be used by other Store backends, in particular the S3 backend.
2016-04-15BinaryCacheStore::readFile(): Return a shared_ptr to a stringEelco Dolstra
This allows readFile() to indicate that a file doesn't exist, and might eliminate some large string copying.
2016-04-14Support channel:<channel-name> URIsEelco Dolstra
For convenience, you can now say $ nix-env -f channel:nixos-16.03 -iA hello instead of $ nix-env -f https://nixos.org/channels/nixos-16.03/nixexprs.tar.xz -iA hello Similarly, $ nix-shell -I channel:nixpkgs-unstable -p hello $ nix-build channel:nixos-15.09 -A hello Abstracting over the NixOS/Nixpkgs channels location also allows us to use a more efficient transport (e.g. Git) in the future.
2016-04-06Fix "tar: This does not look like a tar archive" with fetchTarball / -I http://Eelco Dolstra
The 304 Not Modified was not handled correctly, so the empty result from the conditional request would overwrite the previous tarball.
2016-03-30CurlDownloader: Fix HTTP error processingEelco Dolstra
2016-02-29Add an HTTP binary cache storeEelco Dolstra
Allowing stuff like NIX_REMOTE=https://cache.nixos.org nix-store -qR /nix/store/x1p1gl3a4kkz5ci0nfbayjqlqmczp1kq-geeqie-1.1 or NIX_REMOTE=https://cache.nixos.org nix-store --export /nix/store/x1p1gl3a4kkz5ci0nfbayjqlqmczp1kq-geeqie-1.1 | nix-store --import
2016-02-22curl: Set CURLOPT_NOSIGNALEelco Dolstra
Otherwise using curl is not safe in multi-threaded applications because it installs a SIGALRM handler.
2016-02-04StoreAPI -> StoreEelco Dolstra
Calling a class an API is a bit redundant...
2016-02-04Eliminate the "store" global variableEelco Dolstra
Also, move a few free-standing functions into StoreAPI and Derivation. Also, introduce a non-nullable smart pointer, ref<T>, which is just a wrapper around std::shared_ptr ensuring that the pointer is never null. (For reference-counted values, this is better than passing a "T&", because the latter doesn't maintain the refcount. Usually, the caller will have a shared_ptr keeping the value alive, but that's not always the case, e.g., when passing a reference to a std::thread via std::bind.)
2015-10-29int2String() -> std::to_string()Eelco Dolstra
2015-10-21Show progress indicator for builtin fetchurlEelco Dolstra
2015-10-21Disable TLS verification for builtin fetchurlEelco Dolstra
This makes it consistent with the Nixpkgs fetchurl and makes it work in chroots. We don't need verification because the hash of the result is checked anyway.
2015-10-08Revert to CURLOPT_PROGRESSFUNCTIONEelco Dolstra
CURLOPT_XFERINFOFUNCTION isn't widely supported yet. http://hydra.nixos.org/build/26679495
2015-10-07Show progress during downloadsEelco Dolstra
2015-07-20Make <nix/fetchurl.nix> a builtin builderEelco Dolstra
This ensures that 1) the derivation doesn't change when Nix changes; 2) the derivation closure doesn't contain Nix and its dependencies; 3) we don't have to rely on ugly chroot hacks.