From e7b97be7cf6575d689b1f357d447c01a8320d077 Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Mon, 27 Sep 2021 11:42:12 +0800 Subject: [PATCH] refact --- include/util/amalloc.h | 47 +++++++++++++++++++++ include/util/tlockfree.h | 2 +- source/server/vnode/CMakeLists.txt | 5 ++- source/server/vnode/inc/vnodeInt.h | 9 ++-- source/server/vnode/inc/vnodeMemAllocator.h | 2 + source/server/vnode/src/vnodeWrite.c | 6 +-- 6 files changed, 61 insertions(+), 10 deletions(-) create mode 100644 include/util/amalloc.h diff --git a/include/util/amalloc.h b/include/util/amalloc.h new file mode 100644 index 0000000000..944d27513e --- /dev/null +++ b/include/util/amalloc.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2019 TAOS Data, Inc. + * + * This program is free software: you can use, redistribute, and/or modify + * it under the terms of the GNU Affero General Public License, version 3 + * or later ("AGPL"), as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +#ifndef _TD_AMALLOC_H_ +#define _TD_AMALLOC_H_ + +#include "os.h" + +#ifdef __cplusplus +extern "C" { +#endif + +// Interfaces to implement +typedef struct { + void *(*malloc)(void *, size_t size); + void *(*calloc)(void *, size_t nmemb, size_t size); + void (*free)(void *ptr, size_t size); // Do we need to set size in the allocated memory? + void *(*realloc)(void *ptr, size_t size); +} SMemAllocatorIf; + +typedef struct { + void * impl; + SMemAllocatorIf interface; +} SMemAllocator; + +#define amalloc(allocator, size) (*((allocator)->interface.malloc))((allocator)->impl, size) +#define acalloc(allocator, nmemb, size) (*((allocator)->interface.calloc))((allocator)->impl, nmemb, size) +#define arealloc(allocator, ptr, size) (*((allocator)->interface.realloc))((allocator)->impl, ptr, size) +#define afree(allocator, ptr, size) (*((allocator)->interface.free))((allocator)->impl, ptr, size) + +#ifdef __cplusplus +} +#endif + +#endif /*_TD_AMALLOC_H_*/ \ No newline at end of file diff --git a/include/util/tlockfree.h b/include/util/tlockfree.h index e960b601ca..4660dd1cbd 100644 --- a/include/util/tlockfree.h +++ b/include/util/tlockfree.h @@ -71,7 +71,7 @@ typedef void (*_ref_fn_t)(const void* pObj); // single writer multiple reader lock -typedef int32_t SRWLatch; +typedef volatile int32_t SRWLatch; void taosInitRWLatch(SRWLatch *pLatch); void taosWLockLatch(SRWLatch *pLatch); diff --git a/source/server/vnode/CMakeLists.txt b/source/server/vnode/CMakeLists.txt index d5778f9344..73605adc3f 100644 --- a/source/server/vnode/CMakeLists.txt +++ b/source/server/vnode/CMakeLists.txt @@ -14,6 +14,7 @@ target_link_libraries( PUBLIC meta PUBLIC tq PUBLIC tsdb - PRIVATE os - PRIVATE common + PUBLIC os + PUBLIC common + PUBLIC util ) \ No newline at end of file diff --git a/source/server/vnode/inc/vnodeInt.h b/source/server/vnode/inc/vnodeInt.h index 79ff0bc76a..3d218df55e 100644 --- a/source/server/vnode/inc/vnodeInt.h +++ b/source/server/vnode/inc/vnodeInt.h @@ -16,6 +16,7 @@ #ifndef _TD_VNODE_INT_H_ #define _TD_VNODE_INT_H_ +#include "amalloc.h" #include "tq.h" #include "tsdb.h" #include "meta.h" @@ -25,10 +26,10 @@ extern "C" { #endif typedef struct SVnode { - SMeta *pMeta; - STsdb *pTsdb; - STQ * pTQ; - void * allocator; // TODO + SMeta * pMeta; + STsdb * pTsdb; + STQ * pTQ; + SMemAllocator *allocator; } SVnode; #ifdef __cplusplus diff --git a/source/server/vnode/inc/vnodeMemAllocator.h b/source/server/vnode/inc/vnodeMemAllocator.h index f17af4a5a2..9b3d27776d 100644 --- a/source/server/vnode/inc/vnodeMemAllocator.h +++ b/source/server/vnode/inc/vnodeMemAllocator.h @@ -16,6 +16,8 @@ #ifndef _TD_VNODE_MEM_ALLOCATOR_H_ #define _TD_VNODE_MEM_ALLOCATOR_H_ +#include "amalloc.h" + #ifdef __cplusplus extern "C" { #endif diff --git a/source/server/vnode/src/vnodeWrite.c b/source/server/vnode/src/vnodeWrite.c index d6c97132d8..0163dd71f1 100644 --- a/source/server/vnode/src/vnodeWrite.c +++ b/source/server/vnode/src/vnodeWrite.c @@ -20,14 +20,14 @@ int vnodeProcessSubmitReq(SVnode *pVnode, SSubmitReq *pReq, SSubmitRsp *pRsp) { #if 1 void *pMem = NULL; - if ((pMem = aMalloc(pVnode->allocator, REQ_SIZE(pReq))) == NULL) { + if ((pMem = amalloc(pVnode->allocator, REQ_SIZE(pReq))) == NULL) { // No more memory to allocate, schedule an async commit // and continue vnodeAsyncCommit(pVnode); // Reset allocator and allocat more vnodeResetAllocator(pVnode); - pMem = aMalloc(pVnode->allocator, REQ_SIZE(pReq)); + pMem = amalloc(pVnode->allocator, REQ_SIZE(pReq)); if (pMem == NULL) { // TODO: handle the error } @@ -43,7 +43,7 @@ int vnodeProcessSubmitReq(SVnode *pVnode, SSubmitReq *pReq, SSubmitRsp *pRsp) { SSubmitReqReader reader; taosInitSubmitReqReader(&reader, (SSubmitReq *)pMem); - if (tsdbInsertData((SSubmitReq *)pMem) < 0) { + if (tsdbInsert(pVnode->pTsdb, (SSubmitReq *)pMem) < 0) { // TODO: handler error } -- GitLab