* 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.
* ---------------------------------------------------------------------------------------
*
* gs_bbox.h
*
* IDENTIFICATION
* src/include/gs_bbox.h
*
* ---------------------------------------------------------------------------------------
*/
#ifndef __GS_BBOX_H__
#define __GS_BBOX_H__
#include "postgres.h"
#include "knl/knl_variable.h"
#include "utils/guc.h"
* all kinds of blacklist items.
*
* NOTE: at most 64 different blacklist items are supported now. We can enlarge this upper limits
* by changing g_instance.attr.attr_common.bbox_blacklist_mask from uint64 to Bitmap.
*/
typedef enum {
SHARED_BUFFER = 0,
XLOG_BUFFER,
DW_BUFFER,
XLOG_MESSAGE_SEND,
DATA_MESSAGE_SEND,
WALRECIVER_CTL_BLOCK,
DATA_WRITER_QUEUE
} BlacklistIndex;
typedef struct {
BlacklistIndex blacklist_ID;
char *blacklist_name;
bool pm_only;
} BlacklistItem;
extern BlacklistItem g_blacklist_items[];
#define BBOX_ENABLED (u_sess->attr.attr_common.enable_bbox_dump)
#define BBOX_BLACKLIST (g_instance.attr.attr_common.bbox_blacklist_mask)
#define BLACKLIST_ITEM_MASK(blacklist_ID) ((uint64)1 << (unsigned int)(blacklist_ID))
#define BBOX_BLACKLIST_SHARE_BUFFER (BBOX_ENABLED && (BBOX_BLACKLIST & BLACKLIST_ITEM_MASK(SHARED_BUFFER)))
#define BBOX_BLACKLIST_XLOG_BUFFER (BBOX_ENABLED && (BBOX_BLACKLIST & BLACKLIST_ITEM_MASK(XLOG_BUFFER)))
#define BBOX_BLACKLIST_DW_BUFFER (BBOX_ENABLED && (BBOX_BLACKLIST & BLACKLIST_ITEM_MASK(DW_BUFFER)))
#define BBOX_BLACKLIST_XLOG_MESSAGE_SEND (BBOX_ENABLED && (BBOX_BLACKLIST & BLACKLIST_ITEM_MASK(XLOG_MESSAGE_SEND)))
#define BBOX_BLACKLIST_DATA_MESSAGE_SEND (BBOX_ENABLED && (BBOX_BLACKLIST & BLACKLIST_ITEM_MASK(DATA_MESSAGE_SEND)))
#define BBOX_BLACKLIST_WALREC_CTL_BLOCK (BBOX_ENABLED && (BBOX_BLACKLIST & BLACKLIST_ITEM_MASK(WALRECIVER_CTL_BLOCK)))
#define BBOX_BLACKLIST_DATA_WRITER_QUEUE (BBOX_ENABLED && (BBOX_BLACKLIST & BLACKLIST_ITEM_MASK(DATA_WRITER_QUEUE)))
#ifdef ENABLE_UT
#include "../gausskernel/cbb/bbox/bbox.h"
extern int bbox_handler_exit;
extern void bbox_handler(SIGNAL_ARGS);
extern s32 BBOX_CreateCoredump(char* file_name);
#endif
extern void bbox_initialize();
extern void bbox_blacklist_add(BlacklistIndex item, void *addr, uint64 size);
extern void bbox_blacklist_remove(BlacklistIndex item, void *addr);
extern bool check_bbox_corepath(char** newval, void** extra, GucSource source);
extern void assign_bbox_corepath(const char* newval, void* extra);
extern const char* show_bbox_dump_path(void);
extern bool check_bbox_blacklist(char** newval, void** extra, GucSource source);
extern void assign_bbox_blacklist(const char* newval, void* extra);
extern const char* show_bbox_blacklist();
extern void assign_bbox_coredump(const bool newval, void* extra);
extern int CheckFilenameValid(const char* inputEnvValue);
#endif