mirror of https://github.com/citusdata/citus.git
78 lines
2.2 KiB
C
78 lines
2.2 KiB
C
/*-------------------------------------------------------------------------
|
|
* transaction_management.h
|
|
*
|
|
* Copyright (c) 2016, Citus Data, Inc.
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
|
|
#ifndef TRANSACTION_MANAGMENT_H
|
|
#define TRANSACTION_MANAGMENT_H
|
|
|
|
#include "lib/ilist.h"
|
|
|
|
/* describes what kind of modifications have occurred in the current transaction */
|
|
typedef enum
|
|
{
|
|
XACT_MODIFICATION_INVALID = 0, /* placeholder initial value */
|
|
XACT_MODIFICATION_NONE, /* no modifications have taken place */
|
|
XACT_MODIFICATION_DATA, /* data modifications (DML) have occurred */
|
|
XACT_MODIFICATION_MULTI_SHARD /* multi-shard modifications have occurred */
|
|
} XactModificationType;
|
|
|
|
|
|
/*
|
|
* Enum defining the state of a coordinated (i.e. a transaction potentially
|
|
* spanning several nodes).
|
|
*/
|
|
typedef enum CoordinatedTransactionState
|
|
{
|
|
/* no coordinated transaction in progress, no connections established */
|
|
COORD_TRANS_NONE,
|
|
|
|
/* no coordinated transaction in progress, but connections established */
|
|
COORD_TRANS_IDLE,
|
|
|
|
/* coordinated transaction in progress */
|
|
COORD_TRANS_STARTED,
|
|
|
|
/* coordinated transaction prepared on all workers */
|
|
COORD_TRANS_PREPARED,
|
|
|
|
/* coordinated transaction committed */
|
|
COORD_TRANS_COMMITTED
|
|
} CoordinatedTransactionState;
|
|
|
|
|
|
/* Enumeration that defines the different commit protocols available */
|
|
typedef enum
|
|
{
|
|
COMMIT_PROTOCOL_1PC = 0,
|
|
COMMIT_PROTOCOL_2PC = 1
|
|
} CommitProtocolType;
|
|
|
|
/* config variable managed via guc.c */
|
|
extern int MultiShardCommitProtocol;
|
|
|
|
/* state needed to prevent new connections during modifying transactions */
|
|
extern XactModificationType XactModificationLevel;
|
|
|
|
extern CoordinatedTransactionState CurrentCoordinatedTransactionState;
|
|
|
|
/* list of connections that are part of the current coordinated transaction */
|
|
extern dlist_head InProgressTransactions;
|
|
|
|
/*
|
|
* Coordinated transaction management.
|
|
*/
|
|
extern void BeginCoordinatedTransaction(void);
|
|
extern void BeginOrContinueCoordinatedTransaction(void);
|
|
extern bool InCoordinatedTransaction(void);
|
|
extern void CoordinatedTransactionUse2PC(void);
|
|
|
|
/* initialization function(s) */
|
|
extern void InitializeTransactionManagement(void);
|
|
|
|
|
|
#endif /* TRANSACTION_MANAGMENT_H */
|