Re: 8.2beta1 (w32): server process crash (tsvector) - Mailing list pgsql-bugs

From Thomas H.
Subject Re: 8.2beta1 (w32): server process crash (tsvector)
Date
Msg-id 158401c70677$848b1210$0201a8c0@iwing
Whole thread Raw
In response to Re: 8.2beta1 (w32): server process crash (tsvector)  ("Thomas H." <me@alternize.com>)
Responses Re: 8.2beta1 (w32): server process crash (tsvector)
List pgsql-bugs
here are the steps to reproduce:

--------
1. intall win32 beta3 as new instance using UTF8 / en_US and tsearch2
module, everything else default
2. create new db with encoding UTF8, standard template
3. load data from http://alternize.com/pgsql/tsearch2test.zip (updated dump
so it only includes the test table/data)
4. issue query: UPDATE test SET idxFTI = to_tsvector('default', sometext);
5. watch the process die... *sniff*
-------

(steps 1 & 2 can probably be skipped, but i wanted to have a clean test env)

best regards,
thomas



----- Original Message -----
From: "imad" <immaad@gmail.com>
To: "Magnus Hagander" <mha@sollentuna.net>
Cc: "Thomas H." <me@alternize.com>; <pgsql-bugs@postgresql.org>; "Tom Lane"
<tgl@sss.pgh.pa.us>
Sent: Sunday, November 12, 2006 5:20 PM
Subject: Re: [BUGS] 8.2beta1 (w32): server process crash (tsvector)


