From da6b42a3e2eaf316945b7c5e39420d7cf899888c Mon Sep 17 00:00:00 2001 From: Marco Slot Date: Fri, 22 Sep 2017 20:19:51 +0200 Subject: [PATCH] Use unique constraint index for transaction record deletion --- .../distributed/transaction/transaction_recovery.c | 8 +++++--- src/backend/distributed/utils/metadata_cache.c | 12 ++++++++++++ src/include/distributed/metadata_cache.h | 1 + 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/backend/distributed/transaction/transaction_recovery.c b/src/backend/distributed/transaction/transaction_recovery.c index 93b89acb6..f3eacf848 100644 --- a/src/backend/distributed/transaction/transaction_recovery.c +++ b/src/backend/distributed/transaction/transaction_recovery.c @@ -478,8 +478,8 @@ DeleteTransactionRecord(int32 groupId, char *transactionName) { Relation pgDistTransaction = NULL; SysScanDesc scanDescriptor = NULL; - ScanKeyData scanKey[1]; - int scanKeyCount = 1; + ScanKeyData scanKey[2]; + int scanKeyCount = 2; bool indexOK = true; HeapTuple heapTuple = NULL; bool heapTupleFound = false; @@ -488,9 +488,11 @@ DeleteTransactionRecord(int32 groupId, char *transactionName) ScanKeyInit(&scanKey[0], Anum_pg_dist_transaction_groupid, BTEqualStrategyNumber, F_INT4EQ, Int32GetDatum(groupId)); + ScanKeyInit(&scanKey[1], Anum_pg_dist_transaction_gid, + BTEqualStrategyNumber, F_TEXTEQ, CStringGetTextDatum(transactionName)); scanDescriptor = systable_beginscan(pgDistTransaction, - DistTransactionGroupIndexId(), indexOK, + DistTransactionRecordIndexId(), indexOK, NULL, scanKeyCount, scanKey); heapTuple = systable_getnext(scanDescriptor); diff --git a/src/backend/distributed/utils/metadata_cache.c b/src/backend/distributed/utils/metadata_cache.c index c0ef48860..e11025c02 100644 --- a/src/backend/distributed/utils/metadata_cache.c +++ b/src/backend/distributed/utils/metadata_cache.c @@ -113,6 +113,7 @@ typedef struct MetadataCacheData Oid distPlacementGroupidIndexId; Oid distTransactionRelationId; Oid distTransactionGroupIndexId; + Oid distTransactionRecordIndexId; Oid extraDataContainerFuncId; Oid workerHashFunctionId; Oid extensionOwner; @@ -1796,6 +1797,17 @@ DistTransactionGroupIndexId(void) } +/* return oid of pg_dist_transaction_unique_constraint */ +Oid +DistTransactionRecordIndexId(void) +{ + CachedRelationLookup("pg_dist_transaction_unique_constraint", + &MetadataCache.distTransactionRecordIndexId); + + return MetadataCache.distTransactionRecordIndexId; +} + + /* return oid of pg_dist_placement_groupid_index */ Oid DistPlacementGroupidIndexId(void) diff --git a/src/include/distributed/metadata_cache.h b/src/include/distributed/metadata_cache.h index 464214a56..3caa73edb 100644 --- a/src/include/distributed/metadata_cache.h +++ b/src/include/distributed/metadata_cache.h @@ -117,6 +117,7 @@ extern Oid DistPlacementShardidIndexId(void); extern Oid DistPlacementPlacementidIndexId(void); extern Oid DistTransactionRelationId(void); extern Oid DistTransactionGroupIndexId(void); +extern Oid DistTransactionRecordIndexId(void); extern Oid DistPlacementGroupidIndexId(void); /* function oids */