diff --git a/src/gausskernel/ddes/adapter/ss_dms.cpp b/src/gausskernel/ddes/adapter/ss_dms.cpp index 684bf922f22597f6edb1b46bc9a620004094c77d..3987c1b455aa0151a5c892b142889bb7d88a0529 100644 --- a/src/gausskernel/ddes/adapter/ss_dms.cpp +++ b/src/gausskernel/ddes/adapter/ss_dms.cpp @@ -126,6 +126,7 @@ int ss_dms_func_init() SS_RETURN_IFERR(DMS_LOAD_SYMBOL_FUNC(dms_refresh_logger)); SS_RETURN_IFERR(DMS_LOAD_SYMBOL_FUNC(dms_validate_drc)); SS_RETURN_IFERR(DMS_LOAD_SYMBOL_FUNC(dms_reform_req_opengauss_ondemand_redo_buffer)); + SS_RETURN_IFERR(DMS_LOAD_SYMBOL_FUNC(dms_get_mes_max_watting_rooms)); g_ss_dms_func.inited = true; return DMS_SUCCESS; } @@ -339,3 +340,8 @@ int dms_reform_req_opengauss_ondemand_redo_buffer(dms_context_t *dms_ctx, void * { return g_ss_dms_func.dms_reform_req_opengauss_ondemand_redo_buffer(dms_ctx, block_key, key_len, redo_status); } + +unsigned int dms_get_mes_max_watting_rooms(void) +{ + return g_ss_dms_func.dms_get_mes_max_watting_rooms(); +} diff --git a/src/gausskernel/ddes/adapter/ss_init.cpp b/src/gausskernel/ddes/adapter/ss_init.cpp index b9ec4ada75d0bff1252f932cb2451f6a82d9f90e..36eefcf53b31858478d1848d9d8ced3f9d9b38fa 100644 --- a/src/gausskernel/ddes/adapter/ss_init.cpp +++ b/src/gausskernel/ddes/adapter/ss_init.cpp @@ -41,6 +41,7 @@ #define FIXED_NUM_OF_INST_IP_PORT 3 #define BYTES_PER_KB 1024 +#define NON_PROC_NUM 4 const int MAX_CPU_STR_LEN = 5; @@ -395,6 +396,13 @@ void DMSInit() ereport(FATAL, (errmsg("failed to register dms memcxt callback!"))); } + uint32 TotalProcs = (uint32)(GLOBAL_ALL_PROCS); + uint32 MesMaxRooms = dms_get_mes_max_watting_rooms(); + if (TotalProcs + NON_PROC_NUM >= MesMaxRooms) { + ereport(FATAL, (errmsg("The thread ID range is too large when dms enable. Please set the related GUC " + "parameters to a smaller value."))); + } + dms_profile_t profile; errno_t rc = memset_s(&profile, sizeof(dms_profile_t), 0, sizeof(dms_profile_t)); securec_check(rc, "\0", "\0"); diff --git a/src/gausskernel/ddes/ddes_commit_id b/src/gausskernel/ddes/ddes_commit_id index 1423a032995d3b0283ab3f8921ea3c34e45899ed..cf134156fb2bfdde89bcc3fc1854c630906fe006 100644 --- a/src/gausskernel/ddes/ddes_commit_id +++ b/src/gausskernel/ddes/ddes_commit_id @@ -1,2 +1,2 @@ -dms_commit_id=cf6200a73770c7e5a5a8d12d8d060bf32032735a -dss_commit_id=97deeec25d7ec4ee0c92b5bc0bcc50eaa3ae64af +dms_commit_id=ede9efeda8ed0ab2ad79f119b619c8a063023683 +dss_commit_id=97deeec25d7ec4ee0c92b5bc0bcc50eaa3ae64af \ 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 ee3e50c71affb2589565d194ebe20294a5d75084..3bfe5f4f5e560f8cd261b7506694428d0cb542b0 100644 --- a/src/include/ddes/dms/dms_api.h +++ b/src/include/ddes/dms/dms_api.h @@ -833,6 +833,7 @@ typedef struct st_dms_profile { unsigned char scrlock_server_bind_core_start; unsigned char scrlock_server_bind_core_end; unsigned char parallel_thread_num; + unsigned int max_wait_time; } dms_profile_t; typedef struct st_logger_param { @@ -846,11 +847,16 @@ typedef struct st_logger_param { ((ctrl)->lock_mode == DMS_LOCK_SHARE)) #define DMS_BUF_CTRL_NOT_LOCK(ctrl) ((ctrl)->lock_mode == DMS_LOCK_NULL) +typedef enum en_dms_info_id { + DMS_INFO_REFORM_CURRENT = 0, + DMS_INFO_REFORM_LAST = 1, +} dms_info_id_e; + #define DMS_LOCAL_MAJOR_VER_WEIGHT 1000000 #define DMS_LOCAL_MINOR_VER_WEIGHT 1000 #define DMS_LOCAL_MAJOR_VERSION 0 #define DMS_LOCAL_MINOR_VERSION 0 -#define DMS_LOCAL_VERSION 73 +#define DMS_LOCAL_VERSION 76 #ifdef __cplusplus } diff --git a/src/include/ddes/dms/ss_dms.h b/src/include/ddes/dms/ss_dms.h index 5384666ec48a9cd805630d9219a73624a1faa06a..534ed7834a94fdd40256a877417bcaf02972008e 100644 --- a/src/include/ddes/dms/ss_dms.h +++ b/src/include/ddes/dms/ss_dms.h @@ -81,6 +81,7 @@ typedef struct st_ss_dms_func { unsigned char is_dirty); int (*dms_reform_req_opengauss_ondemand_redo_buffer)(dms_context_t *dms_ctx, void *block_key, unsigned int key_len, int *redo_status); + unsigned int (*dms_get_mes_max_watting_rooms)(void); } ss_dms_func_t; int ss_dms_func_init(); @@ -125,6 +126,7 @@ void dms_pre_uninit(void); void dms_validate_drc(dms_context_t *dms_ctx, dms_buf_ctrl_t *ctrl, unsigned long long lsn, unsigned char is_dirty); int dms_reform_req_opengauss_ondemand_redo_buffer(dms_context_t *dms_ctx, void *block_key, unsigned int key_len, int *redo_status); +unsigned int dms_get_mes_max_watting_rooms(void); #ifdef __cplusplus } #endif