Merge branch 'feature/tkv' of https://github.com/taosdata/TDengine into feature/vnode
This commit is contained in:
commit
d9343722aa
|
@ -16,6 +16,7 @@
|
||||||
#ifndef _TD_TKV_H_
|
#ifndef _TD_TKV_H_
|
||||||
#define _TD_TKV_H_
|
#define _TD_TKV_H_
|
||||||
|
|
||||||
|
#if 0
|
||||||
#include "os.h"
|
#include "os.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@ -59,4 +60,5 @@ void tkvWriteOptsDestroy(STkvWriteOpts *);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
#endif /*_TD_TKV_H_*/
|
#endif /*_TD_TKV_H_*/
|
|
@ -54,7 +54,7 @@ int32_t taosFtruncateFile(FileFd fd, int64_t length);
|
||||||
int32_t taosFsyncFile(FileFd fd);
|
int32_t taosFsyncFile(FileFd fd);
|
||||||
|
|
||||||
int64_t taosReadFile(FileFd fd, void *buf, int64_t count);
|
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);
|
void taosCloseFile(FileFd fd);
|
||||||
|
|
||||||
|
|
|
@ -8,10 +8,4 @@ target_include_directories(
|
||||||
target_link_libraries(
|
target_link_libraries(
|
||||||
tkv
|
tkv
|
||||||
PUBLIC os
|
PUBLIC os
|
||||||
)
|
)
|
||||||
if(${BUILD_WITH_ROCKSDB})
|
|
||||||
target_link_libraries(
|
|
||||||
tkv
|
|
||||||
PUBLIC rocksdb
|
|
||||||
)
|
|
||||||
endif(${BUILD_WITH_ROCKSDB})
|
|
|
@ -11,4 +11,25 @@
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#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_*/
|
|
@ -1,58 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
|
||||||
*
|
|
||||||
* 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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _TD_TKV_DEF_H_
|
|
||||||
#define _TD_TKV_DEF_H_
|
|
||||||
|
|
||||||
#ifdef USE_ROCKSDB
|
|
||||||
#include <rocksdb/c.h>
|
|
||||||
#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_*/
|
|
|
@ -13,8 +13,8 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _TD_TVK_ROCKSDB_H_
|
#ifndef _TD_TKV_MACRO_H_
|
||||||
#define _TD_TVK_ROCKSDB_H_
|
#define _TD_TKV_MACRO_H_
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
@ -24,4 +24,4 @@ extern "C" {
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /*_TD_TVK_ROCKSDB_H_*/
|
#endif /*_TD_TKV_MACRO_H_*/
|
|
@ -0,0 +1,39 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
||||||
|
*
|
||||||
|
* 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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#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++; }
|
|
@ -1,171 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
|
||||||
*
|
|
||||||
* 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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#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
|
|
||||||
}
|
|
|
@ -120,7 +120,7 @@ int64_t taosReadFile(FileFd fd, void *buf, int64_t count) {
|
||||||
return 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 nleft = n;
|
||||||
int64_t nwritten = 0;
|
int64_t nwritten = 0;
|
||||||
char * tbuf = (char *)buf;
|
char * tbuf = (char *)buf;
|
||||||
|
|
Loading…
Reference in New Issue