all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* bug#28094: cuirass doesn’t build i686 things
@ 2017-08-15  7:43 Ricardo Wurmus
  2017-08-16  7:32 ` Ricardo Wurmus
  0 siblings, 1 reply; 7+ messages in thread
From: Ricardo Wurmus @ 2017-08-15  7:43 UTC (permalink / raw)
  To: 28094

Hi Guix,

it looks like Cuirass refuses to build i686 things because that would
violate a UNIQUE constraint:

--8<---------------cut here---------------start------------->8---
@ build-started /gnu/store/2qpglj9ylcb72c51m1qr8qfmdi20aa16-grub-2.02.drv - i686-linux /var/log/guix/drvs/2q//pglj9ylcb72c51m1qr8qfmdi20aa16-grub-2.02.drv.bz2
In ice-9/boot-9.scm:
   230:29 19 (map1 (((#:eval-id . 5) (#:duration . 102000.0) # # ?) ?))
   230:29 18 (map1 (((#:eval-id . 5) (#:duration . 69000.0) # # ?) ?))
   230:29 17 (map1 (((#:eval-id . 5) (#:duration . 86000.0) # # ?) ?))
   230:29 16 (map1 (((#:eval-id . 5) (#:duration . 81000.0) # # ?) ?))
   230:29 15 (map1 (((#:eval-id . 5) (#:duration . 82000.0) # # ?) ?))
   230:29 14 (map1 (((#:eval-id . 5) (#:duration . 68000.0) # # ?) ?))
   230:29 13 (map1 (((#:eval-id . 5) (#:duration . 74000.0) # # ?) ?))
   230:29 12 (map1 (((#:eval-id . 5) (#:duration . 77000.0) # # ?) ?))
   230:29 11 (map1 (((#:eval-id . 5) (#:duration . 98000.0) # # ?) ?))
   230:29 10 (map1 (((#:eval-id . 5) (#:duration . 103000.0) # # ?) ?))
   230:29  9 (map1 (((#:eval-id . 5) (#:duration . 75000.0) # # ?) ?))
   230:29  8 (map1 (((#:eval-id . 5) (#:duration . 74000.0) # # ?) ?))
   230:29  7 (map1 (((#:eval-id . 5) (#:duration . 75000.0) # # ?) ?))
   230:29  6 (map1 (((#:eval-id . 5) (#:duration . 64000.0) # # ?) ?))
   230:17  5 (map1 (((#:eval-id . 5) (#:duration . 147000.0) # # ?) ?))
In cuirass/base.scm:
    145:6  4 (register _)
In ice-9/boot-9.scm:
   268:13  3 (for-each #<procedure 4a51ae0 at cuirass/base.scm:145:?> ?)
In cuirass/database.scm:
    186:2  2 (db-add-build #<<sqlite-db> pointer: #<pointer 0x23455?> ?)
    54:28  1 (sqlite-exec _ _ . _)
In ice-9/eval.scm:
    619:8  0 (_ #(#(#(#(#<directory (sqlite3) 23c0a00> #<?>) #) #) #))
ice-9/eval.scm:619:8: ice-9/eval.scm:619:8: Throw to key `sqlite-error' with args `(#f 1555 "UNIQUE const
raint failed: Builds.derivation, Builds.evaluation, Builds.output")'.
--8<---------------cut here---------------end--------------->8---

https://berlin.guixsd.org is configured to provide substitutes for
x86_64 and i686 yet it has barely built any i686 packages so far.

--
Ricardo

GPG: BCA6 89B6 3655 3801 C3C6  2150 197A 5888 235F ACAC
https://elephly.net

^ permalink raw reply	[flat|nested] 7+ messages in thread

* bug#28094: cuirass doesn’t build i686 things
  2017-08-15  7:43 bug#28094: cuirass doesn’t build i686 things Ricardo Wurmus
@ 2017-08-16  7:32 ` Ricardo Wurmus
  2017-08-23 16:58   ` Ricardo Wurmus
  0 siblings, 1 reply; 7+ messages in thread
From: Ricardo Wurmus @ 2017-08-16  7:32 UTC (permalink / raw)
  To: 28094


Ricardo Wurmus <rekado@elephly.net> writes:

> it looks like Cuirass refuses to build i686 things because that would
> violate a UNIQUE constraint:

I’ve seen this repeatedly for other derivations; all seem to be i686.
The error reporting is bad, so I don’t know exactly why this happens,
but one guess is that this is when a previously failed build process
succeeded.

