commit
a7a7ef79e6
|
@ -74,9 +74,12 @@ typedef struct STable {
|
||||||
void * pIndex; // For TSDB_SUPER_TABLE, it is the skiplist index
|
void * pIndex; // For TSDB_SUPER_TABLE, it is the skiplist index
|
||||||
void * eventHandler; // TODO
|
void * eventHandler; // TODO
|
||||||
void * streamHandler; // TODO
|
void * streamHandler; // TODO
|
||||||
|
TSKEY lastKey; // lastkey inserted in this table, initialized as 0, TODO: make a structure
|
||||||
struct STable *next; // TODO: remove the next
|
struct STable *next; // TODO: remove the next
|
||||||
} STable;
|
} STable;
|
||||||
|
|
||||||
|
#define TSDB_GET_TABLE_LAST_KEY(pTable) ((pTable)->lastKey)
|
||||||
|
|
||||||
void * tsdbEncodeTable(STable *pTable, int *contLen);
|
void * tsdbEncodeTable(STable *pTable, int *contLen);
|
||||||
STable *tsdbDecodeTable(void *cont, int contLen);
|
STable *tsdbDecodeTable(void *cont, int contLen);
|
||||||
void tsdbFreeEncode(void *cont);
|
void tsdbFreeEncode(void *cont);
|
||||||
|
|
|
@ -163,6 +163,34 @@ int32_t tsdbDropRepo(TsdbRepoT *repo) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int tsdbRestoreInfo(STsdbRepo *pRepo) {
|
||||||
|
STsdbMeta * pMeta = pRepo->tsdbMeta;
|
||||||
|
STsdbFileH *pFileH = pRepo->tsdbFileH;
|
||||||
|
SFileGroup *pFGroup = NULL;
|
||||||
|
|
||||||
|
SFileGroupIter iter;
|
||||||
|
SRWHelper rhelper = {0};
|
||||||
|
|
||||||
|
if (tsdbInitReadHelper(&rhelper, pRepo) < 0) goto _err;
|
||||||
|
tsdbInitFileGroupIter(pFileH, &iter, TSDB_ORDER_ASC);
|
||||||
|
while ((pFGroup = tsdbGetFileGroupNext(&iter)) != NULL) {
|
||||||
|
if (tsdbSetAndOpenHelperFile(&rhelper, pFGroup) < 0) goto _err;
|
||||||
|
for (int i = 0; i < pRepo->config.maxTables; i++) {
|
||||||
|
STable * pTable = pMeta->tables[i];
|
||||||
|
SCompIdx *pIdx = &rhelper.pCompIdx[i];
|
||||||
|
|
||||||
|
if (pIdx->offset > 0 && pTable->lastKey < pIdx->maxKey) pTable->lastKey = pIdx->maxKey;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tsdbDestroyHelper(&rhelper);
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
_err:
|
||||||
|
tsdbDestroyHelper(&rhelper);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Open an existing TSDB storage repository
|
* Open an existing TSDB storage repository
|
||||||
* @param tsdbDir the existing TSDB root directory
|
* @param tsdbDir the existing TSDB root directory
|
||||||
|
@ -210,6 +238,16 @@ TsdbRepoT *tsdbOpenRepo(char *tsdbDir, STsdbAppH *pAppH) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Restore key from file
|
||||||
|
if (tsdbRestoreInfo(pRepo) < 0) {
|
||||||
|
tsdbFreeCache(pRepo->tsdbCache);
|
||||||
|
tsdbFreeMeta(pRepo->tsdbMeta);
|
||||||
|
tsdbCloseFileH(pRepo->tsdbFileH);
|
||||||
|
free(pRepo->rootDir);
|
||||||
|
free(pRepo);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
pRepo->state = TSDB_REPO_STATE_ACTIVE;
|
pRepo->state = TSDB_REPO_STATE_ACTIVE;
|
||||||
|
|
||||||
return (TsdbRepoT *)pRepo;
|
return (TsdbRepoT *)pRepo;
|
||||||
|
@ -755,6 +793,7 @@ static int32_t tdInsertRowToTable(STsdbRepo *pRepo, SDataRow row, STable *pTable
|
||||||
tSkipListPut(pTable->mem->pData, pNode);
|
tSkipListPut(pTable->mem->pData, pNode);
|
||||||
if (key > pTable->mem->keyLast) pTable->mem->keyLast = key;
|
if (key > pTable->mem->keyLast) pTable->mem->keyLast = key;
|
||||||
if (key < pTable->mem->keyFirst) pTable->mem->keyFirst = key;
|
if (key < pTable->mem->keyFirst) pTable->mem->keyFirst = key;
|
||||||
|
if (key > pTable->lastKey) pTable->lastKey = key;
|
||||||
|
|
||||||
pTable->mem->numOfPoints = tSkipListGetSize(pTable->mem->pData);
|
pTable->mem->numOfPoints = tSkipListGetSize(pTable->mem->pData);
|
||||||
|
|
||||||
|
|
|
@ -311,6 +311,7 @@ int32_t tsdbCreateTableImpl(STsdbMeta *pMeta, STableCfg *pCfg) {
|
||||||
|
|
||||||
table->tableId = pCfg->tableId;
|
table->tableId = pCfg->tableId;
|
||||||
table->name = strdup(pCfg->name);
|
table->name = strdup(pCfg->name);
|
||||||
|
table->lastKey = 0;
|
||||||
if (IS_CREATE_STABLE(pCfg)) { // TSDB_CHILD_TABLE
|
if (IS_CREATE_STABLE(pCfg)) { // TSDB_CHILD_TABLE
|
||||||
table->type = TSDB_CHILD_TABLE;
|
table->type = TSDB_CHILD_TABLE;
|
||||||
table->superUid = pCfg->superUid;
|
table->superUid = pCfg->superUid;
|
||||||
|
|
Loading…
Reference in New Issue