On Tue, 2009-09-22 at 12:53 +0300, Heikki Linnakangas wrote:
> It looks like the standby tries to remove XID 4323 from the
> known-assigned hash table, but it's not there because it was removed
> and set in pg_subtrans by an XLOG_XACT_ASSIGNMENT record earlier. I
> guess we should just not throw an error in that case, but is there a
> way we could catch that narrow case and still keep the check in
> KnownAssignedXidsRemove()? It seems like the check might help catch
> other bugs, so I'd rather keep it if possible.
Fix attached.
--
Simon Riggs www.2ndQuadrant.com
diff --git a/src/backend/storage/ipc/procarray.c b/src/backend/storage/ipc/procarray.c
index f6f50be..031a6a2 100644
--- a/src/backend/storage/ipc/procarray.c
+++ b/src/backend/storage/ipc/procarray.c
@@ -2561,8 +2561,15 @@ KnownAssignedXidsRemove(TransactionId xid, bool report_error)
if (!found && report_error)
{
- KnownAssignedXidsDisplay(LOG);
- elog(ERROR, "cannot remove KnownAssignedXid %u", xid);
+ /*
+ * Check to see whether we have updated subtrans with this xid.
+ * If we did, its OK that it is no longer present in KnownAssignedXids
+ */
+ if (!TransactionIdIsValid(SubTransGetParent(xid)))
+ {
+ KnownAssignedXidsDisplay(LOG);
+ elog(ERROR, "cannot remove KnownAssignedXid %u", xid);
+ }
}
}
--
Sent via pgsql-hackers mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers