| From: | Eric Ridge <eebbrr(at)gmail(dot)com> |
|---|---|
| To: | pgsql-hackers(at)postgreSQL(dot)org |
| Subject: | How to determine that a TransactionId is really aborted? |
| Date: | 2017-10-22 19:23:39 |
| Message-ID: | 75FF3934-2F85-4E19-8F9C-B77B08F7DD11@gmail.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers |
When sitting inside an extension, and given an arbitrary TransactionId, how can you determine that it aborted/crashed *and* that no other active transaction thinks it is still running?
I've tried to answer this question myself (against the 9.3 sources), and it seems like it's just:
{
TransactionId oldestXmin = GetOldestXmin (false, false);
TransactionId xid = 42;
if (TransactionIdPrecedes(xid, oldestXmin) &&
!TransactionIdDidCommit(xid) &&
!TransactionIdIsInProgress(xid)) /* not even sure this is necessary? */
{
/* xid is aborted/crashed and no active transaction cares */
}
}
Can anyone confirm or deny that this is correct? I feel like it is correct, but I'm no expert.
Thanks so much for your time!
eric
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Peter Geoghegan | 2017-10-22 19:50:58 | Re: How to determine that a TransactionId is really aborted? |
| Previous Message | Tom Lane | 2017-10-22 18:20:44 | Re: Useless(?) asymmetry in parse_func.c |