Обсуждение: pltcl tests fail with FreeBSD 13.2

Поиск
Список
Период
Сортировка

pltcl tests fail with FreeBSD 13.2

От
Andres Freund
Дата:
Hi,

I saw that CI image builds for freebsd were failing, because 13.1, used until
now, is EOL. Update to 13.2, no problem, I thought. Ran a CI run against 13.2
- unfortunately that failed. In pltcl of all places.

https://api.cirrus-ci.com/v1/artifact/task/5275616266682368/testrun/build/testrun/pltcl/regress/regression.diffs

Notably both 13.1 and 13.2 are using tcl 8.6.13.

The code for the relevant function is this:

create function tcl_date_week(int4,int4,int4) returns text as $$
    return [clock format [clock scan "$2/$3/$1"] -format "%U"]
$$ language pltcl immutable;

select tcl_date_week(2010,1,26);


It doesn't surprise me that there are problems with above clock scan, it uses
the MM/DD/YYYY format without making that explicit. But why that doesn't work
on freebsd 13.2, I can't explain.  It looks like tcl specifies the MM/DD/YYYY
bit for "free format scans":
https://www.tcl.tk/man/tcl8.6/TclCmd/clock.html#M80

It sure looks like freebsd 13.2 tcl is just busted. Notably it can't even
parse what it generates:

echo 'puts [clock scan [clock format [clock seconds] -format "%Y/%m/%d"] -format "%Y/%m/%d"]'|tclsh8.6

Which works on 13.1 (and other operating systems), without a problem.

I used truss as a very basic way to see differences between 13.1 and 13.2 -
the big difference was .2 failing just after
access("/etc/localtime",F_OK)             ERR#2 'No such file or directory'
open("/etc/localtime",O_RDONLY,077)         ERR#2 'No such file or directory'

whereas 13.1 also saw that, but then continued to

issetugid()                     = 0 (0x0)
open("/usr/share/zoneinfo/UTC",O_RDONLY,00)     = 3 (0x3)
fstat(3,{ mode=-r--r--r-- ,inode=351417,size=118,blksize=32768 }) = 0 (0x0)
...

which made me test specifying the timezone explicitly:
echo 'puts [clock scan [clock format [clock seconds] -format "%Y/%m/%d" -timezone "UTC"] -format "%Y/%m/%d" -timezone
"UTC"]'|tclsh8.6

Which, surprise, works.

So does specifying the timezone via the TZ='UTC' environment variable.


I guess there could be a libc behaviour change or such around timezones? I do
see
https://www.freebsd.org/releases/13.2R/relnotes/
"tzcode has been upgraded to version 2022g with improved timezone change detection and reliability fixes."

Greetings,

Andres Freund



Re: pltcl tests fail with FreeBSD 13.2

От
Andres Freund
Дата:
Hi,

On 2023-07-31 12:15:10 -0700, Andres Freund wrote:
> It sure looks like freebsd 13.2 tcl is just busted. Notably it can't even
> parse what it generates:
> 
> echo 'puts [clock scan [clock format [clock seconds] -format "%Y/%m/%d"] -format "%Y/%m/%d"]'|tclsh8.6
> 
> Which works on 13.1 (and other operating systems), without a problem.
> 
> I used truss as a very basic way to see differences between 13.1 and 13.2 -
> the big difference was .2 failing just after
> access("/etc/localtime",F_OK)             ERR#2 'No such file or directory'
> open("/etc/localtime",O_RDONLY,077)         ERR#2 'No such file or directory'
> 
> whereas 13.1 also saw that, but then continued to
> 
> issetugid()                     = 0 (0x0)
> open("/usr/share/zoneinfo/UTC",O_RDONLY,00)     = 3 (0x3)
> fstat(3,{ mode=-r--r--r-- ,inode=351417,size=118,blksize=32768 }) = 0 (0x0)
> ...
> 
> which made me test specifying the timezone explicitly:
> echo 'puts [clock scan [clock format [clock seconds] -format "%Y/%m/%d" -timezone "UTC"] -format "%Y/%m/%d" -timezone
"UTC"]'|tclsh8.6
> 
> Which, surprise, works.
> 
> So does specifying the timezone via the TZ='UTC' environment variable.
> 
> 
> I guess there could be a libc behaviour change or such around timezones? I do
> see
> https://www.freebsd.org/releases/13.2R/relnotes/
> "tzcode has been upgraded to version 2022g with improved timezone change detection and reliability fixes."

One additional datapoint: If I configure the timezone with "tzsetup" (which
creates /etc/localtime), the problem vanishes as well.

Greetings,

Andres Freund



Re: pltcl tests fail with FreeBSD 13.2

От
Tom Lane
Дата:
Andres Freund <andres@anarazel.de> writes:
> I saw that CI image builds for freebsd were failing, because 13.1, used until
> now, is EOL. Update to 13.2, no problem, I thought. Ran a CI run against 13.2
> - unfortunately that failed. In pltcl of all places.

