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_
|
||||
#define _TD_TKV_H_
|
||||
|
||||
#if 0
|
||||
#include "os.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
@ -59,4 +60,5 @@ void tkvWriteOptsDestroy(STkvWriteOpts *);
|
|||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
#endif /*_TD_TKV_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);
|
||||
|
||||
|
|
|
@ -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})
|
||||
)
|
|
@ -11,4 +11,25 @@
|
|||
*
|
||||
* 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_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/>.
|
||||
*/
|
||||
|
||||
#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_*/
|
||||
#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;
|
||||
}
|
||||
|
||||
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;
|
||||
|
|
Loading…
Reference in New Issue