This commit is contained in:
hzcheng 2020-03-02 13:02:42 +00:00
parent d4e6aef5ee
commit a6166565fb
4 changed files with 40 additions and 46 deletions

View File

@ -4,7 +4,7 @@
#include "tsdb.h" #include "tsdb.h"
TEST(TsdbTest, createTsdbRepo) { TEST(TsdbTest, createTsdbRepo) {
STSDBCfg *pCfg = (STSDBCfg *)malloc(sizeof(STSDBCfg)); STsdbCfg *pCfg = (STsdbCfg *)malloc(sizeof(STsdbCfg));
free(pCfg); free(pCfg);

View File

@ -8,17 +8,19 @@
#include <stdbool.h> #include <stdbool.h>
#include <stdint.h> #include <stdint.h>
// #include "cache.h"
#include "schema.h" #include "schema.h"
#define TSDB_VERSION_MAJOR 1 #define TSDB_VERSION_MAJOR 1
#define TSDB_VERSION_MINOR 0 #define TSDB_VERSION_MINOR 0
typedef void tsdb_repo_t; // use void to hide implementation details from outside typedef void tsdb_repo_t; // use void to hide implementation details from outside
typedef int32_t table_id_t; // table ID type in this repository
typedef int16_t tsdb_id_t; // TSDB repository ID
// Submit message typedef struct {
int64_t uid; // the unique table ID
int32_t tableId; // the table ID in the repository.
} STableId;
// Submit message for this TSDB
typedef struct { typedef struct {
int32_t numOfTables; int32_t numOfTables;
int32_t compressed; int32_t compressed;
@ -27,10 +29,9 @@ typedef struct {
// Submit message for one table // Submit message for one table
typedef struct { typedef struct {
table_id_t tableId; // table ID to insert STableId tid;
int32_t sversion; // data schema version int32_t sversion; // data schema version
int32_t numOfRows; // number of rows data int32_t numOfRows; // number of rows data
int64_t uid; // table UID to insert
char data[]; char data[];
} SSubmitBlock; } SSubmitBlock;
@ -55,27 +56,20 @@ typedef struct {
int32_t maxRowsPerFileBlock; int32_t maxRowsPerFileBlock;
} SBlockRowsPolicy; } SBlockRowsPolicy;
// Applications trying to manipulate a table should provide both uid and tableId.
// tableId is used for table quick access and uid for verification.
typedef struct {
int64_t uid; // the unique table ID
table_id_t tableId; // the table ID in the repository.
} STableId;
// the TSDB repository configuration // the TSDB repository configuration
typedef struct { typedef struct {
char * rootDir; // TSDB repository root directory, TODO: need to adjust here char * rootDir; // TSDB repository root directory, TODO: need to adjust here
tsdb_id_t tsdbId; int32_t tsdbId;
int32_t maxTables; // maximum number of tables this repository can have int32_t maxTables; // maximum number of tables this repository can have
SDataShardPolicy dataShardPolicy; SDataShardPolicy dataShardPolicy;
SBlockRowsPolicy blockRowsPolicy; SBlockRowsPolicy blockRowsPolicy;
SRetentionPolicy retentionPlicy; // retention configuration SRetentionPolicy retentionPlicy; // retention configuration
void * cachePool; // the cache pool the repository to use void * cachePool; // the cache pool the repository to use
} STSDBCfg; } STsdbCfg;
// the TSDB repository info // the TSDB repository info
typedef struct STSDBRepoInfo { typedef struct STSDBRepoInfo {
STSDBCfg tsdbCfg; STsdbCfg tsdbCfg;
int64_t version; // version of the repository int64_t version; // version of the repository
int64_t tsdbTotalDataSize; // the original inserted data size int64_t tsdbTotalDataSize; // the original inserted data size
int64_t tsdbTotalDiskSize; // the total disk size taken by this TSDB repository int64_t tsdbTotalDiskSize; // the total disk size taken by this TSDB repository
@ -86,7 +80,7 @@ typedef struct STSDBRepoInfo {
typedef struct { typedef struct {
char * tableName; char * tableName;
int64_t uid; // uid given by upper layer int64_t uid; // uid given by upper layer
table_id_t tableId; // table ID allocated from upper layer int32_t tableId; // table ID allocated from upper layer
char *stableName; // if not NULL, the table is created from a super table, need to make sure the super char *stableName; // if not NULL, the table is created from a super table, need to make sure the super
// table exists in this TSDB. // table exists in this TSDB.
@ -115,7 +109,7 @@ typedef struct {
* *
* @return a TSDB repository handle on success, NULL for failure and the error number is set * @return a TSDB repository handle on success, NULL for failure and the error number is set
*/ */
tsdb_repo_t *tsdbCreateRepo(STSDBCfg *pCfg); tsdb_repo_t *tsdbCreateRepo(STsdbCfg *pCfg);
/** /**
* Close and free all resources taken by the repository * Close and free all resources taken by the repository
@ -149,7 +143,7 @@ int32_t tsdbCloseRepo(tsdb_repo_t *repo);
* *
* @return 0 for success, -1 for failure and the error number is set * @return 0 for success, -1 for failure and the error number is set
*/ */
int32_t tsdbConfigRepo(tsdb_repo_t repo, STSDBCfg *pCfg); int32_t tsdbConfigRepo(tsdb_repo_t repo, STsdbCfg *pCfg);
/** /**
* Get the TSDB repository information, including some statistics * Get the TSDB repository information, including some statistics

View File

@ -16,7 +16,7 @@ typedef enum {
} TSDB_TABLE_TYPE; } TSDB_TABLE_TYPE;
typedef struct STable { typedef struct STable {
tsdb_id_t tableId; int32_t tableId;
int64_t uid; int64_t uid;
char * tableName; char * tableName;
TSDB_TABLE_TYPE type; TSDB_TABLE_TYPE type;
@ -24,7 +24,7 @@ typedef struct STable {
int64_t createdTime; int64_t createdTime;
// super table UID // super table UID
tsdb_id_t superTableId; int32_t superTableId;
// Schema for this table // Schema for this table
// For TSDB_SUPER_TABLE, it is the schema including tags // For TSDB_SUPER_TABLE, it is the schema including tags

View File

@ -21,19 +21,19 @@ enum {
typedef struct _tsdb_repo { typedef struct _tsdb_repo {
// TSDB configuration // TSDB configuration
STSDBCfg *pCfg; STsdbCfg *pCfg;
// The meter meta handle of this TSDB repository // The meter meta handle of this TSDB repository
SMetaHandle *pMetaHandle; SMetaHandle *tsdbMeta;
// The cache Handle // The cache Handle
SCacheHandle *pCacheHandle; SCacheHandle *tsdbCache;
// Disk tier handle for multi-tier storage // Disk tier handle for multi-tier storage
void *pDiskTier; void *diskTier;
// File Store // File Store
void *pFileStore; void *tsdbFiles;
pthread_mutex_t tsdbMutex; pthread_mutex_t tsdbMutex;
@ -47,7 +47,7 @@ typedef struct _tsdb_repo {
#define TSDB_IS_REPO_CLOSED(pRepo) ((pRepo)->state == TSDB_REPO_STATE_CLOSED) #define TSDB_IS_REPO_CLOSED(pRepo) ((pRepo)->state == TSDB_REPO_STATE_CLOSED)
// Check the correctness of the TSDB configuration // Check the correctness of the TSDB configuration
static int32_t tsdbCheckCfg(STSDBCfg *pCfg) { static int32_t tsdbCheckCfg(STsdbCfg *pCfg) {
if (pCfg->rootDir == NULL) return -1; if (pCfg->rootDir == NULL) return -1;
if (access(pCfg->rootDir, F_OK|R_OK|W_OK) == -1) { if (access(pCfg->rootDir, F_OK|R_OK|W_OK) == -1) {
@ -65,7 +65,7 @@ static int32_t tsdbClearFiles(STSDBRepo *pRepo) {
// TODO // TODO
} }
tsdb_repo_t *tsdbCreateRepo(STSDBCfg *pCfg) { tsdb_repo_t *tsdbCreateRepo(STsdbCfg *pCfg) {
// Check the configuration // Check the configuration
if (tsdbCheckCfg(pCfg) < 0) { if (tsdbCheckCfg(pCfg) < 0) {
@ -79,18 +79,18 @@ tsdb_repo_t *tsdbCreateRepo(STSDBCfg *pCfg) {
} }
// TODO: Initailize pMetahandle // TODO: Initailize pMetahandle
pRepo->pMetaHandle = tsdbCreateMetaHandle(pCfg->maxTables); pRepo->tsdbMeta = tsdbCreateMetaHandle(pCfg->maxTables);
if (pRepo->pMetaHandle == NULL) { if (pRepo->tsdbMeta == NULL) {
// TODO: deal with error // TODO: deal with error
free(pRepo); free(pRepo);
return NULL; return NULL;
} }
// TODO: Initialize cache handle // TODO: Initialize cache handle
pRepo->pCacheHandle = tsdbCreateCache(5); pRepo->tsdbCache = tsdbCreateCache(5);
if (pRepo->pCacheHandle == NULL) { if (pRepo->tsdbCache == NULL) {
// TODO: free the object and return error // TODO: free the object and return error
tsdbFreeMetaHandle(pRepo->pCacheHandle); tsdbFreeMetaHandle(pRepo->tsdbCache);
free(pRepo); free(pRepo);
return NULL; return NULL;
} }
@ -101,7 +101,7 @@ tsdb_repo_t *tsdbCreateRepo(STSDBCfg *pCfg) {
// Create the Meta data file and data directory // Create the Meta data file and data directory
if (tsdbCreateFiles(pRepo) < 0) { if (tsdbCreateFiles(pRepo) < 0) {
// Failed to create and save files // Failed to create and save files
tsdbFreeMetaHandle(pRepo->pCacheHandle); tsdbFreeMetaHandle(pRepo->tsdbCache);
free(pRepo); free(pRepo);
return NULL; return NULL;
} }
@ -117,10 +117,10 @@ int32_t tsdbDropRepo(tsdb_repo_t *repo) {
pRepo->state = TSDB_REPO_STATE_CLOSED; pRepo->state = TSDB_REPO_STATE_CLOSED;
// Free the metaHandle // Free the metaHandle
tsdbFreeMetaHandle(pRepo->pMetaHandle); tsdbFreeMetaHandle(pRepo->tsdbMeta);
// Free the cache // Free the cache
tsdbFreeCache(pRepo->pCacheHandle); tsdbFreeCache(pRepo->tsdbCache);
tsdbClearFiles(pRepo); tsdbClearFiles(pRepo);
@ -139,14 +139,14 @@ tsdb_repo_t *tsdbOpenRepo(char *tsdbDir) {
} }
// TODO: Initialize configuration from the file // TODO: Initialize configuration from the file
pRepo->pMetaHandle = tsdbOpenMetaHandle(); pRepo->tsdbMeta = tsdbOpenMetaHandle();
if (pRepo->pMetaHandle == NULL) { if (pRepo->tsdbMeta == NULL) {
free(pRepo); free(pRepo);
return NULL; return NULL;
} }
pRepo->pCacheHandle = tsdbCreateCache(5); pRepo->tsdbCache = tsdbCreateCache(5);
if (pRepo->pCacheHandle == NULL) { if (pRepo->tsdbCache == NULL) {
// TODO: deal with error // TODO: deal with error
return NULL; return NULL;
} }
@ -167,14 +167,14 @@ int32_t tsdbCloseRepo(tsdb_repo_t *repo) {
pRepo->state = TSDB_REPO_STATE_CLOSED; pRepo->state = TSDB_REPO_STATE_CLOSED;
tsdbFreeMetaHandle(pRepo->pMetaHandle); tsdbFreeMetaHandle(pRepo->tsdbMeta);
tsdbFreeCache(pRepo->pMetaHandle); tsdbFreeCache(pRepo->tsdbMeta);
return 0; return 0;
} }
int32_t tsdbConfigRepo(tsdb_repo_t *repo, STSDBCfg *pCfg) { int32_t tsdbConfigRepo(tsdb_repo_t *repo, STsdbCfg *pCfg) {
STSDBRepo *pRepo = (STSDBRepo *)repo; STSDBRepo *pRepo = (STSDBRepo *)repo;
pRepo->pCfg = pCfg; pRepo->pCfg = pCfg;
@ -188,7 +188,7 @@ STSDBRepoInfo *tsdbGetStatus(tsdb_repo_t *pRepo) {
int32_t tsdbCreateTable(tsdb_repo_t *repo, STableCfg *pCfg) { int32_t tsdbCreateTable(tsdb_repo_t *repo, STableCfg *pCfg) {
STSDBRepo *pRepo = (STSDBRepo *)repo; STSDBRepo *pRepo = (STSDBRepo *)repo;
return tsdbCreateTableImpl(pRepo->pMetaHandle, pCfg); return tsdbCreateTableImpl(pRepo->tsdbMeta, pCfg);
} }
int32_t tsdbAlterTable(tsdb_repo_t *pRepo, STableCfg *pCfg) { int32_t tsdbAlterTable(tsdb_repo_t *pRepo, STableCfg *pCfg) {