diff --git a/include/util/amalloc.h b/include/util/amalloc.h new file mode 100644 index 0000000000000000000000000000000000000000..944d27513edffc3c639741766e9487e27e85aae0 --- /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 e960b601caf6322938f4b0da3953e0b3ba454ce3..4660dd1cbd8e871885af1e6c0cf1218aa9e32cf1 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 d5778f93445f9a8a0e690212f3123fff45b7de51..73605adc3fd299190db3a95d90fcebe4dc6fc65b 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 79ff0bc76a450950fda7a1a63047a0d70457c035..3d218df55e781c1a9e2620474c8504a85d4b9237 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 f17af4a5a29a244e6c5fe7db6b2c827f76ba37dc..9b3d27776d2f7b5ee2190d542da733ea2187d9d1 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 d6c97132d8918cbc7f738b6ef577b90f37f440d2..0163dd71f1b05039207c29cc90f39fe1089ed980 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 }