Re: BUG #7840: PostgreSQL 9.3 devel select for no key share lock bug?

From: Alvaro Herrera <alvherre(at)2ndquadrant(dot)com>
To: digoal(at)126(dot)com
Cc: pgsql-bugs(at)postgresql(dot)org
Subject: Re: BUG #7840: PostgreSQL 9.3 devel select for no key share lock bug?
Date: 2013-01-31 20:04:14
Message-ID: 20130131200414.GD4883@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

digoal(at)126(dot)com wrote:

> digoal=# select * from heap_page_items(get_raw_page('test', 0));
> lp | lp_off | lp_flags | lp_len | t_xmin | t_xmax | t_field3 | t_ctid |
> t_infomask2 | t_infomask | t_hoff | t_bits | t_oid
> ----+--------+----------+--------+--------+--------+----------+--------+-------------+------------+--------+--------+-------
> 1 | 8160 | 1 | 28 | 1743 | 1744 | 0 | (0,1) |
> 1 | 448 | 24 | |
> t_infomask is 0x01c0
> in htup_detail.h it's
> #define HEAP_XMAX_EXCL_LOCK 0x0040 /* xmax is exclusive locker
> */
> #define HEAP_XMAX_LOCK_ONLY 0x0080 /* xmax, if valid, is only a
> locker */
>
>
> /* xmax is a shared locker */
> #define HEAP_XMAX_SHR_LOCK (HEAP_XMAX_EXCL_LOCK |
> HEAP_XMAX_KEYSHR_LOCK)
> #define HEAP_XMIN_COMMITTED 0x0100 /* t_xmin committed */
>
> SO, it get a HEAP_XMAX_SHR_LOCK lock. but the output of pgrowlocks is FOR
> UPDATE.

No, this is fine actually. Notice that XMAX_SHR_LOCK needs both
XMAX_EXCL_LOCK and XMAX_KEYSHR_LOCK. What 0xc0 has XMAX_EXCL_LOCK, but
not XMAX_KEYSHR_LOCK -- there's XMAX_LOCK_ONLY, which is different.

You're right that pgrowlocks is giving a bogus output here -- says For
Update, should say For No Key Update.

> And then i start another session ,i can get a key share lock. and then get
> the share lock.
> digoal=# begin;
> BEGIN
> digoal=# select * from test where id=1 for key share;
> id
> ----
> 1
> (1 row)
> -- this will fill the t_infomask's HEAP_XMAX_IS_MULTI bit. and then i can
> get a share lock .
> digoal=# select * from test where id=1 for share;
> id
> ----
> 1
> (1 row)
> but in correct rule, another session cann't get the share lock.
> It's a BUG?

Hm, yeah, this is a bug. Looking.

--
Álvaro Herrera http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services

In response to

Browse pgsql-bugs by date

  From Date Subject
Next Message Alvaro Herrera 2013-01-31 22:38:39 Re: BUG #7840: PostgreSQL 9.3 devel select for no key share lock bug?
Previous Message Tom Lane 2013-01-31 19:27:35 Re: BUG #7842: pg_dump scripts view to table