GNU bug report logs - #27704
[PATCH] daemon: Show actual rather than collateral error when export fails.

Previous Next

Package: guix-patches;

Reported by: Jan Nieuwenhuizen <janneke <at> gnu.org>

Date: Sat, 15 Jul 2017 11:00:02 UTC

Severity: normal

Tags: patch

Done: ludo <at> gnu.org (Ludovic Courtès)

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: help-debbugs <at> gnu.org (GNU bug Tracking System)
To: ludo <at> gnu.org (Ludovic Courtès)
Cc: tracker <at> debbugs.gnu.org
Subject: bug#27704: closed ([PATCH] daemon: Show actual rather than
 collateral error when export fails.)
Date: Mon, 17 Jul 2017 13:16:02 +0000
[Message part 1 (text/plain, inline)]
Your message dated Mon, 17 Jul 2017 15:15:01 +0200
with message-id <87r2xf8asq.fsf <at> gnu.org>
and subject line Re: [bug#27704] [PATCH] daemon: Show actual rather than collateral error when export fails.
has caused the debbugs.gnu.org bug report #27704,
regarding [PATCH] daemon: Show actual rather than collateral error when export fails.
to be marked as done.

(If you believe you have received this mail in error, please contact
help-debbugs <at> gnu.org.)


-- 
27704: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=27704
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
From: Jan Nieuwenhuizen <janneke <at> gnu.org>
To: guix-patches <at> gnu.org
Subject: [PATCH] daemon: Show actual rather than collateral error when export
 fails.
Date: Sat, 15 Jul 2017 12:58:51 +0200
Having the wrong permissions on /etc/guix/signing-key.sec gives

    guix-daemon: nix/libutil/serialise.cc:15: virtual nix::BufferedSink::~BufferedSink(): Assertion `!bufPos' failed.

this patch changes that to

    guix-daemon: error: file `/etc/guix/signing-key.sec' should be secret (inaccessible to everybody else)!

* nix/nix-daemon/nix-daemon.cc (performOp): Catch any exportPath exception,
report and exit on that.  Fixes failing later with uninformative collateral error.
---
 nix/nix-daemon/nix-daemon.cc | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/nix/nix-daemon/nix-daemon.cc b/nix/nix-daemon/nix-daemon.cc
index 7d26b6135..aeeadf144 100644
--- a/nix/nix-daemon/nix-daemon.cc
+++ b/nix/nix-daemon/nix-daemon.cc
@@ -436,7 +436,13 @@ static void performOp(bool trusted, unsigned int clientVersion,
         bool sign = readInt(from) == 1;
         startWork();
         TunnelSink sink(to);
-        store->exportPath(path, sign, sink);
+        try {
+            store->exportPath(path, sign, sink);
+        }
+        catch (std::exception &e) {
+            fprintf (stderr, "guix-daemon: error: %s\n", e.what ());
+            exit (EXIT_FAILURE);
+        }
         sink.flush();
         stopWork();
         writeInt(1, to);
-- 
Jan Nieuwenhuizen <janneke <at> gnu.org> | GNU LilyPond http://lilypond.org
Freelance IT http://JoyofSource.com | Avatar® http://AvatarAcademy.com



[Message part 3 (message/rfc822, inline)]
From: ludo <at> gnu.org (Ludovic Courtès)
To: Jan Nieuwenhuizen <janneke <at> gnu.org>
Cc: 27704-done <at> debbugs.gnu.org
Subject: Re: [bug#27704] [PATCH] daemon: Show actual rather than collateral
 error when export fails.
Date: Mon, 17 Jul 2017 15:15:01 +0200
ludo <at> gnu.org (Ludovic Courtès) skribis:

> Hello,
>
> Jan Nieuwenhuizen <janneke <at> gnu.org> skribis:
>
>> Having the wrong permissions on /etc/guix/signing-key.sec gives
>>
>>     guix-daemon: nix/libutil/serialise.cc:15: virtual nix::BufferedSink::~BufferedSink(): Assertion `!bufPos' failed.
>>
>> this patch changes that to
>>
>>     guix-daemon: error: file `/etc/guix/signing-key.sec' should be secret (inaccessible to everybody else)!
>>
>> * nix/nix-daemon/nix-daemon.cc (performOp): Catch any exportPath exception,
>> report and exit on that.  Fixes failing later with uninformative collateral error.
>
> Good catch!
>
>> --- a/nix/nix-daemon/nix-daemon.cc
>> +++ b/nix/nix-daemon/nix-daemon.cc
>> @@ -436,7 +436,13 @@ static void performOp(bool trusted, unsigned int clientVersion,
>>          bool sign = readInt(from) == 1;
>>          startWork();
>>          TunnelSink sink(to);
>> -        store->exportPath(path, sign, sink);
>> +        try {
>> +            store->exportPath(path, sign, sink);
>> +        }
>> +        catch (std::exception &e) {
>> +            fprintf (stderr, "guix-daemon: error: %s\n", e.what ());
>> +            exit (EXIT_FAILURE);
>
> I think we should simply do:
>
>   sink.flush();
>   throw e;
>
> in the ‘catch’ handler.

I’ve confirmed that it works as expected.

Pushed as 2e009ae7cdaee4ce871b3a79d50118762ee29fb6, thanks again!

Ludo’.


This bug report was last modified 8 years and 1 day ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.