refactor code
This commit is contained in:
parent
2e0dc58890
commit
ccbbac4eef
|
@ -45,6 +45,7 @@ typedef struct IndexCache {
|
||||||
uint64_t suid;
|
uint64_t suid;
|
||||||
|
|
||||||
pthread_mutex_t mtx;
|
pthread_mutex_t mtx;
|
||||||
|
pthread_cond_t finished;
|
||||||
} IndexCache;
|
} IndexCache;
|
||||||
|
|
||||||
#define CACHE_VERSION(cache) atomic_load_32(&cache->version)
|
#define CACHE_VERSION(cache) atomic_load_32(&cache->version)
|
||||||
|
|
|
@ -399,6 +399,8 @@ int indexFlushCacheTFile(SIndex* sIdx, void* cache) {
|
||||||
if (sIdx == NULL) { return -1; }
|
if (sIdx == NULL) { return -1; }
|
||||||
indexInfo("suid %" PRIu64 " merge cache into tindex", sIdx->suid);
|
indexInfo("suid %" PRIu64 " merge cache into tindex", sIdx->suid);
|
||||||
|
|
||||||
|
int64_t st = taosGetTimestampUs();
|
||||||
|
|
||||||
IndexCache* pCache = (IndexCache*)cache;
|
IndexCache* pCache = (IndexCache*)cache;
|
||||||
TFileReader* pReader = tfileGetReaderByCol(sIdx->tindex, pCache->suid, pCache->colName);
|
TFileReader* pReader = tfileGetReaderByCol(sIdx->tindex, pCache->suid, pCache->colName);
|
||||||
if (pReader == NULL) { indexWarn("empty tfile reader found"); }
|
if (pReader == NULL) { indexWarn("empty tfile reader found"); }
|
||||||
|
@ -458,6 +460,7 @@ int indexFlushCacheTFile(SIndex* sIdx, void* cache) {
|
||||||
}
|
}
|
||||||
int ret = indexGenTFile(sIdx, pCache, result);
|
int ret = indexGenTFile(sIdx, pCache, result);
|
||||||
indexDestroyTempResult(result);
|
indexDestroyTempResult(result);
|
||||||
|
|
||||||
indexCacheDestroyImm(pCache);
|
indexCacheDestroyImm(pCache);
|
||||||
|
|
||||||
indexCacheIteratorDestroy(cacheIter);
|
indexCacheIteratorDestroy(cacheIter);
|
||||||
|
@ -465,7 +468,14 @@ int indexFlushCacheTFile(SIndex* sIdx, void* cache) {
|
||||||
|
|
||||||
tfileReaderUnRef(pReader);
|
tfileReaderUnRef(pReader);
|
||||||
indexCacheUnRef(pCache);
|
indexCacheUnRef(pCache);
|
||||||
return 0;
|
|
||||||
|
int64_t cost = taosGetTimestampUs() - st;
|
||||||
|
if (ret != 0) {
|
||||||
|
indexError("failed to merge, time cost: %" PRId64 "ms", cost / 1000);
|
||||||
|
} else {
|
||||||
|
indexInfo("success to merge , time cost: %" PRId64 "ms", cost / 1000);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
void iterateValueDestroy(IterateValue* value, bool destroy) {
|
void iterateValueDestroy(IterateValue* value, bool destroy) {
|
||||||
if (destroy) {
|
if (destroy) {
|
||||||
|
@ -506,7 +516,10 @@ static int indexGenTFile(SIndex* sIdx, IndexCache* cache, SArray* batch) {
|
||||||
pthread_mutex_unlock(&sIdx->mtx);
|
pthread_mutex_unlock(&sIdx->mtx);
|
||||||
return ret;
|
return ret;
|
||||||
END:
|
END:
|
||||||
tfileWriterClose(tw);
|
if (tw != NULL) {
|
||||||
|
writerCtxDestroy(tw->ctx, true);
|
||||||
|
free(tw);
|
||||||
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -53,7 +53,10 @@ IndexCache* indexCacheCreate(SIndex* idx, uint64_t suid, const char* colName, in
|
||||||
cache->version = 0;
|
cache->version = 0;
|
||||||
cache->suid = suid;
|
cache->suid = suid;
|
||||||
cache->occupiedMem = 0;
|
cache->occupiedMem = 0;
|
||||||
|
|
||||||
pthread_mutex_init(&cache->mtx, NULL);
|
pthread_mutex_init(&cache->mtx, NULL);
|
||||||
|
pthread_cond_init(&cache->finished, NULL);
|
||||||
|
|
||||||
indexCacheRef(cache);
|
indexCacheRef(cache);
|
||||||
return cache;
|
return cache;
|
||||||
}
|
}
|
||||||
|
@ -124,6 +127,7 @@ void indexCacheDestroyImm(IndexCache* cache) {
|
||||||
pthread_mutex_lock(&cache->mtx);
|
pthread_mutex_lock(&cache->mtx);
|
||||||
tbl = cache->imm;
|
tbl = cache->imm;
|
||||||
cache->imm = NULL; // or throw int bg thread
|
cache->imm = NULL; // or throw int bg thread
|
||||||
|
pthread_cond_broadcast(&cache->finished);
|
||||||
pthread_mutex_unlock(&cache->mtx);
|
pthread_mutex_unlock(&cache->mtx);
|
||||||
|
|
||||||
indexMemUnRef(tbl);
|
indexMemUnRef(tbl);
|
||||||
|
@ -136,6 +140,9 @@ void indexCacheDestroy(void* cache) {
|
||||||
indexMemUnRef(pCache->imm);
|
indexMemUnRef(pCache->imm);
|
||||||
free(pCache->colName);
|
free(pCache->colName);
|
||||||
|
|
||||||
|
pthread_mutex_destroy(&pCache->mtx);
|
||||||
|
pthread_cond_destroy(&pCache->finished);
|
||||||
|
|
||||||
free(pCache);
|
free(pCache);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -180,9 +187,10 @@ static void indexCacheMakeRoomForWrite(IndexCache* cache) {
|
||||||
break;
|
break;
|
||||||
} else if (cache->imm != NULL) {
|
} else if (cache->imm != NULL) {
|
||||||
// TODO: wake up by condition variable
|
// TODO: wake up by condition variable
|
||||||
pthread_mutex_unlock(&cache->mtx);
|
// pthread_mutex_unlock(&cache->mtx);
|
||||||
taosMsleep(50);
|
pthread_cond_wait(&cache->finished, &cache->mtx);
|
||||||
pthread_mutex_lock(&cache->mtx);
|
// taosMsleep(50);
|
||||||
|
// pthread_mutex_lock(&cache->mtx);
|
||||||
} else {
|
} else {
|
||||||
indexCacheRef(cache);
|
indexCacheRef(cache);
|
||||||
cache->imm = cache->mem;
|
cache->imm = cache->mem;
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
#include "tutil.h"
|
#include "tutil.h"
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
#define NUM_OF_THREAD 5
|
#define NUM_OF_THREAD 10
|
||||||
|
|
||||||
class DebugInfo {
|
class DebugInfo {
|
||||||
public:
|
public:
|
||||||
|
@ -882,8 +882,8 @@ static void single_write_and_search(IndexObj* idx) {
|
||||||
static void multi_write_and_search(IndexObj* idx) {
|
static void multi_write_and_search(IndexObj* idx) {
|
||||||
int target = idx->SearchOne("tag1", "Hello");
|
int target = idx->SearchOne("tag1", "Hello");
|
||||||
target = idx->SearchOne("tag2", "Test");
|
target = idx->SearchOne("tag2", "Test");
|
||||||
idx->WriteMultiMillonData("tag1", "Hello", 100 * 10000);
|
idx->WriteMultiMillonData("tag1", "hello world test", 100 * 10000);
|
||||||
idx->WriteMultiMillonData("tag2", "Test", 100 * 10000);
|
idx->WriteMultiMillonData("tag2", "world test nothing", 100 * 10000);
|
||||||
}
|
}
|
||||||
TEST_F(IndexEnv2, testIndex_serarch_cache_and_tfile) {
|
TEST_F(IndexEnv2, testIndex_serarch_cache_and_tfile) {
|
||||||
std::string path = "/tmp/cache_and_tfile";
|
std::string path = "/tmp/cache_and_tfile";
|
||||||
|
|
Loading…
Reference in New Issue