Phantom Command IDs, updated patch

From: Heikki Linnakangas <heikki(at)enterprisedb(dot)com>
To: pgsql-patches(at)postgresql(dot)org
Subject: Phantom Command IDs, updated patch
Date: 2007-01-30 11:19:12
Message-ID: 45BF29B0.5020606@enterprisedb.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers pgsql-patches

Here's an updated version of the phantom command ids patch.

I found one more subtle safety issue. The array and hash table for
phantom command ids is dynamically grown when HeapTupleHeaderSetCmax is
called. Unfortunately, since HeapTupleHeaderSetCmax is used inside a
critical sections, running out of memory while trying to grow them would
cause a PANIC. That's why I moved the SetXmax/SetCmax calls outside
critical sections in heapam.c. I believe that's safe; if a backend
aborts after setting the xmax/cmax, no-one is going to care about the
xid of an aborted transaction in there.

Per Tom's suggestion, I replaced the function cache code in fmgr.c and
similar code in plperl.c, pltcl.c, plpgsql/pl_comp.c and plpython.c to
use xmin+tid instead of xmin+cmin for the up-to-dateness check. I don't
have any tcl, perl or python test cases handy to test them, but the
change is small and essentially same for all of the above. Is there any
regression tests for the PL languages?

I made cmin and cmax system attributes aliases for the same physical
commandid field. I support the idea of a complete overhaul of those
system attributes, but let's do that in a separate patch.

To measure the overhead, I ran a plpgsql test case that updates a single
row 10000 times in a loop, generating a new phantom command id in each
iteration. The test took ~5% longer with the patch, so I think that's
acceptable. I couldn't measure a difference with pgbench (as expected).

I think the patch is ready. Please remove the PHANTOMCID_DEBUG define
and ifdef blocks before applying.

--
Heikki Linnakangas
EnterpriseDB http://www.enterprisedb.com

Attachment Content-Type Size
phantomcid-4.patch text/x-patch 38.5 KB

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Gregory Stark 2007-01-30 11:19:13 Re: Bug? CREATE TABLE AS (... UNION ...)
Previous Message Gregory Stark 2007-01-30 11:00:16 Bug? CREATE TABLE AS (... UNION ...)

Browse pgsql-patches by date

  From Date Subject
Next Message Andrew Dunstan 2007-01-30 12:19:33 Re: Phantom Command IDs, updated patch
Previous Message Pavan Deolasee 2007-01-30 11:06:57 Re: Lock compatibility matrix