]> granicus.if.org Git - postgresql/commitdiff
Fix erroneous replay of GIN_UPDATE_META_PAGE WAL records.
authorTom Lane <tgl@sss.pgh.pa.us>
Fri, 25 Nov 2011 18:58:59 +0000 (13:58 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Fri, 25 Nov 2011 18:59:11 +0000 (13:59 -0500)
A simple thinko in ginRedoUpdateMetapage, namely failing to increment a
loop counter, led to inserting records into the last pending-list page in
the wrong order (the opposite of that intended).  So far as I can tell,
this would not upset the code that eventually flushes pending items into
the main part of the GIN index.  But it did break the code that searched
the pending list for matches, resulting in transient failure to find
matching entries during index lookups, as illustrated in bug #6307 from
Maksym Boguk.

Back-patch to 8.4 where the incorrect code was introduced.

src/backend/access/gin/ginxlog.c

index c954bcb12fc8d82bc0ecbf9dd3a09b64b95dc14f..66d881e96dd98646afde762a186adf214a15a9b6 100644 (file)
@@ -529,6 +529,8 @@ ginRedoUpdateMetapage(XLogRecPtr lsn, XLogRecord *record)
                                                        elog(ERROR, "failed to add item to index page");
 
                                                tuples = (IndexTuple) (((char *) tuples) + tupsize);
+
+                                               off++;
                                        }
 
                                        /*