[HACKERS] spinlock freeze ?(Re: INSERT/UPDATE waiting (another example)) - Mailing list pgsql-hackers

From Hiroshi Inoue
Subject [HACKERS] spinlock freeze ?(Re: INSERT/UPDATE waiting (another example))
Date
Msg-id 000301be9d2b$638ea580$2801007e@cadzone.tpf.co.jp
Whole thread Raw
In response to Re: [HACKERS] Re: INSERT/UPDATE waiting (another example)  (Wayne Piekarski <wayne@senet.com.au>)
Responses DROP TABLE does not drop a table completely  ("Hiroshi Inoue" <Inoue@tpf.co.jp>)
spinlock freeze again  ("Hiroshi Inoue" <Inoue@tpf.co.jp>)
List pgsql-hackers
Hello all,

>
> Hi everyone!
>
>
> Tom Lane Writes:
>
> > Wayne Piekarski <wayne@senet.com.au> writes:
> > > Currently, I start up postmaster with -B 192, which I guess
> puts it below
> > > the value of 256 which causes problems. Apart from when I got past 256
> > > buffers, does the patch fix anything else that might be
> causing problems?
> >

[snip]

>
> Then another one after restarting everything:
>
> ERROR:  cannot open segment 1 of relation sessions_done_id_index
>

I got the same error in my test cases.
I don't understand the cause of this error.

But it seems I found another problem instead.
   spinlock io_in_progress_lock of a buffer page is not   released by operations called by elog() such as
ProcReleaseSpins(),ResetBufferPool()etc.
 
   For example,the error we have encountered probably occured   in ReadBufferWithBufferLock().   When elog(ERROR/FATAL)
occursin smgrread/extend() which   is called from ReadBufferWithBufferLock(),smgrread/extend()   don't release the
io_in_progress_lockspinlock of the page.   If other transactions get that page as a free Buffer page,those
transactionswait the release of io_in_progress_lock spinlock   and would abort with message such as
 

> FATAL: s_lock(1800d37c) at bufmgr.c:657, stuck spinlock. Aborting.
>
> FATAL: s_lock(1800d37c) at bufmgr.c:657, stuck spinlock. Aborting.

Comments ?

I don't know details about spinlock stuff.
Sorry,if my thought is off the point.

And I have another question.

It seems elog(FATAL) doesn't release allocated buffer pages.
It's OK ?
AFAIC elog(FATAL) causes proc_exit(0) and proc_exit() doesn't
call ResetBufferPool().

Thanks.

Hiroshi Inoue
Inoue@tpf.co.jp



pgsql-hackers by date:

Previous
From: "Pedro J. Lobo"
Date:
Subject: CVS mirrors?
Next
From: Dmitry Samersoff
Date:
Subject: RE: [HACKERS] CVS mirrors?