> yeah... i dont think it will be related to index anyway.
> it looks to me that some extra bytes are written to the allocated
> memory when locale is set to en-US etc. The warning
>
> "WARNING:  detected write past chunk end in ExprContext 02C6D0F8"
>
> is generated when you write bytes on a location more than its allocated
> size,
> and this thing will eventualy lead to a server crash.
>
> Now, I would suggest try to minimize the script and look for the action
> with leads to this warning. Then a debug would be easy on the execution
> path and I guess, there won't be any problem in parsing and planning.
>
> Can you send me the knotty script BTW?
>
>
> --Imad
> www.EnterpriseDB.com
>
> On 11/12/06, Magnus Hagander <mha@sollentuna.net> wrote:
>> Ok, I've run this test on an assert enabled build (my msvc build,
>> actually, so I could get a debugger on it if needed). It then outputs:
>>
>> WARNING:  detected write past chunk end in ExprContext 02C6D0F8
>> WARNING:  detected write past chunk end in ExprContext 02C6AEA0
>> WARNING:  detected write past chunk end in ExprContext 02C6B200
>> WARNING:  detected write past chunk end in ExprContext 02C44630
>> WARNING:  detected write past chunk end in ExprContext 02C4C118
>> WARNING:  problem in alloc set ExprContext: bogus aset link in block
>> 02C435A8, c
>> hunk 02C44520
>> WARNING:  detected write past chunk end in ExprContext 02C66440
>> WARNING:  detected write past chunk end in ExprContext 02C3B9D0
>> WARNING:  detected write past chunk end in ExprContext 02C3BDE8
>> WARNING:  detected write past chunk end in ExprContext 02C4E7E0
>> WARNING:  detected write past chunk end in ExprContext 02C47508
>> WARNING:  problem in alloc set ExprContext: bogus aset link in block
>> 02C435A8, c
>> hunk 02C47528
>> WARNING:  detected write past chunk end in ExprContext 02C43800
>> WARNING:  detected write past chunk end in ExprContext 02C66C90
>> WARNING:  detected write past chunk end in ExprContext 02C68270
>> WARNING:  detected write past chunk end in ExprContext 02C4F5D8
>> WARNING:  problem in alloc set ExprContext: bogus aset link in block
>> 02C4E6F8, c
>> hunk 02C4F5F8
>> WARNING:  detected write past chunk end in ExprContext 02C7B680
>> WARNING:  detected write past chunk end in ExprContext 02C45190
>> WARNING:  detected write past chunk end in ExprContext 02C46AC8
>> WARNING:  detected write past chunk end in ExprContext 02C3C538
>> WARNING:  detected write past chunk end in ExprContext 02C67B90
>> WARNING:  detected write past chunk end in ExprContext 02C438F0
>> WARNING:  problem in alloc set ExprContext: bad single-chunk 02C43FB8 in
>> block 0
>> 2C435A8
>> WARNING:  problem in alloc set ExprContext: bogus aset link in block
>> 02C435A8, c
>> hunk 02C43FB8
>> server closed the connection unexpectedly
>>         This probably means the server terminated abnormally
>>         before or while processing the request.
>>
>>
>>
>>
>> The actual crash happens on line 1142 of AllocSetCheck. Full callstack
>> is:
>> >       postgres.exe!AllocSetCheck(MemoryContextData *
>> context=0x02c455b8)  Line 1142 + 0x11 bytes     C
>>         postgres.exe!AllocSetReset(MemoryContextData *
>> context=0x02c455b8)  Line 409 + 0x9 bytes       C
>>         postgres.exe!MemoryContextReset(MemoryContextData *
>> context=0x02c455b8)  Line 129 + 0xf bytes       C
>>         postgres.exe!ExecScan(ScanState * node=0x02c227d0,
>> TupleTableSlot * (ScanState *)* accessMtd=0x00530b70)  Line 91 + 0xc
>> bytes   C
>>         postgres.exe!ExecSeqScan(ScanState * node=0x02c227d0)  Line 130
>> + 0xe bytes     C
>>         postgres.exe!ExecProcNode(PlanState * node=0x02c227d0)  Line 349
>> + 0x9 bytes     C
>>         postgres.exe!ExecutePlan(EState * estate=0x02c223e8, PlanState *
>> planstate=0x02c227d0, CmdType operation=CMD_UPDATE, long numberTuples=0,
>> ScanDirection direction=ForwardScanDirection, _DestReceiver *
>> dest=0x02bf8d30)  Line 1081 + 0x9 bytes C
>>         postgres.exe!ExecutorRun(QueryDesc * queryDesc=0x02c44078,
>> ScanDirection direction=ForwardScanDirection, long count=0)  Line 246 +
>> 0x20 bytes      C
>>         postgres.exe!ProcessQuery(Query * parsetree=0x02bddab0, Plan *
>> plan=0x02bf7e28, ParamListInfoData * params=0x00000000, _DestReceiver *
>> dest=0x02bf8d30, char * completionTag=0x00d4fb24)  Line 157 + 0xd bytes
>> C
>>         postgres.exe!PortalRunMulti(PortalData * portal=0x02c48138,
>> _DestReceiver * dest=0x02bf8d30, _DestReceiver * altdest=0x02bf8d30,
>> char * completionTag=0x00d4fb24)  Line 1148 + 0x1c bytes        C
>>         postgres.exe!PortalRun(PortalData * portal=0x02c48138, long
>> count=2147483647, _DestReceiver * dest=0x02bf8d30, _DestReceiver *
>> altdest=0x02bf8d30, char * completionTag=0x00d4fb24)  Line 700 + 0x15
>> bytes   C
>>         postgres.exe!exec_simple_query(const char *
>> query_string=0x02bdd4c8)  Line 943 + 0x23 bytes C
>>         postgres.exe!PostgresMain(int argc=4, char * * argv=0x02ba2478,
>> const char * username=0x025e7af8)  Line 3414 + 0xc bytes        C
>>         postgres.exe!BackendRun(Port * port=0x00d4fd2c)  Line 2853 +
>> 0x17 bytes      C
>>         postgres.exe!SubPostmasterMain(int argc=3, char * *
>> argv=0x025e5b30)  Line 3288 + 0xc bytes C
>>         postgres.exe!main(int argc=3, char * * argv=0x025e5b30)  Line
>> 165 + 0xd bytes C
>>
>>
>>
>>
>> Can someone point me towards what next to check? :-)
>>
>> Oh, and per Thomas, this does NOT appear to happen in C locale, but
>> happens in both de_CH and en_US. ANd I've tested in Swedish_Sweden,
>> which also crashes.
>>
>> Note that this appears not to be index related at all, because during
>> this test there is only a standard btree index on "someint", and nothing
>> on the tsvector column.
>>
>> //Magnus
>>
>>
>> > -----Original Message-----
>> > From: pgsql-bugs-owner@postgresql.org
>> > [mailto:pgsql-bugs-owner@postgresql.org] On Behalf Of Thomas H.
>> > Sent: den 12 november 2006 15:06
>> > To: pgsql-bugs@postgresql.org
>> > Subject: Re: [BUGS] 8.2beta1 (w32): server process crash (tsvector)
>> >
>> > this bug (please see below) is unfortunately still present in
>> > beta3 (win32 build). test case still crashes the child
>> > process and lets postmaster kill & reload everything.
>> >
>> > it is not GiST-related, i've just validated the same problem
>> > using GIN.
>> >
>> > this breaks tsearch2 functionality on our win32 system as no
>> > tsvector-indexing of new/existing rows is possible (crash
>> > after ~10 processed rows). searching already indexed rows works fine.
>> >
>> > best regards,
>> > thomas
>> >
>> > ----- Original Message -----
>> > From: <me@alternize.com>
>> > To: "Tom Lane" <tgl@sss.pgh.pa.us>
>> > Cc: <pgsql-bugs@postgresql.org>
>> > Sent: Tuesday, October 17, 2006 9:19 PM
>> > Subject: Re: [BUGS] 8.2beta1 (w32): server process crash (tsvector)
>> >
>> >
>> > >>> the following query will crash the server process:
>> > >>> INSERT INTO news.news
>> > >>> SELECT * FROM news.news2;
>> > >>
>> > >> This is undoubtedly data-dependent.  Can you supply some
>> > sample data
>> > >> that makes it happen?
>> > >
>> > > it's not only happening with INSERTS, but also updates. as
>> > thats easier to
>> > > test, here's how i can reproduce the error:
>> > >
>> > > 1. create new database (encoding: UTF8) with tsearch2 on
>> > 8.2b1 win32
>> > > (system
>> > > locale: de_CH.1252)
>> > > 2. insert the data from the zip file
>> > > [http://alternize.com/pgsql/tsearch2test.zip] (be sure to
>> > also update
>> > > pg_ts_cf /
>> > > pg_ts_cfgmap as we have WIN1252 locale)
>> > > 3. execute UPDATE test SET idxFTI = to_tsvector('default',
>> > "sometext"); or
>> > > similar queries
>> > > 4. hopefully see the process crashing as i do ;-)
>> > >
>> > >
>> > > 2006-10-17 17:23:44 LOG:  server process (PID 4584) exited with exit
>> > > code -1073741819
>> > > 2006-10-17 17:23:44 LOG:  terminating any other active
>> > server processes
>> > > 2006-10-17 17:23:44 WARNING:  terminating connection
>> > because of crash of
>> > > another server process
>> > > 2006-10-17 17:23:44 DETAIL:  The postmaster has commanded
>> > this server
>> > > process to roll back the current transaction and exit,
>> > because another
>> > > server process exited abnormally and possibly corrupted
>> > shared memory.
>> > > {snipp}
>> > > 2006-10-17 17:23:44 LOG:  all server processes terminated;
>> > reinitializing
>> > > 2006-10-17 17:23:44 LOG:  database system was interrupted
>> > at 2006-10-17
>> > > 17:23:41 W. Europe Daylight Time
>> > > 2006-10-17 17:23:44 LOG:  Windows
>> > fopen("recovery.conf","r") failed: code
>> > > 2,
>> > > errno 2
>> > > 2006-10-17 17:23:44 LOG:  Windows
>> > fopen("pg_xlog/00000001.history","r")
>> > > failed: code 2, errno 2
>> > > 2006-10-17 17:23:44 LOG:  Windows fopen("backup_label","r")
>> > failed: code
>> > > 2,
>> > > errno 2
>> > > 2006-10-17 17:23:44 LOG:  checkpoint record is at 0/E2ECA728
>> > > 2006-10-17 17:23:44 LOG:  redo record is at 0/E2ECA728;
>> > undo record is at
>> > > 0/0; shutdown FALSE
>> > > 2006-10-17 17:23:44 LOG:  next transaction ID: 0/514299;
>> > next OID: 6276957
>> > > 2006-10-17 17:23:44 LOG:  next MultiXactId: 1; next
>> > MultiXactOffset: 0
>> > > 2006-10-17 17:23:44 LOG:  database system was not properly
>> > shut down;
>> > > automatic recovery in progress
>> > > 2006-10-17 17:23:44 LOG:  redo starts at 0/E2ECA778
>> > > 2006-10-17 17:23:44 LOG:  unexpected pageaddr 0/DB0CC000 in
>> > log file 0,
>> > > segment 227, offset 835584
>> > > 2006-10-17 17:23:44 LOG:  redo done at 0/E30CBE78
>> > > 2006-10-17 17:23:45 LOG:  database system is ready
>> > > 2006-10-17 17:23:45 LOG:  Windows fopen("global/pg_fsm.cache","rb")
>> > > failed:
>> > > code 2, errno 2
>> > > 2006-10-17 17:23:45 LOG:  transaction ID wrap limit is
>> > 2147484172, limited
>> > > by database "postgres"
>> > > 2006-10-17 17:23:45 LOG:  Windows
>> > fopen("global/pgstat.stat","rb") failed:
>> > > code 2, errno 2
>> > >
>> > >
>> > > i've also tried to update each record on its own in a
>> > for-loop. here the
>> > > crash happens as well, sometimes after 10 updates,
>> > sometimes after 100
>> > > updates, sometimes even after 1 update. but eventually
>> > every record can be
>> > > updated. so i do not think its entierly content-related...
>> > >
>> > > for what its worth, here's the output of pg_controldata:
>> > >
>> > > pg_control version number:            822
>> > > Catalog version number:               200609181
>> > > Database system identifier:           4986650172201464825
>> > > Database cluster state:               in production
>> > > pg_control last modified:             17.10.2006 17:44:29
>> > > Current log file ID:                  0
>> > > Next log file segment:                230
>> > > Latest checkpoint location:           0/E4E0F978
>> > > Prior checkpoint location:            0/E46BF420
>> > > Latest checkpoint's REDO location:    0/E4E03098
>> > > Latest checkpoint's UNDO location:    0/0
>> > > Latest checkpoint's TimeLineID:       1
>> > > Latest checkpoint's NextXID:          0/531333
>> > > Latest checkpoint's NextOID:          6285149
>> > > Latest checkpoint's NextMultiXactId:  1
>> > > Latest checkpoint's NextMultiOffset:  0
>> > > Time of latest checkpoint:            17.10.2006 17:43:45
>> > > Minimum recovery ending location:     0/0
>> > > Maximum data alignment:               8
>> > > Database block size:                  8192
>> > > Blocks per segment of large relation: 131072
>> > > WAL block size:                       8192
>> > > Bytes per WAL segment:                16777216
>> > > Maximum length of identifiers:        64
>> > > Maximum columns in an index:          32
>> > > Date/time type storage:               floating-point numbers
>> > > Maximum length of locale name:        128
>> > > LC_COLLATE:                           German_Switzerland.1252
>> > > LC_CTYPE:                             German_Switzerland.1252
>> > >
>> > > let me know if more information / data is needed.
>> > >
>> > > on a sidenote: are those fopen() errors
>> > debug-code-leftovers or something
>> > > one should worry about? i can't find those files on the file system.
>> > >
>> > > - thomas
>> > >
>> > >
>> > > ---------------------------(end of
>> > broadcast)---------------------------
>> > > TIP 4: Have you searched our list archives?
>> > >
>> > >               http://archives.postgresql.org
>> > >
>> >
>> >
>> >
>> > ---------------------------(end of
>> > broadcast)---------------------------
>> > TIP 6: explain analyze is your friend
>> >
>>
>> ---------------------------(end of broadcast)---------------------------
>> TIP 3: Have you checked our extensive FAQ?
>>
>>                http://www.postgresql.org/docs/faq
>>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 2: Don't 'kill -9' the postmaster
>

pgsql-bugs by date:

Previous
From: imad
Date:
Subject: Re: 8.2beta1 (w32): server process crash (tsvector)
Next
From: Tom Lane
Date:
Subject: Re: 8.2beta1 (w32): server process crash (tsvector)