mirror of https://github.com/citusdata/citus.git
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
parent
790c22c0ce
commit
3d69ab5576
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue