1d540f44创建于 2021年9月23日历史提交
/* ---------------------------------------------------------------------------------------
 * 
 * segment_test.h
 *		Routines for segment test framework.
 *
 * Portions Copyright (c) 1996-2012, PostgreSQL Global Development Group
 * Portions Copyright (c) 1994, Regents of the University of California
 * 
 * 
 * IDENTIFICATION
 *        src/include/utils/segment_test.h
 *
 * ---------------------------------------------------------------------------------------
 */
#ifndef SEGMENT_TEST_H
#define SEGMENT_TEST_H

#include "utils/guc.h"
#include "utils/elog.h"

// work as a switch to enable the macro TEST_STUB
#ifdef USE_ASSERT_CHECKING
#ifdef ENABLE_MULTIPLE_NODES
#define ENABLE_SEGMENT_TEST
#endif

#define MAX_NAME_STR_LEN (256)
typedef struct SegmentTestParam {
    /* use as the guc-control white-box-fault probability
     *  range [0, 100000], probability 0, 1/100000 -> 1
     */
    int guc_probability;

    /* act as the white-box checkpoint tag,
     * eg. "WHITE_BOX_ALL_RANDOM_FAILED"
     */
    char test_stub_name[MAX_NAME_STR_LEN];

    /* fault level, PANIC */
    int elevel;
} SegmentTestParam;

extern bool segment_test_stub_activator(const char* name);
extern void segment_default_error_emit(void);
extern void assign_segment_test_param(const char* newval, void* extra);
extern SegmentTestParam* get_segment_test_param();
extern bool check_segment_test_param(char** newval, void** extra, GucSource source);

#define SEGMETN_TEST_STUB(_stub_name) segment_test_stub_activator((_stub_name))


#define SEGMENT_INVALID "SEGMENT_INVALID"
#define EXTENT_GROUP_INIT_DATA "EXTENT_GROUP_INIT_DATA"
#define EXTENT_GROUP_CREATE_EXTENT "EXTENT_GROUP_CREATE_EXTENT"
#define EXTENT_GROUP_ADD_NEW_GROUP "EXTENT_GROUP_ADD_NEW_GROUP"
#define EXTENT_GROUP_ADD_NEW_GROUP_XLOG "EXTENT_GROUP_ADD_NEW_GROUP_XLOG"
#define EXTENT_GROUP_CRITICAL_SECTION "EXTENT_GROUP_CRITICAL_SECTION"
#define SEG_STORE_EXTEND_EXTENT "SEG_STORE_EXTEND_EXTENT"
#define FREE_EXTENT_ADD_FSM_FORK "FREE_EXTENT_ADD_FSM_FORK"
#define FREE_EXTENT_DROP_EXTENTS "FREE_EXTENT_DROP_EXTENTS"
#define FREE_EXTENT_DROP_BUCKETS "FREE_EXTENT_DROP_BUCKETS"
#define FREE_EXTENT_CREATE_SEGMENT_UNCOMMIT "FREE_EXTENT_CREATE_SEGMENT_UNCOMMIT"
#define FREE_SEGMENT_DROP_SEGMENT "FREE_SEGMENT_DROP_SEGMENT"
#define FREE_EXTENT_INSERT_ONE_BUCKET "FREE_EXTENT_INSERT_ONE_BUCKET"
#define SEGMENT_COPY_BLOCK "SEGMENT_COPY_BLOCK"
#define SEGMENT_COPY_EXTENT "SEGMENT_COPY_EXTENT"
#define SEGMENT_COPY_UPDATE_SEGHEAD "SEGMENT_COPY_UPDATE_SEGHEAD"
#define SEGMENT_SHRINK_INVALIDATE_BUFFER "SEGMENT_SHRINK_INVALIDATE_BUFFER"
#define SEGMENT_SHRINK_FILE_XLOG "SEGMENT_SHRINK_FILE_XLOG"
#define SEGMENT_REPLAY_ATOMIC_OP "SEGMENT_REPLAY_ATOMIC_OP"
#define SEGMENT_FLUSH_MOVED_EXTENT_BUFFER "SEGMENT_FLUSH_MOVED_EXTENT_BUFFER"
#define SEGMENT_REDO_UPDATE_SEGHEAD "SEGMENT_REDO_UPDATE_SEGHEAD"

#endif /* DEBUG */
#endif /* SEGMENT_TEST_H */