the trouble to test for other values.
proc->xid = InvalidTransactionId;
proc->lxid = InvalidLocalTransactionId;
proc->xmin = InvalidTransactionId;
- proc->recoveryConflictMode = 0;
+ proc->recoveryConflictMode = CONFLICT_MODE_NOT_SET;
/* redundant, but just in case */
proc->vacuumFlags &= ~PROC_VACUUM_STATE_MASK;
if (proc->pid == 0)
continue;
- if (skipExistingConflicts && proc->recoveryConflictMode > 0)
+ if (skipExistingConflicts && proc->recoveryConflictMode > CONFLICT_MODE_NOT_SET)
continue;
if (!OidIsValid(dbOid) ||
* Returns pid of the process signaled, or 0 if not found.
*/
pid_t
-CancelVirtualTransaction(VirtualTransactionId vxid, int cancel_mode)
+CancelVirtualTransaction(VirtualTransactionId vxid, recovery_conflict_mode cancel_mode)
{
ProcArrayStruct *arrayP = procArray;
int index;
*/
void
ResolveRecoveryConflictWithVirtualXIDs(VirtualTransactionId *waitlist,
- char *reason, int cancel_mode)
+ char *reason, recovery_conflict_mode cancel_mode)
{
char waitactivitymsg[100];
#include "storage/proc.h"
#include "storage/procarray.h"
#include "storage/spin.h"
+#include "storage/standby.h"
/* GUC variables */
MyProc->waitProcLock = NULL;
for (i = 0; i < NUM_LOCK_PARTITIONS; i++)
SHMQueueInit(&(MyProc->myProcLocks[i]));
- MyProc->recoveryConflictMode = 0;
+ MyProc->recoveryConflictMode = CONFLICT_MODE_NOT_SET;
/*
* We might be reusing a semaphore that belonged to a failed process. So
extern VirtualTransactionId *GetConflictingVirtualXIDs(TransactionId limitXmin,
Oid dbOid, bool skipExistingConflicts);
extern pid_t CancelVirtualTransaction(VirtualTransactionId vxid,
- int cancel_mode);
+ recovery_conflict_mode cancel_mode);
extern int CountActiveBackends(void);
extern int CountDBBackends(Oid databaseid);
extern int vacuum_defer_cleanup_age;
/* cancel modes for ResolveRecoveryConflictWithVirtualXIDs */
-#define CONFLICT_MODE_NOT_SET 0
-#define CONFLICT_MODE_ERROR 1 /* Conflict can be resolved by canceling query */
-#define CONFLICT_MODE_FATAL 2 /* Conflict can only be resolved by disconnecting session */
+typedef enum {
+ CONFLICT_MODE_NOT_SET, /* No conflict */
+ CONFLICT_MODE_FATAL, /* Conflict can only be resolved by disconnecting session */
+ CONFLICT_MODE_ERROR /* Conflict can be resolved by canceling query */
+} recovery_conflict_mode;
extern void ResolveRecoveryConflictWithVirtualXIDs(VirtualTransactionId *waitlist,
- char *reason, int cancel_mode);
+ char *reason, recovery_conflict_mode cancel_mode);
extern void InitRecoveryTransactionEnvironment(void);
extern void ShutdownRecoveryTransactionEnvironment(void);