Re: [HACKERS] Open 6.5 items - Mailing list pgsql-hackers

From Vadim Mikheev
Subject Re: [HACKERS] Open 6.5 items
Date
Msg-id 375686DA.B584296E@krs.ru
Whole thread Raw
In response to RE: [HACKERS] Open 6.5 items  ("Hiroshi Inoue" <Inoue@tpf.co.jp>)
Responses Re: [HACKERS] Open 6.5 items
RE: [HACKERS] Open 6.5 items
List pgsql-hackers
Hiroshi Inoue wrote:
> 
> However,when I did vacuum while testing I got the following error
> message.
>         ERROR:  Child itemid marked as unused
> 
> TransactionId-s of tuples in update chain may be out of order.

1. Fix and explanation in xact.c:CommitTransaction():
    RecordTransactionCommit();
   /*    * Let others know about no transaction in progress by me.    * Note that this must be done _before_ releasing
lockswe hold    * and SpinAcquire(ShmemIndexLock) is required - or bad (too high)    * XmaxRecent value might be used
byvacuum: UPDATE with xid 0 is    * blocked by xid 1' UPDATE, xid 1 is doing commit while xid 2    * gets snapshot - if
xid2' GetSnapshotData sees xid 1 as running    * then it must see xid 0 as running as well or XmaxRecent = 1    * might
beused by concurrent vacuum causing    *         ERROR:  Child itemid marked as unused    * This bug was reported by
HiroshiInoue and I was able to reproduce    * it with 3 sessions and gdb.  - vadim 06/03/99    */   if (MyProc != (PROC
*)NULL)   {       SpinAcquire(ShmemIndexLock);       MyProc->xid = InvalidTransactionId;       MyProc->xmin =
InvalidTransactionId;      SpinRelease(ShmemIndexLock);   }
 

2. It was possible to get two versions of the same row from  select. Fixed by moving MyProc->xid assignment from
StartTransaction()inside GetNewTransactionId().
 

Thanks, Hiroshi! And please run your tests - I used just 
3 sessions and gdb.

Vadim


pgsql-hackers by date:

Previous
From: Dmitry Samersoff
Date:
Subject: Re: [HACKERS] PID of backend
Next
From: Tom Lane
Date:
Subject: Re: [HACKERS] Re: Freezing docs for v6.5