diff options
author | Eelco Dolstra <edolstra@gmail.com> | 2020-02-05 15:41:51 +0100 |
---|---|---|
committer | Eelco Dolstra <edolstra@gmail.com> | 2020-02-05 15:41:51 +0100 |
commit | 022287060b04ec0af229de1c2a440625d8f9d94d (patch) | |
tree | 47e7232d4fb04fd3f0ee9ae46945062584a7a37b | |
parent | 750c993f004952685e3c06ffd222c6fe3b710c85 (diff) | |
parent | db88cb401ba07f0c2a4c0dca3e66fc33f2029e46 (diff) |
Merge remote-tracking branch 'origin/master' into flakes
-rw-r--r-- | src/libstore/download.cc | 3 | ||||
-rw-r--r-- | src/libstore/ssh-store.cc | 6 |
2 files changed, 7 insertions, 2 deletions
diff --git a/src/libstore/download.cc b/src/libstore/download.cc index d8c52b151..8e0d7d42a 100644 --- a/src/libstore/download.cc +++ b/src/libstore/download.cc @@ -363,9 +363,10 @@ struct CurlDownloader : public Downloader } else if (httpStatus == 401 || httpStatus == 403 || httpStatus == 407) { // Don't retry on authentication/authorization failures err = Forbidden; - } else if (httpStatus >= 400 && httpStatus < 500 && httpStatus != 408) { + } else if (httpStatus >= 400 && httpStatus < 500 && httpStatus != 408 && httpStatus != 429) { // Most 4xx errors are client errors and are probably not worth retrying: // * 408 means the server timed out waiting for us, so we try again + // * 429 means too many requests, so we retry (with a delay) err = Misc; } else if (httpStatus == 501 || httpStatus == 505 || httpStatus == 511) { // Let's treat most 5xx (server) errors as transient, except for a handful: diff --git a/src/libstore/ssh-store.cc b/src/libstore/ssh-store.cc index 42ee06501..af99ad40a 100644 --- a/src/libstore/ssh-store.cc +++ b/src/libstore/ssh-store.cc @@ -16,6 +16,8 @@ public: const Setting<Path> sshKey{(Store*) this, "", "ssh-key", "path to an SSH private key"}; const Setting<bool> compress{(Store*) this, false, "compress", "whether to compress the connection"}; + const Setting<Path> remoteProgram{this, "nix-daemon", "remote-program", "path to the nix-daemon executable on the remote system"}; + const Setting<std::string> remoteStore{this, "", "remote-store", "URI of the store on the remote system"}; SSHStore(const std::string & host, const Params & params) : Store(params) @@ -82,7 +84,9 @@ ref<FSAccessor> SSHStore::getFSAccessor() ref<RemoteStore::Connection> SSHStore::openConnection() { auto conn = make_ref<Connection>(); - conn->sshConn = master.startCommand("nix-daemon --stdio"); + conn->sshConn = master.startCommand( + fmt("%s --stdio", remoteProgram) + + (remoteStore.get() == "" ? "" : " --store " + shellEscape(remoteStore.get()))); conn->to = FdSink(conn->sshConn->in.get()); conn->from = FdSource(conn->sshConn->out.get()); initConnection(*conn); |