From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ricardo Wurmus Subject: bug#28094: cuirass =?UTF-8?Q?doesn=E2=80=99t?= build i686 things Date: Sat, 26 Aug 2017 08:48:00 +0200 Message-ID: <87bmn2vn8f.fsf@elephly.net> References: <877ey5gtsc.fsf@elephly.net> <87378sklwe.fsf@elephly.net> <87o9r6ql0i.fsf@elephly.net> <87lgm9qvlr.fsf@elephly.net> <87fucfdz3v.fsf@gnu.org> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:45389) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dlUu3-00020X-QE for bug-guix@gnu.org; Sat, 26 Aug 2017 02:49:09 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dlUty-00028v-Oo for bug-guix@gnu.org; Sat, 26 Aug 2017 02:49:07 -0400 Received: from debbugs.gnu.org ([208.118.235.43]:47108) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dlUty-00028p-Lh for bug-guix@gnu.org; Sat, 26 Aug 2017 02:49:02 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1dlUty-0005oP-98 for bug-guix@gnu.org; Sat, 26 Aug 2017 02:49:02 -0400 Sender: "Debbugs-submit" Resent-Message-ID: In-reply-to: <87fucfdz3v.fsf@gnu.org> List-Id: Bug reports for GNU Guix List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-guix-bounces+gcggb-bug-guix=m.gmane.org@gnu.org Sender: "bug-Guix" To: Ludovic =?UTF-8?Q?Court=C3=A8s?= Cc: 28094@debbugs.gnu.org Hi Ludo, […] >> /gnu/store/60671wa0i1fljll26fx7lxfl27fb27si-curl-7.55.0-doc /gnu/store/nmfwf4fkvb4mfyi7m5sn1daklkjsz9mn-curl-7.55.0 >> /gnu/store/53vb094sihb819hk124qvfjq8vz78252-curl-7.53.0-doc /gnu/store/9ihxpf7al0znb19lx0bk6ymjp6nxhn9y-curl-7.53.0 >> Database error with INSERT INTO Builds (derivation, evaluation, log, output) VALUES ('~A', '~A', '~A', '~A'); and (/gnu/store/zg0zpndricjwwbjv5087zw9hmdcd708y-curl-7.55.0.drv 3 #f /gnu/store/60671wa0i1fljll26fx7lxfl27fb27si-curl-7.55.0-doc) […] >> In cuirass/database.scm: >> 192:2 0 (db-add-build #< pointer: # …) >> cuirass/database.scm:192:2: In procedure db-add-build: >> cuirass/database.scm:192:2: Throw to key `sqlite-error' with args `(#f 1555 "UNIQUE constraint failed: Builds.derivation, Builds.evaluation, Builds.output")'. […] > This is the tail of the Builds table on that machine: > > --8<---------------cut here---------------start------------->8--- > /gnu/store/jcdfzvb3ca4n5jzh7ajc3yb47akg30c4-hplip-3.17.7.drv|4|#f|/gnu/store/1bil0xyhpim3cfyaifdpb2jsjdni2hif-hplip-3.17.7 > /gnu/store/lndp48wl3jcqjysjdrxgh0nm5cghc38v-cups-filters-1.13.1.drv|4|#f|/gnu/store/lvfymniwbz33an5a2hakf4b1c57lrdwr-cups-filters-1.13.1 > /gnu/store/9zzp62b9l2b85dbdqiq17avbqw3h0xkz-cups-2.2.1.drv|4|#f|/gnu/store/a403mrmm7jd2vxygfjszrsycpa75w6cy-cups-2.2.1 > /gnu/store/2isifzc6i42bxpb5rwm3wq2qvpyw158g-cups-minimal-2.2.1.drv|4|#f|/gnu/store/n7mf8hk262rnlhrjqmacnkp1yn518ks4-cups-minimal-2.2.1 > /gnu/store/5aysbn4y15hzjyj6ixw16rl223c8bv12-curl-7.53.0.drv|4|#f|/gnu/store/53vb094sihb819hk124qvfjq8vz78252-curl-7.53.0-doc > /gnu/store/5aysbn4y15hzjyj6ixw16rl223c8bv12-curl-7.53.0.drv|4|#f|/gnu/store/9ihxpf7al0znb19lx0bk6ymjp6nxhn9y-curl-7.53.0 > /gnu/store/zg0zpndricjwwbjv5087zw9hmdcd708y-curl-7.55.0.drv|4|#f|/gnu/store/60671wa0i1fljll26fx7lxfl27fb27si-curl-7.55.0-doc > /gnu/store/zg0zpndricjwwbjv5087zw9hmdcd708y-curl-7.55.0.drv|4|#f|/gnu/store/nmfwf4fkvb4mfyi7m5sn1daklkjsz9mn-curl-7.55.0 > --8<---------------cut here---------------end--------------->8--- > > So the problem is that we’re trying to insert one of these again, which > fails because we already have it under this primary key. > > This is because the curl-7.55.0 package ends up twice in the list of > jobs: once as a replacement for curl-7.53.0, and once because the > curl-7.55.0 is itself a public variable. > > Commit 7d4d6c13f46f2a307883226789d6aa503e2d7081 in guix-maintenance.git > works around that. Thank you! > The proper fix in Cuirass might be to ignore the primary key error (for > future reference, 1555 in the ‘sqlite-error’ exception above is > (logior 19 (ash 6 8)), which is SQLITE_CONSTRAINT_PRIMARYKEY in > ), as in the attached patch. Thoughts? I’ll push it if > there are no objections. This looks good to me. > diff --git a/src/cuirass/database.scm b/src/cuirass/database.scm > index 91133c2..9c7e69a 100644 > --- a/src/cuirass/database.scm > +++ b/src/cuirass/database.scm > @@ -181,15 +181,30 @@ string." > ((char=? char #\') (loop (cons* char char chars))) > (else (loop (cons char chars))))))) > > +;; Extended error codes (see ). > +;; XXX: This should be defined by (sqlite3). > +(define SQLITE_CONSTRAINT 19) > +(define SQLITE_CONSTRAINT_PRIMARYKEY > + (logior SQLITE_CONSTRAINT (ash 6 8))) > + > (define (db-add-build db build) > - "Store BUILD in database DB." > - (sqlite-exec db "\ > + "Store BUILD in database DB. This is idempotent." > + (catch 'sqlite-error > + (lambda () > + (sqlite-exec db "\ > INSERT INTO Builds (derivation, evaluation, log, output)\ > VALUES ('~A', '~A', '~A', '~A');" > - (assq-ref build #:derivation) > - (assq-ref build #:eval-id) > - (assq-ref build #:log) > - (assq-ref build #:output)) > + (assq-ref build #:derivation) > + (assq-ref build #:eval-id) > + (assq-ref build #:log) > + (assq-ref build #:output))) > + (lambda (key who code . rest) > + ;; If we get a primary-key-constraint-violated error, that means we have > + ;; already inserted the same (derivation,eval-id,log) tuple, which we > + ;; can safely ignore. > + (unless (= code SQLITE_CONSTRAINT_PRIMARYKEY) > + (apply throw key who code rest)))) > + Unfortunately, re-throwing the error doesn’t print any meaningful error message. To get the error message that I showed above I caught any sqlite errors and re-threw the exception only after printing the arguments to sqlite-exec: (format (current-error-port) "Database error with ~a and ~a~%" msg args) I think it would be good to include a line like this right after “(unless (= code SQLITE_CONSTRAINT_PRIMARYKEY)”. Thank you for debugging this! -- Ricardo GPG: BCA6 89B6 3655 3801 C3C6 2150 197A 5888 235F ACAC https://elephly.net