Choose the smallest colocation id among all matches (#4559)

Currently we choose an arbitrary colocation id from all the matches for
a colocation id. This could mean that 2 distributed tables, which have
the same scheme could go into different colocation groups. This fix
makes sure that the same match will go to the same colocation group.
pull/4529/head^2
SaitTalhaNisanci 2021-01-22 13:28:43 +03:00 committed by GitHub
parent 790c22c0ce
commit 3d69ab5576
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 12 additions and 2 deletions

View File

@ -541,12 +541,22 @@ ColocationId(int shardCount, int replicationFactor, Oid distributionColumnType,
indexOK, NULL, scanKeyCount, scanKey);
HeapTuple colocationTuple = systable_getnext(scanDescriptor);
if (HeapTupleIsValid(colocationTuple))
while (HeapTupleIsValid(colocationTuple))
{
Form_pg_dist_colocation colocationForm =
(Form_pg_dist_colocation) GETSTRUCT(colocationTuple);
colocationId = colocationForm->colocationid;
if (colocationId == INVALID_COLOCATION_ID || colocationId >
colocationForm->colocationid)
{
/*
* We assign the smallest colocation id among all the matches so that we
* assign the same colocation group for similar distributed tables
*/
colocationId = colocationForm->colocationid;
}
colocationTuple = systable_getnext(scanDescriptor);
}
systable_endscan(scanDescriptor);