citus/src/include/distributed/worker_transaction.h

95 lines
3.1 KiB
C

/*-------------------------------------------------------------------------
*
* worker_transaction.h
* Type and function declarations used in performing transactions across
* workers.
*
* Copyright (c) Citus Data, Inc.
*
*-------------------------------------------------------------------------
*/
#ifndef WORKER_TRANSACTION_H
#define WORKER_TRANSACTION_H
#include "distributed/worker_manager.h"
#include "storage/lockdefs.h"
/*
* TargetWorkerSet is used for determining the type of workers that a command
* is targeted to.
*/
typedef enum TargetWorkerSet
{
/*
* All the active primary nodes in the metadata which have metadata
* except the coordinator
*/
NON_COORDINATOR_METADATA_NODES,
/*
* All the active primary nodes in the metadata except the coordinator
*/
NON_COORDINATOR_NODES,
/*
* All active primary nodes in the metadata
*/
ALL_SHARD_NODES,
/*
* All the active primary nodes in the metadata which have metadata
* (includes the coodinator if it is added)
*/
METADATA_NODES
} TargetWorkerSet;
/* Functions declarations for worker transactions */
extern List * GetWorkerTransactions(void);
extern List * TargetWorkerSetNodeList(TargetWorkerSet targetWorkerSet, LOCKMODE lockMode);
extern void SendCommandToWorker(const char *nodeName, int32 nodePort, const
char *command);
extern void SendCommandToWorkersAsUser(TargetWorkerSet targetWorkerSet,
const char *nodeUser, const char *command);
extern void SendCommandToWorkerAsUser(const char *nodeName, int32 nodePort,
const char *nodeUser, const char *command);
extern bool SendOptionalCommandListToWorkerOutsideTransaction(const char *nodeName,
int32 nodePort,
const char *nodeUser,
List *commandList);
extern bool SendOptionalMetadataCommandListToWorkerInCoordinatedTransaction(const
char *nodeName,
int32 nodePort,
const char *
nodeUser,
List *
commandList);
extern void SendCommandToWorkersWithMetadata(const char *command);
extern void SendCommandToWorkersWithMetadataViaSuperUser(const char *command);
extern void SendBareCommandListToMetadataWorkers(List *commandList);
extern void EnsureNoModificationsHaveBeenDone(void);
extern void SendCommandListToWorkerOutsideTransaction(const char *nodeName,
int32 nodePort,
const char *nodeUser,
List *commandList);
extern void SendMetadataCommandListToWorkerListInCoordinatedTransaction(
List *workerNodeList,
const char *
nodeUser,
List *commandList);
extern void SendCommandToWorkersOptionalInParallel(TargetWorkerSet targetWorkerSet,
const char *command,
const char *user);
void SendCommandToWorkersInParallel(TargetWorkerSet targetWorkerSet,
const char *command, const char *user);
extern void RemoveWorkerTransaction(const char *nodeName, int32 nodePort);
/* helper functions for worker transactions */
extern bool IsWorkerTransactionActive(void);
extern bool IsWorkerTheCurrentNode(WorkerNode *workerNode);
#endif /* WORKER_TRANSACTION_H */