Обсуждение: Fwd: Debug strategy for musl Postgres?

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

Fwd: Debug strategy for musl Postgres?

От
John Mudd
Дата:
Reposting from pgsql-bugs since this is not a bug.


I built Postgres 9.3.4 from source on top of the musl C library, http://www.musl-libc.org/ 
I also built zlib, bzip2, ncurses, openssl, readline and Python using musl as a foundation for Postgres.

I'm using musl to increase the portability of the Postgres binary. I build on Ubuntu 13.10 but will runs on older Linux boxes. 

So far I get better results with the musl Postgres built on modern Ubuntu and running on an old kernel than building Postgres directly on the old Linux using standard C library. But the musl Postgres is still not working fully. I'm not getting responses from the server.

Here's the tail end "strace pg_isready" output for musl Postgres built and running on Ubuntu 13.10:

clock_gettime(CLOCK_REALTIME, {1397359337, 426941692}) = 0
poll([{fd=4, events=POLLOUT|POLLERR}], 1, 3000) = 1 ([{fd=4, revents=POLLOUT}])
sendto(4, "\0\0\0=\0\3\0\0user\0mudd\0database\0mudd\0"..., 61, MSG_NOSIGNAL, NULL, 0) = 61
clock_gettime(CLOCK_REALTIME, {1397359337, 427070343}) = 0
poll([{fd=4, events=POLLIN|POLLERR}], 1, 3000) = 1 ([{fd=4, revents=POLLIN}])
recvfrom(4, "R\0\0\0\10\0\0\0\0E\0\0\0RSFATAL\0C3D000\0Mdat"..., 16384, 0, NULL, NULL) = 92
close(4)                                = 0
ioctl(1, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0
writev(1, [{"/tmp:5432 - accepting connection"..., 33}, {"\n", 1}], 2) = 34
exit_group(0)                           = ?


Here's the tail end "strace pg_isready" output for musl Postgres built on Ubuntu 13.10 but running on old Linux:

clock_gettime(0, 0xbfffa5a8)            = -1 ENOSYS (Function not implemented)
gettimeofday(NULL, {300, 0})            = 0
poll([{fd=3, events=POLLOUT|POLLERR, revents=POLLOUT}], 1, 3000) = 1
sendto(3, "\0\0\0?\0\3\0\0user\0jmudd\0database\0jmud"..., 63, 0x4000, NULL, 0) = 63

clock_gettime(0, 0xbfffa5a8)            = -1 ENOSYS (Function not implemented)
gettimeofday(NULL, {300, 0})            = 0
poll([{fd=3, events=POLLIN|POLLERR}], 1, 3000) = 0
close(3)                                = 0
ioctl(1, TCGETS, {B38400 opost isig icanon echo ...}) = 0
writev(1, [{"/tmp:5432 - no response", 23}, {"\n", 1}], 2) = 24
exit_group(2)                           = ?


For my next step I'll try building musl Postgres with the --enable-cassert option. What else can I do to debug this?

John

Re: Fwd: Debug strategy for musl Postgres?

От
Andres Freund
Дата:
Hi,

On 2014-04-13 16:08:00 -0400, John Mudd wrote:
> I built Postgres 9.3.4 from source on top of the musl C library,
> http://www.musl-libc.org/
> I also built zlib, bzip2, ncurses, openssl, readline and Python using musl
> as a foundation for Postgres.
> 
> I'm using musl to increase the portability of the Postgres binary. I build
> on Ubuntu 13.10 but will runs on older Linux boxes.
> 
> So far I get better results with the musl Postgres built on modern Ubuntu
> and running on an old kernel than building Postgres directly on the old
> Linux using standard C library. But the musl Postgres is still not working
> fully. I'm not getting responses from the server.

I tend to think that this is more a matter for the musl devs than
postgres. Postgres works on a fair numbers of libcs and musl is pretty
new and rough around the edges.

> clock_gettime(0, 0xbfffa5a8)            = -1 ENOSYS (Function not implemented)

This looks suspicious.

> gettimeofday(NULL, {300, 0})            = 0
> poll([{fd=3, events=POLLOUT|POLLERR, revents=POLLOUT}], 1, 3000) = 1
> sendto(3, "\0\0\0?\0\3\0\0user\0jmudd\0database\0jmud"..., 63, 0x4000,
> NULL, 0) = 63
> 
> clock_gettime(0, 0xbfffa5a8)            = -1 ENOSYS (Function not
> implemented)
> gettimeofday(NULL, {300, 0})            = 0
> poll([{fd=3, events=POLLIN|POLLERR}], 1, 3000) = 0

Here a poll didn't return anything. You'll likely have to look at
the server side.


Greetings,

Andres Freund

-- Andres Freund                       http://www.2ndQuadrant.com/PostgreSQL Development, 24x7 Support, Training &
Services