It’s bad that this seems to crash cuirass, so there are no more builds
once this happens.

--
Ricardo

GPG: BCA6 89B6 3655 3801 C3C6  2150 197A 5888 235F ACAC
https://elephly.net

^ permalink raw reply	[flat|nested] 7+ messages in thread

* bug#28094: cuirass doesn’t build i686 things
  2017-08-16  7:32 ` Ricardo Wurmus
@ 2017-08-23 16:58   ` Ricardo Wurmus
  2017-08-24  7:21     ` Ricardo Wurmus
  0 siblings, 1 reply; 7+ messages in thread
From: Ricardo Wurmus @ 2017-08-23 16:58 UTC (permalink / raw)
  To: 28094


Ricardo Wurmus <rekado@elephly.net> writes:

> Ricardo Wurmus <rekado@elephly.net> writes:
>
>> it looks like Cuirass refuses to build i686 things because that would
>> violate a UNIQUE constraint:
>
> I’ve seen this repeatedly for other derivations; all seem to be i686.
> The error reporting is bad, so I don’t know exactly why this happens,
> but one guess is that this is when a previously failed build process
> succeeded.

I’ve changed Cuirass locally to print a more detailed error message when
this happens.  Here’s a recent error:

--8<---------------cut here---------------start------------->8---
Database error with INSERT INTO Builds (derivation, evaluation, log, output)  VALUES ('~A', '~A', '~A', '~A'); and (/gnu/store/zg0zpndricjwwbjv5087zw9hmdcd708y-curl-7.55.0.drv 2 #f /gnu/store/60671wa0i1fljll26fx7lxfl27fb27si-curl-7.55.0-doc)
In ice-9/boot-9.scm:
   230:29 19 (map1 (((#:eval-id . 2) (#:duration . 81000.0) # # …) …))
   230:29 18 (map1 (((#:eval-id . 2) (#:duration . 70000.0) # # …) …))
   230:29 17 (map1 (((#:eval-id . 2) (#:duration . 83000.0) # # …) …))
   230:29 16 (map1 (((#:eval-id . 2) (#:duration . 89000.0) # # …) …))
   230:29 15 (map1 (((#:eval-id . 2) (#:duration . 81000.0) # # …) …))
   230:29 14 (map1 (((#:eval-id . 2) (#:duration . 131000.0) # # …) …))
   230:29 13 (map1 (((#:eval-id . 2) (#:duration . 128000.0) # # …) …))
   230:29 12 (map1 (((#:eval-id . 2) (#:duration . 100000.0) # # …) …))
   230:29 11 (map1 (((#:eval-id . 2) (#:duration . 193000.0) # # …) …))
   230:29 10 (map1 (((#:eval-id . 2) (#:duration . 113000.0) # # …) …))
   230:29  9 (map1 (((#:eval-id . 2) (#:duration . 122000.0) # # …) …))
   230:29  8 (map1 (((#:eval-id . 2) (#:duration . 91000.0) # # …) …))
   230:29  7 (map1 (((#:eval-id . 2) (#:duration . 101000.0) # # …) …))
   230:29  6 (map1 (((#:eval-id . 2) (#:duration . 87000.0) # # …) …))
   230:29  5 (map1 (((#:eval-id . 2) (#:duration . 67000.0) # # …) …))
   230:29  4 (map1 (((#:eval-id . 2) (#:duration . 75000.0) # # …) …))
   230:17  3 (map1 (((#:eval-id . 2) (#:duration . 71000.0) # # …) …))
In cuirass/base.scm:
    145:6  2 (register _)
In ice-9/boot-9.scm:
   268:13  1 (for-each #<procedure 3dc0750 at cuirass/base.scm:145:…> …)
In cuirass/database.scm:
    192:2  0 (db-add-build #<<sqlite-db> pointer: #<pointer 0x19d9e…> …)
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")'.
--8<---------------cut here---------------end--------------->8---

The directory /gnu/store/60671wa0i1fljll26fx7lxfl27fb27si-curl-7.55.0-doc exists.

-- 
Ricardo

GPG: BCA6 89B6 3655 3801 C3C6  2150 197A 5888 235F ACAC
https://elephly.net

^ permalink raw reply	[flat|nested] 7+ messages in thread

* bug#28094: cuirass doesn’t build i686 things
  2017-08-23 16:58   ` Ricardo Wurmus
@ 2017-08-24  7:21     ` Ricardo Wurmus
  2017-08-25 23:08       ` Ludovic Courtès
  0 siblings, 1 reply; 7+ messages in thread
