From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp1 ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms11 with LMTPS id 67guC+BeNWDcVAAA0tVLHw (envelope-from ) for ; Tue, 23 Feb 2021 20:00:32 +0000 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp1 with LMTPS id wPZ+BuBeNWBKVQAAbx9fmQ (envelope-from ) for ; Tue, 23 Feb 2021 20:00:32 +0000 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id B67CF18103 for ; Tue, 23 Feb 2021 21:00:31 +0100 (CET) Received: from localhost ([::1]:44580 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lEdrC-0006kG-Mi for larch@yhetil.org; Tue, 23 Feb 2021 15:00:30 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:60138) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lEdqk-0006jU-H6 for guix-patches@gnu.org; Tue, 23 Feb 2021 15:00:02 -0500 Received: from debbugs.gnu.org ([209.51.188.43]:49040) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lEdqk-0007MV-8P for guix-patches@gnu.org; Tue, 23 Feb 2021 15:00:02 -0500 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1lEdqk-0004uO-6Z for guix-patches@gnu.org; Tue, 23 Feb 2021 15:00:02 -0500 X-Loop: help-debbugs@gnu.org Subject: [bug#45409] [PATCH 2/2] substitute: Print backtraces to (current-error-port). Resent-From: Christopher Baines Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Tue, 23 Feb 2021 20:00:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 45409 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 45409@debbugs.gnu.org Received: via spool by 45409-submit@debbugs.gnu.org id=B45409.161411039018812 (code B ref 45409); Tue, 23 Feb 2021 20:00:02 +0000 Received: (at 45409) by debbugs.gnu.org; 23 Feb 2021 19:59:50 +0000 Received: from localhost ([127.0.0.1]:60584 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lEdqX-0004tM-Js for submit@debbugs.gnu.org; Tue, 23 Feb 2021 14:59:49 -0500 Received: from mira.cbaines.net ([212.71.252.8]:59870) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lEdqV-0004t8-7n for 45409@debbugs.gnu.org; Tue, 23 Feb 2021 14:59:47 -0500 Received: from localhost (unknown [IPv6:2a02:8010:68c1:0:8ac0:b4c7:f5c8:7caa]) by mira.cbaines.net (Postfix) with ESMTPSA id 0C3C827BC4B for <45409@debbugs.gnu.org>; Tue, 23 Feb 2021 19:59:46 +0000 (GMT) Received: from localhost (localhost [local]) by localhost (OpenSMTPD) with ESMTPA id b627d55a for <45409@debbugs.gnu.org>; Tue, 23 Feb 2021 19:59:44 +0000 (UTC) From: Christopher Baines Date: Tue, 23 Feb 2021 19:59:44 +0000 Message-Id: <20210223195944.26871-2-mail@cbaines.net> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210223195944.26871-1-mail@cbaines.net> References: <20210223195944.26871-1-mail@cbaines.net> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+larch=yhetil.org@gnu.org Sender: "Guix-patches" X-Migadu-Flow: FLOW_IN X-Migadu-Spam-Score: 2.63 Authentication-Results: aspmx1.migadu.com; dkim=none; dmarc=none; spf=pass (aspmx1.migadu.com: domain of guix-patches-bounces@gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=guix-patches-bounces@gnu.org X-Migadu-Queue-Id: B67CF18103 X-Spam-Score: 2.63 X-Migadu-Scanner: scn1.migadu.com X-TUID: HDy9oslq4FG8 Otherwise, I believe the backtraces come out in a way that upsets the guix-daemon. This makes it more difficult to determine what's causing the issue, see [1] and [2]. 1: https://issues.guix.gnu.org/45828 2: https://issues.guix.gnu.org/46362 I'm looking at this now as part of refactoring the code, as just in case issues crop up, I want it to be clearer where the problem is. * guix/scripts/substitute.scm (with-exception-handling): New syntax. (guix-substitute): Wrap main part with with-exception-handling. --- guix/scripts/substitute.scm | 83 +++++++++++++++++++++---------------- 1 file changed, 48 insertions(+), 35 deletions(-) diff --git a/guix/scripts/substitute.scm b/guix/scripts/substitute.scm index f98ec8e0d3..ed19e67531 100755 --- a/guix/scripts/substitute.scm +++ b/guix/scripts/substitute.scm @@ -226,6 +226,18 @@ was found." (args (apply throw args))))))) +(define-syntax with-exception-handling + (syntax-rules () + "Print the backtrace to the current-error-port and exit" + ((_ exp ...) + (with-throw-handler #t + (lambda () exp ...) + (lambda (key . args) + (report-error (G_ "substitute: exception raised: ~A: ~A~%") key args) + (display-backtrace (make-stack #t) (current-error-port)) + (newline (current-error-port)) + (exit 1)))))) + ;;; ;;; Help. @@ -644,41 +656,42 @@ default value." (set-thread-name "guix substitute")) (const #t)) ;GNU/Hurd lacks 'prctl' - (with-networking - (with-error-handling ; for signature errors - (match args - (("--query") - (let ((acl (current-acl))) - (let loop ((command (read-line))) - (or (eof-object? command) - (begin - (process-query command - #:cache-urls (substitute-urls) - #:acl acl) - (loop (read-line))))))) - (("--substitute") - ;; Download STORE-PATH and store it as a Nar in file DESTINATION. - ;; Specify the number of columns of the terminal so the progress - ;; report displays nicely. - (parameterize ((current-terminal-columns (client-terminal-columns))) - (let loop () - (match (read-line) - ((? eof-object?) - #t) - ((= string-tokenize ("substitute" store-path destination)) - (process-substitution store-path destination - #:cache-urls (substitute-urls) - #:acl (current-acl) - #:deduplicate? deduplicate? - #:print-build-trace? - print-build-trace?) - (loop)))))) - ((or ("-V") ("--version")) - (show-version-and-exit "guix substitute")) - (("--help") - (show-help)) - (opts - (leave (G_ "~a: unrecognized options~%") opts))))))) + (with-exception-handling + (with-networking + (with-error-handling ; for signature errors + (match args + (("--query") + (let ((acl (current-acl))) + (let loop ((command (read-line))) + (or (eof-object? command) + (begin + (process-query command + #:cache-urls (substitute-urls) + #:acl acl) + (loop (read-line))))))) + (("--substitute") + ;; Download STORE-PATH and store it as a Nar in file DESTINATION. + ;; Specify the number of columns of the terminal so the progress + ;; report displays nicely. + (parameterize ((current-terminal-columns (client-terminal-columns))) + (let loop () + (match (read-line) + ((? eof-object?) + #t) + ((= string-tokenize ("substitute" store-path destination)) + (process-substitution store-path destination + #:cache-urls (substitute-urls) + #:acl (current-acl) + #:deduplicate? deduplicate? + #:print-build-trace? + print-build-trace?) + (loop)))))) + ((or ("-V") ("--version")) + (show-version-and-exit "guix substitute")) + (("--help") + (show-help)) + (opts + (leave (G_ "~a: unrecognized options~%") opts)))))))) ;;; Local Variables: ;;; eval: (put 'with-timeout 'scheme-indent-function 1) -- 2.30.0