[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
19/376: Report daemon OOM better
From: |
Ludovic Courtès |
Subject: |
19/376: Report daemon OOM better |
Date: |
Wed, 28 Jan 2015 22:03:46 +0000 |
civodul pushed a commit to tag 1.8
in repository guix.
commit b1beed97a0670befbfd5e105a81132e87e58ac37
Author: Eelco Dolstra <address@hidden>
Date: Tue Jun 10 13:45:50 2014 +0200
Report daemon OOM better
When copying a large path causes the daemon to run out of memory, you
now get:
error: Nix daemon out of memory
instead of:
error: writing to file: Broken pipe
---
src/libstore/remote-store.cc | 22 +++++++++++++++++-----
src/nix-daemon/nix-daemon.cc | 6 ++----
2 files changed, 19 insertions(+), 9 deletions(-)
diff --git a/src/libstore/remote-store.cc b/src/libstore/remote-store.cc
index 177b8e7..3b021bb 100644
--- a/src/libstore/remote-store.cc
+++ b/src/libstore/remote-store.cc
@@ -402,11 +402,23 @@ Path RemoteStore::addToStore(const Path & _srcPath,
writeInt((hashAlgo == htSHA256 && recursive) ? 0 : 1, to);
writeInt(recursive ? 1 : 0, to);
writeString(printHashType(hashAlgo), to);
- to.written = 0;
- to.warn = true;
- dumpPath(srcPath, to, filter);
- to.warn = false;
- processStderr();
+
+ try {
+ to.written = 0;
+ to.warn = true;
+ dumpPath(srcPath, to, filter);
+ to.warn = false;
+ processStderr();
+ } catch (SysError & e) {
+ /* Daemon closed while we were sending the path. Probably OOM
+ or I/O error. */
+ if (e.errNo == EPIPE)
+ try {
+ processStderr();
+ } catch (EndOfFile & e) { }
+ throw;
+ }
+
return readStorePath(from);
}
diff --git a/src/nix-daemon/nix-daemon.cc b/src/nix-daemon/nix-daemon.cc
index 8814fe3..0464ac9 100644
--- a/src/nix-daemon/nix-daemon.cc
+++ b/src/nix-daemon/nix-daemon.cc
@@ -735,12 +735,10 @@ static void processConnection(bool trusted)
during addTextToStore() / importPath(). If that
happens, just send the error message and exit. */
bool errorAllowed = canSendStderr;
- if (!errorAllowed) printMsg(lvlError, format("error processing
client input: %1%") % e.msg());
stopWork(false, e.msg(), GET_PROTOCOL_MINOR(clientVersion) >= 8 ?
e.status : 0);
- if (!errorAllowed) break;
+ if (!errorAllowed) throw;
} catch (std::bad_alloc & e) {
- if (canSendStderr)
- stopWork(false, "Nix daemon out of memory",
GET_PROTOCOL_MINOR(clientVersion) >= 8 ? 1 : 0);
+ stopWork(false, "Nix daemon out of memory",
GET_PROTOCOL_MINOR(clientVersion) >= 8 ? 1 : 0);
throw;
}
- 10/376: Remove ExprBuiltin, (continued)
- 10/376: Remove ExprBuiltin, Ludovic Courtès, 2015/01/28
- 02/376: nix-store -l: Fetch build logs from the Internet, Ludovic Courtès, 2015/01/28
- 13/376: nix-build: --add-root also takes 1 parameter, Ludovic Courtès, 2015/01/28
- 07/376: Add constant ‘nixPath’, Ludovic Courtès, 2015/01/28
- 17/376: nix-env -qa --json: Generate valid JSON even if there are invalid meta attrs, Ludovic Courtès, 2015/01/28
- 14/376: Use std::unordered_set, Ludovic Courtès, 2015/01/28
- 15/376: Sort nixPath attributes, Ludovic Courtès, 2015/01/28
- 16/376: Fix test, Ludovic Courtès, 2015/01/28
- 21/376: Add autoloads, make code more concise & idiomatic, Ludovic Courtès, 2015/01/28
- 18/376: Print a warning when loading a large path into memory, Ludovic Courtès, 2015/01/28
- 19/376: Report daemon OOM better,
Ludovic Courtès <=
- 22/376: Share code between scopedImport and import, Ludovic Courtès, 2015/01/28
- 28/376: Only add the importNative primop if the allow-arbitrary-code-during-evaluation option is true (default false), Ludovic Courtès, 2015/01/28
- 26/376: Don't use member initialisers, Ludovic Courtès, 2015/01/28
- 27/376: Add importNative primop, Ludovic Courtès, 2015/01/28
- 29/376: Merge branch 'shlevy-import-native', Ludovic Courtès, 2015/01/28
- 20/376: == operator: Ignore string context, Ludovic Courtès, 2015/01/28
- 30/376: allow-arbitrary-code-during-evaluation -> allow-unsafe-native-code-during-evaluation, Ludovic Courtès, 2015/01/28
- 32/376: Style fix, Ludovic Courtès, 2015/01/28
- 24/376: Drop ImportError and FindError, Ludovic Courtès, 2015/01/28
- 31/376: Add `--json` argument to `nix-instantiate`, Ludovic Courtès, 2015/01/28