Re: Streaming replication and non-blocking I/O

From: Fujii Masao <masao(dot)fujii(at)gmail(dot)com>
To: Heikki Linnakangas <heikki(dot)linnakangas(at)enterprisedb(dot)com>
Cc: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Streaming replication and non-blocking I/O
Date: 2010-01-12 16:58:35
Message-ID: 3f0b79eb1001120858v11d2c0bbq72d096eb06a1e905@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Tue, Dec 22, 2009 at 8:49 PM, Heikki Linnakangas
<heikki(dot)linnakangas(at)enterprisedb(dot)com> wrote:
>> Umm.., I still cannot find the place where the walreceiver module is
>> loaded by using load_external_function() in your 'replication' branch.
>> Also the compilation of that branch fails. Is the 'pushed' branch the
>> latest? Sorry if I'm missing something.
>
> Ah, I see. The changes were not included in the merge commit after all,
> but I had simple forgot to "git add" them. Sorry about that, should be
> there now.

This change which moves walreceiver process into a dynamically loaded
module caused the following compile error on my MinGW environment.

---------------------------
gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith
-Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing
-fwrapv -g -I. -I../../../../src/interfaces/libpq
-I../../../../src/include -I./src/include/port/win32 -DEXEC_BACKEND
"-I../../../../src/include/port/win32" -DBUILDING_DLL -c -o
walreceiverproc.o walreceiverproc.c
dlltool --export-all --output-def libwalreceiverprocdll.def walreceiverproc.o
dllwrap -o walreceiverproc.dll --dllname walreceiverproc.dll --def
libwalreceiverprocdll.def walreceiverproc.o -L../../../../src/backend
-lpostgres -L../../../../src/interfaces/libpq -L../../../../src/port
-lpq
Info: resolving _pg_signal_mask by linking to __imp__pg_signal_mask
(auto-import)
Info: resolving _pg_signal_queue by linking to __imp__pg_signal_queue
(auto-import)
Info: resolving _InterruptPending by linking to
__imp__InterruptPending (auto-import)
Info: resolving _assert_enabled by linking to __imp__assert_enabled
(auto-import)
Info: resolving _WalRcv by linking to __imp__WalRcv (auto-import)
Info: resolving _proc_exit_inprogress by linking to
__imp__proc_exit_inprogress (auto-import)
Info: resolving _BlockSig by linking to __imp__BlockSig (auto-import)
Info: resolving _sync_method by linking to __imp__sync_method (auto-import)
Info: resolving _MyProcPid by linking to __imp__MyProcPid (auto-import)
Info: resolving _CurrentResourceOwner by linking to
__imp__CurrentResourceOwner (auto-import)
Info: resolving _TopMemoryContext by linking to
__imp__TopMemoryContext (auto-import)
Info: resolving _CurrentMemoryContext by linking to
__imp__CurrentMemoryContext (auto-import)
Info: resolving _PG_exception_stack by linking to
__imp__PG_exception_stack (auto-import)
Info: resolving _UnBlockSig by linking to __imp__UnBlockSig (auto-import)
Info: resolving _ThisTimeLineID by linking to __imp__ThisTimeLineID
(auto-import)
Info: resolving _error_context_stack by linking to
__imp__error_context_stack (auto-import)
Info: resolving _InterruptHoldoffCount by linking to
__imp__InterruptHoldoffCount (auto-import)
c:\MinGW\bin\..\lib\gcc\mingw32\3.4.2\..\..\..\..\mingw32\bin\ld.exe:
warning: auto-importing has been activated without
--enable-auto-import specified on the command line.
This should work unless it involves constant data structures
referencing symbols from auto-imported DLLs.
fu000001.o:(.idata$2+0xc): undefined reference to `libpostgres_a_iname'
fu000003.o:(.idata$2+0xc): undefined reference to `libpostgres_a_iname'
fu000005.o:(.idata$2+0xc): undefined reference to `libpostgres_a_iname'
fu000006.o:(.idata$2+0xc): undefined reference to `libpostgres_a_iname'
fu000008.o:(.idata$2+0xc): undefined reference to `libpostgres_a_iname'
fu000009.o:(.idata$2+0xc): more undefined references to
`libpostgres_a_iname' follow
nmth000000.o:(.idata$4+0x0): undefined reference to `_nm__pg_signal_mask'
nmth000002.o:(.idata$4+0x0): undefined reference to `_nm__pg_signal_queue'
nmth000004.o:(.idata$4+0x0): undefined reference to `_nm__InterruptPending'
nmth000007.o:(.idata$4+0x0): undefined reference to `_nm__assert_enabled'
nmth000012.o:(.idata$4+0x0): undefined reference to `_nm__WalRcv'
nmth000018.o:(.idata$4+0x0): undefined reference to `_nm__proc_exit_inprogress'
nmth000020.o:(.idata$4+0x0): undefined reference to `_nm__BlockSig'
nmth000023.o:(.idata$4+0x0): undefined reference to `_nm__sync_method'
nmth000026.o:(.idata$4+0x0): undefined reference to `_nm__MyProcPid'
nmth000028.o:(.idata$4+0x0): undefined reference to `_nm__CurrentResourceOwner'
nmth000030.o:(.idata$4+0x0): undefined reference to `_nm__TopMemoryContext'
nmth000032.o:(.idata$4+0x0): undefined reference to `_nm__CurrentMemoryContext'
nmth000035.o:(.idata$4+0x0): undefined reference to `_nm__PG_exception_stack'
nmth000037.o:(.idata$4+0x0): undefined reference to `_nm__UnBlockSig'
nmth000039.o:(.idata$4+0x0): undefined reference to `_nm__ThisTimeLineID'
nmth000041.o:(.idata$4+0x0): undefined reference to `_nm__error_context_stack'
nmth000043.o:(.idata$4+0x0): undefined reference to `_nm__InterruptHoldoffCount'
collect2: ld returned 1 exit status
c:\MinGW\bin\dllwrap.exe: c:\MinGW\bin\gcc exited with status 1
make[2]: *** [walreceiverproc.dll] Error 1
make[2]: Leaving directory
`/c/postgres/mmm/src/backend/postmaster/walreceiverproc'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/c/postgres/mmm/src'
make: *** [all] Error 2
---------------------------

Though I marked the variables shown in the above message as PGDLLIMPORT,
the "make" still fails in the same way. I struggled with this issue
for some time, but
could not fix it yet :(

Frankly I'm not familiar with that area. So it would be nice if
someone could analyze
this issue.

Regards,

--
Fujii Masao
NIPPON TELEGRAPH AND TELEPHONE CORPORATION
NTT Open Source Software Center

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Dave Page 2010-01-12 17:34:45 Re: mailing list archiver chewing patches
Previous Message Tom Lane 2010-01-12 16:54:51 Re: mailing list archiver chewing patches