Merge pull request #1667 from citusdata/recovery_index_fix

Use unique constraint index for transaction record deletion
pull/1676/head
Marco Slot 2017-09-28 03:20:18 -07:00 committed by GitHub
commit 8483d6213b
3 changed files with 18 additions and 3 deletions

View File

@ -478,8 +478,8 @@ DeleteTransactionRecord(int32 groupId, char *transactionName)
{ {
Relation pgDistTransaction = NULL; Relation pgDistTransaction = NULL;
SysScanDesc scanDescriptor = NULL; SysScanDesc scanDescriptor = NULL;
ScanKeyData scanKey[1]; ScanKeyData scanKey[2];
int scanKeyCount = 1; int scanKeyCount = 2;
bool indexOK = true; bool indexOK = true;
HeapTuple heapTuple = NULL; HeapTuple heapTuple = NULL;
bool heapTupleFound = false; bool heapTupleFound = false;
@ -488,9 +488,11 @@ DeleteTransactionRecord(int32 groupId, char *transactionName)
ScanKeyInit(&scanKey[0], Anum_pg_dist_transaction_groupid, ScanKeyInit(&scanKey[0], Anum_pg_dist_transaction_groupid,
BTEqualStrategyNumber, F_INT4EQ, Int32GetDatum(groupId)); BTEqualStrategyNumber, F_INT4EQ, Int32GetDatum(groupId));
ScanKeyInit(&scanKey[1], Anum_pg_dist_transaction_gid,
BTEqualStrategyNumber, F_TEXTEQ, CStringGetTextDatum(transactionName));
scanDescriptor = systable_beginscan(pgDistTransaction, scanDescriptor = systable_beginscan(pgDistTransaction,
DistTransactionGroupIndexId(), indexOK, DistTransactionRecordIndexId(), indexOK,
NULL, scanKeyCount, scanKey); NULL, scanKeyCount, scanKey);
heapTuple = systable_getnext(scanDescriptor); heapTuple = systable_getnext(scanDescriptor);

View File

@ -113,6 +113,7 @@ typedef struct MetadataCacheData
Oid distPlacementGroupidIndexId; Oid distPlacementGroupidIndexId;
Oid distTransactionRelationId; Oid distTransactionRelationId;
Oid distTransactionGroupIndexId; Oid distTransactionGroupIndexId;
Oid distTransactionRecordIndexId;
Oid extraDataContainerFuncId; Oid extraDataContainerFuncId;
Oid workerHashFunctionId; Oid workerHashFunctionId;
Oid extensionOwner; 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 */ /* return oid of pg_dist_placement_groupid_index */
Oid Oid
DistPlacementGroupidIndexId(void) DistPlacementGroupidIndexId(void)

View File

@ -117,6 +117,7 @@ extern Oid DistPlacementShardidIndexId(void);
extern Oid DistPlacementPlacementidIndexId(void); extern Oid DistPlacementPlacementidIndexId(void);
extern Oid DistTransactionRelationId(void); extern Oid DistTransactionRelationId(void);
extern Oid DistTransactionGroupIndexId(void); extern Oid DistTransactionGroupIndexId(void);
extern Oid DistTransactionRecordIndexId(void);
extern Oid DistPlacementGroupidIndexId(void); extern Oid DistPlacementGroupidIndexId(void);
/* function oids */ /* function oids */