I tried to replicate this in a freshly-installed 13.2 VM, and could
not, which is unsurprising because the FreeBSD installation process
does not let you skip selecting a timezone --- which creates
/etc/localtime AFAICT.  So I'm unconvinced that we ought to worry
about the case where that's not there.  How is it that the CI image
lacks that file?  (And could it be that we had one in the predecessor
13.1 image?)

            regards, tom lane



Re: pltcl tests fail with FreeBSD 13.2

От
Andres Freund
Дата:
Hi,

On 2023-07-31 18:33:37 -0400, Tom Lane wrote:
> Andres Freund <andres@anarazel.de> writes:
> > I saw that CI image builds for freebsd were failing, because 13.1, used until
> > now, is EOL. Update to 13.2, no problem, I thought. Ran a CI run against 13.2
> > - unfortunately that failed. In pltcl of all places.
> 
> I tried to replicate this in a freshly-installed 13.2 VM, and could
> not, which is unsurprising because the FreeBSD installation process
> does not let you skip selecting a timezone --- which creates
> /etc/localtime AFAICT.  So I'm unconvinced that we ought to worry
> about the case where that's not there.  How is it that the CI image
> lacks that file?

I don't know why it lacks the file - the CI image is based on the google cloud
image freebsd maintains / publishes ([1][2]). Which doesn't have /etc/localtime.

I've now added a "tzsetup UTC" to the image generation, which fixes the test
failure.


> (And could it be that we had one in the predecessor 13.1 image?)

No, I checked, and it's not in there either... It looks like the difference is
that 13.1 reads the UTC zoneinfo in that case, whereas 13.2 doesn't.

Upstream 13.1 image:

truss date 2>&1|grep -E 'open|stat'
...
open("/etc/localtime",O_RDONLY,0101401200)     ERR#2 'No such file or directory'
open("/usr/share/zoneinfo/UTC",O_RDONLY,00)     = 3 (0x3)
fstat(3,{ mode=-r--r--r-- ,inode=351417,size=118,blksize=32768 }) = 0 (0x0)
open("/usr/share/zoneinfo/posixrules",O_RDONLY,014330460400) = 3 (0x3)
fstat(3,{ mode=-r--r--r-- ,inode=356621,size=3535,blksize=32768 }) = 0 (0x0)
fstat(1,{ mode=p--------- ,inode=696,size=0,blksize=4096 }) = 0 (0x0)

Upstream 13.2 image:
open("/etc/localtime",O_RDONLY,01745)         ERR#2 'No such file or directory'
fstat(1,{ mode=p--------- ,inode=658,size=0,blksize=4096 }) = 0 (0x0)


Why not reading the UTC zone leads to timestamps being out of range, I do not
know...

Greetings,

Andres Freund

[1] https://wiki.freebsd.org/GoogleCloudPlatform
[2] https://cloud.google.com/compute/docs/images#freebsd



Re: pltcl tests fail with FreeBSD 13.2

От
Tom Lane
Дата:
Andres Freund <andres@anarazel.de> writes:
> On 2023-07-31 18:33:37 -0400, Tom Lane wrote:
>> (And could it be that we had one in the predecessor 13.1 image?)

> No, I checked, and it's not in there either... It looks like the difference is
> that 13.1 reads the UTC zoneinfo in that case, whereas 13.2 doesn't.

Huh.  Maybe worth reporting as a FreeBSD bug?  In any case I don't
think it's *our* bug.

            regards, tom lane



Re: pltcl tests fail with FreeBSD 13.2

От
Andres Freund
Дата:
Hi,

On 2023-07-31 19:11:38 -0400, Tom Lane wrote:
> Andres Freund <andres@anarazel.de> writes:
> > On 2023-07-31 18:33:37 -0400, Tom Lane wrote:
> >> (And could it be that we had one in the predecessor 13.1 image?)
> 
> > No, I checked, and it's not in there either... It looks like the difference is
> > that 13.1 reads the UTC zoneinfo in that case, whereas 13.2 doesn't.
> 
> Huh.  Maybe worth reporting as a FreeBSD bug?

Yea. Hoping our local freebsd developer has a suggestion as to which component
to report it to, or even fix it :).


> In any case I don't think it's *our* bug.

Agreed. An explicit tzsetup UTC isn't much to carry going forward...

Greetings,

Andres Freund



Re: pltcl tests fail with FreeBSD 13.2

От
Tom Lane
Дата:
Andres Freund <andres@anarazel.de> writes:
> On 2023-07-31 19:11:38 -0400, Tom Lane wrote:
>> Huh.  Maybe worth reporting as a FreeBSD bug?

> Yea. Hoping our local freebsd developer has a suggestion as to which component
> to report it to, or even fix it :).

You already have a reproducer using just tcl, so I'd suggest filing
it against tcl and letting them drill down as needed.  (It's possible
that it actually is tcl that's misbehaving, seeing that our core
regression tests are passing in the same environment.)

            regards, tom lane