提交 a4fa85a9 编写于 作者: H Heikki Linnakangas

Move current distributed transaction ID out of the per-subxact struct.

Only a top-level transaction can have a distributed transaction ID, so
this seems more logical.
上级 c637a0d0
...@@ -148,7 +148,6 @@ typedef enum TBlockState ...@@ -148,7 +148,6 @@ typedef enum TBlockState
*/ */
typedef struct TransactionStateData typedef struct TransactionStateData
{ {
DistributedTransactionId distribXid; /* My distributed transaction id, or Invalid if none. */
TransactionId transactionId; /* my XID, or Invalid if none */ TransactionId transactionId; /* my XID, or Invalid if none */
SubTransactionId subTransactionId; /* my subxact ID */ SubTransactionId subTransactionId; /* my subxact ID */
char *name; /* savepoint name, if any */ char *name; /* savepoint name, if any */
...@@ -183,7 +182,6 @@ static TransactionState previousFastLink; ...@@ -183,7 +182,6 @@ static TransactionState previousFastLink;
* transaction at all, or when in a top-level transaction. * transaction at all, or when in a top-level transaction.
*/ */
static TransactionStateData TopTransactionStateData = { static TransactionStateData TopTransactionStateData = {
0, /* distributed transaction id */
0, /* transaction id */ 0, /* transaction id */
0, /* subtransaction id */ 0, /* subtransaction id */
NULL, /* savepoint name */ NULL, /* savepoint name */
...@@ -208,6 +206,9 @@ static TransactionStateData TopTransactionStateData = { ...@@ -208,6 +206,9 @@ static TransactionStateData TopTransactionStateData = {
static TransactionState CurrentTransactionState = &TopTransactionStateData; static TransactionState CurrentTransactionState = &TopTransactionStateData;
/* distributed transaction id of current transaction, if any. */
static DistributedTransactionId currentDistribXid;
/* /*
* The subtransaction ID and command ID assignment counters are global * The subtransaction ID and command ID assignment counters are global
* to a whole transaction, so we do not keep them in the state stack. * to a whole transaction, so we do not keep them in the state stack.
...@@ -415,7 +416,7 @@ GetAllTransactionXids( ...@@ -415,7 +416,7 @@ GetAllTransactionXids(
{ {
TransactionState s = CurrentTransactionState; TransactionState s = CurrentTransactionState;
*distribXid = s->distribXid; *distribXid = currentDistribXid;
*localXid = s->transactionId; *localXid = s->transactionId;
*subXid = s->subTransactionId; *subXid = s->subTransactionId;
} }
...@@ -2329,7 +2330,7 @@ StartTransaction(void) ...@@ -2329,7 +2330,7 @@ StartTransaction(void)
* distributed transaction to a local transaction id for the * distributed transaction to a local transaction id for the
* master database. * master database.
*/ */
createDtx(&s->distribXid); createDtx(&currentDistribXid);
if (SharedLocalSnapshotSlot != NULL) if (SharedLocalSnapshotSlot != NULL)
{ {
...@@ -2380,7 +2381,7 @@ StartTransaction(void) ...@@ -2380,7 +2381,7 @@ StartTransaction(void)
if (DistributedTransactionContext == DTX_CONTEXT_QE_TWO_PHASE_EXPLICIT_WRITER || if (DistributedTransactionContext == DTX_CONTEXT_QE_TWO_PHASE_EXPLICIT_WRITER ||
DistributedTransactionContext == DTX_CONTEXT_QE_TWO_PHASE_IMPLICIT_WRITER) DistributedTransactionContext == DTX_CONTEXT_QE_TWO_PHASE_IMPLICIT_WRITER)
{ {
s->distribXid = QEDtxContextInfo.distributedXid; currentDistribXid = QEDtxContextInfo.distributedXid;
Assert(QEDtxContextInfo.distributedTimeStamp != 0); Assert(QEDtxContextInfo.distributedTimeStamp != 0);
Assert(QEDtxContextInfo.distributedXid != InvalidDistributedTransactionId); Assert(QEDtxContextInfo.distributedXid != InvalidDistributedTransactionId);
...@@ -2426,7 +2427,7 @@ StartTransaction(void) ...@@ -2426,7 +2427,7 @@ StartTransaction(void)
* MPP: we're a QE Reader. * MPP: we're a QE Reader.
*/ */
Assert (SharedLocalSnapshotSlot != NULL); Assert (SharedLocalSnapshotSlot != NULL);
s->distribXid = QEDtxContextInfo.distributedXid; currentDistribXid = QEDtxContextInfo.distributedXid;
ereport((Debug_print_full_dtm ? LOG : DEBUG5), ereport((Debug_print_full_dtm ? LOG : DEBUG5),
(errmsg("qExec reader: distributedXid %d currcid %d gxid = %u DtxContext '%s' sharedsnapshots: %s", (errmsg("qExec reader: distributedXid %d currcid %d gxid = %u DtxContext '%s' sharedsnapshots: %s",
...@@ -2824,7 +2825,7 @@ CommitTransaction(void) ...@@ -2824,7 +2825,7 @@ CommitTransaction(void)
LocalDistribXactCache_ShowStats("CommitTransaction"); LocalDistribXactCache_ShowStats("CommitTransaction");
} }
s->distribXid = InvalidDistributedTransactionId; currentDistribXid = InvalidDistributedTransactionId;
s->transactionId = InvalidTransactionId; s->transactionId = InvalidTransactionId;
s->subTransactionId = InvalidSubTransactionId; s->subTransactionId = InvalidSubTransactionId;
s->nestingLevel = 0; s->nestingLevel = 0;
...@@ -3115,7 +3116,7 @@ PrepareTransaction(void) ...@@ -3115,7 +3116,7 @@ PrepareTransaction(void)
LocalDistribXactCache_ShowStats("PrepareTransaction"); LocalDistribXactCache_ShowStats("PrepareTransaction");
} }
s->distribXid = InvalidDistributedTransactionId; currentDistribXid = InvalidDistributedTransactionId;
s->transactionId = InvalidTransactionId; s->transactionId = InvalidTransactionId;
s->subTransactionId = InvalidSubTransactionId; s->subTransactionId = InvalidSubTransactionId;
s->nestingLevel = 0; s->nestingLevel = 0;
...@@ -3380,7 +3381,7 @@ CleanupTransaction(void) ...@@ -3380,7 +3381,7 @@ CleanupTransaction(void)
AtCleanup_Memory(); /* and transaction memory */ AtCleanup_Memory(); /* and transaction memory */
s->distribXid = InvalidDistributedTransactionId; currentDistribXid = InvalidDistributedTransactionId;
s->transactionId = InvalidTransactionId; s->transactionId = InvalidTransactionId;
s->subTransactionId = InvalidSubTransactionId; s->subTransactionId = InvalidSubTransactionId;
s->nestingLevel = 0; s->nestingLevel = 0;
...@@ -5557,7 +5558,6 @@ PushTransaction(void) ...@@ -5557,7 +5558,6 @@ PushTransaction(void)
* We can now stack a minimally valid subtransaction without fear of * We can now stack a minimally valid subtransaction without fear of
* failure. * failure.
*/ */
s->distribXid = p->distribXid;
s->transactionId = InvalidTransactionId; /* until assigned */ s->transactionId = InvalidTransactionId; /* until assigned */
s->subTransactionId = currentSubTransactionId; s->subTransactionId = currentSubTransactionId;
s->parent = p; s->parent = p;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册