From c492c5aea0458e577dcf91decda5076d705d797b Mon Sep 17 00:00:00 2001 From: chen-chao666 <1790599142@qq.com> Date: Wed, 10 Jul 2024 09:23:25 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=85=E9=9A=9C=E6=B3=A8=E5=85=A5=E6=A1=86?= =?UTF-8?q?=E6=9E=B6trigger=E6=96=B0=E5=A2=9Epoint=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/gausskernel/ddes/adapter/ss_dms.cpp | 1 + .../ddes/adapter/ss_dms_callback.cpp | 2 +- src/gausskernel/ddes/adapter/ss_dms_fi.cpp | 9 ++++++ src/gausskernel/ddes/ddes_commit_id | 2 +- src/include/ddes/dms/dms_api.h | 27 ++++++++++++++--- src/include/ddes/dms/ss_dms.h | 1 + src/include/ddes/dms/ss_dms_fi.h | 29 ++++++++++--------- 7 files changed, 51 insertions(+), 20 deletions(-) diff --git a/src/gausskernel/ddes/adapter/ss_dms.cpp b/src/gausskernel/ddes/adapter/ss_dms.cpp index a6bd499d2..6e5e4bd27 100644 --- a/src/gausskernel/ddes/adapter/ss_dms.cpp +++ b/src/gausskernel/ddes/adapter/ss_dms.cpp @@ -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; diff --git a/src/gausskernel/ddes/adapter/ss_dms_callback.cpp b/src/gausskernel/ddes/adapter/ss_dms_callback.cpp index 55cf1857d..432f2c087 100644 --- a/src/gausskernel/ddes/adapter/ss_dms_callback.cpp +++ b/src/gausskernel/ddes/adapter/ss_dms_callback.cpp @@ -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; diff --git a/src/gausskernel/ddes/adapter/ss_dms_fi.cpp b/src/gausskernel/ddes/adapter/ss_dms_fi.cpp index 19830c06a..89c9cb134 100644 --- a/src/gausskernel/ddes/adapter/ss_dms_fi.cpp +++ b/src/gausskernel/ddes/adapter/ss_dms_fi.cpp @@ -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 \ No newline at end of file diff --git a/src/gausskernel/ddes/ddes_commit_id b/src/gausskernel/ddes/ddes_commit_id index 61cb042df..8391af312 100644 --- a/src/gausskernel/ddes/ddes_commit_id +++ b/src/gausskernel/ddes/ddes_commit_id @@ -1,3 +1,3 @@ -dms_commit_id=6341f295057ae1f987f991b3a060acfb97e143c5 +dms_commit_id=c6fe7641f4f13fb961ceebe1f8725865a2afe3ee dss_commit_id=04b09e0414525a7bb78b8baaabfedcc675f91102 cbb_commit_id=d22f1e92dc9fc75efa8f0f027321faf0fd1c770b diff --git a/src/include/ddes/dms/dms_api.h b/src/include/ddes/dms/dms_api.h index 2769c3a18..d8cb1d475 100644 --- a/src/include/ddes/dms/dms_api.h +++ b/src/include/ddes/dms/dms_api.h @@ -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; diff --git a/src/include/ddes/dms/ss_dms.h b/src/include/ddes/dms/ss_dms.h index af48ace98..25d21d2c5 100644 --- a/src/include/ddes/dms/ss_dms.h +++ b/src/include/ddes/dms/ss_dms.h @@ -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(); diff --git a/src/include/ddes/dms/ss_dms_fi.h b/src/include/ddes/dms/ss_dms_fi.h index f9d7bc171..ff67c509f 100644 --- a/src/include/ddes/dms/ss_dms_fi.h +++ b/src/include/ddes/dms/ss_dms_fi.h @@ -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