* This file is part of the oGRAC project.
* Copyright (c) 2024 Huawei Technologies Co.,Ltd.
*
* oGRAC is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
*
* http://license.coscl.org.cn/MulanPSL2
*
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
* -------------------------------------------------------------------------
*
* knl_syncpoint.h
*
*
* IDENTIFICATION
* src/kernel/common/knl_syncpoint.h
*
* -------------------------------------------------------------------------
*/
#ifndef __KNL_SYNCPOINT_H__
#define __KNL_SYNCPOINT_H__
#include "cm_defs.h"
#include "cm_spinlock.h"
#include "knl_interface.h"
#ifdef __cplusplus
extern "C"{
#endif
#ifdef DB_DEBUG_VERSION
#define KNL_MAX_SYNCPOINT_NAME_LEN 64
#define OGRAC_MEMORY_LEAK_SIZE (1024 * 1024 * 100)
typedef enum {
OGRAC_MEMORY_LEAK,
OGRAC_DCS_REQUEST_PAGE_OWNER_ABORT,
OGRAC_DCS_REQUEST_PAGE_INTERNAL_FAIL,
SYNCPOINT_ID_CLEAN_PAGE_OWNER_MALLOC_NULL,
OGRAC_DCS_ASK_MASTER_SEND_FAIL,
OGRAC_DCS_ASK_MASTER_SUCC_ABORT,
OGRAC_DCS_PROC_ASK_MASTER_ABORT,
OGRAC_DCS_NOTIFY_OWNER_SEND_FAIL,
OGRAC_DCS_NOTIFY_OWNER_SUCC_ABORT,
OGRAC_DCS_TRANSFER_BEFORE_SEND_ABORT,
OGRAC_DCS_TRANSFER_AFTER_SEND_ABORT,
OGRAC_DCS_ASK_MASTER_ACK_SUCC_ABORT,
OGRAC_DCS_CLAIM_OWNER_SEND_FAIL,
OGRAC_DCS_MASTER_BEFORE_CLAIM_ABORT,
OGRAC_DCS_INVALID_PROC_ABORT,
OGRAC_DCS_SEND_EDP_MESSAGE_FAIL,
OGRAC_DCS_INVALID_REQ_OTHER_ABORT,
OGRAC_DCS_RECYCLE_ITEM_OTHER_ABORT,
OGRAC_DCS_RECYCLE_ITEM_PENDING_OTHER_ABORT,
OGRAC_DCS_RECYCLE_OWNER_SEND_FAIL,
OGRAC_DCS_RECYCLE_MASTER_OTHER_ABORT,
OGRAC_HEAP_EXTEND_PROC_BCAST_ABORT,
OGRAC_HEAP_EXTEND_UNSET_BEFORE_BCAST_ABORT,
OGRAC_BTREE_SPLIT_AFTER_BCAST_SPLITTING_ABORT,
OGRAC_BTREE_SPLIT_ALLOC_EXTENT_FAIL,
OGRAC_BTREE_SPLIT_BEFORE_BCAST_ABORT_SPLIT_ABORT,
OGRAC_BTREE_SPLIT_BEFORE_BCAST_SPLITTED_ABORT,
OGRAC_SYNC_DDL_BEFORE_BCAST_ABORT,
OGRAC_PROC_DDL_BCAST_ABORT,
OGRAC_INVALID_DC_BEFORE_BCAST_ABORT,
OGRAC_DTC_BCAST_ACK_FAIL,
OGRAC_DROP_USER_LOCK_AFTER_BCAST_ABORT,
OGRAC_DROP_USER_OBJECT_FAIL,
OGRAC_DROP_USER_REVERT_NORMAL_BEFORE_BCAST_ABORT,
OGRAC_DROP_USER_LOCK_PROC_BCAST_ABORT,
OGRAC_DROP_USER_REVERT_NORMAL_PROC_BCAST_ABORT,
OGRAC_BTREE_BEFORE_BCAST_ROOT_PAGE_ABORT,
OGRAC_BTREE_AFTER_BCAST_ROOT_PAGE_ABORT,
OGRAC_BTREE_PROC_BCAST_ROOT_PAGE_FAIL,
OGRAC_BTREE_PROC_BCAST_ROOT_PAGE_ABORT,
OGRAC_TXN_INF_REQ_SEND_FAIL,
OGRAC_TXN_INF_ACK_SEND_FAIL,
OGRAC_TXN_SNAPSHOT_REQ_SEND_FAIL,
OGRAC_TXN_SNAPSHOT_ACK_SEND_FAIL,
OGRAC_TXN_WAIT_SEND_FAIL,
OGRAC_DLS_WAIT_TXN_SEND_FAIL,
OGRAC_DLS_WAIT_TXN_ACK_SEND_FAIL,
OGRAC_PCR_REQ_HEAP_PAGE_SEND_FAIL,
OGRAC_PCR_REQ_BTREE_PAGE_SEND_FAIL,
OGRAC_PCR_ACK_FAIL,
OGRAC_PCR_REQ_MASTER_SEND_FAIL,
OGRAC_PCR_REQ_OWNER_SEND_FAIL,
OGRAC_HEAP_CHECK_VISIBLE_SEND_FAIL,
OGRAC_HEAP_CHECK_VISIBLE_ACK_FAIL,
OGRAC_REFORM_BUILD_CHANNEL_FAIL,
OGRAC_RECOVERY_INIT_FAIL,
OGRAC_PARAL_REPLAY_READ_LOG_FAIL,
OGRAC_RECOVERY_ANAL_READ_LOG_FAIL,
OGRAC_RECOVERY_RCY_SET_ALLOC_ITEMPOOL_FAIL,
OGRAC_RECOVERY_SEND_RCY_SET_FAIL,
CANTAIN_RECOVERY_PROC_RCY_SET_MALLOC_NULL,
OGRAC_RECOVERY_SEND_RCY_SET_ACK_FAIL,
OGRAC_PART_RECOVERY_BEFORE_CKPT_ABORT,
OGRAC_SMON_REQUEST_TXN_DLOCK_TIMEOUT_AND_FAIL,
OGRAC_SMON_REQUEST_SID_TIMEOUT_AND_FAIL,
OGRAC_SMON_REQUEST_WSID_TIMEOUT_AND_FAIL,
OGRAC_DLS_LOCK_REMOTE_TABLE_ABORT,
OGRAC_REMASTER_SEND_TASK_FAIL,
OGRAC_REMASTER_SEND_MIGRATE_BUF_RES_FAIL,
OGRAC_REMASTER_SEND_MIGRATE_LOCK_RES_FAIL,
OGRAC_REMASTER_BCAST_TARGET_PART_FAIL,
OGRAC_REMASTER_BCAST_REMASTER_DONE_FAIL,
OGRAC_REMASTER_STEP_ASSIGN_TASK_FAIL,
OGRAC_REMASTER_STEP_MIGRATE_FAIL,
OGRAC_REMASTER_STEP_RECOVERY_FAIL,
OGRAC_REMASTER_STEP_PUBLISH_FAIL,
OGRAC_REMASTER_CREATE_FREE_MIGRATE_PROC_FAIL,
OGRAC_REMASTER_CREATE_CLEAN_OWNER_PROC_FAIL,
OGRAC_REMASTER_CREATE_LOCKRES_RCY_PROC_FAIL,
OGRAC_REMASTER_CREATE_COLLECT_PAGEINFO_PROC_FAIL,
OGRAC_REMASTER_CREATE_MIGRATE_RES_PROC_FAIL,
OGRAC_BCAST_RECOVERY_DONE_OTHER_ABORT,
OGRAC_BCAST_REFORM_DONE_OTHER_ABORT,
OGRAC_DLS_REQUEST_LOCK_OWNER_FAIL,
OGRAC_DLS_REQUEST_LOCK_OWNER_SUCC_ABORT,
OGRAC_DLS_REQUEST_LOCK_MSG_SEND_FAIL,
OGRAC_DLS_REQUEST_LOCK_MSG_SEND_SUCC_ABORT,
OGRAC_DLS_CLAIM_LOCK_OWNER_FAIL,
OGRAC_DLS_CLAIM_LOCK_OWNER_SUCC_ABORT,
OGRAC_DLS_CLAIM_LOCK_OWNER_BEFORE_ABORT,
OGRAC_DDL_CREATE_TMP_TABLE_BEFORE_CREATE_LTT_ABORT,
OGRAC_DDL_CREATE_TMP_TABLE_AFTER_CREATE_LTT_ABORT,
OGRAC_DDL_DROP_TMP_TABLE_BEFORE_RELEASE_LTT_ABORT,
OGRAC_DDL_DROP_TMP_TABLE_AFTER_RELEASE_LTT_ABORT,
OGRAC_DDL_CREATE_TABLE_BEFORE_SYNC_ABORT,
OGRAC_DDL_CREATE_TABLE_AFTER_SYNC_ABORT,
OGRAC_DDL_CREATE_TABLE_FAIL,
OGRAC_DDL_CREATE_TABLE_HANDLE_REFS_FAIL,
OGRAC_DDL_DROP_TABLE_AFTER_LOG_PUT,
OGRAC_DDL_DROP_TABLE_BEFORE_SYNC_ABORT,
OGRAC_DDL_DROP_TABLE_AFTER_SYNC_ABORT,
OGRAC_DDL_DROP_TABLE_FAIL,
OGRAC_DDL_ALTER_TABLE_AFTER_LOG_PUT,
OGRAC_DDL_ALTER_TABLE_BEFORE_SYNC_ABORT,
OGRAC_DDL_ALTER_TABLE_AFTER_SYNC_ABORT,
OGRAC_DDL_ALTER_TABLE_RETURN_ERROR,
OGRAC_DDL_CREATE_HASH_PART_INDEX_BEFORE_WRITE_UNDO_ABORT,
OGRAC_DDL_CREATE_HASH_PART_INDEX_AFTER_WRITE_UNDO_ABORT,
OGRAC_DDL_CREATE_HASH_PART_HEAP_SEG_BEFORE_WRITE_UNDO_ABORT,
OGRAC_DDL_CREATE_HASH_PART_HEAP_SEG_AFTER_WRITE_UNDO_ABORT,
OGRAC_DDL_CREATE_USER_BEFORE_SYNC_ABORT,
OGRAC_DDL_CREATE_USER_AFTER_SYNC_ABORT,
OGRAC_DDL_DROP_USER_BEFORE_SYNC_ABORT,
OGRAC_DDL_DROP_USER_AFTER_SYNC_ABORT,
OGRAC_DDL_ALTER_USER_BEFORE_SYNC_ABORT,
OGRAC_DDL_ALTER_USER_AFTER_SYNC_ABORT,
OGRAC_DDL_CREATE_INDEX_BEFORE_SYNC_ABORT,
OGRAC_DDL_CREATE_INDEX_AFTER_SYNC_ABORT,
OGRAC_DDL_DROP_INDEX_BEFORE_SYNC_ABORT,
OGRAC_DDL_DROP_INDEX_AFTER_SYNC_ABORT,
OGRAC_DDL_ALTER_INDEX_BEFORE_SYNC_ABORT,
OGRAC_DDL_ALTER_INDEX_AFTER_SYNC_ABORT,
OGRAC_DDL_DROP_SPACE_BEFORE_SYNC_ABORT,
OGRAC_DDL_CREATE_DATAFILE_BEFORE_CREATE_DF_ABORT,
OGRAC_DDL_CREATE_DATAFILE_FAIL,
OGRAC_DDL_CREATE_DATAFILE_AFTER_CREATE_DF_ABORT,
OGRAC_DDL_CREATE_DATAFILE_BEFORE_SAVE_CTRL_ABORT,
OGRAC_DDL_CREATE_DATAFILE_SAVE_DF_CTRL_FAIL,
OGRAC_DDL_CREATE_DATAFILE_SAVE_SPC_CTRL_FAIL,
OGRAC_DDL_CREATE_DATAFILE_BEFORE_SYNC_ABORT,
OGRAC_DDL_CREATE_DATAFILE_AFTER_SYNC_DDL_ABORT,
OGRAC_DDL_EXTEND_DATAFILE_BEFORE_LOG_COMMIT_ABORT,
OGRAC_DDL_EXTEND_DATAFILE_BEFORE_EXTEND_DEVICE_ABORT,
OGRAC_DDL_EXTEND_DATAFILE_FAIL,
OGRAC_DDL_EXTEND_DATAFILE_BEFORE_SAVE_DF_CTRL_ABORT,
OGRAC_DDL_EXTEND_DATAFILE_SAVE_DF_CTRL_FAIL,
OGRAC_DDL_EXTEND_DATAFILE_BEFORE_SYNC_ABORT,
OGRAC_DDL_EXTEND_DATAFILE_AFTER_SYNC_ABORT,
OGRAC_DDL_REMOVE_DATAFILE_BEFORE_LOGPUT_ABORT,
OGRAC_DDL_REMOVE_DATAFILE_AFTER_LOGPUT_ABORT,
OGRAC_DDL_REMOVE_DATAFILE_SAVE_SPC_CTRL_FAIL,
OGRAC_DDL_REMOVE_DATAFILE_AFTER_WRITE_SPACECTRL_ABORT,
OGRAC_DDL_REMOVE_DATAFILE_SAVE_DF_CTRL_FAIL,
OGRAC_DDL_REMOVE_DATAFILE_FAIL,
OGRAC_DDL_REMOVE_DATAFILE_BEFORE_SYNC_ABORT,
OGRAC_DDL_REMOVE_DATAFILE_AFTER_SYNC_ABORT,
OGRAC_DDL_TRUNCATE_DATAFILE_BEFORE_LOG_COMMIT_ABORT,
OGRAC_DDL_TRUNCATE_DATAFILE_BEFORE_TRUNCATE_DEVICE_ABORT,
OGRAC_DDL_TRUNCATE_DATAFILE_FAIL,
OGRAC_DDL_TRUNCATE_DATAFILE_BEFORE_SAVE_DF_CTRL_ABORT,
OGRAC_DDL_TRUNCATE_DATAFILE_SAVE_DF_CTRL_FAIL,
OGRAC_DDL_TRUNCATE_DATAFILE_BEFORE_SYNC_ABORT,
OGRAC_DDL_TRUNCATE_DATAFILE_AFTER_SYNC_ABORT,
OGRAC_DDL_DROP_SPACE_BEFORE_LOGPUT_ABORT,
OGRAC_DDL_DROP_SPACE_AFTER_LOGPUT_ABORT,
OGRAC_DDL_DROP_SPACE_FAIL,
OGRAC_DDL_DROP_SPACE_SAVE_CTRL_FAIL,
OGRAC_DDL_DROP_SPACE_AFTER_SYNC_ABORT,
OGRAC_DDL_DROP_SPACE_BEFORE_WRITE_CTRL_ABORT,
OGRAC_DDL_DROP_SPACE_AFTER_WRITE_CTRL_ABORT,
OGRAC_LOCK_TABLE_X_LOCAL_BEFORE_ABORT,
OGRAC_LOCK_TABLE_X_LOCAL_AFTER_ABORT,
OGRAC_LOCK_TABLE_X_DLS_AFTER_ABORT,
OGRAC_LOCK_TABLE_S_LOCAL_BEFORE_ABORT,
OGRAC_LOCK_TABLE_S_LOCAL_AFTER_ABORT,
OGRAC_LOCK_TABLE_S_DLS_AFTER_ABORT,
OGRAC_DDL_BEFORE_SYNC_DDL_ABORT,
OGRAC_DDL_AFTER_SYNC_DDL_ABORT,
OGRAC_GET_USER_STATS_ACK_TIMEOUT,
OGRAC_SET_USER_STATS_ACK_TIMEOUT,
OGRAC_BACKUP_REV_PRECHECK_STAT_REQ_ABORT,
OGRAC_BACKUP_REV_PRECHECK_ARCH_REQ_ABORT,
OGRAC_BACKUP_TRIGGER_FORCH_ARCH_ABORT,
OGRAC_BACKUP_TRIGGER_FORCH_ARCH_WAIT_ABORT,
OGRAC_BACKUP_TRIGGER_CKPT_ABORT,
OGRAC_BACKUP_REV_LSN_REQ_ABORT,
OGRAC_BACKUP_REV_RCY_REQ_ABORT,
OGRAC_BACKUP_REV_LRP_REQ_ABORT,
OGRAC_BACKUP_REV_CTRL_REQ_ABORT,
OGRAC_BACKUP_REV_CKPT_REQ_FAIL,
OGRAC_BACKUP_READ_PAGE_FROM_DBSTOR_FAIL,
OGRAC_BACKUP_WRITE_PAGE_TO_FILE_FAIL,
OGRAC_BACKUP_WRITE_CTRL_TO_FILE_FAIL,
OGRAC_BACKUP_WRITE_BACKUPSET_TO_FILE_FAIL,
OGRAC_BACKUP_READ_LOG_FROM_ARCH_FAIL,
OGRAC_BACKUP_WRITE_LOG_TO_FILE_FAIL,
OGRAC_ARCH_GET_LOG_CAPACITY_FAIL,
OGRAC_ARCH_GET_LOG_FAIL,
OGRAC_ARCH_WRITE_LOG_TO_FILE_FAIL,
OGRAC_ARCH_RENAME_TMP_FILE_FAIL,
OGRAC_REFORM_ARCHIVE_INIT_ARCH_CTX_FAIL,
OGRAC_REFORM_ARCHIVE_READ_REDO_LOG_FAIL,
OGRAC_RST_OPEN_NAMESPACE_FAIL,
OGRAC_SPC_OPEN_DATAFILE_FAIL,
OGRAC_OPEN_DEVICE_FAIL,
OGRAC_UPGRADE_CTRL_VERSION_LOCK_DDL_FAIL,
OGRAC_UPGRADE_CTRL_VERSION_WRITE_DISK_FAIL,
OGRAC_UPGRADE_CTRL_VERSION_BEFORE_WRITE_DISK_ABORT,
OGRAC_UPGRADE_CTRL_VERSION_AFTER_WRITE_DISK_ABORT,
OGRAC_UPGRADE_CTRL_VERSION_SEND_SYNC_FAIL,
OGRAC_UPGRADE_CTRL_VERSION_SEND_ACK_FAIL,
OGRAC_RD_DROP_TABLE_DELAY,
OGRAC_BEFORE_RD_DROP_TABLE_DELAY,
OGRAC_DDL_ROLLBACK_DROP_GARBAGE_TABLE_FAIL,
OGRAC_DDL_DELETE_GARBAGE_TABLE_4COMMIT_FAIL,
OGRAC_DDL_DELETE_GARBAGE_TABLE_4DROP_TABLE_FAIL,
OGRAC_DDL_TRUNCATE_TABLE_PRECHECK_FAIL,
OGRAC_DDL_TRUNCATE_TABLE_FAIL,
OGRAC_KNL_COMMIT_DELAY,
OGRAC_KNL_COMMIT_DELAY_ONCE,
OGRAC_DDL_TABLE_BEFORE_COMMIT_ABORT,
OGRAC_DDL_TABLE_AFTER_COMMIT_ABORT,
OGRAC_REFORM_BUILD_CHANNEL_DELAY,
OGRAC_REFORM_BUILD_CHANNEL_ABORT,
OGRAC_BACKUP_DBS_IOF_FAIL,
OGRAC_BACKUP_CORE_LOG_INFO_FAIL,
OGRAC_CKPT_CHECKSUM_VERIFY_FAIL,
COLLECT_STATISTICS_CREATE_TEMP_TABLE_FAIL,
COLLECT_STATISTICS_COLLECT_SAMPLED_DATA_FAIL,
COLLECT_STATISTICS_ANALYZED_DATA_FAIL,
COLLECT_STATISTICS_INDEX_FAIL,
COLLECT_STATISTICS_PERSISTENCE_THROUGH_RESULT_FAIL,
CTC_SQL_ALLOC_CONTEXT_FAIL,
CBO_CANNOT_REWRITE_BY_INDEX,
} knl_syncpoint_id;
typedef void (*syncpoint_callback)(int32 *param, int32 ret);
typedef struct st_knl_syncpoint_def {
uint32 id;
bool32 flag;
char name[KNL_MAX_SYNCPOINT_NAME_LEN];
uint32 count;
syncpoint_callback op;
spinlock_t lock;
} knl_global_syncpoint_def;
status_t sp_exec_global_syncpoint(uint32 sp_id, int32 *user_param, int32 ret);
status_t sp_set_global_syncpoint(syncpoint_def_t *syncpoint_def);
bool32 sp_get_global_syncpoint_flag(uint32 sp_id);
uint32 sp_get_global_syncpoint_count(uint32 sp_id);
const char *sp_get_global_syncpoint_name(uint32 sp_id);
uint32 sp_get_global_syncpoint_total_count(void);
#define OG_SESSION_MAX_SYNCPOINT 10
#define OG_CONCURRENT_MAX_SYNCPOINT 0x80
#define INVALID_SYNCPOINT_INDEX OG_SESSION_MAX_SYNCPOINT
#define INDEX_IS_INVALID(inx) ((inx) == INVALID_SYNCPOINT_INDEX)
typedef struct st_syncpoint_action {
uint32 active_syncpoint;
syncpoint_def_t syncpoint_def[OG_SESSION_MAX_SYNCPOINT];
} syncpoint_action_t;
typedef struct st_syncpoint {
spinlock_t syncpoint_lock;
uint32 num_signal;
char signals[OG_CONCURRENT_MAX_SYNCPOINT * OG_NAME_BUFFER_SIZE];
} syncpoint_t;
status_t sp_add_syncpoint(knl_handle_t knl_session, syncpoint_def_t *syncpoint_def);
status_t sp_reset_syncpoint(knl_handle_t knl_session);
status_t sp_exec_syncpoint(knl_handle_t knl_session, const char *syncpoint_name);
void sp_clear_syncpoint_action(knl_handle_t knl_session);
#endif
#ifdef __cplusplus
}
#endif
#endif