aboutsummaryrefslogtreecommitdiff
path: root/src/include
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2007-04-19 20:24:28 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2007-04-19 20:24:28 +0000
commit0f93ebd3389ca5726edae3e5600df600f901bafb (patch)
treed7b215e8f14cb866dbc1d2c628f26a6ad66d00a0 /src/include
parent77be1e891d88e0c43b9b97ec00d2a7c5d7796219 (diff)
downloadpostgresql-0f93ebd3389ca5726edae3e5600df600f901bafb.tar.gz
postgresql-0f93ebd3389ca5726edae3e5600df600f901bafb.zip
Repair PANIC condition in hash indexes when a previous index extension attempt
failed (due to lock conflicts or out-of-space). We might have already extended the index's filesystem EOF before failing, causing the EOF to be beyond what the metapage says is the last used page. Hence the invariant maintained by the code needs to be "EOF is at or beyond last used page", not "EOF is exactly the last used page". Problem was created by my patch of 2006-11-19 that attempted to repair bug #2737. Since that was back-patched to 7.4, this needs to be as well. Per report and test case from Vlastimil Krejcir.
Diffstat (limited to 'src/include')
-rw-r--r--src/include/access/hash.h3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/include/access/hash.h b/src/include/access/hash.h
index 6d4668bdbe4..fe417c60bda 100644
--- a/src/include/access/hash.h
+++ b/src/include/access/hash.h
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $PostgreSQL: pgsql/src/include/access/hash.h,v 1.59 2004/12/31 22:03:21 pgsql Exp $
+ * $PostgreSQL: pgsql/src/include/access/hash.h,v 1.59.4.1 2007/04/19 20:24:28 tgl Exp $
*
* NOTES
* modeled after Margo Seltzer's hash implementation for unix.
@@ -281,6 +281,7 @@ extern void _hash_getlock(Relation rel, BlockNumber whichlock, int access);
extern bool _hash_try_getlock(Relation rel, BlockNumber whichlock, int access);
extern void _hash_droplock(Relation rel, BlockNumber whichlock, int access);
extern Buffer _hash_getbuf(Relation rel, BlockNumber blkno, int access);
+extern Buffer _hash_getnewbuf(Relation rel, BlockNumber blkno, int access);
extern void _hash_relbuf(Relation rel, Buffer buf);
extern void _hash_dropbuf(Relation rel, Buffer buf);
extern void _hash_wrtbuf(Relation rel, Buffer buf);