* bug#38958: Timestamp out of range; substituting 2514-05-30 01:53:03.999999999 @ 2020-01-05 20:45 Roel Janssen 2020-01-08 21:58 ` Ludovic Courtès 2020-09-03 8:54 ` Ludovic Courtès 0 siblings, 2 replies; 6+ messages in thread From: Roel Janssen @ 2020-01-05 20:45 UTC (permalink / raw) To: 38958 Dear Guix, When inside a container produced with: $ guix environment -CN --ad-hoc ... I encounter a problem when running "make" for some code base: make[3]: /gnu/store/5hkc9q38w6afhrf7xyz5ybxidr87d1mq-profile/include/syslog.h: Timestamp out of range; substituting 2514-05-30 01:53:03.999999999 This causes subsequent invocations of "make" to (re)compile more than needed. What can I do about it? Kind regards, Roel Janssen ^ permalink raw reply [flat|nested] 6+ messages in thread
* bug#38958: Timestamp out of range; substituting 2514-05-30 01:53:03.999999999 2020-01-05 20:45 bug#38958: Timestamp out of range; substituting 2514-05-30 01:53:03.999999999 Roel Janssen @ 2020-01-08 21:58 ` Ludovic Courtès 2020-03-27 9:26 ` Roel Janssen 2020-09-03 8:54 ` Ludovic Courtès 1 sibling, 1 reply; 6+ messages in thread From: Ludovic Courtès @ 2020-01-08 21:58 UTC (permalink / raw) To: Roel Janssen; +Cc: 38958 Hi Roel, Roel Janssen <roel@gnu.org> skribis: > When inside a container produced with: > $ guix environment -CN --ad-hoc ... > > I encounter a problem when running "make" for some code base: > make[3]: /gnu/store/5hkc9q38w6afhrf7xyz5ybxidr87d1mq-profile/include/syslog.h: > Timestamp out of range; substituting 2514-05-30 01:53:03.999999999 Fun. :-) What does “uname -rm” return? What the value of the ‘TZ’ environment variable? Can it be easily reproduced? Thanks, Ludo’. ^ permalink raw reply [flat|nested] 6+ messages in thread
* bug#38958: Timestamp out of range; substituting 2514-05-30 01:53:03.999999999 2020-01-08 21:58 ` Ludovic Courtès @ 2020-03-27 9:26 ` Roel Janssen 2020-03-27 11:54 ` Ludovic Courtès 0 siblings, 1 reply; 6+ messages in thread From: Roel Janssen @ 2020-03-27 9:26 UTC (permalink / raw) To: Ludovic Courtès; +Cc: 38958 On Wed, 2020-01-08 at 22:58 +0100, Ludovic Courtès wrote: > Hi Roel, > > Roel Janssen <roel@gnu.org> skribis: > > > When inside a container produced with: > > $ guix environment -CN --ad-hoc ... > > > > I encounter a problem when running "make" for some code base: > > make[3]: /gnu/store/5hkc9q38w6afhrf7xyz5ybxidr87d1mq- > > profile/include/syslog.h: > > Timestamp out of range; substituting 2514-05-30 01:53:03.999999999 > > Fun. :-) What does “uname -rm” return? > > What the value of the ‘TZ’ environment variable? > > Can it be easily reproduced? > > Thanks, > Ludo’. > Sorry for the long delay. This issue had somehow resolved itself. But now the issue resurfaced for me when building an older version of QtSvg (5.9.4). The 'TZ' environment variable is empty, and the output of "uname -rm" is: 5.5.10-200.fc31.x86_64 x86_64 The package recipe is somewhat involved (it's part of a build for RStudio), but if you'd like I can attach it here. Kind regards, Roel Janssen ^ permalink raw reply [flat|nested] 6+ messages in thread
* bug#38958: Timestamp out of range; substituting 2514-05-30 01:53:03.999999999 2020-03-27 9:26 ` Roel Janssen @ 2020-03-27 11:54 ` Ludovic Courtès 0 siblings, 0 replies; 6+ messages in thread From: Ludovic Courtès @ 2020-03-27 11:54 UTC (permalink / raw) To: Roel Janssen; +Cc: 38958 Roel Janssen <roel@gnu.org> skribis: > On Wed, 2020-01-08 at 22:58 +0100, Ludovic Courtès wrote: >> Hi Roel, >> >> Roel Janssen <roel@gnu.org> skribis: >> >> > When inside a container produced with: >> > $ guix environment -CN --ad-hoc ... >> > >> > I encounter a problem when running "make" for some code base: >> > make[3]: /gnu/store/5hkc9q38w6afhrf7xyz5ybxidr87d1mq- >> > profile/include/syslog.h: >> > Timestamp out of range; substituting 2514-05-30 01:53:03.999999999 >> >> Fun. :-) What does “uname -rm” return? >> >> What the value of the ‘TZ’ environment variable? >> >> Can it be easily reproduced? >> >> Thanks, >> Ludo’. >> > > Sorry for the long delay. This issue had somehow resolved itself. > > But now the issue resurfaced for me when building an older version of QtSvg > (5.9.4). The 'TZ' environment variable is empty, and the output of "uname -rm" > is: > 5.5.10-200.fc31.x86_64 x86_64 Previously you mentioned the problem was in ‘guix environment -C’, but now you say it happens while running ‘guix build qtsvg’, right? Is there a simple way to reproduce it? Ludo’. ^ permalink raw reply [flat|nested] 6+ messages in thread
* bug#38958: Timestamp out of range; substituting 2514-05-30 01:53:03.999999999 2020-01-05 20:45 bug#38958: Timestamp out of range; substituting 2514-05-30 01:53:03.999999999 Roel Janssen 2020-01-08 21:58 ` Ludovic Courtès @ 2020-09-03 8:54 ` Ludovic Courtès 2020-09-03 19:42 ` Mark H Weaver 1 sibling, 1 reply; 6+ messages in thread From: Ludovic Courtès @ 2020-09-03 8:54 UTC (permalink / raw) To: 38958 Hi, Roel Janssen <roel@gnu.org> skribis: > I encounter a problem when running "make" for some code base: > make[3]: /gnu/store/5hkc9q38w6afhrf7xyz5ybxidr87d1mq-profile/include/syslog.h: > Timestamp out of range; substituting 2514-05-30 01:53:03.999999999 This issue manifests itself in build environments as well; I’ve seen it on berlin while running “guix build guix --no-offload”: --8<---------------cut here---------------start------------->8--- mv "doc/contributing.fr.texi.tmp" "doc/contributing.fr.texi" PO4A doc/contributing.zh_CN.texi mv "doc/contributing.ru.texi.tmp" "doc/contributing.ru.texi" make: guix/store/schema.sql: Timestamp out of range; substituting 2514-05-30 01:53:03.999999999 make: Warning: File 'guix/store/schema.sql' has modification time 15580747586 s in the future PO4A doc/guix-cookbook.de.texi […] test ! -f guix.po || { \ if test -f ./guix.pot; then \ sed -f remove-potcdate.sed < ./guix.pot > guix.1po && \ sed -f remove-potcdate.sed < guix.po > guix.2po && \ if cmp guix.1po guix.2po >/dev/null 2>&1; then \ rm -f guix.1po guix.2po guix.po; \ else \ rm -f guix.1po guix.2po ./guix.pot && \ mv guix.po ./guix.pot; \ fi; \ else \ mv guix.po ./guix.pot; \ fi; \ } make[3]: warning: Clock skew detected. Your build may be incomplete. make[3]: Leaving directory '/tmp/guix-build-guix-1.1.0-25.44c6e6f.drv-0/source/po/guix' […] make[2]: guix/base16.scm: Timestamp out of range; substituting 2514-05-30 01:53:03.999999999 make[2]: Warning: File 'guix/base16.scm' has modification time 15580748038 s in the future make[2]: guix/base32.scm: Timestamp out of range; substituting 2514-05-30 01:53:03.999999999 […] make[2]: guix/search-paths.scm: Timestamp out of range; substituting 2514-05-30 01:53:03.999999999 make[2]: guix/import/gnu.scm: Timestamp out of range; substituting 2514-05-30 01:53:03.999999999 make[2]: guix/import/snix.scm: Timestamp out of range; substituting 2514-05-30 01:53:03.999999999 make[2]: guix/scripts/perform-download.scm: Timestamp out of range; substituting 2514-05-30 01:53:03.999999999 make[2]: guix/scripts/authenticate.scm: Timestamp out of range; substituting 2514-05-30 01:53:03.999999999 make[2]: guix/scripts/import/gnu.scm: Timestamp out of range; substituting 2514-05-30 01:53:03.999999999 make[2]: guix/scripts/import/nix.scm: Timestamp out of range; substituting 2514-05-30 01:53:03.999999999 make[2]: guix/scripts/import/texlive.scm: Timestamp out of range; substituting 2514-05-30 01:53:03.999999999 make[2]: guix/scripts/container.scm: Timestamp out of range; substituting 2514-05-30 01:53:03.999999999 make[2]: guix.scm: Timestamp out of range; substituting 2514-05-30 01:53:03.999999999 --8<---------------cut here---------------end--------------->8--- The files in question have mtime = Epoch + 1 as expected: --8<---------------cut here---------------start------------->8--- $ stat /tmp/guix-build-guix-1.1.0-25.44c6e6f.drv-0/source/guix/base16.scm File: /tmp/guix-build-guix-1.1.0-25.44c6e6f.drv-0/source/guix/base16.scm Size: 3251 Blocks: 8 IO Block: 4096 regular file Device: 801h/2049d Inode: 10880988 Links: 1 Access: (0444/-r--r--r--) Uid: (30001/guixbuilder01) Gid: (30000/guixbuild) Access: 2020-09-03 10:18:35.594069572 +0200 Modify: 1970-01-01 00:00:01.000000000 +0100 Change: 2020-09-03 10:18:27.670122206 +0200 Birth: 2020-09-03 10:18:27.670122206 +0200 $ stat /tmp/guix-build-guix-1.1.0-25.44c6e6f.drv-0/source/guix/base32.scm File: /tmp/guix-build-guix-1.1.0-25.44c6e6f.drv-0/source/guix/base32.scm Size: 13325 Blocks: 32 IO Block: 4096 regular file Device: 801h/2049d Inode: 10881034 Links: 1 Access: (0444/-r--r--r--) Uid: (30001/guixbuilder01) Gid: (30000/guixbuild) Access: 2020-09-03 10:18:35.594069572 +0200 Modify: 1970-01-01 00:00:01.000000000 +0100 Change: 2020-09-03 10:18:27.674122179 +0200 Birth: 2020-09-03 10:18:27.674122179 +0200 $ stat /gnu/store/0br13w7y2wdfby74wnq7m7yzbx27hm1s-guix-1.1.0-25.44c6e6f-checkout/guix/base{16,32}.scm File: /gnu/store/0br13w7y2wdfby74wnq7m7yzbx27hm1s-guix-1.1.0-25.44c6e6f-checkout/guix/base16.scm Size: 3251 Blocks: 8 IO Block: 4096 regular file Device: 811h/2065d Inode: 344654478 Links: 10338 Access: (0444/-r--r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2020-09-03 09:36:43.818923620 +0200 Modify: 1970-01-01 00:00:01.000000000 +0100 Change: 2020-09-03 09:29:05.830024528 +0200 Birth: 2018-06-25 22:37:25.560482991 +0200 File: /gnu/store/0br13w7y2wdfby74wnq7m7yzbx27hm1s-guix-1.1.0-25.44c6e6f-checkout/guix/base32.scm Size: 13325 Blocks: 32 IO Block: 4096 regular file Device: 811h/2065d Inode: 344654504 Links: 9327 Access: (0444/-r--r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2020-09-03 09:36:43.822923593 +0200 Modify: 1970-01-01 00:00:01.000000000 +0100 Change: 2020-09-03 09:29:07.054016225 +0200 Birth: 2018-06-25 22:37:25.682483782 +0200 --8<---------------cut here---------------end--------------->8--- In the output of ‘make’ above, guix/import/gnu.scm is listed, but not guix/import/pypi.scm for instance. What’s the difference? --8<---------------cut here---------------start------------->8--- $ stat /tmp/guix-build-guix-1.1.0-25.44c6e6f.drv-0/source/guix/import/{gnu,pypi}.scm File: /tmp/guix-build-guix-1.1.0-25.44c6e6f.drv-0/source/guix/import/gnu.scm Size: 4714 Blocks: 16 IO Block: 4096 regular file Device: 801h/2049d Inode: 10881084 Links: 1 Access: (0444/-r--r--r--) Uid: (30001/guixbuilder01) Gid: (30000/guixbuild) Access: 2020-09-03 10:26:30.745348482 +0200 Modify: 1970-01-01 00:00:01.000000000 +0100 Change: 2020-09-03 10:26:23.029400312 +0200 Birth: 2020-09-03 10:26:23.029400312 +0200 File: /tmp/guix-build-guix-1.1.0-25.44c6e6f.drv-0/source/guix/import/pypi.scm Size: 23270 Blocks: 48 IO Block: 4096 regular file Device: 801h/2049d Inode: 10881093 Links: 1 Access: (0444/-r--r--r--) Uid: (30001/guixbuilder01) Gid: (30000/guixbuild) Access: 2020-09-03 10:26:30.745348482 +0200 Modify: 1970-01-01 01:00:01.000000000 +0100 Change: 2020-09-03 10:26:23.029400312 +0200 Birth: 2020-09-03 10:26:23.029400312 +0200 --8<---------------cut here---------------end--------------->8--- Nothing obvious. After checking the clock was fine, I turned off ntpd to be sure and spawned another build, but the result was the same. This is happening on berlin with a recent kernel: --8<---------------cut here---------------start------------->8--- $ uname -rm 5.4.55-gnu x86_64 --8<---------------cut here---------------end--------------->8--- The GNU make warnings come from this impenetrable function: --8<---------------cut here---------------start------------->8--- FILE_TIMESTAMP file_timestamp_cons (const char *fname, time_t stamp, long int ns) { int offset = ORDINARY_MTIME_MIN + (FILE_TIMESTAMP_HI_RES ? ns : 0); FILE_TIMESTAMP s = stamp; FILE_TIMESTAMP product = (FILE_TIMESTAMP) s << FILE_TIMESTAMP_LO_BITS; FILE_TIMESTAMP ts = product + offset; if (! (s <= FILE_TIMESTAMP_S (ORDINARY_MTIME_MAX) && product <= ts && ts <= ORDINARY_MTIME_MAX)) { char buf[FILE_TIMESTAMP_PRINT_LEN_BOUND + 1]; const char *f = fname ? fname : _("Current time"); ts = s <= OLD_MTIME ? ORDINARY_MTIME_MIN : ORDINARY_MTIME_MAX; file_timestamp_sprintf (buf, ts); OSS (error, NILF, _("%s: Timestamp out of range; substituting %s"), f, buf); } return ts; } --8<---------------cut here---------------end--------------->8--- What’s OLD_MTIME? --8<---------------cut here---------------start------------->8--- /* The file does not exist, and we assume that it is older than any actual file. */ #define OLD_MTIME 2 /* The smallest and largest ordinary timestamps. */ #define ORDINARY_MTIME_MIN (OLD_MTIME + 1) --8<---------------cut here---------------end--------------->8--- That would mean that any file with mtime < 3 is considered bogus, but then, why wouldn’t things fail on other machines as well? I’m looking for ideas! :-) Ludo’. ^ permalink raw reply [flat|nested] 6+ messages in thread
* bug#38958: Timestamp out of range; substituting 2514-05-30 01:53:03.999999999 2020-09-03 8:54 ` Ludovic Courtès @ 2020-09-03 19:42 ` Mark H Weaver 0 siblings, 0 replies; 6+ messages in thread From: Mark H Weaver @ 2020-09-03 19:42 UTC (permalink / raw) To: Ludovic Courtès, 38958 Hi, Ludovic Courtès <ludo@gnu.org> writes: > The GNU make warnings come from this impenetrable function: > > --8<---------------cut here---------------start------------->8--- > FILE_TIMESTAMP > file_timestamp_cons (const char *fname, time_t stamp, long int ns) > { > int offset = ORDINARY_MTIME_MIN + (FILE_TIMESTAMP_HI_RES ? ns : 0); > FILE_TIMESTAMP s = stamp; > FILE_TIMESTAMP product = (FILE_TIMESTAMP) s << FILE_TIMESTAMP_LO_BITS; > FILE_TIMESTAMP ts = product + offset; > > if (! (s <= FILE_TIMESTAMP_S (ORDINARY_MTIME_MAX) > && product <= ts && ts <= ORDINARY_MTIME_MAX)) > { > char buf[FILE_TIMESTAMP_PRINT_LEN_BOUND + 1]; > const char *f = fname ? fname : _("Current time"); > ts = s <= OLD_MTIME ? ORDINARY_MTIME_MIN : ORDINARY_MTIME_MAX; > file_timestamp_sprintf (buf, ts); > OSS (error, NILF, > _("%s: Timestamp out of range; substituting %s"), f, buf); > } > > return ts; > } > --8<---------------cut here---------------end--------------->8--- > > What’s OLD_MTIME? > > --8<---------------cut here---------------start------------->8--- > /* The file does not exist, and we assume that it is older than any > actual file. */ > #define OLD_MTIME 2 > > /* The smallest and largest ordinary timestamps. */ > #define ORDINARY_MTIME_MIN (OLD_MTIME + 1) > --8<---------------cut here---------------end--------------->8--- > > That would mean that any file with mtime < 3 is considered bogus, but > then, why wouldn’t things fail on other machines as well? I spent a bit of time looking at the relevant code in GNU Make. The special MTIME values of 0, 1, and 2 seem to apply only to GNU Make's *internal* representation of the timestamp. 'file_timestamp_cons', which converts a standard POSIX time to the internal representation, seems to properly handle times near the POSIX epoch by adding ORDINARY_MTIME_MIN (via 'offset') to the POSIX time, after multiplying it by 2^30 (if FILE_TIMESTAMP_HI_RES is enabled). > I’m looking for ideas! :-) Note that the date printed in the warning (ORDINARY_MTIME_MAX), represented as a POSIX time (seconds past the epoch), is precisely 2^34 seconds minus one nanosecond. The problem doesn't seem to be that 'stamp' is too small, because if it were, then the following line in 'file_timestamp_cons', ts = s <= OLD_MTIME ? ORDINARY_MTIME_MIN : ORDINARY_MTIME_MAX; would substitute ORDINARY_MTIME_MIN, which is close to the POSIX epoch, and the warning message would print a time near 1970, instead of one near 2514 (ORDINARY_MTIME_MAX). Rather, it appears that the 'stamp' passed into 'file_timestamp_cons' was close to or larger than 2^34, which is approximately the largest timestamp that GNU make supports when FILE_TIMESTAMP is 64 bits and FILE_TIMESTAMP_HI_RES is enabled. My guess is that maybe our near-zero timestamps are somewhere being adjusted downwards by a timezone conversion, using an unsigned integer type, causing them to wrap around to near the maximum value of that type. Note that although 'stamp' usually comes from a file 'mtime' as returned by stat(2), it can also come from an 'ar' archive member. In make-4.3/src/remake.c, 'f_mtime' includes the following code: --8<---------------cut here---------------start------------->8--- member_date = ar_member_date (file->hname); mtime = (member_date == (time_t) -1 ? NONEXISTENT_MTIME : file_timestamp_cons (file->hname, member_date, 0)); --8<---------------cut here---------------end--------------->8--- Mark ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2020-09-03 19:44 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2020-01-05 20:45 bug#38958: Timestamp out of range; substituting 2514-05-30 01:53:03.999999999 Roel Janssen 2020-01-08 21:58 ` Ludovic Courtès 2020-03-27 9:26 ` Roel Janssen 2020-03-27 11:54 ` Ludovic Courtès 2020-09-03 8:54 ` Ludovic Courtès 2020-09-03 19:42 ` Mark H Weaver
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/guix.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).