citus/src/include/distributed/shard_split.h

60 lines
1.5 KiB
C

/*-------------------------------------------------------------------------
*
* shard_split.h
*
* API for shard splits.
*
* Copyright (c) Citus Data, Inc.
*
*-------------------------------------------------------------------------
*/
#ifndef SHARDSPLIT_H_
#define SHARDSPLIT_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
} SplitOperation;
typedef enum SplitArtifactType
{
SPLIT_CHILD_SHARD = 0,
SPLIT_DUMMY_SHARD = 1,
SPLIT_PUBLICATION = 2,
SPLIT_SUBSCRIPTION = 3,
SPLIT_REPLICATION_SLOT = 4
} SplitArtifactType;
/*
* 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);
extern void DropShardList(List *shardIntervalList);
extern SplitMode LookupSplitMode(Oid shardTransferModeOid);
extern StringInfo CreateArtifactEntryCommand(uint32 operationId, SplitArtifactType splitArtifact, char* artifactName);
extern StringInfo CreateDeleteArtifactCommand(SplitArtifactType splitArtifact, char* artifactName);
#endif /* SHARDSPLIT_H_ */