Merge branch 'enh/addTtlToStream' into enh/rocksdbSstateMerge
This commit is contained in:
commit
c27d01a510
|
@ -27,21 +27,10 @@ extern "C" {
|
||||||
#ifndef _STREAM_STATE_H_
|
#ifndef _STREAM_STATE_H_
|
||||||
#define _STREAM_STATE_H_
|
#define _STREAM_STATE_H_
|
||||||
|
|
||||||
typedef struct {
|
// void* streamBackendInit(const char* path);
|
||||||
rocksdb_t* db;
|
// void streamBackendCleanup(void* arg);
|
||||||
rocksdb_writeoptions_t* writeOpts;
|
// SListNode* streamBackendAddCompare(void* backend, void* arg);
|
||||||
rocksdb_readoptions_t* readOpts;
|
// void streamBackendDelCompare(void* backend, void* arg);
|
||||||
rocksdb_options_t* dbOpt;
|
|
||||||
void* param;
|
|
||||||
void* env;
|
|
||||||
rocksdb_cache_t* cache;
|
|
||||||
TdThreadMutex mutex;
|
|
||||||
SList* list;
|
|
||||||
} SBackendHandle;
|
|
||||||
void* streamBackendInit(const char* path);
|
|
||||||
void streamBackendCleanup(void* arg);
|
|
||||||
SListNode* streamBackendAddCompare(void* backend, void* arg);
|
|
||||||
void streamBackendDelCompare(void* backend, void* arg);
|
|
||||||
typedef bool (*state_key_cmpr_fn)(void* pKey1, void* pKey2);
|
typedef bool (*state_key_cmpr_fn)(void* pKey1, void* pKey2);
|
||||||
|
|
||||||
typedef struct STdbState {
|
typedef struct STdbState {
|
||||||
|
@ -55,8 +44,9 @@ typedef struct STdbState {
|
||||||
void* param;
|
void* param;
|
||||||
void* env;
|
void* env;
|
||||||
SListNode* pComparNode;
|
SListNode* pComparNode;
|
||||||
SBackendHandle* pBackendHandle;
|
void* pBackendHandle;
|
||||||
char idstr[48];
|
char idstr[48];
|
||||||
|
void* compactFactory;
|
||||||
|
|
||||||
TDB* db;
|
TDB* db;
|
||||||
TTB* pStateDb;
|
TTB* pStateDb;
|
||||||
|
@ -168,11 +158,11 @@ typedef struct SStateSessionKey {
|
||||||
int64_t opNum;
|
int64_t opNum;
|
||||||
} SStateSessionKey;
|
} SStateSessionKey;
|
||||||
|
|
||||||
typedef struct streamValue {
|
typedef struct SStreamValue {
|
||||||
int64_t unixTimestamp;
|
int64_t unixTimestamp;
|
||||||
int32_t len;
|
int32_t len;
|
||||||
char data[0];
|
char* data;
|
||||||
} streamValue;
|
} SStreamValue;
|
||||||
|
|
||||||
int sessionRangeKeyCmpr(const SSessionKey* pWin1, const SSessionKey* pWin2);
|
int sessionRangeKeyCmpr(const SSessionKey* pWin1, const SSessionKey* pWin2);
|
||||||
int sessionWinKeyCmpr(const SSessionKey* pWin1, const SSessionKey* pWin2);
|
int sessionWinKeyCmpr(const SSessionKey* pWin1, const SSessionKey* pWin2);
|
||||||
|
|
|
@ -17,7 +17,9 @@
|
||||||
#define _STREAM_BACKEDN_ROCKSDB_H_
|
#define _STREAM_BACKEDN_ROCKSDB_H_
|
||||||
|
|
||||||
#include "executor.h"
|
#include "executor.h"
|
||||||
#include "streamInc.h"
|
|
||||||
|
#include "rocksdb/c.h"
|
||||||
|
// #include "streamInc.h"
|
||||||
#include "streamState.h"
|
#include "streamState.h"
|
||||||
#include "tcoding.h"
|
#include "tcoding.h"
|
||||||
#include "tcommon.h"
|
#include "tcommon.h"
|
||||||
|
@ -28,58 +30,84 @@ typedef struct SCfComparator {
|
||||||
rocksdb_comparator_t** comp;
|
rocksdb_comparator_t** comp;
|
||||||
int32_t numOfComp;
|
int32_t numOfComp;
|
||||||
} SCfComparator;
|
} SCfComparator;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
rocksdb_t* db;
|
||||||
|
rocksdb_writeoptions_t* writeOpts;
|
||||||
|
rocksdb_readoptions_t* readOpts;
|
||||||
|
rocksdb_options_t* dbOpt;
|
||||||
|
void* param;
|
||||||
|
void* env;
|
||||||
|
rocksdb_cache_t* cache;
|
||||||
|
TdThreadMutex mutex;
|
||||||
|
rocksdb_compactionfilterfactory_t* filterFactory;
|
||||||
|
SList* list;
|
||||||
|
} SBackendHandle;
|
||||||
|
|
||||||
|
void* streamBackendInit(const char* path);
|
||||||
|
void streamBackendCleanup(void* arg);
|
||||||
|
SListNode* streamBackendAddCompare(void* backend, void* arg);
|
||||||
|
void streamBackendDelCompare(void* backend, void* arg);
|
||||||
|
|
||||||
int streamStateOpenBackend(void* backend, SStreamState* pState);
|
int streamStateOpenBackend(void* backend, SStreamState* pState);
|
||||||
void streamStateCloseBackend(SStreamState* pState, bool remove);
|
void streamStateCloseBackend(SStreamState* pState, bool remove);
|
||||||
void streamStateDestroyCompar(void* arg);
|
void streamStateDestroyCompar(void* arg);
|
||||||
// void streamStateRemoveBackend(SStreamState* pState);
|
|
||||||
|
|
||||||
int32_t streamStateFuncPut_rocksdb(SStreamState* pState, const STupleKey* key, const void* value, int32_t vLen);
|
// state cf
|
||||||
int32_t streamStateFuncGet_rocksdb(SStreamState* pState, const STupleKey* key, void** pVal, int32_t* pVLen);
|
|
||||||
int32_t streamStateFuncDel_rocksdb(SStreamState* pState, const STupleKey* key);
|
|
||||||
int32_t streamStatePut_rocksdb(SStreamState* pState, const SWinKey* key, const void* value, int32_t vLen);
|
int32_t streamStatePut_rocksdb(SStreamState* pState, const SWinKey* key, const void* value, int32_t vLen);
|
||||||
int32_t streamStateGet_rocksdb(SStreamState* pState, const SWinKey* key, void** pVal, int32_t* pVLen);
|
int32_t streamStateGet_rocksdb(SStreamState* pState, const SWinKey* key, void** pVal, int32_t* pVLen);
|
||||||
int32_t streamStateDel_rocksdb(SStreamState* pState, const SWinKey* key);
|
int32_t streamStateDel_rocksdb(SStreamState* pState, const SWinKey* key);
|
||||||
int32_t streamStateFillPut_rocksdb(SStreamState* pState, const SWinKey* key, const void* value, int32_t vLen);
|
|
||||||
int32_t streamStateFillGet_rocksdb(SStreamState* pState, const SWinKey* key, void** pVal, int32_t* pVLen);
|
|
||||||
int32_t streamStateFillDel_rocksdb(SStreamState* pState, const SWinKey* key);
|
|
||||||
int32_t streamStateClear_rocksdb(SStreamState* pState);
|
int32_t streamStateClear_rocksdb(SStreamState* pState);
|
||||||
|
int32_t streamStateCurNext_rocksdb(SStreamState* pState, SStreamStateCur* pCur);
|
||||||
|
int32_t streamStateGetFirst_rocksdb(SStreamState* pState, SWinKey* key);
|
||||||
|
int32_t streamStateGetGroupKVByCur_rocksdb(SStreamStateCur* pCur, SWinKey* pKey, const void** pVal, int32_t* pVLen);
|
||||||
|
int32_t streamStateAddIfNotExist_rocksdb(SStreamState* pState, const SWinKey* key, void** pVal, int32_t* pVLen);
|
||||||
|
int32_t streamStateCurPrev_rocksdb(SStreamState* pState, SStreamStateCur* pCur);
|
||||||
|
int32_t streamStateGetKVByCur_rocksdb(SStreamStateCur* pCur, SWinKey* pKey, const void** pVal, int32_t* pVLen);
|
||||||
|
SStreamStateCur* streamStateGetAndCheckCur_rocksdb(SStreamState* pState, SWinKey* key);
|
||||||
|
SStreamStateCur* streamStateSeekKeyNext_rocksdb(SStreamState* pState, const SWinKey* key);
|
||||||
|
SStreamStateCur* streamStateSeekToLast_rocksdb(SStreamState* pState, const SWinKey* key);
|
||||||
|
SStreamStateCur* streamStateGetCur_rocksdb(SStreamState* pState, const SWinKey* key);
|
||||||
|
|
||||||
|
// func cf
|
||||||
|
int32_t streamStateFuncPut_rocksdb(SStreamState* pState, const STupleKey* key, const void* value, int32_t vLen);
|
||||||
|
int32_t streamStateFuncGet_rocksdb(SStreamState* pState, const STupleKey* key, void** pVal, int32_t* pVLen);
|
||||||
|
int32_t streamStateFuncDel_rocksdb(SStreamState* pState, const STupleKey* key);
|
||||||
|
|
||||||
|
// session cf
|
||||||
int32_t streamStateSessionPut_rocksdb(SStreamState* pState, const SSessionKey* key, const void* value, int32_t vLen);
|
int32_t streamStateSessionPut_rocksdb(SStreamState* pState, const SSessionKey* key, const void* value, int32_t vLen);
|
||||||
|
int32_t streamStateSessionGet_rocksdb(SStreamState* pState, SSessionKey* key, void** pVal, int32_t* pVLen);
|
||||||
|
int32_t streamStateSessionDel_rocksdb(SStreamState* pState, const SSessionKey* key);
|
||||||
SStreamStateCur* streamStateSessionSeekKeyCurrentPrev_rocksdb(SStreamState* pState, const SSessionKey* key);
|
SStreamStateCur* streamStateSessionSeekKeyCurrentPrev_rocksdb(SStreamState* pState, const SSessionKey* key);
|
||||||
SStreamStateCur* streamStateSessionSeekKeyCurrentNext_rocksdb(SStreamState* pState, SSessionKey* key);
|
SStreamStateCur* streamStateSessionSeekKeyCurrentNext_rocksdb(SStreamState* pState, SSessionKey* key);
|
||||||
SStreamStateCur* streamStateSessionSeekKeyNext_rocksdb(SStreamState* pState, const SSessionKey* key);
|
SStreamStateCur* streamStateSessionSeekKeyNext_rocksdb(SStreamState* pState, const SSessionKey* key);
|
||||||
int32_t streamStateSessionGetKVByCur_rocksdb(SStreamStateCur* pCur, SSessionKey* pKey, void** pVal, int32_t* pVLen);
|
int32_t streamStateSessionGetKVByCur_rocksdb(SStreamStateCur* pCur, SSessionKey* pKey, void** pVal, int32_t* pVLen);
|
||||||
int32_t streamStateCurNext_rocksdb(SStreamState* pState, SStreamStateCur* pCur);
|
|
||||||
int32_t streamStateSessionGetKeyByRange_rocksdb(SStreamState* pState, const SSessionKey* key, SSessionKey* curKey);
|
int32_t streamStateSessionGetKeyByRange_rocksdb(SStreamState* pState, const SSessionKey* key, SSessionKey* curKey);
|
||||||
int32_t streamStateSessionGet_rocksdb(SStreamState* pState, SSessionKey* key, void** pVal, int32_t* pVLen);
|
|
||||||
int32_t streamStateSessionDel_rocksdb(SStreamState* pState, const SSessionKey* key);
|
|
||||||
int32_t streamStateSessionAddIfNotExist_rocksdb(SStreamState* pState, SSessionKey* key, TSKEY gap, void** pVal,
|
int32_t streamStateSessionAddIfNotExist_rocksdb(SStreamState* pState, SSessionKey* key, TSKEY gap, void** pVal,
|
||||||
int32_t* pVLen);
|
int32_t* pVLen);
|
||||||
|
int32_t streamStateSessionClear_rocksdb(SStreamState* pState);
|
||||||
|
|
||||||
int32_t streamStateStateAddIfNotExist_rocksdb(SStreamState* pState, SSessionKey* key, char* pKeyData,
|
int32_t streamStateStateAddIfNotExist_rocksdb(SStreamState* pState, SSessionKey* key, char* pKeyData,
|
||||||
int32_t keyDataLen, state_key_cmpr_fn fn, void** pVal, int32_t* pVLen);
|
int32_t keyDataLen, state_key_cmpr_fn fn, void** pVal, int32_t* pVLen);
|
||||||
|
|
||||||
int32_t streamStateGetFirst_rocksdb(SStreamState* pState, SWinKey* key);
|
// fill cf
|
||||||
int32_t streamStateSessionClear_rocksdb(SStreamState* pState);
|
int32_t streamStateFillPut_rocksdb(SStreamState* pState, const SWinKey* key, const void* value, int32_t vLen);
|
||||||
int32_t streamStateCurPrev_rocksdb(SStreamState* pState, SStreamStateCur* pCur);
|
int32_t streamStateFillGet_rocksdb(SStreamState* pState, const SWinKey* key, void** pVal, int32_t* pVLen);
|
||||||
SStreamStateCur* streamStateSeekToLast_rocksdb(SStreamState* pState, const SWinKey* key);
|
int32_t streamStateFillDel_rocksdb(SStreamState* pState, const SWinKey* key);
|
||||||
|
|
||||||
int32_t streamStateGetGroupKVByCur_rocksdb(SStreamStateCur* pCur, SWinKey* pKey, const void** pVal, int32_t* pVLen);
|
|
||||||
|
|
||||||
int32_t streamStateAddIfNotExist_rocksdb(SStreamState* pState, const SWinKey* key, void** pVal, int32_t* pVLen);
|
|
||||||
SStreamStateCur* streamStateGetCur_rocksdb(SStreamState* pState, const SWinKey* key);
|
|
||||||
SStreamStateCur* streamStateFillGetCur_rocksdb(SStreamState* pState, const SWinKey* key);
|
SStreamStateCur* streamStateFillGetCur_rocksdb(SStreamState* pState, const SWinKey* key);
|
||||||
SStreamStateCur* streamStateGetAndCheckCur_rocksdb(SStreamState* pState, SWinKey* key);
|
|
||||||
int32_t streamStateGetKVByCur_rocksdb(SStreamStateCur* pCur, SWinKey* pKey, const void** pVal, int32_t* pVLen);
|
|
||||||
int32_t streamStateFillGetKVByCur_rocksdb(SStreamStateCur* pCur, SWinKey* pKey, const void** pVal, int32_t* pVLen);
|
int32_t streamStateFillGetKVByCur_rocksdb(SStreamStateCur* pCur, SWinKey* pKey, const void** pVal, int32_t* pVLen);
|
||||||
SStreamStateCur* streamStateSeekKeyNext_rocksdb(SStreamState* pState, const SWinKey* key);
|
|
||||||
SStreamStateCur* streamStateFillSeekKeyPrev_rocksdb(SStreamState* pState, const SWinKey* key);
|
SStreamStateCur* streamStateFillSeekKeyPrev_rocksdb(SStreamState* pState, const SWinKey* key);
|
||||||
SStreamStateCur* streamStateFillSeekKeyNext_rocksdb(SStreamState* pState, const SWinKey* key);
|
SStreamStateCur* streamStateFillSeekKeyNext_rocksdb(SStreamState* pState, const SWinKey* key);
|
||||||
int32_t streamStatePutParTag_rocksdb(SStreamState* pState, int64_t groupId, const void* tag, int32_t tagLen);
|
|
||||||
int32_t streamStateGetParTag_rocksdb(SStreamState* pState, int64_t groupId, void** tagVal, int32_t* tagLen);
|
// partag cf
|
||||||
|
int32_t streamStatePutParTag_rocksdb(SStreamState* pState, int64_t groupId, const void* tag, int32_t tagLen);
|
||||||
|
int32_t streamStateGetParTag_rocksdb(SStreamState* pState, int64_t groupId, void** tagVal, int32_t* tagLen);
|
||||||
|
|
||||||
|
// parname cf
|
||||||
int32_t streamStatePutParName_rocksdb(SStreamState* pState, int64_t groupId, const char tbname[TSDB_TABLE_NAME_LEN]);
|
int32_t streamStatePutParName_rocksdb(SStreamState* pState, int64_t groupId, const char tbname[TSDB_TABLE_NAME_LEN]);
|
||||||
int32_t streamStateGetParName_rocksdb(SStreamState* pState, int64_t groupId, void** pVal);
|
int32_t streamStateGetParName_rocksdb(SStreamState* pState, int64_t groupId, void** pVal);
|
||||||
void streamStateDestroy_rocksdb(SStreamState* pState, bool remove);
|
|
||||||
|
void streamStateDestroy_rocksdb(SStreamState* pState, bool remove);
|
||||||
|
|
||||||
void* streamStateCreateBatch();
|
void* streamStateCreateBatch();
|
||||||
int32_t streamStateGetBatchSize(void* pBatch);
|
int32_t streamStateGetBatchSize(void* pBatch);
|
||||||
|
@ -89,10 +117,10 @@ int32_t streamStatePutBatch(SStreamState* pState, const char* cfName, rocksdb_wr
|
||||||
void* val, int32_t vlen);
|
void* val, int32_t vlen);
|
||||||
int32_t streamStatePutBatch_rocksdb(SStreamState* pState, void* pBatch);
|
int32_t streamStatePutBatch_rocksdb(SStreamState* pState, void* pBatch);
|
||||||
|
|
||||||
|
// default cf
|
||||||
int32_t streamDefaultPut_rocksdb(SStreamState* pState, const void* key, void* pVal, int32_t pVLen);
|
int32_t streamDefaultPut_rocksdb(SStreamState* pState, const void* key, void* pVal, int32_t pVLen);
|
||||||
int32_t streamDefaultGet_rocksdb(SStreamState* pState, const void* key, void** pVal, int32_t* pVLen);
|
int32_t streamDefaultGet_rocksdb(SStreamState* pState, const void* key, void** pVal, int32_t* pVLen);
|
||||||
int32_t streamDefaultDel_rocksdb(SStreamState* pState, const void* key);
|
int32_t streamDefaultDel_rocksdb(SStreamState* pState, const void* key);
|
||||||
|
|
||||||
int32_t streamDefaultIterGet_rocksdb(SStreamState* pState, const void* start, const void* end, SArray* result);
|
int32_t streamDefaultIterGet_rocksdb(SStreamState* pState, const void* start, const void* end, SArray* result);
|
||||||
void* streamDefaultIterCreate_rocksdb(SStreamState* pState);
|
void* streamDefaultIterCreate_rocksdb(SStreamState* pState);
|
||||||
int32_t streamDefaultIterValid_rocksdb(void* iter);
|
int32_t streamDefaultIterValid_rocksdb(void* iter);
|
||||||
|
@ -101,5 +129,13 @@ void streamDefaultIterNext_rocksdb(void* iter);
|
||||||
char* streamDefaultIterKey_rocksdb(void* iter, int32_t* len);
|
char* streamDefaultIterKey_rocksdb(void* iter, int32_t* len);
|
||||||
char* streamDefaultIterVal_rocksdb(void* iter, int32_t* len);
|
char* streamDefaultIterVal_rocksdb(void* iter, int32_t* len);
|
||||||
|
|
||||||
|
// batch func
|
||||||
|
void* streamStateCreateBatch();
|
||||||
|
int32_t streamStateGetBatchSize(void* pBatch);
|
||||||
|
void streamStateClearBatch(void* pBatch);
|
||||||
|
void streamStateDestroyBatch(void* pBatch);
|
||||||
|
int32_t streamStatePutBatch(SStreamState* pState, const char* cfName, rocksdb_writebatch_t* pBatch, void* key,
|
||||||
|
void* val, int32_t vlen);
|
||||||
|
int32_t streamStatePutBatch_rocksdb(SStreamState* pState, void* pBatch);
|
||||||
// int32_t streamDefaultIter_rocksdb(SStreamState* pState, const void* start, const void* end, SArray* result);
|
// int32_t streamDefaultIter_rocksdb(SStreamState* pState, const void* start, const void* end, SArray* result);
|
||||||
#endif
|
#endif
|
File diff suppressed because it is too large
Load Diff
|
@ -14,6 +14,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "executor.h"
|
#include "executor.h"
|
||||||
|
#include "streamBackendRocksdb.h"
|
||||||
#include "streamInc.h"
|
#include "streamInc.h"
|
||||||
#include "ttimer.h"
|
#include "ttimer.h"
|
||||||
|
|
||||||
|
|
|
@ -26,88 +26,6 @@
|
||||||
|
|
||||||
#define MAX_TABLE_NAME_NUM 100000
|
#define MAX_TABLE_NAME_NUM 100000
|
||||||
|
|
||||||
void* streamBackendInit(const char* path) {
|
|
||||||
SBackendHandle* pHandle = calloc(1, sizeof(SBackendHandle));
|
|
||||||
pHandle->list = tdListNew(sizeof(SCfComparator));
|
|
||||||
taosThreadMutexInit(&pHandle->mutex, NULL);
|
|
||||||
|
|
||||||
rocksdb_env_t* env = rocksdb_create_default_env(); // rocksdb_envoptions_create();
|
|
||||||
rocksdb_env_set_low_priority_background_threads(env, 4);
|
|
||||||
rocksdb_env_set_high_priority_background_threads(env, 2);
|
|
||||||
|
|
||||||
rocksdb_cache_t* cache = rocksdb_cache_create_lru(128 << 20);
|
|
||||||
|
|
||||||
rocksdb_options_t* opts = rocksdb_options_create();
|
|
||||||
rocksdb_options_set_env(opts, env);
|
|
||||||
rocksdb_options_set_create_if_missing(opts, 1);
|
|
||||||
rocksdb_options_set_create_missing_column_families(opts, 1);
|
|
||||||
rocksdb_options_set_write_buffer_size(opts, 128 << 20);
|
|
||||||
rocksdb_options_set_max_total_wal_size(opts, 128 << 20);
|
|
||||||
rocksdb_options_set_recycle_log_file_num(opts, 6);
|
|
||||||
rocksdb_options_set_max_write_buffer_number(opts, 3);
|
|
||||||
|
|
||||||
pHandle->env = env;
|
|
||||||
pHandle->dbOpt = opts;
|
|
||||||
pHandle->cache = cache;
|
|
||||||
|
|
||||||
char* err = NULL;
|
|
||||||
pHandle->db = rocksdb_open(opts, path, &err);
|
|
||||||
if (err != NULL) {
|
|
||||||
qError("failed to open rocksdb, path:%s, reason:%s", path, err);
|
|
||||||
taosMemoryFreeClear(err);
|
|
||||||
goto _EXIT;
|
|
||||||
}
|
|
||||||
|
|
||||||
return pHandle;
|
|
||||||
_EXIT:
|
|
||||||
rocksdb_options_destroy(opts);
|
|
||||||
rocksdb_cache_destroy(cache);
|
|
||||||
rocksdb_env_destroy(env);
|
|
||||||
taosThreadMutexDestroy(&pHandle->mutex);
|
|
||||||
tdListFree(pHandle->list);
|
|
||||||
free(pHandle);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
void streamBackendCleanup(void* arg) {
|
|
||||||
SBackendHandle* pHandle = (SBackendHandle*)arg;
|
|
||||||
rocksdb_close(pHandle->db);
|
|
||||||
rocksdb_options_destroy(pHandle->dbOpt);
|
|
||||||
rocksdb_env_destroy(pHandle->env);
|
|
||||||
rocksdb_cache_destroy(pHandle->cache);
|
|
||||||
|
|
||||||
taosThreadMutexDestroy(&pHandle->mutex);
|
|
||||||
SListNode* head = tdListPopHead(pHandle->list);
|
|
||||||
while (head != NULL) {
|
|
||||||
streamStateDestroyCompar(head->data);
|
|
||||||
taosMemoryFree(head);
|
|
||||||
head = tdListPopHead(pHandle->list);
|
|
||||||
}
|
|
||||||
tdListFree(pHandle->list);
|
|
||||||
|
|
||||||
taosMemoryFree(pHandle);
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
SListNode* streamBackendAddCompare(void* backend, void* arg) {
|
|
||||||
SBackendHandle* pHandle = (SBackendHandle*)backend;
|
|
||||||
SListNode* node = NULL;
|
|
||||||
taosThreadMutexLock(&pHandle->mutex);
|
|
||||||
node = tdListAdd(pHandle->list, arg);
|
|
||||||
taosThreadMutexUnlock(&pHandle->mutex);
|
|
||||||
return node;
|
|
||||||
}
|
|
||||||
void streamBackendDelCompare(void* backend, void* arg) {
|
|
||||||
SBackendHandle* pHandle = (SBackendHandle*)backend;
|
|
||||||
SListNode* node = NULL;
|
|
||||||
taosThreadMutexLock(&pHandle->mutex);
|
|
||||||
node = tdListPopNode(pHandle->list, arg);
|
|
||||||
taosThreadMutexUnlock(&pHandle->mutex);
|
|
||||||
if (node) {
|
|
||||||
streamStateDestroyCompar(node->data);
|
|
||||||
taosMemoryFree(node);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int sessionRangeKeyCmpr(const SSessionKey* pWin1, const SSessionKey* pWin2) {
|
int sessionRangeKeyCmpr(const SSessionKey* pWin1, const SSessionKey* pWin2) {
|
||||||
if (pWin1->groupId > pWin2->groupId) {
|
if (pWin1->groupId > pWin2->groupId) {
|
||||||
return 1;
|
return 1;
|
||||||
|
|
Loading…
Reference in New Issue