mirror of https://github.com/citusdata/citus.git
implement splits when a target colocation has been set
parent
e0d3fd3d72
commit
7a818b78fb
|
@ -1406,6 +1406,7 @@ InsertMetadataForCitusLocalTable(Oid citusLocalTableId, uint64 shardId,
|
||||||
char replicationModel = REPLICATION_MODEL_STREAMING;
|
char replicationModel = REPLICATION_MODEL_STREAMING;
|
||||||
|
|
||||||
uint32 colocationId = INVALID_COLOCATION_ID;
|
uint32 colocationId = INVALID_COLOCATION_ID;
|
||||||
|
int64 shardgroupId = INVALID_SHARDGROUP_ID;
|
||||||
Var *distributionColumn = NULL;
|
Var *distributionColumn = NULL;
|
||||||
InsertIntoPgDistPartition(citusLocalTableId, distributionMethod,
|
InsertIntoPgDistPartition(citusLocalTableId, distributionMethod,
|
||||||
distributionColumn, colocationId,
|
distributionColumn, colocationId,
|
||||||
|
@ -1417,7 +1418,7 @@ InsertMetadataForCitusLocalTable(Oid citusLocalTableId, uint64 shardId,
|
||||||
text *shardMinValue = NULL;
|
text *shardMinValue = NULL;
|
||||||
text *shardMaxValue = NULL;
|
text *shardMaxValue = NULL;
|
||||||
InsertShardRow(citusLocalTableId, shardId, shardStorageType,
|
InsertShardRow(citusLocalTableId, shardId, shardStorageType,
|
||||||
shardMinValue, shardMaxValue, NULL);
|
shardMinValue, shardMaxValue, &shardgroupId);
|
||||||
|
|
||||||
List *nodeList = list_make1(CoordinatorNodeIfAddedAsWorkerOrError());
|
List *nodeList = list_make1(CoordinatorNodeIfAddedAsWorkerOrError());
|
||||||
|
|
||||||
|
|
|
@ -2885,6 +2885,14 @@ DistShardgroupPkeyId(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Oid
|
||||||
|
DistShardgroupColocaionidIndexId(void)
|
||||||
|
{
|
||||||
|
/* TODO add index on colocation id */
|
||||||
|
return InvalidOid;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* return oid of pg_dist_placement_shardid_index */
|
/* return oid of pg_dist_placement_shardid_index */
|
||||||
Oid
|
Oid
|
||||||
DistPlacementShardidIndexId(void)
|
DistPlacementShardidIndexId(void)
|
||||||
|
|
|
@ -1409,10 +1409,10 @@ ShardgroupInsertCommand(List *shardgroups)
|
||||||
appendStringInfo(&command, "(%ld, %d, %s, %s)",
|
appendStringInfo(&command, "(%ld, %d, %s, %s)",
|
||||||
shardgroup->shardgroupId,
|
shardgroup->shardgroupId,
|
||||||
shardgroup->colocationId,
|
shardgroup->colocationId,
|
||||||
TextToSQLLiteral(IntegerToText(
|
shardgroup->minShardValue == NULL ? "NULL" : quote_literal_cstr(
|
||||||
DatumGetInt32(shardgroup->minShardValue))),
|
shardgroup->minShardValue),
|
||||||
TextToSQLLiteral(IntegerToText(
|
shardgroup->maxShardValue == NULL ? "NULL" : quote_literal_cstr(
|
||||||
DatumGetInt32(shardgroup->maxShardValue))));
|
shardgroup->maxShardValue));
|
||||||
}
|
}
|
||||||
appendStringInfo(&command, ") ");
|
appendStringInfo(&command, ") ");
|
||||||
|
|
||||||
|
|
|
@ -494,14 +494,21 @@ CheckHashPartitionedTable(Oid distributedTableId)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Helper function to convert an integer value to a text type */
|
char *
|
||||||
text *
|
IntegerToCStr(int32 value)
|
||||||
IntegerToText(int32 value)
|
|
||||||
{
|
{
|
||||||
StringInfo valueString = makeStringInfo();
|
StringInfo valueString = makeStringInfo();
|
||||||
appendStringInfo(valueString, "%d", value);
|
appendStringInfo(valueString, "%d", value);
|
||||||
|
|
||||||
text *valueText = cstring_to_text(valueString->data);
|
return valueString->data;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Helper function to convert an integer value to a text type */
|
||||||
|
text *
|
||||||
|
IntegerToText(int32 value)
|
||||||
|
{
|
||||||
|
text *valueText = cstring_to_text(IntegerToCStr(value));
|
||||||
|
|
||||||
return valueText;
|
return valueText;
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,6 +44,7 @@
|
||||||
#include "distributed/shardsplit_logical_replication.h"
|
#include "distributed/shardsplit_logical_replication.h"
|
||||||
#include "distributed/deparse_shard_query.h"
|
#include "distributed/deparse_shard_query.h"
|
||||||
#include "distributed/shard_rebalancer.h"
|
#include "distributed/shard_rebalancer.h"
|
||||||
|
#include "distributed/shardgroup.h"
|
||||||
#include "postmaster/postmaster.h"
|
#include "postmaster/postmaster.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -129,7 +130,8 @@ static void UpdateDistributionColumnsForShardGroup(List *colocatedShardList,
|
||||||
DistributionColumnMap *distCols,
|
DistributionColumnMap *distCols,
|
||||||
char distributionMethod,
|
char distributionMethod,
|
||||||
int shardCount,
|
int shardCount,
|
||||||
uint32 colocationId);
|
uint32 colocationId,
|
||||||
|
List **shardgroupSplits);
|
||||||
static void InsertSplitChildrenShardgroupMetadata(List *newShardgroups);
|
static void InsertSplitChildrenShardgroupMetadata(List *newShardgroups);
|
||||||
static void InsertSplitChildrenShardMetadata(List *shardGroupSplitIntervalListList,
|
static void InsertSplitChildrenShardMetadata(List *shardGroupSplitIntervalListList,
|
||||||
List *workersForPlacementList);
|
List *workersForPlacementList);
|
||||||
|
@ -1066,11 +1068,11 @@ CreateNewShardgroups(uint32 colocationId, ShardInterval *sampleInterval,
|
||||||
Shardgroup *shardgroup = palloc0(sizeof(Shardgroup));
|
Shardgroup *shardgroup = palloc0(sizeof(Shardgroup));
|
||||||
shardgroup->shardgroupId = GetNextShardgroupIdForSplitChild();
|
shardgroup->shardgroupId = GetNextShardgroupIdForSplitChild();
|
||||||
shardgroup->colocationId = colocationId;
|
shardgroup->colocationId = colocationId;
|
||||||
shardgroup->minShardValue = Int32GetDatum(currentSplitChildMinValue);
|
shardgroup->minShardValue = IntegerToCStr(currentSplitChildMinValue);
|
||||||
shardgroup->maxShardValue = splitPoint;
|
shardgroup->maxShardValue = IntegerToCStr(DatumGetInt32(splitPoint));
|
||||||
|
|
||||||
/* increment for next shardgroup */
|
/* increment for next shardgroup */
|
||||||
currentSplitChildMinValue = Int32GetDatum(DatumGetInt32(splitPoint) + 1);
|
currentSplitChildMinValue = DatumGetInt32(splitPoint) + 1;
|
||||||
newShardgroups = lappend(newShardgroups, shardgroup);
|
newShardgroups = lappend(newShardgroups, shardgroup);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1083,8 +1085,8 @@ CreateNewShardgroups(uint32 colocationId, ShardInterval *sampleInterval,
|
||||||
Shardgroup *shardgroup = palloc0(sizeof(Shardgroup));
|
Shardgroup *shardgroup = palloc0(sizeof(Shardgroup));
|
||||||
shardgroup->shardgroupId = GetNextShardgroupIdForSplitChild();
|
shardgroup->shardgroupId = GetNextShardgroupIdForSplitChild();
|
||||||
shardgroup->colocationId = colocationId;
|
shardgroup->colocationId = colocationId;
|
||||||
shardgroup->minShardValue = Int32GetDatum(currentSplitChildMinValue);
|
shardgroup->minShardValue = IntegerToCStr(currentSplitChildMinValue);
|
||||||
shardgroup->maxShardValue = splitParentMaxValue;
|
shardgroup->maxShardValue = IntegerToCStr(DatumGetInt32(splitParentMaxValue));
|
||||||
newShardgroups = lappend(newShardgroups, shardgroup);
|
newShardgroups = lappend(newShardgroups, shardgroup);
|
||||||
|
|
||||||
return newShardgroups;
|
return newShardgroups;
|
||||||
|
@ -1135,9 +1137,12 @@ CreateShardIntervalsForNewShardgroups(ShardInterval *sourceShard,
|
||||||
splitChildShardInterval->shardId = GetNextShardIdForSplitChild();
|
splitChildShardInterval->shardId = GetNextShardIdForSplitChild();
|
||||||
splitChildShardInterval->shardGroupId = shardgroup->shardgroupId;
|
splitChildShardInterval->shardGroupId = shardgroup->shardgroupId;
|
||||||
splitChildShardInterval->minValueExists = true;
|
splitChildShardInterval->minValueExists = true;
|
||||||
splitChildShardInterval->minValue = shardgroup->minShardValue;
|
splitChildShardInterval->minValue =
|
||||||
|
Int32GetDatum(pg_strtoint32(shardgroup->minShardValue));
|
||||||
splitChildShardInterval->maxValueExists = true;
|
splitChildShardInterval->maxValueExists = true;
|
||||||
splitChildShardInterval->maxValue = shardgroup->maxShardValue;
|
splitChildShardInterval->maxValue =
|
||||||
|
Int32GetDatum(pg_strtoint32(shardgroup->maxShardValue));
|
||||||
|
|
||||||
|
|
||||||
shardSplitChildrenIntervalList = lappend(shardSplitChildrenIntervalList,
|
shardSplitChildrenIntervalList = lappend(shardSplitChildrenIntervalList,
|
||||||
splitChildShardInterval);
|
splitChildShardInterval);
|
||||||
|
@ -1165,8 +1170,25 @@ UpdateDistributionColumnsForShardGroup(List *colocatedShardList,
|
||||||
DistributionColumnMap *distributionColumnMap,
|
DistributionColumnMap *distributionColumnMap,
|
||||||
char distributionMethod,
|
char distributionMethod,
|
||||||
int shardCount,
|
int shardCount,
|
||||||
uint32 colocationId)
|
uint32 colocationId,
|
||||||
|
List **shardgroupSplits)
|
||||||
{
|
{
|
||||||
|
if (colocationId != INVALID_COLOCATION_ID)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* We know we are colocating the shards with already existing shards in their
|
||||||
|
* respective shardgroups. To prevent the new groups from being inserted we forget
|
||||||
|
* them here.
|
||||||
|
*/
|
||||||
|
|
||||||
|
*shardgroupSplits = NIL;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* TODO make sure we have either already used the existing shardgroup id's or
|
||||||
|
* update the newly created shards to have to correct shardgroup id's
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
ShardInterval *shardInterval = NULL;
|
ShardInterval *shardInterval = NULL;
|
||||||
foreach_ptr(shardInterval, colocatedShardList)
|
foreach_ptr(shardInterval, colocatedShardList)
|
||||||
{
|
{
|
||||||
|
@ -1187,6 +1209,13 @@ UpdateDistributionColumnsForShardGroup(List *colocatedShardList,
|
||||||
ShardReplicationFactor,
|
ShardReplicationFactor,
|
||||||
distributionColumn->vartype,
|
distributionColumn->vartype,
|
||||||
distributionColumn->varcollid);
|
distributionColumn->varcollid);
|
||||||
|
|
||||||
|
/* Update the shardgroup splits with the newly assigned colocation id */
|
||||||
|
Shardgroup *shardgroup = NULL;
|
||||||
|
foreach_ptr(shardgroup, *shardgroupSplits)
|
||||||
|
{
|
||||||
|
shardgroup->colocationId = colocationId;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
UpdateDistributionColumnGlobally(relationId, distributionMethod,
|
UpdateDistributionColumnGlobally(relationId, distributionMethod,
|
||||||
|
@ -1198,14 +1227,19 @@ UpdateDistributionColumnsForShardGroup(List *colocatedShardList,
|
||||||
static void
|
static void
|
||||||
InsertSplitChildrenShardgroupMetadata(List *newShardgroups)
|
InsertSplitChildrenShardgroupMetadata(List *newShardgroups)
|
||||||
{
|
{
|
||||||
|
if (list_length(newShardgroups) <= 0)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
Shardgroup *shardgroup = NULL;
|
Shardgroup *shardgroup = NULL;
|
||||||
foreach_ptr(shardgroup, newShardgroups)
|
foreach_ptr(shardgroup, newShardgroups)
|
||||||
{
|
{
|
||||||
InsertShardGroupRow(
|
InsertShardGroupRow(
|
||||||
shardgroup->shardgroupId,
|
shardgroup->shardgroupId,
|
||||||
shardgroup->colocationId,
|
shardgroup->colocationId,
|
||||||
IntegerToText(DatumGetInt32(shardgroup->minShardValue)),
|
cstring_to_text(shardgroup->minShardValue),
|
||||||
IntegerToText(DatumGetInt32(shardgroup->maxShardValue)));
|
cstring_to_text(shardgroup->maxShardValue));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (/* TODO check if shardgroup needs to propagate */ true)
|
if (/* TODO check if shardgroup needs to propagate */ true)
|
||||||
|
@ -1479,10 +1513,23 @@ NonBlockingShardSplit(SplitOperation splitOperation,
|
||||||
char *superUser = CitusExtensionOwnerName();
|
char *superUser = CitusExtensionOwnerName();
|
||||||
char *databaseName = get_database_name(MyDatabaseId);
|
char *databaseName = get_database_name(MyDatabaseId);
|
||||||
|
|
||||||
List *shardgroupSplits = CreateNewShardgroups(
|
List *shardgroupSplits = NIL;
|
||||||
|
if (targetColocationId == INVALID_COLOCATION_ID)
|
||||||
|
{
|
||||||
|
shardgroupSplits = CreateNewShardgroups(
|
||||||
colocationId,
|
colocationId,
|
||||||
(ShardInterval *) linitial(sourceColocatedShardIntervalList),
|
(ShardInterval *) linitial(sourceColocatedShardIntervalList),
|
||||||
shardSplitPointsList);
|
shardSplitPointsList);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* We are distributing a new table onto an existing colocation id, load
|
||||||
|
* shardgroupSplits from there.
|
||||||
|
*/
|
||||||
|
|
||||||
|
shardgroupSplits = ShardgroupForColocationId(targetColocationId);
|
||||||
|
}
|
||||||
|
|
||||||
/* First create shard interval metadata for split children */
|
/* First create shard interval metadata for split children */
|
||||||
List *shardGroupSplitIntervalListList = CreateSplitIntervalsForShardGroup(
|
List *shardGroupSplitIntervalListList = CreateSplitIntervalsForShardGroup(
|
||||||
|
@ -1685,7 +1732,9 @@ NonBlockingShardSplit(SplitOperation splitOperation,
|
||||||
distributionColumnOverrides,
|
distributionColumnOverrides,
|
||||||
distributionMethod,
|
distributionMethod,
|
||||||
shardCount,
|
shardCount,
|
||||||
targetColocationId);
|
targetColocationId,
|
||||||
|
&shardgroupSplits);
|
||||||
|
}
|
||||||
|
|
||||||
/* 12) Insert new shardgroup, shard and placement metadata */
|
/* 12) Insert new shardgroup, shard and placement metadata */
|
||||||
InsertSplitChildrenShardgroupMetadata(shardgroupSplits);
|
InsertSplitChildrenShardgroupMetadata(shardgroupSplits);
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
-- citus--11.3-1--11.2-1
|
-- citus--11.3-1--11.2-1
|
||||||
-- this is an empty downgrade path since citus--11.2-1--11.3-1.sql is empty for now
|
-- this is an empty downgrade path since citus--11.2-1--11.3-1.sql is empty for now
|
||||||
DROP TABLE pg_catalog.pg_dist_shardgroup;
|
DROP TABLE pg_catalog.pg_dist_shardgroup;
|
||||||
DROP SEQUENCE citus.pg_dist_shardgroupid_seq;
|
DROP SEQUENCE pg_catalog.pg_dist_shardgroupid_seq;
|
||||||
|
|
||||||
ALTER TABLE pg_catalog.pg_dist_shard DROP COLUMN shardgroupid;
|
ALTER TABLE pg_catalog.pg_dist_shard DROP COLUMN shardgroupid;
|
||||||
|
|
||||||
|
@ -9,4 +9,4 @@ DROP FUNCTION pg_catalog.citus_internal_add_shard_metadata(regclass, bigint, "ch
|
||||||
#include "../udfs/citus_internal_add_shard_metadata/10.2-1.sql"
|
#include "../udfs/citus_internal_add_shard_metadata/10.2-1.sql"
|
||||||
|
|
||||||
DROP FUNCTION pg_catalog.citus_internal_add_shardgroup_metadata(bigint, integer, text, text);
|
DROP FUNCTION pg_catalog.citus_internal_add_shardgroup_metadata(bigint, integer, text, text);
|
||||||
DROP FUNCTION FUNCTION pg_catalog.citus_internal_delete_shardgroup_metadata(bigint, int);
|
DROP FUNCTION pg_catalog.citus_internal_delete_shardgroup_metadata(bigint, int);
|
||||||
|
|
|
@ -0,0 +1,68 @@
|
||||||
|
/*-------------------------------------------------------------------------
|
||||||
|
*
|
||||||
|
* shardgroup.c
|
||||||
|
*
|
||||||
|
* This file contains functions to perform useful operations on shardgroups.
|
||||||
|
*
|
||||||
|
* Copyright (c) Citus Data, Inc.
|
||||||
|
*
|
||||||
|
*-------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "postgres.h"
|
||||||
|
|
||||||
|
#include "access/genam.h"
|
||||||
|
#include "utils/fmgroids.h"
|
||||||
|
#include "access/skey.h"
|
||||||
|
#include "utils/relcache.h"
|
||||||
|
#include "storage/lockdefs.h"
|
||||||
|
#include "utils/builtins.h"
|
||||||
|
|
||||||
|
#include "distributed/listutils.h"
|
||||||
|
#include "distributed/shardgroup.h"
|
||||||
|
#include "distributed/pg_dist_shardgroup.h"
|
||||||
|
#include "distributed/metadata_cache.h"
|
||||||
|
|
||||||
|
List *
|
||||||
|
ShardgroupForColocationId(uint32 colocationId)
|
||||||
|
{
|
||||||
|
ScanKeyData scanKey[1] = { 0 };
|
||||||
|
Form_pg_dist_shardgroup shardgroupForm = NULL;
|
||||||
|
Relation pgDistShardgroup = table_open(DistShardgroupRelationId(), AccessShareLock);
|
||||||
|
TupleDesc tupleDescriptor = RelationGetDescr(pgDistShardgroup);
|
||||||
|
|
||||||
|
ScanKeyInit(&scanKey[0], Anum_pg_dist_shardgroup_colocationid,
|
||||||
|
BTEqualStrategyNumber, F_INT4EQ, UInt32GetDatum(colocationId));
|
||||||
|
|
||||||
|
SysScanDesc scanDescriptor =
|
||||||
|
systable_beginscan(pgDistShardgroup, DistShardgroupColocaionidIndexId(), true,
|
||||||
|
NULL, lengthof(scanKey), scanKey);
|
||||||
|
|
||||||
|
HeapTuple heapTuple = NULL;
|
||||||
|
List *shardgroups = NIL;
|
||||||
|
while (HeapTupleIsValid(heapTuple = systable_getnext(scanDescriptor)))
|
||||||
|
{
|
||||||
|
Datum datumArray[Natts_pg_dist_shardgroup] = { 0 };
|
||||||
|
bool isNullArray[Natts_pg_dist_shardgroup] = { 0 };
|
||||||
|
heap_deform_tuple(heapTuple, tupleDescriptor, datumArray, isNullArray);
|
||||||
|
shardgroupForm = (Form_pg_dist_shardgroup) GETSTRUCT(heapTuple);
|
||||||
|
|
||||||
|
Shardgroup *shardgroup = palloc0(sizeof(Shardgroup));
|
||||||
|
shardgroup->shardgroupId = shardgroupForm->shardgroupid;
|
||||||
|
shardgroup->colocationId = shardgroupForm->colocationid;
|
||||||
|
|
||||||
|
/* load shard min/max values */
|
||||||
|
Datum minValueTextDatum = datumArray[Anum_pg_dist_shardgroup_shardminvalue - 1];
|
||||||
|
Datum maxValueTextDatum = datumArray[Anum_pg_dist_shardgroup_shardmaxvalue - 1];
|
||||||
|
shardgroup->minShardValue = TextDatumGetCString(minValueTextDatum);
|
||||||
|
shardgroup->maxShardValue = TextDatumGetCString(maxValueTextDatum);
|
||||||
|
|
||||||
|
|
||||||
|
shardgroups = lappend(shardgroups, shardgroup);
|
||||||
|
}
|
||||||
|
|
||||||
|
systable_endscan(scanDescriptor);
|
||||||
|
table_close(pgDistShardgroup, NoLock);
|
||||||
|
|
||||||
|
return shardgroups;
|
||||||
|
}
|
|
@ -274,6 +274,7 @@ extern Oid ForeignConstraintGetReferencedTableId(const char *queryString);
|
||||||
extern void CheckHashPartitionedTable(Oid distributedTableId);
|
extern void CheckHashPartitionedTable(Oid distributedTableId);
|
||||||
extern void CheckTableSchemaNameForDrop(Oid relationId, char **schemaName,
|
extern void CheckTableSchemaNameForDrop(Oid relationId, char **schemaName,
|
||||||
char **tableName);
|
char **tableName);
|
||||||
|
extern char * IntegerToCStr(int32 value);
|
||||||
extern text * IntegerToText(int32 value);
|
extern text * IntegerToText(int32 value);
|
||||||
|
|
||||||
/* Function declarations for generating metadata for shard and placement creation */
|
/* Function declarations for generating metadata for shard and placement creation */
|
||||||
|
|
|
@ -253,6 +253,7 @@ extern Oid DistBackgroundTaskDependDependsOnIndexId(void);
|
||||||
extern Oid DistShardLogicalRelidIndexId(void);
|
extern Oid DistShardLogicalRelidIndexId(void);
|
||||||
extern Oid DistShardShardidIndexId(void);
|
extern Oid DistShardShardidIndexId(void);
|
||||||
extern Oid DistShardgroupPkeyId(void);
|
extern Oid DistShardgroupPkeyId(void);
|
||||||
|
extern Oid DistShardgroupColocaionidIndexId(void);
|
||||||
extern Oid DistPlacementShardidIndexId(void);
|
extern Oid DistPlacementShardidIndexId(void);
|
||||||
extern Oid DistPlacementPlacementidIndexId(void);
|
extern Oid DistPlacementPlacementidIndexId(void);
|
||||||
extern Oid DistColocationIndexId(void);
|
extern Oid DistColocationIndexId(void);
|
||||||
|
|
|
@ -75,8 +75,8 @@ typedef struct Shardgroup
|
||||||
{
|
{
|
||||||
int64 shardgroupId;
|
int64 shardgroupId;
|
||||||
uint32 colocationId;
|
uint32 colocationId;
|
||||||
Datum minShardValue; /* a shard's typed min value datum */
|
const char *minShardValue;
|
||||||
Datum maxShardValue; /* a shard's typed max value datum */
|
const char *maxShardValue;
|
||||||
} Shardgroup;
|
} Shardgroup;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
/* Shard name and identifier related defines */
|
/* Shard name and identifier related defines */
|
||||||
#define SHARD_NAME_SEPARATOR '_'
|
#define SHARD_NAME_SEPARATOR '_'
|
||||||
#define INVALID_SHARD_ID 0
|
#define INVALID_SHARD_ID 0
|
||||||
|
#define INVALID_SHARDGROUP_ID 0
|
||||||
#define INVALID_PLACEMENT_ID 0
|
#define INVALID_PLACEMENT_ID 0
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
|
||||||
|
#ifndef CITUS_SHARDGROUP_H
|
||||||
|
#define CITUS_SHARDGROUP_H
|
||||||
|
|
||||||
|
#include "postgres.h"
|
||||||
|
|
||||||
|
#include "distributed/listutils.h"
|
||||||
|
|
||||||
|
extern List * ShardgroupForColocationId(uint32 colocationId);
|
||||||
|
|
||||||
|
#endif /*CITUS_SHARDGROUP_H */
|
Loading…
Reference in New Issue