first commit for openGauss server

This commit is contained in:
lishifu
2020-06-30 17:38:27 +08:00
parent bcb52078d5
commit 815a9771fb
7975 changed files with 9646516 additions and 61 deletions

View File

@ -0,0 +1,120 @@
/*
* 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.
* ---------------------------------------------------------------------------------------
*
* dataqueue.h
*
*
*
* IDENTIFICATION
* src/include/replication/dataqueue.h
*
* ---------------------------------------------------------------------------------------
*/
#ifndef _DATAQUEUE_H
#define _DATAQUEUE_H
#include "c.h"
#include "gs_threadlocal.h"
#include "replication/dataqueuedefs.h"
#include "replication/bcm.h"
#include "storage/s_lock.h"
#include "utils/hsearch.h"
#include "utils/pg_crc.h"
#define WS_MAX_DATA_QUEUE_SIZE (uint32)(g_instance.attr.attr_storage.DataQueueBufSize * 1024)
#define GETATTID(attid) ((attid) & 0xffff)
#define GETBUCKETID(attid) (((uint)(attid) >> 16) - 1)
/*
* ------------------------------------------------------
* |****************| |**************| |
* -----------------------------------------------------
* 0 use_tail1 use_head2 use_tail2 tail
*
* From use_tail1 to use_head2 and from use_tail2 to tail are freespace
*/
typedef struct DataQueueData {
uint32 size; /* memory size */
DataQueuePtr use_tail1;
DataQueuePtr use_head2; /* from use_head2 to use_tail2 are elements */
DataQueuePtr use_tail2;
slock_t use_mutex; /* protect above variables */
char* pages;
} DataQueueData, *DataQueue;
typedef struct DataElementHeaderData {
RelFileNodeOld rnode;
BlockNumber blocknum;
int attid; /* column storage id */
StorageEngine type;
uint64 offset; /* offset the element to be written */
uint32 data_size; /* element size */
DataQueuePtr queue_offset; /* current page offset in queue */
XLogRecPtr ref_rec_ptr; /* the associated ref xlog ptr */
#ifdef DATA_DEBUG
pg_crc32 data_crc; /* CRC for current page */
#endif
} DataElementHeaderData, *DataElementHeader;
typedef struct BCMElementData {
RelFileNodeOld rnode;
BlockNumber blocknum;
int attid; /* column storage id */
StorageEngine type;
uint64 offset; /* offset the element to be written */
uint32 data_size; /* element size */
bool is_vaild; /* is this block vaild ? */
} BCMElementData, *BCMElement;
typedef struct heap_sync_rel_key {
Oid rd_id; /* the relation */
} heap_sync_rel_key;
typedef struct heap_sync_rel {
heap_sync_rel_key key; /* hash key ... must be first */
} heap_sync_rel;
extern Size DataQueueShmemSize(void);
extern void DataSenderQueueShmemInit(void);
extern void DataWriterQueueShmemInit(void);
extern DataQueuePtr PushToSenderQueue(const RelFileNode& rnode, BlockNumber blockNum, StorageEngine type,
const char* mem, uint32 data_len, int attid, uint64 offset);
extern DataQueuePtr PushToWriterQueue(const char* mem, uint32 mem_len);
extern uint32 GetFromDataQueue(
char*& buf, int bufsize, DataQueuePtr& startptr, DataQueuePtr& endptr, bool amIWriter, DataQueueData* data_queue);
extern void PopFromDataQueue(const DataQueuePtr& position, DataQueueData* data_queue);
extern void PushCUToDataQueue(Relation rel, int col, const char* mem, _in_ uint64 offset, _in_ int size, bool setbcm);
extern void ResetDataQueue(DataQueueData* data_queue);
extern bool DataQueueIsEmpty(DataQueueData* data_queue);
extern void CStoreCUReplication(
_in_ Relation rel, _in_ int attrId, _in_ char* cuData, _in_ int cuSize, _in_ uint64 cuFileOffset);
extern bool BCMArrayIsEmpty(void);
extern void ResetBCMArray(void);
extern void ClearBCMArray(void);
extern void BCMArrayDropAllBlocks(const RelFileNode& dropnode);
extern void HeapSyncHashSearch(Oid rd_id, HASHACTION action);
extern void AtAbort_RelationSync(void);
extern void AtCommit_RelationSync(void);
extern void PallocBCMBCMElementArray(void);
#endif