citus/src/include/distributed/shard_split.h

55 lines
1.4 KiB
C

/*-------------------------------------------------------------------------
*
* shard_split.h
*
* API for shard splits.
*
* Copyright (c) Citus Data, Inc.
*
*-------------------------------------------------------------------------
*/
#ifndef SHARDSPLIT_H_
#define SHARDSPLIT_H_
#include "distributed/utils/distribution_column_map.h"
/* Split Modes supported by Shard Split API */
typedef enum SplitMode
{
BLOCKING_SPLIT = 0,
NON_BLOCKING_SPLIT = 1,
AUTO_SPLIT = 2
} SplitMode;
/*
* User Scenario calling Split Shard API.
* The 'SplitOperation' type is used to customize info/error messages based on user scenario.
*/
typedef enum SplitOperation
{
SHARD_SPLIT_API = 0,
ISOLATE_TENANT_TO_NEW_SHARD,
CREATE_DISTRIBUTED_TABLE
} SplitOperation;
/*
* SplitShard API to split a given shard (or shard group) using split mode and
* specified split points to a set of destination nodes.
*/
extern void SplitShard(SplitMode splitMode,
SplitOperation splitOperation,
uint64 shardIdToSplit,
List *shardSplitPointsList,
List *nodeIdsForPlacementList,
DistributionColumnMap *distributionColumnOverrides,
List *colocatedShardIntervalList,
uint32 targetColocationId);
extern SplitMode LookupSplitMode(Oid shardTransferModeOid);
extern void ErrorIfMultipleNonblockingMoveSplitInTheSameTransaction(void);
#endif /* SHARDSPLIT_H_ */