From 950d968d50a08366e1e550df9e78ea42b7cd6308 Mon Sep 17 00:00:00 2001 From: 18305199258 <1790599142@qq.com> Date: Mon, 11 Mar 2024 19:19:42 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E8=B5=84=E6=BA=90=E6=B1=A0=E5=8C=96?= =?UTF-8?q?=E3=80=91=E3=80=90=E5=90=8C=E6=AD=A5DMS=E7=82=B9=E3=80=91?= =?UTF-8?q?=E4=BF=AE=E5=A4=8Ddms=5Fcontext=5Ft=E6=9C=AA=E5=88=9D=E5=A7=8B?= =?UTF-8?q?=E5=8C=96=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ddes/adapter/ss_dms_bufmgr.cpp | 3 + src/gausskernel/ddes/ddes_commit_id | 2 +- src/include/ddes/dms/dms_api.h | 60 ++++++++++++++++--- 3 files changed, 55 insertions(+), 10 deletions(-) diff --git a/src/gausskernel/ddes/adapter/ss_dms_bufmgr.cpp b/src/gausskernel/ddes/adapter/ss_dms_bufmgr.cpp index 3978202e4..c23fcd66d 100644 --- a/src/gausskernel/ddes/adapter/ss_dms_bufmgr.cpp +++ b/src/gausskernel/ddes/adapter/ss_dms_bufmgr.cpp @@ -74,6 +74,9 @@ void InitDmsContext(dms_context_t *dmsContext) void InitDmsBufContext(dms_context_t* dmsBufCxt, BufferTag buftag) { + int32 ret = memset_sp(dmsBufCxt, sizeof(dms_context_t), 0, sizeof(dms_context_t)); + securec_check(ret, "", ""); + InitDmsContext(dmsBufCxt); dmsBufCxt->len = DMS_PAGEID_SIZE; dmsBufCxt->type = (unsigned char)DRC_RES_PAGE_TYPE; diff --git a/src/gausskernel/ddes/ddes_commit_id b/src/gausskernel/ddes/ddes_commit_id index a0067fbc1..43a58eff3 100644 --- a/src/gausskernel/ddes/ddes_commit_id +++ b/src/gausskernel/ddes/ddes_commit_id @@ -1,3 +1,3 @@ -dms_commit_id=89300f79fcd70380afe7ee4484ae8f4352fc5ede +dms_commit_id=81a037bc72626c213d556c2d49633dd428301ce2 dss_commit_id=f5bc787a052e458243b5205c6ce060d74967fdd6 cbb_commit_id=e9bdc7fa253fb0817d81bc8e680db6f67b9f5ee5 \ No newline at end of file diff --git a/src/include/ddes/dms/dms_api.h b/src/include/ddes/dms/dms_api.h index 1dda93df4..f04a9774d 100644 --- a/src/include/ddes/dms/dms_api.h +++ b/src/include/ddes/dms/dms_api.h @@ -1,4 +1,4 @@ -/* +/* * Copyright (c) 2022 Huawei Technologies Co.,Ltd. * * DMS is licensed under Mulan PSL v2. @@ -33,7 +33,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 130 +#define DMS_LOCAL_VERSION 133 #define DMS_SUCCESS 0 #define DMS_ERROR (-1) @@ -99,6 +99,8 @@ typedef enum en_dms_dr_type { DMS_DR_TYPE_MAX, } dms_dr_type_t; +#define DMS_DR_IS_TABLE_TYPE(type) ((type) == DMS_DR_TYPE_TABLE || (type) == DMS_DR_TYPE_PART_TABLE) + // persistent distributed resource id typedef enum en_dms_persistent_id { DMS_ID_DATABASE_CTRL = 0, @@ -245,6 +247,7 @@ typedef struct st_dms_cr_assist_t { char wxid[DMS_XID_SIZE]; /* OUT parameter */ char entry[DMS_PAGEID_SIZE]; /* IN parameter */ char profile[DMS_INDEX_PROFILE_SIZE]; /* IN parameter */ + char rowid[DMS_ROWID_SIZE]; /* IN parameter */ unsigned int check_restart; /* IN parameter */ unsigned int *check_found; /* IN & OUT parameter */ dms_cr_phase_t phase; /* OUT parameter */ @@ -291,7 +294,6 @@ typedef struct st_dms_xmap_ctx { typedef struct st_dms_process_context { void *db_handle; unsigned int sess_id; // current session id - unsigned int rmid; // current rm id unsigned int inst_id; // current instance id } dms_process_context_t; @@ -308,7 +310,6 @@ typedef struct st_dms_context { struct { void *db_handle; unsigned int sess_id; // current session id - unsigned int rmid; // current rm id unsigned int inst_id; // current instance id }; dms_process_context_t proc_ctx; @@ -327,6 +328,8 @@ typedef struct st_dms_context { unsigned char edp_inst; drc_global_xid_t global_xid; }; + unsigned char intercept_type; + unsigned char curr_mode; // used for table lock } dms_context_t; typedef struct st_dms_cr { @@ -651,6 +654,9 @@ typedef enum st_dms_session_type { DMS_SESSION_TYPE_FULL_RCY_PARAL = 3, }dms_session_type_e; +#define DMS_RES_INTERCEPT_TYPE_NONE 0 +#define DMS_RES_INTERCEPT_TYPE_BIZ_SESSION 1 + #define DCS_BATCH_BUF_SIZE (1024 * 30) #define DCS_RLS_OWNER_BATCH_SIZE (DCS_BATCH_BUF_SIZE / DMS_PAGEID_SIZE) typedef struct st_dcs_batch_buf { @@ -726,6 +732,7 @@ typedef int(*dms_confirm_converting)(void *db_handle, char *pageid, unsigned cha typedef int(*dms_confirm_owner)(void *db_handle, char *pageid, unsigned char *lock_mode, unsigned char *is_edp, unsigned long long *lsn); typedef int(*dms_flush_copy)(void *db_handle, char *pageid); +typedef int(*dms_flush_copy_check_lsn)(void *db_handle, char *pageid, unsigned long long lsn); typedef int(*dms_need_flush)(void *db_handle, char *pageid, unsigned char *is_edp); typedef int(*dms_edp_to_owner)(void *db_handle, char *pageid, unsigned char *is_edp); typedef int(*dms_edp_lsn)(void *db_handle, char *pageid, unsigned long long *lsn); @@ -742,6 +749,7 @@ typedef void(*dms_reform_start_notify)(void *db_handle, dms_reform_start_context typedef int(*dms_undo_init)(void *db_handle, unsigned char inst_id); typedef int(*dms_tx_area_init)(void *db_handle, unsigned char inst_id); typedef int(*dms_tx_area_load)(void *db_handle, unsigned char inst_id); +typedef int(*dms_tx_rollback_start)(void *db_handle, unsigned char inst_id); typedef int(*dms_convert_to_readwrite)(void *db_handle); typedef int(*dms_tx_rollback_finish)(void *db_handle, unsigned char inst_id); typedef unsigned char(*dms_recovery_in_progress)(void *db_handle); @@ -814,6 +822,9 @@ typedef char *(*dms_display_rowid)(char *display_buf, unsigned int count, char * typedef int (*dms_check_session_invalid)(unsigned int sid); typedef int (*dms_drc_buf_res_rebuild)(void *db_handle); typedef int (*dms_drc_buf_res_rebuild_parallel)(void *db_handle, unsigned char thread_index, unsigned char thread_num); +typedef int (*dms_drc_tlock_rebuild_parallel)(void *db_handle, unsigned char thread_index, unsigned char thread_num); +typedef int (*dms_drc_validate_page)(void *db_handle, unsigned char thread_index, unsigned char thread_num); +typedef int (*dms_drc_validate_tlock)(void *db_handle, unsigned char thread_index, unsigned char thread_num); typedef int(*dms_ctl_rcy_clean_parallel_t)(void *db_handle, unsigned char thread_index, unsigned char thread_num); typedef unsigned char(*dms_ckpt_session)(void *db_handle); typedef void (*dms_check_if_build_complete)(void *db_handle, unsigned int *build_complete); @@ -873,11 +884,16 @@ typedef void (*dms_get_buf_info)(char* resid, stat_buf_info_t *buf_info); typedef int (*dms_end_xa)(void *db_handle, void *knl_xa_xid, unsigned long long flags, unsigned long long scn, unsigned char is_commit); typedef unsigned char (*dms_xa_inuse)(void *db_handle, void *knl_xa_xid); -typedef int (*dms_get_part_changed)(void *db_handle, char* resid); +typedef int (*dms_ddl_2phase_rcy)(void *db_handle, unsigned long long inst_remove_bitmap); +typedef int (*dms_reform_is_need_ddl_2phase_rcy)(void *db_handle); typedef void (*dms_buf_ctrl_recycle)(void *db_handle); typedef void *(*dms_malloc_prot_proc)(size_t size); typedef void (*dms_free_prot_proc)(void *ptr); typedef int (*dms_get_kernel_error_code)(); +typedef int (*dms_lsn_validate)(void *db_handle, char *pageid, unsigned long long lsn, unsigned char in_recovery); +typedef int (*dms_invld_tlock_ownership)(void *db_handle, char *resid, unsigned char req_mode, unsigned char is_try); +typedef int (*dms_get_tlock_mode)(void *db_handle, char *resid); + typedef struct st_dms_callback { // used in reform dms_get_list_stable get_list_stable; @@ -887,6 +903,7 @@ typedef struct st_dms_callback { dms_confirm_owner confirm_owner; dms_confirm_converting confirm_converting; dms_flush_copy flush_copy; + dms_flush_copy_check_lsn flush_copy_check_lsn; dms_need_flush need_flush; dms_edp_to_owner edp_to_owner; dms_edp_lsn edp_lsn; @@ -900,11 +917,15 @@ typedef struct st_dms_callback { dms_undo_init undo_init; dms_tx_area_init tx_area_init; dms_tx_area_load tx_area_load; + dms_tx_rollback_start tx_rollback_start; dms_convert_to_readwrite convert_to_readwrite; dms_tx_rollback_finish tx_rollback_finish; dms_recovery_in_progress recovery_in_progress; dms_drc_buf_res_rebuild dms_reform_rebuild_buf_res; dms_drc_buf_res_rebuild_parallel dms_reform_rebuild_parallel; + dms_drc_tlock_rebuild_parallel dms_reform_rebuild_tlock_parallel; + dms_drc_validate_page validate_page; + dms_drc_validate_tlock validate_table_lock; dms_ctl_rcy_clean_parallel_t dms_ctl_rcy_clean_parallel; dms_check_if_build_complete check_if_build_complete; dms_check_if_restore_recover check_if_restore_recover; @@ -1026,12 +1047,16 @@ typedef struct st_dms_callback { dms_get_buf_info get_buf_info; dms_end_xa end_xa; dms_xa_inuse xa_inuse; - dms_get_part_changed get_part_changed; + dms_ddl_2phase_rcy ddl_2phase_rcy; + dms_reform_is_need_ddl_2phase_rcy reform_is_need_ddl_2phase_rcy; dms_buf_ctrl_recycle buf_ctrl_recycle; dms_malloc_prot_proc dms_malloc_prot; dms_free_prot_proc dms_free_prot; dms_get_kernel_error_code db_get_kernel_error_code; + dms_lsn_validate lsn_validate; + dms_invld_tlock_ownership invld_tlock_ownership; + dms_get_tlock_mode get_tlock_mode; } dms_callback_t; typedef struct st_dms_instance_net_addr { @@ -1121,13 +1146,11 @@ typedef struct st_drc_local_lock_res_result { char lock_id[DMS_MAX_NAME_LEN]; unsigned char is_owner; unsigned char is_locked; - unsigned short count; unsigned char releasing; + unsigned char unused; unsigned short shared_count; unsigned short stat; unsigned short sid; - unsigned short rmid; - unsigned short rmid_sum; unsigned char lock_mode; unsigned char is_valid; } drc_local_lock_res_result_t; @@ -1136,6 +1159,9 @@ typedef enum en_reform_callback_stat { REFORM_CALLBACK_STAT_CKPT_LATCH = 0, REFORM_CALLBACK_STAT_BUCKET_LOCK, REFORM_CALLBACK_STAT_SS_READ_LOCK, + REFORM_CALLBACK_STAT_ENTRY_TLOCK, + REFORM_CALLBACK_STAT_PART_ENTRY_TLOCK, + REFORM_CALLBACK_STAT_REBUILD_TLOCK_REMOTE, REFORM_CALLBACK_STAT_GET_DISK_LSN, REFORM_CALLBACK_STAT_DRC_EXIST, REFORM_CALLBACK_STAT_CLEAN_EDP, @@ -1149,10 +1175,26 @@ typedef enum en_reform_callback_stat { REFORM_MES_TASK_STAT_NEED_FLUSH_SS_READ_LOCK, REFORM_MES_TASK_STAT_EDP_TO_OWNER_GET_DISK_LSN, REFORM_MES_TASK_STAT_EDP_TO_OWNER_ALLOC_CTRL, + REFORM_CALLBACK_STAT_VALIDATE_DRC_PAGE_BUCKET_LOCK, + REFORM_CALLBACK_STAT_VALIDATE_DRC_PAGE_SS_READ_LOCK, + REFORM_CALLBACK_STAT_VALIDATE_DRC_PAGE_REMOTE, + REFORM_CALLBACK_STAT_VALIDATE_DRC_ENTRY_TLOCK, + REFORM_CALLBACK_STAT_VALIDATE_DRC_PART_ENTRY_TLOCK, + REFORM_CALLBACK_STAT_VALIDATE_DRC_TLOCK_REMOTE, + REFORM_MES_TASK_STAT_VALIDATE_LSN_GET_CTRL, + REFORM_MES_TASK_STAT_VALIDATE_LSN_GET_CTRL_TIMEOUT, + REFORM_MES_TASK_STAT_VALIDATE_LSN_GET_DISK_LSN, + REFORM_MES_TASK_STAT_VALIDATE_LSN_BUF_UNLATCH, REFORM_CALLBACK_STAT_COUNT } reform_callback_stat_e; +typedef struct st_dms_tlock_info { + dms_drid_t resid; + unsigned char lock_mode; + unsigned char unused[3]; +} dms_tlock_info_t; + #ifdef __cplusplus } #endif