* Copyright (c) 2022 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.
* -------------------------------------------------------------------------
*
* executor_defs.h
*
* IDENTIFICATION
* src/executor/executor_defs.h
*
* -------------------------------------------------------------------------
*/
#ifndef __DCC_EXECUTOR_DEFS_H__
#define __DCC_EXECUTOR_DEFS_H__
#include "cm_types.h"
#include "cm_defs.h"
#include "cm_error.h"
#include "cm_text.h"
#include "cm_timer.h"
#include "cm_sync.h"
#include "cm_queue.h"
#include "cm_log.h"
#include "srv_param.h"
#include "dcc_msg_cmd.h"
#ifdef __cplusplus
extern "C" {
#endif
#define EXC_STREAM_ID_DEFAULT (1)
#define EXC_PATH_MAX_SIZE (MAX_PARAM_VALUE_LEN + 1)
#define EXC_DCF_CFG_SIZE SIZE_K(4)
#define EXC_DCF_TRUNCATE_SIZE (100000)
#define EXC_DCF_APPLY_IDX_FROZEN_CNT_THOLD (10)
#define EXC_DISK_AVAIL_RATE (0.2)
#define EXC_DCF_APPLY_INDEX_SIZE (3000)
#define EXC_DCF_ROLE_NOT_LEADER_ERRORNO (603)
#define EXC_THREAD_SLEEP_TIME (10)
#define EXC_DCF_START_LOOP (1000)
#define EXC_DCF_SET_APPLY_TIMEOUT (10000)
#define EXC_DCF_WAIT_ALL_APPLY_TIMEOUT (300000)
#define MILLISECS_PERP_SECOND 1000U
#define MICROSECS_PERP_MILLISEC 1000U
#define EXC_BIT_MOVE_TWO_BYTES (16)
#define EXC_BIT_MOVE_FOUR_BYTES (32)
#define EXC_BIT_MOVE_SIX_BYTES (48)
#define EXC_KEY_MAX_SIZE SIZE_K(4)
#define EXC_DATA_MAX_SIZE SIZE_M(10)
#define EXC_DIGIT_MAX_SIZE (32)
#define EXC_STG_ROW_MAX_SIZE SIZE_M(2)
#define EXC_DCF_APPLIED_INDEX_KEY "dcf_applied_index"
#define EXC_DCF_APPLIED_INDEX_LEN (17)
#define EXC_SLEEP_1_FIXED 1
#define EXC_MSG_BATCH_COMMIT 1000
#define EXC_WAIT_DB_COMMIT_TIMEOUT (3000)
typedef struct st_exc_msg_queue {
spinlock_t lock;
biqueue_t msg_queue;
cm_event_t event;
thread_t thread;
} exc_msg_queue_t;
typedef struct st_exc_check_thread {
latch_t lock;
volatile bool32 is_check_all_applied;
uint32_t role_type;
thread_t thread;
} exc_check_thread_t;
typedef struct st_exc_cmd_get {
uint32 cmd;
bool32 is_prefix;
uint32 read_level;
text_t key;
} exc_cmd_get_t;
static inline void exc_put_uint32(const char* buff, uint32 value, uint32* offset)
{
CM_ASSERT(buff != NULL);
*(uint32 *)(buff + *offset) = value;
*offset += sizeof(uint32);
}
static inline void exc_put_uint64(const char* buff, uint64 value, uint32* offset)
{
CM_ASSERT(buff != NULL);
*(uint64 *)(buff + *offset) = value;
*offset += sizeof(uint64);
}
static inline status_t exc_put_text(char* buff, uint32 buff_len, const text_t *text, uint32* offset)
{
CM_ASSERT(buff != NULL);
CM_ASSERT(text != NULL);
*(uint32 *)(buff + *offset) = text->len;
*offset += sizeof(uint32);
if (text->len == 0) {
return CM_SUCCESS;
}
MEMS_RETURN_IFERR(memcpy_s((buff + *offset), buff_len - *offset, text->str, text->len));
*offset += CM_ALIGN4(text->len);
return CM_SUCCESS;
}
#ifdef __cplusplus
}
#endif
#endif