diff --git a/include/libs/tkv/tkv.h b/include/libs/tkv/tkv.h index edade1dc36..98194f090c 100644 --- a/include/libs/tkv/tkv.h +++ b/include/libs/tkv/tkv.h @@ -16,6 +16,7 @@ #ifndef _TD_TKV_H_ #define _TD_TKV_H_ +#if 0 #include "os.h" #ifdef __cplusplus @@ -59,4 +60,5 @@ void tkvWriteOptsDestroy(STkvWriteOpts *); } #endif +#endif #endif /*_TD_TKV_H_*/ \ No newline at end of file diff --git a/include/os/osFile.h b/include/os/osFile.h index 8d03759d82..2b0abc60ae 100644 --- a/include/os/osFile.h +++ b/include/os/osFile.h @@ -54,7 +54,7 @@ int32_t taosFtruncateFile(FileFd fd, int64_t length); int32_t taosFsyncFile(FileFd fd); int64_t taosReadFile(FileFd fd, void *buf, int64_t count); -int64_t taosWriteFile(FileFd fd, void *buf, int64_t count); +int64_t taosWriteFile(FileFd fd, const void *buf, int64_t count); void taosCloseFile(FileFd fd); diff --git a/source/libs/tkv/CMakeLists.txt b/source/libs/tkv/CMakeLists.txt index 529b2703f7..0620e12f55 100644 --- a/source/libs/tkv/CMakeLists.txt +++ b/source/libs/tkv/CMakeLists.txt @@ -8,10 +8,4 @@ target_include_directories( target_link_libraries( tkv PUBLIC os -) -if(${BUILD_WITH_ROCKSDB}) - target_link_libraries( - tkv - PUBLIC rocksdb - ) -endif(${BUILD_WITH_ROCKSDB}) +) \ No newline at end of file diff --git a/source/libs/tkv/src/tkvRocksdb.c b/source/libs/tkv/inc/tDiskMgr.h similarity index 61% rename from source/libs/tkv/src/tkvRocksdb.c rename to source/libs/tkv/inc/tDiskMgr.h index 6dea4a4e57..ff6e0b6ab7 100644 --- a/source/libs/tkv/src/tkvRocksdb.c +++ b/source/libs/tkv/inc/tDiskMgr.h @@ -11,4 +11,25 @@ * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . - */ \ No newline at end of file + */ + +#ifndef _TD_TDISK_MGR_H_ +#define _TD_TDISK_MGR_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "os.h" + +typedef struct SDiskMgr SDiskMgr; + +int tdmReadPage(SDiskMgr *pDiskMgr, int32_t pgid, void *pData); +int tdmWritePage(SDiskMgr *pDiskMgr, int32_t pgid, const void *pData); +int32_t tdmAllocPage(SDiskMgr *pDiskMgr); + +#ifdef __cplusplus +} +#endif + +#endif /*_TD_TDISK_MGR_H_*/ \ No newline at end of file diff --git a/source/libs/tkv/inc/tkvDef.h b/source/libs/tkv/inc/tkvDef.h deleted file mode 100644 index 7433b1a4dd..0000000000 --- a/source/libs/tkv/inc/tkvDef.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * 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_TKV_DEF_H_ -#define _TD_TKV_DEF_H_ - -#ifdef USE_ROCKSDB -#include -#endif - -#ifdef __cplusplus -extern "C" { -#endif -struct STkvDb { -#ifdef USE_ROCKSDB - rocksdb_t *db; -#endif -}; - -struct STkvOpts { -#ifdef USE_ROCKSDB - rocksdb_options_t *opts; -#endif -}; - -struct STkvCache { - // TODO -}; - -struct STkvReadOpts { -#ifdef USE_ROCKSDB - rocksdb_readoptions_t *ropts; -#endif -}; - -struct STkvWriteOpts { -#ifdef USE_ROCKSDB - rocksdb_writeoptions_t *wopts; -#endif -}; - -#ifdef __cplusplus -} -#endif - -#endif /*_TD_TKV_DEF_H_*/ \ No newline at end of file diff --git a/source/libs/tkv/inc/tkvRocksdb.h b/source/libs/tkv/inc/tkvMacro.h similarity index 89% rename from source/libs/tkv/inc/tkvRocksdb.h rename to source/libs/tkv/inc/tkvMacro.h index 658deb335f..6e3458c021 100644 --- a/source/libs/tkv/inc/tkvRocksdb.h +++ b/source/libs/tkv/inc/tkvMacro.h @@ -13,8 +13,8 @@ * along with this program. If not, see . */ -#ifndef _TD_TVK_ROCKSDB_H_ -#define _TD_TVK_ROCKSDB_H_ +#ifndef _TD_TKV_MACRO_H_ +#define _TD_TKV_MACRO_H_ #ifdef __cplusplus extern "C" { @@ -24,4 +24,4 @@ extern "C" { } #endif -#endif /*_TD_TVK_ROCKSDB_H_*/ \ No newline at end of file +#endif /*_TD_TKV_MACRO_H_*/ \ No newline at end of file diff --git a/source/libs/tkv/src/tDiskMgr.c b/source/libs/tkv/src/tDiskMgr.c new file mode 100644 index 0000000000..dfdfd1f96b --- /dev/null +++ b/source/libs/tkv/src/tDiskMgr.c @@ -0,0 +1,39 @@ +/* + * 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 . + */ + +#include "tDiskMgr.h" + +struct SDiskMgr { + const char *fname; + uint16_t pgsize; + FileFd fd; + int32_t npgid; +}; + +#define PAGE_OFFSET(PGID, PGSIZE) ((PGID) * (PGSIZE)) + +int tdmReadPage(SDiskMgr *pDiskMgr, int32_t pgid, void *pData) { + taosLSeekFile(pDiskMgr->fd, PAGE_OFFSET(pgid, pDiskMgr->pgsize), SEEK_SET); + taosReadFile(pDiskMgr->fd, pData, pDiskMgr->pgsize); + return 0; +} + +int tdmWritePage(SDiskMgr *pDiskMgr, int32_t pgid, const void *pData) { + taosLSeekFile(pDiskMgr->fd, PAGE_OFFSET(pgid, pDiskMgr->pgsize), SEEK_SET); + taosWriteFile(pDiskMgr->fd, pData, pDiskMgr->pgsize); + return 0; +} + +int32_t tdmAllocPage(SDiskMgr *pDiskMgr) { return pDiskMgr->npgid++; } \ No newline at end of file diff --git a/source/libs/tkv/src/tkv.c b/source/libs/tkv/src/tkv.c deleted file mode 100644 index 0c6f896d56..0000000000 --- a/source/libs/tkv/src/tkv.c +++ /dev/null @@ -1,171 +0,0 @@ -/* - * 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 . - */ - -#include "tkv.h" -#include "tkvDef.h" - -static pthread_once_t isInit = PTHREAD_ONCE_INIT; -static STkvReadOpts defaultReadOpts; -static STkvWriteOpts defaultWriteOpts; - -static void tkvInit(); - -STkvDb *tkvOpen(const STkvOpts *options, const char *path) { - pthread_once(&isInit, tkvInit); - STkvDb *pDb = NULL; - - pDb = (STkvDb *)malloc(sizeof(*pDb)); - if (pDb == NULL) { - return NULL; - } - -#ifdef USE_ROCKSDB - char *err = NULL; - - pDb->db = rocksdb_open(options->opts, path, &err); - // TODO: check err -#endif - - return pDb; -} - -void tkvClose(STkvDb *pDb) { - if (pDb) { -#ifdef USE_ROCKSDB - rocksdb_close(pDb->db); -#endif - free(pDb); - } -} - -void tkvPut(STkvDb *pDb, const STkvWriteOpts *pwopts, const char *key, size_t keylen, const char *val, size_t vallen) { -#ifdef USE_ROCKSDB - char *err = NULL; - rocksdb_put(pDb->db, pwopts ? pwopts->wopts : defaultWriteOpts.wopts, key, keylen, val, vallen, &err); - // TODO: check error -#endif -} - -char *tkvGet(STkvDb *pDb, const STkvReadOpts *propts, const char *key, size_t keylen, size_t *vallen) { - char *ret = NULL; - -#ifdef USE_ROCKSDB - char *err = NULL; - ret = rocksdb_get(pDb->db, propts ? propts->ropts : defaultReadOpts.ropts, key, keylen, vallen, &err); - // TODD: check error -#endif - - return ret; -} - -STkvOpts *tkvOptsCreate() { - STkvOpts *pOpts = NULL; - - pOpts = (STkvOpts *)malloc(sizeof(*pOpts)); - if (pOpts == NULL) { - return NULL; - } - -#ifdef USE_ROCKSDB - pOpts->opts = rocksdb_options_create(); - // TODO: check error -#endif - - return pOpts; -} - -void tkvOptsDestroy(STkvOpts *pOpts) { - if (pOpts) { -#ifdef USE_ROCKSDB - rocksdb_options_destroy(pOpts->opts); -#endif - free(pOpts); - } -} - -void tkvOptionsSetCache(STkvOpts *popts, STkvCache *pCache) { - // TODO -} - -void tkvOptsSetCreateIfMissing(STkvOpts *pOpts, unsigned char c) { -#ifdef USE_ROCKSDB - rocksdb_options_set_create_if_missing(pOpts->opts, c); -#endif -} - -STkvReadOpts *tkvReadOptsCreate() { - STkvReadOpts *pReadOpts = NULL; - - pReadOpts = (STkvReadOpts *)malloc(sizeof(*pReadOpts)); - if (pReadOpts == NULL) { - return NULL; - } - -#ifdef USE_ROCKSDB - pReadOpts->ropts = rocksdb_readoptions_create(); -#endif - - return pReadOpts; -} - -void tkvReadOptsDestroy(STkvReadOpts *pReadOpts) { - if (pReadOpts) { -#ifdef USE_ROCKSDB - rocksdb_readoptions_destroy(pReadOpts->ropts); -#endif - free(pReadOpts); - } -} - -STkvWriteOpts *tkvWriteOptsCreate() { - STkvWriteOpts *pWriteOpts = NULL; - - pWriteOpts = (STkvWriteOpts *)malloc(sizeof(*pWriteOpts)); - if (pWriteOpts == NULL) { - return NULL; - } - -#ifdef USE_ROCKSDB - pWriteOpts->wopts = rocksdb_writeoptions_create(); -#endif - - return pWriteOpts; -} - -void tkvWriteOptsDestroy(STkvWriteOpts *pWriteOpts) { - if (pWriteOpts) { -#ifdef USE_ROCKSDB - rocksdb_writeoptions_destroy(pWriteOpts->wopts); -#endif - free(pWriteOpts); - } -} - -/* ------------------------ STATIC METHODS ------------------------ */ -static void tkvInit() { -#ifdef USE_ROCKSDB - defaultReadOpts.ropts = rocksdb_readoptions_create(); - defaultWriteOpts.wopts = rocksdb_writeoptions_create(); - rocksdb_writeoptions_disable_WAL(defaultWriteOpts.wopts, true); - -#endif -} - -static void tkvClear() { -#ifdef USE_ROCKSDB - rocksdb_readoptions_destroy(defaultReadOpts.ropts); - rocksdb_writeoptions_destroy(defaultWriteOpts.wopts); -#endif -} diff --git a/source/os/src/osFile.c b/source/os/src/osFile.c index bdf3a53dcb..60155c8fb9 100644 --- a/source/os/src/osFile.c +++ b/source/os/src/osFile.c @@ -120,7 +120,7 @@ int64_t taosReadFile(FileFd fd, void *buf, int64_t count) { return count; } -int64_t taosWriteFile(FileFd fd, void *buf, int64_t n) { +int64_t taosWriteFile(FileFd fd, const void *buf, int64_t n) { int64_t nleft = n; int64_t nwritten = 0; char * tbuf = (char *)buf;