greenplumn faultinjector 源码

  • 2022-08-18
  • 浏览 (289)

greenplumn faultinjector 代码

文件路径:/src/include/utils/faultinjector.h

/*
 *  faultinjector.h
 *  
 *
 *  Copyright 2009-2010, Greenplum Inc. All rights reserved.
 *
 */

#ifndef FAULTINJECTOR_H
#define FAULTINJECTOR_H

#include "pg_config.h"

#define FAULTINJECTOR_MAX_SLOTS	16

#define FAULT_NAME_MAX_LENGTH	256

#define INFINITE_END_OCCURRENCE -1

#define Natts_fault_message_response 1
#define Anum_fault_message_response_status 0

/* Fault name that matches all faults */
#define FaultInjectorNameAll "all"

typedef enum FaultInjectorType_e {
#define FI_TYPE(id, str) id,
#include "utils/faultinjector_lists.h"
#undef FI_TYPE
	FaultInjectorTypeMax
} FaultInjectorType_e;

/*
 *
 */
typedef enum DDLStatement_e {
#define FI_DDL_STATEMENT(id, str) id,
#include "utils/faultinjector_lists.h"
#undef FI_DDL_STATEMENT
	DDLMax
} DDLStatement_e;

/*
 *
 */
typedef enum FaultInjectorState_e {
#define FI_STATE(id, str) id,
#include "utils/faultinjector_lists.h"
#undef FI_STATE
	FaultInjectorStateMax
} FaultInjectorState_e;


/*
 *
 */
typedef struct FaultInjectorEntry_s {
	
	char						faultName[FAULT_NAME_MAX_LENGTH];

	FaultInjectorType_e		faultInjectorType;
	
	int						extraArg;
		/* in seconds, in use if fault injection type is sleep */
	int						gpSessionid;
		/* -1 means the fault could be triggered by any process */

	DDLStatement_e			ddlStatement;
	
	char					databaseName[NAMEDATALEN];
	
	char					tableName[NAMEDATALEN];
	
	volatile	int			startOccurrence;
	volatile	int			endOccurrence;
	volatile	 int	numTimesTriggered;
	volatile	FaultInjectorState_e	faultInjectorState;

		/* the state of the fault injection */
	char					bufOutput[2500];
	
} FaultInjectorEntry_s;

extern void InjectFaultInit(void);

extern Size FaultInjector_ShmemSize(void);

extern void FaultInjector_ShmemInit(void);

/*
 * To check if a fault has been injected, use FaultInjector_InjectFaultIfSet().
 * It is designed to fall through as quickly as possible, when no faults are
 * activated.
 */
extern FaultInjectorType_e FaultInjector_InjectFaultIfSet_out_of_line(
							   const char*				 faultName,
							   DDLStatement_e			 ddlStatement,
							   const char*				 databaseName,
							   const char*				 tableName);

#define FaultInjector_InjectFaultIfSet(faultName, ddlStatement, databaseName, tableName) \
	(((*numActiveFaults_ptr) > 0) ? \
	 FaultInjector_InjectFaultIfSet_out_of_line(faultName, ddlStatement, databaseName, tableName) : \
	 FaultInjectorTypeNotSpecified)

extern int *numActiveFaults_ptr;


extern char *InjectFault(
	char *faultName, char *type, char *ddlStatement, char *databaseName,
	char *tableName, int startOccurrence, int endOccurrence, int extraArg, int gpSessionid);

extern void HandleFaultMessage(const char* msg);

typedef void (*fault_injection_warning_function)(FaultInjectorEntry_s faultEntry);
void register_fault_injection_warning(fault_injection_warning_function warning);

#ifdef FAULT_INJECTOR
extern bool am_faulthandler;
#define SIMPLE_FAULT_INJECTOR(FaultName) \
	FaultInjector_InjectFaultIfSet(FaultName, DDLNotSpecified, "", "")
#else
#define am_faulthandler false
#define SIMPLE_FAULT_INJECTOR(FaultName)
#endif

#endif	/* FAULTINJECTOR_H */

相关信息

greenplumn 源码目录

相关文章

greenplumn acl 源码

greenplumn aclchk_internal 源码

greenplumn array 源码

greenplumn arrayaccess 源码

greenplumn ascii 源码

greenplumn attoptcache 源码

greenplumn backend_cancel 源码

greenplumn bitmap_compression 源码

greenplumn bitstream 源码

greenplumn builtins 源码

0  赞