From: Ricardo Wurmus @ 2017-08-24  7:21 UTC (permalink / raw)
  To: 28094


Ricardo Wurmus <rekado@elephly.net> writes:

> Ricardo Wurmus <rekado@elephly.net> writes:
>
>> Ricardo Wurmus <rekado@elephly.net> writes:
>>
>>> it looks like Cuirass refuses to build i686 things because that would
>>> violate a UNIQUE constraint:
>>
>> I’ve seen this repeatedly for other derivations; all seem to be i686.
>> The error reporting is bad, so I don’t know exactly why this happens,
>> but one guess is that this is when a previously failed build process
>> succeeded.
>
> I’ve changed Cuirass locally to print a more detailed error message when
> this happens.  Here’s a recent error:
>
> --8<---------------cut here---------------start------------->8---
> Database error with INSERT INTO Builds (derivation, evaluation, log, output)  VALUES ('~A', '~A', '~A', '~A'); and (/gnu/store/zg0zpndricjwwbjv5087zw9hmdcd708y-curl-7.55.0.drv 2 #f /gnu/store/60671wa0i1fljll26fx7lxfl27fb27si-curl-7.55.0-doc)
> In ice-9/boot-9.scm:
>    230:29 19 (map1 (((#:eval-id . 2) (#:duration . 81000.0) # # …) …))
>    230:29 18 (map1 (((#:eval-id . 2) (#:duration . 70000.0) # # …) …))
>    230:29 17 (map1 (((#:eval-id . 2) (#:duration . 83000.0) # # …) …))
>    230:29 16 (map1 (((#:eval-id . 2) (#:duration . 89000.0) # # …) …))
>    230:29 15 (map1 (((#:eval-id . 2) (#:duration . 81000.0) # # …) …))
>    230:29 14 (map1 (((#:eval-id . 2) (#:duration . 131000.0) # # …) …))
>    230:29 13 (map1 (((#:eval-id . 2) (#:duration . 128000.0) # # …) …))
>    230:29 12 (map1 (((#:eval-id . 2) (#:duration . 100000.0) # # …) …))
>    230:29 11 (map1 (((#:eval-id . 2) (#:duration . 193000.0) # # …) …))
>    230:29 10 (map1 (((#:eval-id . 2) (#:duration . 113000.0) # # …) …))
>    230:29  9 (map1 (((#:eval-id . 2) (#:duration . 122000.0) # # …) …))
>    230:29  8 (map1 (((#:eval-id . 2) (#:duration . 91000.0) # # …) …))
>    230:29  7 (map1 (((#:eval-id . 2) (#:duration . 101000.0) # # …) …))
>    230:29  6 (map1 (((#:eval-id . 2) (#:duration . 87000.0) # # …) …))
>    230:29  5 (map1 (((#:eval-id . 2) (#:duration . 67000.0) # # …) …))
>    230:29  4 (map1 (((#:eval-id . 2) (#:duration . 75000.0) # # …) …))
>    230:17  3 (map1 (((#:eval-id . 2) (#:duration . 71000.0) # # …) …))
> In cuirass/base.scm:
>     145:6  2 (register _)
> In ice-9/boot-9.scm:
>    268:13  1 (for-each #<procedure 3dc0750 at cuirass/base.scm:145:…> …)
> In cuirass/database.scm:
>     192:2  0 (db-add-build #<<sqlite-db> pointer: #<pointer 0x19d9e…> …)
> 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")'.
> --8<---------------cut here---------------end--------------->8---
>
> The directory /gnu/store/60671wa0i1fljll26fx7lxfl27fb27si-curl-7.55.0-doc exists.

After restarting Cuirass I got this error again:

--8<---------------cut here---------------start------------->8---
…
evaluate 'mips64el-linux-gnu.mpc-1.0.3.i686-linux': 104000.000 seconds
evaluate 'mips64el-linux-gnu.coreutils-8.27.i686-linux': -608068998.000 seconds
evaluate 'mips64el-linux-gnu.findutils-4.6.0.i686-linux': 141217000.000 seconds
evaluate 'mips64el-linux-gnu.diffutils-3.5.i686-linux': 119447000.000 seconds
evaluate 'mips64el-linux-gnu.patch-2.7.5.i686-linux': -853410998.000 seconds
/gnu/store/1bil0xyhpim3cfyaifdpb2jsjdni2hif-hplip-3.17.7
/gnu/store/n7mf8hk262rnlhrjqmacnkp1yn518ks4-cups-minimal-2.2.1
/gnu/store/lvfymniwbz33an5a2hakf4b1c57lrdwr-cups-filters-1.13.1
/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 ice-9/boot-9.scm:
   230:29 19 (map1 (((#:eval-id . 3) (#:duration . 76000.0) # # …) …))
   230:29 18 (map1 (((#:eval-id . 3) (#:duration . 110000.0) # # …) …))
   230:29 17 (map1 (((#:eval-id . 3) (#:duration . 115000.0) # # …) …))
   230:29 16 (map1 (((#:eval-id . 3) (#:duration . 82000.0) # # …) …))
   230:29 15 (map1 (((#:eval-id . 3) (#:duration . 98000.0) # # …) …))
   230:29 14 (map1 (((#:eval-id . 3) (#:duration . 97000.0) # # …) …))
   230:29 13 (map1 (((#:eval-id . 3) (#:duration . 90000.0) # # …) …))
   230:29 12 (map1 (((#:eval-id . 3) (#:duration . 75000.0) # # …) …))
   230:29 11 (map1 (((#:eval-id . 3) (#:duration . 86000.0) # # …) …))
   230:29 10 (map1 (((#:eval-id . 3) (#:duration . 87000.0) # # …) …))
   230:29  9 (map1 (((#:eval-id . 3) (#:duration . 93000.0) # # …) …))
   230:29  8 (map1 (((#:eval-id . 3) (#:duration . 173000.0) # # …) …))
   230:29  7 (map1 (((#:eval-id . 3) (#:duration . 88000.0) # # …) …))
   230:29  6 (map1 (((#:eval-id . 3) (#:duration . 118000.0) # # …) …))
   230:29  5 (map1 (((#:eval-id . 3) (#:duration . 94000.0) # # …) …))
   230:29  4 (map1 (((#:eval-id . 3) (#:duration . 85000.0) # # …) …))
   230:17  3 (map1 (((#:eval-id . 3) (#:duration . 75000.0) # # …) …))
In cuirass/base.scm:
    145:6  2 (register _)
In ice-9/boot-9.scm:
   268:13  1 (for-each #<procedure 8d1ae10 at cuirass/base.scm:145:…> …)
In cuirass/database.scm:
    192:2  0 (db-add-build #<<sqlite-db> pointer: #<pointer 0x24cde…> …)
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")'.
--8<---------------cut here---------------end--------------->8---

Note that this is the same derivation and the same output as before.
Also note that I started with a fresh database before either of these
errors.  I did not remove the database after restarting Cuirass, though.

-- 
Ricardo

GPG: BCA6 89B6 3655 3801 C3C6  2150 197A 5888 235F ACAC
https://elephly.net

^ permalink raw reply	[flat|nested] 7+ messages in thread

* bug#28094: cuirass doesn’t build i686 things
  2017-08-24  7:21     ` Ricardo Wurmus
@ 2017-08-25 23:08       ` Ludovic Courtès
  2017-08-26  6:48         ` Ricardo Wurmus
  0 siblings, 1 reply; 7+ messages in thread
From: Ludovic Courtès @ 2017-08-25 23:08 UTC (permalink / raw)
  To: Ricardo Wurmus; +Cc: 28094

[-- Attachment #1: Type: text/plain, Size: 5197 bytes --]

Heya!

Ricardo Wurmus <rekado@elephly.net> skribis:

> After restarting Cuirass I got this error again:
>
> …
> evaluate 'mips64el-linux-gnu.mpc-1.0.3.i686-linux': 104000.000 seconds
> evaluate 'mips64el-linux-gnu.coreutils-8.27.i686-linux': -608068998.000 seconds
> evaluate 'mips64el-linux-gnu.findutils-4.6.0.i686-linux': 141217000.000 seconds
> evaluate 'mips64el-linux-gnu.diffutils-3.5.i686-linux': 119447000.000 seconds
> evaluate 'mips64el-linux-gnu.patch-2.7.5.i686-linux': -853410998.000 seconds
> /gnu/store/1bil0xyhpim3cfyaifdpb2jsjdni2hif-hplip-3.17.7
> /gnu/store/n7mf8hk262rnlhrjqmacnkp1yn518ks4-cups-minimal-2.2.1
> /gnu/store/lvfymniwbz33an5a2hakf4b1c57lrdwr-cups-filters-1.13.1
> /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 ice-9/boot-9.scm:
>    230:29 19 (map1 (((#:eval-id . 3) (#:duration . 76000.0) # # …) …))
>    230:29 18 (map1 (((#:eval-id . 3) (#:duration . 110000.0) # # …) …))
>    230:29 17 (map1 (((#:eval-id . 3) (#:duration . 115000.0) # # …) …))
>    230:29 16 (map1 (((#:eval-id . 3) (#:duration . 82000.0) # # …) …))
>    230:29 15 (map1 (((#:eval-id . 3) (#:duration . 98000.0) # # …) …))
>    230:29 14 (map1 (((#:eval-id . 3) (#:duration . 97000.0) # # …) …))
>    230:29 13 (map1 (((#:eval-id . 3) (#:duration . 90000.0) # # …) …))
>    230:29 12 (map1 (((#:eval-id . 3) (#:duration . 75000.0) # # …) …))
>    230:29 11 (map1 (((#:eval-id . 3) (#:duration . 86000.0) # # …) …))
>    230:29 10 (map1 (((#:eval-id . 3) (#:duration . 87000.0) # # …) …))
>    230:29  9 (map1 (((#:eval-id . 3) (#:duration . 93000.0) # # …) …))
>    230:29  8 (map1 (((#:eval-id . 3) (#:duration . 173000.0) # # …) …))
>    230:29  7 (map1 (((#:eval-id . 3) (#:duration . 88000.0) # # …) …))
>    230:29  6 (map1 (((#:eval-id . 3) (#:duration . 118000.0) # # …) …))
>    230:29  5 (map1 (((#:eval-id . 3) (#:duration . 94000.0) # # …) …))
>    230:29  4 (map1 (((#:eval-id . 3) (#:duration . 85000.0) # # …) …))
>    230:17  3 (map1 (((#:eval-id . 3) (#:duration . 75000.0) # # …) …))
> In cuirass/base.scm:
>     145:6  2 (register _)
> In ice-9/boot-9.scm:
>    268:13  1 (for-each #<procedure 8d1ae10 at cuirass/base.scm:145:…> …)
> In cuirass/database.scm:
>     192:2  0 (db-add-build #<<sqlite-db> pointer: #<pointer 0x24cde…> …)
> 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")'.
>
> Note that this is the same derivation and the same output as before.
> Also note that I started with a fresh database before either of these
> errors.  I did not remove the database after restarting Cuirass, though.

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.

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
<sqlite3.h>), as in the attached patch.  Thoughts?  I’ll push it if
there are no objections.

Ludo’.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: Type: text/x-patch, Size: 1550 bytes --]

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 <sqlite3.h>).
+;; 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))))
+
   (last-insert-rowid db))
 
 (define (db-get-stamp db spec)

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* bug#28094: cuirass doesn’t build i686 things
  2017-08-25 23:08       ` Ludovic Courtès
@ 2017-08-26  6:48         ` Ricardo Wurmus
  2017-08-26  8:51           ` Ludovic Courtès
  0 siblings, 1 reply; 7+ messages in thread
From: Ricardo Wurmus @ 2017-08-26  6:48 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: 28094


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 #<<sqlite-db> pointer: #<pointer 0x24cde…> …)
>> 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
> <sqlite3.h>), 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 <sqlite3.h>).
> +;; 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

^ permalink raw reply	[flat|nested] 7+ messages in thread

* bug#28094: cuirass doesn’t build i686 things
  2017-08-26  6:48         ` Ricardo Wurmus
@ 2017-08-26  8:51           ` Ludovic Courtès
  0 siblings, 0 replies; 7+ messages in thread
From: Ludovic Courtès @ 2017-08-26  8:51 UTC (permalink / raw)
  To: Ricardo Wurmus; +Cc: 28094-done

Hello!

Ricardo Wurmus <rekado@elephly.net> skribis:

>> 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 <sqlite3.h>).
>> +;; 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)”.

Good idea.  Pushed with a test case as
72f2b6b77cc4e3d7629bdf34e6daee05398b8de1.

Thanks,
Ludo’.

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2017-08-26  8:52 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-08-15  7:43 bug#28094: cuirass doesn’t build i686 things Ricardo Wurmus
2017-08-16  7:32 ` Ricardo Wurmus
2017-08-23 16:58   ` Ricardo Wurmus
2017-08-24  7:21     ` Ricardo Wurmus
2017-08-25 23:08       ` Ludovic Courtès
2017-08-26  6:48         ` Ricardo Wurmus
2017-08-26  8:51           ` Ludovic Courtès

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/guix.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.