故障注入框架trigger新增point参数

This commit is contained in:
chen-chao666
2024-07-10 09:23:25 +08:00
parent 16864a20d0
commit c492c5aea0
7 changed files with 51 additions and 20 deletions

View File

@ -142,6 +142,7 @@ int ss_dms_func_init()
SS_RETURN_IFERR(DMS_LOAD_SYMBOL_FUNC(dms_fi_get_tls_trigger_custom));
SS_RETURN_IFERR(DMS_LOAD_SYMBOL_FUNC(dms_fi_set_tls_trigger_custom));
SS_RETURN_IFERR(DMS_LOAD_SYMBOL_FUNC(fault_injection_call));
SS_RETURN_IFERR(DMS_LOAD_SYMBOL_FUNC(dms_fi_entry_custom_valid));
#endif
g_ss_dms_func.inited = true;

View File

@ -841,7 +841,7 @@ static int CBInvalidatePage(void *db_handle, char pageid[DMS_PAGEID_SIZE], unsig
}
SS_FAULT_INJECTION_CALL(DB_FI_CHANGE_BUFFERTAG_BLOCKNUM, dms_fi_change_buffertag_blocknum);
FAULT_INJECTION_ACTION_TRIGGER_CUSTOM(tag->blockNum += 1);
FAULT_INJECTION_ACTION_TRIGGER_CUSTOM(DB_FI_CHANGE_BUFFERTAG_BLOCKNUM, tag->blockNum += 1);
if (!BUFFERTAGS_PTR_EQUAL(&buf_desc->tag, tag)) {
DmsReleaseBuffer(buf_id + 1, IsSegmentBufferID(buf_id));
buftag_equal = false;

View File

@ -58,6 +58,14 @@ void dms_fi_set_tls_trigger_custom(int val)
}
}
unsigned char dms_fi_entry_custom_valid(unsigned int point)
{
if (g_ss_dms_func.inited) {
return g_ss_dms_func.dms_fi_entry_custom_valid(point);
}
return GS_ERROR;
}
void dms_fi_change_buffertag_blocknum(const dms_fi_entry *entry, va_list args)
{
dms_fi_set_tls_trigger_custom(TRUE);
@ -67,5 +75,6 @@ int dms_fi_set_entries(unsigned int type, unsigned int *entries, unsigned int co
int dms_fi_set_entry_value(unsigned int type, unsigned int value) {return GS_ERROR;}
int dms_fi_get_tls_trigger_custom() {return GS_ERROR;}
void dms_fi_set_tls_trigger_custom(int val) {}
unsigned char dms_fi_entry_custom_valid(unsigned int point) {return GS_ERROR;}
void dms_fi_change_buffertag_blocknum(const dms_fi_entry *entry, va_list args) {};
#endif

View File

@ -1,3 +1,3 @@
dms_commit_id=6341f295057ae1f987f991b3a060acfb97e143c5
dms_commit_id=c6fe7641f4f13fb961ceebe1f8725865a2afe3ee
dss_commit_id=04b09e0414525a7bb78b8baaabfedcc675f91102
cbb_commit_id=d22f1e92dc9fc75efa8f0f027321faf0fd1c770b

View File

@ -34,7 +34,7 @@ extern "C" {
#define DMS_LOCAL_MINOR_VER_WEIGHT 1000
#define DMS_LOCAL_MAJOR_VERSION 0
#define DMS_LOCAL_MINOR_VERSION 0
#define DMS_LOCAL_VERSION 156
#define DMS_LOCAL_VERSION 159
#define DMS_SUCCESS 0
#define DMS_ERROR (-1)
@ -788,7 +788,7 @@ typedef struct st_dms_broadcast_info {
unsigned char check_session_kill;
} dms_broadcast_info_t;
typedef enum st_dms_stat_cmd {
typedef enum en_dms_stat_cmd {
DMS_STAT_ASK_MASTER,
DMS_STAT_ASK_OWNER,
DMS_STAT_ASK_CR_PAGE,
@ -987,7 +987,8 @@ typedef int (*dms_stop_lrpl)(void *db_handle, int is_reformer);
typedef int (*dms_az_switchover_demote_phase1)(void *db_handle);
typedef int (*dms_az_switchover_demote_approve)(void *db_handle);
typedef int (*dms_az_switchover_demote_phase2)(void *db_handle);
typedef int (*dms_az_switchover_promote_core)(void *db_handle);
typedef int (*dms_az_switchover_promote_phase1)(void *db_handle);
typedef int (*dms_az_switchover_promote_phase2)(void *db_handle);
typedef void (*dms_dyn_log)(void *db_handle, long long dyn_log_time);
typedef int (*dms_invld_alock_ownership)(void *db_handle, char *resid, unsigned char req_mode, unsigned char is_try);
@ -1176,7 +1177,8 @@ typedef struct st_dms_callback {
dms_az_switchover_demote_phase1 az_switchover_demote_phase1;
dms_az_switchover_demote_approve az_switchover_demote_approve;
dms_az_switchover_demote_phase2 az_switchover_demote_phase2;
dms_az_switchover_promote_core az_switchover_promote;
dms_az_switchover_promote_phase1 az_switchover_promote_phase1;
dms_az_switchover_promote_phase2 az_switchover_promote_phase2;
dms_az_failover_promote_phase1 az_failover_promote_phase1;
dms_az_failover_promote_resetlog az_failover_promote_resetlog;
dms_az_failover_promote_phase2 az_failover_promote_phase2;
@ -1303,6 +1305,10 @@ typedef enum en_reform_callback_stat {
REFORM_MES_TASK_STAT_CONFIRM_CVT_SS_READ_LOCK,
REFORM_CALLBACK_STAT_REBUILD_ALOCK_LOCAL,
REFORM_CALLBACK_STAT_REBUILD_DRC_ALOCK_REMOTE,
REFORM_CALLBACK_STAT_OPEN_DATAFILE,
REFORM_CALLBACK_STAT_GET_DATAFILE_SIZE,
REFORM_CALLBACK_STAT_OPEN_CTRLFILE,
REFORM_CALLBACK_STAT_GET_CTRLFILE_SIZE,
REFORM_CALLBACK_STAT_COUNT
} reform_callback_stat_e;
@ -1316,6 +1322,18 @@ typedef enum e_dms_fi_type {
DMS_FI_TYPE_END,
} dms_fi_type_e;
typedef enum en_db_call_dms_trigger_fi_point_name {
// call in db, trigger in dms, point range[10800, DB_FI_ENTRY_END]
DB_FI_CHANGE_STATUS_AFTER_TRANSFER_PAGE = 10800,
DB_FI_ENTRY_END = FI_ENTRY_END
} db_call_dms_trigger_fi_point_name;
typedef enum en_dms_call_db_trigger_fi_point_name {
// call in dms, trigger in db, point range[800, DMS_FI_ENTRY_END]
DMS_FI_TRIGGER_IN_DB_ENTRY_BEGIN = 800,
DMS_FI_ENTRY_END
} dms_call_db_trigger_fi_point_name;
struct dms_fi_entry {
int pointId;
unsigned int faultFlags;
@ -1343,6 +1361,7 @@ typedef struct thread_set {
typedef struct st_driver_ping_info {
unsigned long long rw_bitmap;
dms_role_t dms_role;
unsigned long long major_version;
unsigned long long minor_version;
} driver_ping_info_t;

View File

@ -98,6 +98,7 @@ typedef struct st_ss_dms_func {
int (*dms_fi_get_tls_trigger_custom)(void);
void (*dms_fi_set_tls_trigger_custom)(int val);
void (*fault_injection_call)(unsigned int point, ...);
unsigned char (*dms_fi_entry_custom_valid)(unsigned int point);
} ss_dms_func_t;
int ss_dms_func_init();

View File

@ -34,35 +34,36 @@ extern "C" {
#endif
typedef enum en_db_fi_point_name {
DB_FI_CHANGE_BUFFERTAG_BLOCKNUM = DB_FI_ENTRY_BEGIN,
DB_FI_ENTRY_END = FI_ENTRY_END
// if CALL and TRIGGER both in kernel point range [10001, 10799]
DB_FI_CHANGE_BUFFERTAG_BLOCKNUM = DB_FI_ENTRY_BEGIN + 1,
} db_fi_point_name;
int dms_fi_set_entries(unsigned int type, unsigned int *entries, unsigned int count);
int dms_fi_set_entry_value(unsigned int type, unsigned int value);
int dms_fi_get_tls_trigger_custom(void);
void dms_fi_set_tls_trigger_custom(int val);
unsigned char dms_fi_entry_custom_valid(unsigned int point);
void dms_fi_change_buffertag_blocknum(const dms_fi_entry *entry, va_list args);
#ifdef USE_ASSERT_CHECKING
#define FAULT_INJECTION_ACTION_TRIGGER_CUSTOM(action) \
do { \
if (dms_fi_get_tls_trigger_custom() == TRUE) { \
dms_fi_set_tls_trigger_custom(FALSE); \
#define FAULT_INJECTION_ACTION_TRIGGER_CUSTOM(point, action) \
do { \
if (dms_fi_entry_custom_valid(point) && dms_fi_get_tls_trigger_custom() == TRUE) { \
dms_fi_set_tls_trigger_custom(FALSE); \
ereport(DEBUG1, (errmsg("[KERNEL_FI] fi custom action happens at %s", __FUNCTION__))); \
action; \
} \
action; \
} \
} while (0)
#define SS_FAULT_INJECTION_CALL(point, ...) \
do { \
if (g_ss_dms_func.inited) { \
g_ss_dms_func.fault_injection_call(point, ##__VA_ARGS__); \
} \
#define SS_FAULT_INJECTION_CALL(point, ...) \
do { \
if (g_ss_dms_func.inited) { \
g_ss_dms_func.fault_injection_call(point, ##__VA_ARGS__); \
} \
} while (0)
#else
#define FAULT_INJECTION_ACTION_TRIGGER_CUSTOM(action)
#define FAULT_INJECTION_ACTION_TRIGGER_CUSTOM(point, action)
#define SS_FAULT_INJECTION_CALL(point, ...)
#endif