Files
openGauss-server/src/include/hotpatch/hotpatch.h
2020-06-30 17:38:27 +08:00

141 lines
3.9 KiB
C

/*
* Copyright (c) 2020 Huawei Technologies Co.,Ltd.
*
* openGauss 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.
* ---------------------------------------------------------------------------------------
*
* hotpatch.h
*
*
*
* IDENTIFICATION
* src/include/hotpatch/hotpatch.h
*
* ---------------------------------------------------------------------------------------
*/
#ifndef HOTPATCH_H
#define HOTPATCH_H
#define HP_OK (0)
#define HP_ERR (-1)
const int g_max_length_time = 64;
const int g_max_length_act = 16;
const int g_max_length_path = 4096;
const int g_max_length_std_path = 4096;
const int g_first_err = 0x1000;
const int g_lock_file_size = 1024;
const int g_length_statstr = 50;
const int g_max_number_patch = 1000;
const int g_length_okstr = 15;
const int g_length_list = 4;
const int g_max_length_line = 128;
const int g_rev_bytes_info = 3;
#define PATCH_MODULE_GAUSSDB (0)
#define PATCH_MODULE_GTM (1)
#define MAX_LENGTH_RETURN_STRING (1024)
typedef enum HP_NODE_TYPE {
HP_NODE_GAUSSDB,
HP_NODE_GTM,
HP_NODE_CMAGENT,
HP_NODE_CMSERVER,
HP_NODE_OMMONITOR,
HP_NODE_MAX,
} HP_NODE_TYPE_T;
typedef enum HP_STATE {
HP_STATE_UNKNOW,
HP_STATE_UNLOAD,
HP_STATE_DEACTIVE,
HP_STATE_ACTIVED,
} HP_STATE_T;
typedef enum HP_ERROR_CODE {
HP_ERROR_NAME_NUMBER = g_first_err,
HP_ERROR_INSUFFICIENT_MEM,
HP_ERROR_SUFFIX_INCORRECT,
HP_ERROR_UNKNOWN_NAME,
HP_ERROR_EMPTY_NAME,
HP_ERROR_EMPTY_COMMAND,
HP_ERROR_LOADED_BEFORE,
HP_ERROR_CANNOT_UNLOAD,
HP_ERROR_CANNOT_ACTIVE,
HP_ERROR_CANNOT_DEACTIVE,
HP_ERROR_RANGE,
HP_ERROR_NO_PATCH_LOADED,
HP_ERROR_EMPTY_PARAMETER,
HP_ERROR_INITED_BEFORE,
HP_ERROR_LIB_INIT_ERROR,
HP_ERROR_NOT_INIT,
HP_ERROR_UNKNOWN_ACTION,
HP_ERROR_FETCH_ERROR,
HP_ERROR_VERSION,
HP_ERROR_GTM_UNCONNECTED,
HP_ERROR_GTM_START_ERROR,
HP_ERROR_GTM_SEND_ERROR,
HP_ERROR_GTM_SEND_END_ERROR,
HP_ERROR_GTM_FLUSH_ERROR,
HP_ERROR_GTM_RECEIVE_ERROR,
HP_ERROR_OPERATION_LOG_ERR,
HP_ERROR_COMMUNICATION_ERR,
HP_ERROR_UNDER_PATCHING,
HP_ERROR_SYSTEM_ERROR,
HP_ERROR_FILE_SEEK_ERROR,
HP_ERROR_FILE_WRITE_ERROR,
HP_ERROR_FILE_READ_ERROR,
HP_ERROR_FILE_OPEN_ERROR,
HP_ERROR_FILE_SYNC_ERROR,
HP_ERROR_FILE_LOCK_ERROR,
HP_ERROR_FILE_RENAME_ERROR,
HP_ERROR_FILE_PATH_ERROR,
HP_ERROR_PATCH_NUMBER_ERROR,
HP_ERROR_PATCH_INFO_ERROR,
HP_ERROR_CM_DATADIR_NULL,
HP_ERROR_COMMON_ERROR_MAX,
} HP_ERROR_CODE_T;
typedef enum HP_INFO_STATE {
HP_INFO_NOT_EXIST,
HP_INFO_EXIST,
HP_INFO_NEED_RFRESH,
} HP_INFO_STATE_T;
typedef struct PATCH_LOG {
char time_stamp[g_max_length_time];
char operation[g_max_length_act];
char patch_name[g_max_length_path];
char rev[16];
} PATCH_LOG_T;
typedef struct PATCH_INFO_HEADER {
int max_patch_number; // record how many patchs has been loaded
int rev;
} PATCH_INFO_HEADER_T;
typedef struct PATCH_INFO {
int patch_number;
char patch_state;
char rev[g_rev_bytes_info];
char patch_name[g_max_length_path];
} PATCH_INFO_T;
typedef void (*HOTPATCH_LOG_FUNC)(unsigned int level, const char* fmt);
extern int hotpatch_init(int node_type, const char* default_dir, HOTPATCH_LOG_FUNC log_func);
extern int exec_hotpatch_command(const char* filename, const char* action, char* output_string, size_t string_length);
void patch_err_info_handler(int error_code, char* out_string, size_t string_length);
char* strip_path_from_pathname(const char* name_withpath);
#endif