Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
cea83344
T
TDengine
项目概览
taosdata
/
TDengine
大约 2 年 前同步成功
通知
1193
Star
22018
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
cea83344
编写于
5月 26, 2023
作者:
H
Haojun Liao
提交者:
GitHub
5月 26, 2023
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #21449 from taosdata/refact/fillhistory
refactor: remove the module dependency. TD-24279
上级
ec02b605
e24ce211
变更
76
展开全部
隐藏空白更改
内联
并排
Showing
76 changed file
with
2306 addition
and
1368 deletion
+2306
-1368
include/common/tcommon.h
include/common/tcommon.h
+7
-0
include/libs/executor/dataSinkMgt.h
include/libs/executor/dataSinkMgt.h
+1
-1
include/libs/executor/executor.h
include/libs/executor/executor.h
+4
-4
include/libs/executor/storageapi.h
include/libs/executor/storageapi.h
+523
-0
include/libs/function/function.h
include/libs/function/function.h
+50
-7
include/libs/index/index.h
include/libs/index/index.h
+27
-2
include/libs/stream/streamState.h
include/libs/stream/streamState.h
+30
-50
include/libs/stream/tstreamFileState.h
include/libs/stream/tstreamFileState.h
+1
-8
include/libs/stream/tstreamUpdate.h
include/libs/stream/tstreamUpdate.h
+13
-13
source/dnode/mnode/impl/src/mndQuery.c
source/dnode/mnode/impl/src/mndQuery.c
+1
-0
source/dnode/qnode/CMakeLists.txt
source/dnode/qnode/CMakeLists.txt
+3
-0
source/dnode/qnode/src/qnode.c
source/dnode/qnode/src/qnode.c
+0
-1
source/dnode/snode/CMakeLists.txt
source/dnode/snode/CMakeLists.txt
+2
-0
source/dnode/snode/inc/sndInt.h
source/dnode/snode/inc/sndInt.h
+2
-0
source/dnode/snode/src/snode.c
source/dnode/snode/src/snode.c
+4
-4
source/dnode/snode/src/snodeInitApi.c
source/dnode/snode/src/snodeInitApi.c
+109
-0
source/dnode/vnode/CMakeLists.txt
source/dnode/vnode/CMakeLists.txt
+1
-0
source/dnode/vnode/inc/vnode.h
source/dnode/vnode/inc/vnode.h
+117
-130
source/dnode/vnode/src/inc/meta.h
source/dnode/vnode/src/inc/meta.h
+6
-0
source/dnode/vnode/src/inc/tsdb.h
source/dnode/vnode/src/inc/tsdb.h
+0
-3
source/dnode/vnode/src/inc/vnodeInt.h
source/dnode/vnode/src/inc/vnodeInt.h
+4
-0
source/dnode/vnode/src/meta/metaQuery.c
source/dnode/vnode/src/meta/metaQuery.c
+74
-129
source/dnode/vnode/src/meta/metaSma.c
source/dnode/vnode/src/meta/metaSma.c
+1
-1
source/dnode/vnode/src/meta/metaSnapshot.c
source/dnode/vnode/src/meta/metaSnapshot.c
+21
-21
source/dnode/vnode/src/meta/metaTable.c
source/dnode/vnode/src/meta/metaTable.c
+2
-2
source/dnode/vnode/src/sma/smaRollup.c
source/dnode/vnode/src/sma/smaRollup.c
+7
-13
source/dnode/vnode/src/tq/tq.c
source/dnode/vnode/src/tq/tq.c
+12
-10
source/dnode/vnode/src/tq/tqMeta.c
source/dnode/vnode/src/tq/tqMeta.c
+5
-4
source/dnode/vnode/src/tq/tqRead.c
source/dnode/vnode/src/tq/tqRead.c
+28
-8
source/dnode/vnode/src/tq/tqRestore.c
source/dnode/vnode/src/tq/tqRestore.c
+3
-2
source/dnode/vnode/src/tq/tqScan.c
source/dnode/vnode/src/tq/tqScan.c
+1
-1
source/dnode/vnode/src/tsdb/tsdbCache.c
source/dnode/vnode/src/tsdb/tsdbCache.c
+1
-1
source/dnode/vnode/src/tsdb/tsdbRead.c
source/dnode/vnode/src/tsdb/tsdbRead.c
+5
-5
source/dnode/vnode/src/vnd/vnodeInitApi.c
source/dnode/vnode/src/vnd/vnodeInitApi.c
+235
-0
source/dnode/vnode/src/vnd/vnodeQuery.c
source/dnode/vnode/src/vnd/vnodeQuery.c
+35
-15
source/dnode/vnode/src/vnd/vnodeSvr.c
source/dnode/vnode/src/vnd/vnodeSvr.c
+107
-103
source/libs/executor/CMakeLists.txt
source/libs/executor/CMakeLists.txt
+1
-2
source/libs/executor/inc/dataSinkInt.h
source/libs/executor/inc/dataSinkInt.h
+2
-0
source/libs/executor/inc/executil.h
source/libs/executor/inc/executil.h
+7
-7
source/libs/executor/inc/executorInt.h
source/libs/executor/inc/executorInt.h
+31
-25
source/libs/executor/inc/operator.h
source/libs/executor/inc/operator.h
+1
-1
source/libs/executor/inc/querytask.h
source/libs/executor/inc/querytask.h
+15
-15
source/libs/executor/src/aggregateoperator.c
source/libs/executor/src/aggregateoperator.c
+5
-5
source/libs/executor/src/cachescanoperator.c
source/libs/executor/src/cachescanoperator.c
+13
-11
source/libs/executor/src/dataInserter.c
source/libs/executor/src/dataInserter.c
+2
-2
source/libs/executor/src/dataSinkMgt.c
source/libs/executor/src/dataSinkMgt.c
+2
-1
source/libs/executor/src/eventwindowoperator.c
source/libs/executor/src/eventwindowoperator.c
+2
-2
source/libs/executor/src/executil.c
source/libs/executor/src/executil.c
+73
-72
source/libs/executor/src/executor.c
source/libs/executor/src/executor.c
+40
-31
source/libs/executor/src/executorInt.c
source/libs/executor/src/executorInt.c
+24
-121
source/libs/executor/src/filloperator.c
source/libs/executor/src/filloperator.c
+55
-42
source/libs/executor/src/groupoperator.c
source/libs/executor/src/groupoperator.c
+23
-16
source/libs/executor/src/operator.c
source/libs/executor/src/operator.c
+13
-10
source/libs/executor/src/projectoperator.c
source/libs/executor/src/projectoperator.c
+4
-3
source/libs/executor/src/querytask.c
source/libs/executor/src/querytask.c
+13
-11
source/libs/executor/src/scanoperator.c
source/libs/executor/src/scanoperator.c
+216
-203
source/libs/executor/src/sortoperator.c
source/libs/executor/src/sortoperator.c
+2
-2
source/libs/executor/src/sysscanoperator.c
source/libs/executor/src/sysscanoperator.c
+115
-94
source/libs/executor/src/timesliceoperator.c
source/libs/executor/src/timesliceoperator.c
+3
-2
source/libs/executor/src/timewindowoperator.c
source/libs/executor/src/timewindowoperator.c
+115
-82
source/libs/function/CMakeLists.txt
source/libs/function/CMakeLists.txt
+0
-1
source/libs/function/src/builtinsimpl.c
source/libs/function/src/builtinsimpl.c
+13
-15
source/libs/index/CMakeLists.txt
source/libs/index/CMakeLists.txt
+0
-1
source/libs/index/src/indexFilter.c
source/libs/index/src/indexFilter.c
+18
-13
source/libs/qworker/CMakeLists.txt
source/libs/qworker/CMakeLists.txt
+9
-3
source/libs/qworker/src/qwMsg.c
source/libs/qworker/src/qwMsg.c
+1
-5
source/libs/qworker/test/CMakeLists.txt
source/libs/qworker/test/CMakeLists.txt
+1
-1
source/libs/scalar/CMakeLists.txt
source/libs/scalar/CMakeLists.txt
+1
-0
source/libs/scheduler/CMakeLists.txt
source/libs/scheduler/CMakeLists.txt
+1
-1
source/libs/stream/CMakeLists.txt
source/libs/stream/CMakeLists.txt
+1
-1
source/libs/stream/inc/streamBackendRocksdb.h
source/libs/stream/inc/streamBackendRocksdb.h
+0
-1
source/libs/stream/src/streamBackendRocksdb.c
source/libs/stream/src/streamBackendRocksdb.c
+9
-9
source/libs/stream/src/streamExec.c
source/libs/stream/src/streamExec.c
+1
-2
source/libs/stream/src/streamState.c
source/libs/stream/src/streamState.c
+17
-13
source/libs/stream/src/tstreamFileState.c
source/libs/stream/src/tstreamFileState.c
+1
-0
source/libs/stream/test/CMakeLists.txt
source/libs/stream/test/CMakeLists.txt
+14
-4
未找到文件。
include/common/tcommon.h
浏览文件 @
cea83344
...
...
@@ -37,6 +37,13 @@ extern "C" {
)
// clang-format on
typedef
bool
(
*
state_key_cmpr_fn
)(
void
*
pKey1
,
void
*
pKey2
);
typedef
struct
STableKeyInfo
{
uint64_t
uid
;
uint64_t
groupId
;
}
STableKeyInfo
;
typedef
struct
SWinKey
{
uint64_t
groupId
;
TSKEY
ts
;
...
...
include/libs/executor/dataSinkMgt.h
浏览文件 @
cea83344
...
...
@@ -59,7 +59,7 @@ typedef struct SDataSinkMgtCfg {
uint32_t
maxDataBlockNumPerQuery
;
}
SDataSinkMgtCfg
;
int32_t
dsDataSinkMgtInit
(
SDataSinkMgtCfg
*
cfg
);
int32_t
dsDataSinkMgtInit
(
SDataSinkMgtCfg
*
cfg
,
SStorageAPI
*
pAPI
);
typedef
struct
SInputData
{
const
struct
SSDataBlock
*
pData
;
...
...
include/libs/executor/executor.h
浏览文件 @
cea83344
...
...
@@ -23,6 +23,7 @@ extern "C" {
#include "query.h"
#include "tcommon.h"
#include "tmsgcb.h"
#include "storageapi.h"
typedef
void
*
qTaskInfo_t
;
typedef
void
*
DataSinkHandle
;
...
...
@@ -41,7 +42,6 @@ typedef struct {
typedef
struct
{
void
*
tqReader
;
void
*
meta
;
void
*
config
;
void
*
vnode
;
void
*
mnd
;
...
...
@@ -51,10 +51,10 @@ typedef struct {
bool
initTableReader
;
bool
initTqReader
;
int32_t
numOfVgroups
;
void
*
sContext
;
// SSnapContext*
void
*
sContext
;
// SSnapContext*
void
*
pStateBackend
;
void
*
pStateBackend
;
struct
SStorageAPI
api
;
}
SReadHandle
;
// in queue mode, data streams are seperated by msg
...
...
include/libs/executor/storageapi.h
0 → 100644
浏览文件 @
cea83344
此差异已折叠。
点击以展开。
include/libs/function/function.h
浏览文件 @
cea83344
...
...
@@ -22,6 +22,7 @@ extern "C" {
#include "tcommon.h"
#include "tvariant.h"
#include "tsimplehash.h"
struct
SqlFunctionCtx
;
struct
SResultRowEntryInfo
;
...
...
@@ -127,18 +128,59 @@ typedef struct SSerializeDataHandle {
void
*
pState
;
}
SSerializeDataHandle
;
// incremental state storage
typedef
struct
STdbState
{
void
*
rocksdb
;
void
**
pHandle
;
void
*
writeOpts
;
void
*
readOpts
;
void
**
cfOpts
;
void
*
dbOpt
;
struct
SStreamTask
*
pOwner
;
void
*
param
;
void
*
env
;
SListNode
*
pComparNode
;
void
*
pBackendHandle
;
char
idstr
[
64
];
void
*
compactFactory
;
void
*
db
;
void
*
pStateDb
;
void
*
pFuncStateDb
;
void
*
pFillStateDb
;
// todo refactor
void
*
pSessionStateDb
;
void
*
pParNameDb
;
void
*
pParTagDb
;
void
*
txn
;
}
STdbState
;
typedef
struct
{
STdbState
*
pTdbState
;
struct
SStreamFileState
*
pFileState
;
int32_t
number
;
SSHashObj
*
parNameMap
;
int64_t
checkPointId
;
int32_t
taskId
;
int64_t
streamId
;
}
SStreamState
;
typedef
struct
SFunctionStateStore
{
int32_t
(
*
streamStateFuncPut
)(
SStreamState
*
pState
,
const
SWinKey
*
key
,
const
void
*
value
,
int32_t
vLen
);
int32_t
(
*
streamStateFuncGet
)(
SStreamState
*
pState
,
const
SWinKey
*
key
,
void
**
ppVal
,
int32_t
*
pVLen
);
}
SFunctionStateStore
;
// sql function runtime context
typedef
struct
SqlFunctionCtx
{
SInputColumnInfoData
input
;
SResultDataInfo
resDataInfo
;
uint32_t
order
;
// data block scanner order: asc|desc
uint8_t
isPseudoFunc
;
// denote current function is pseudo function or not [added for perf reason]
uint8_t
isNotNullFunc
;
// not return null value.
uint8_t
scanFlag
;
// record current running step, default: 0
int16_t
functionId
;
// function id
char
*
pOutput
;
// final result output buffer, point to sdata->data
uint32_t
order
;
// data block scanner order: asc|desc
uint8_t
isPseudoFunc
;
// denote current function is pseudo function or not [added for perf reason]
uint8_t
isNotNullFunc
;
// not return null value.
uint8_t
scanFlag
;
// record current running step, default: 0
int16_t
functionId
;
// function id
char
*
pOutput
;
// final result output buffer, point to sdata->data
// input parameter, e.g., top(k, 20), the number of results of top query is kept in param
SFunctParam
*
param
;
SFunctParam
*
param
;
// corresponding output buffer for timestamp of each result, e.g., diff/csum
SColumnInfoData
*
pTsOutput
;
int32_t
numOfParams
;
...
...
@@ -155,6 +197,7 @@ typedef struct SqlFunctionCtx {
SSerializeDataHandle
saveHandle
;
int32_t
exprIdx
;
char
*
udfName
;
SFunctionStateStore
*
pStore
;
}
SqlFunctionCtx
;
typedef
struct
tExprNode
{
...
...
include/libs/index/index.h
浏览文件 @
cea83344
...
...
@@ -212,13 +212,38 @@ typedef struct SIndexMetaArg {
void
*
idx
;
void
*
ivtIdx
;
uint64_t
suid
;
int
(
*
metaFilterFunc
)(
void
*
metaEx
,
void
*
param
,
SArray
*
result
);
}
SIndexMetaArg
;
/**
* the underlying storage module must implement this API to employ the index functions.
* @param pMeta
* @param param
* @param results
* @return
*/
typedef
struct
SMetaFltParam
{
uint64_t
suid
;
int16_t
cid
;
int16_t
type
;
void
*
val
;
bool
reverse
;
bool
equal
;
int
(
*
filterFunc
)(
void
*
a
,
void
*
b
,
int16_t
type
);
}
SMetaFltParam
;
typedef
struct
SMetaDataFilterAPI
{
int32_t
(
*
metaFilterTableIds
)(
void
*
pVnode
,
SMetaFltParam
*
arg
,
SArray
*
pUids
);
int32_t
(
*
metaFilterCreateTime
)(
void
*
pVnode
,
SMetaFltParam
*
arg
,
SArray
*
pUids
);
int32_t
(
*
metaFilterTableName
)(
void
*
pVnode
,
SMetaFltParam
*
arg
,
SArray
*
pUids
);
int32_t
(
*
metaFilterTtl
)(
void
*
pVnode
,
SMetaFltParam
*
arg
,
SArray
*
pUids
);
}
SMetaDataFilterAPI
;
typedef
enum
{
SFLT_NOT_INDEX
,
SFLT_COARSE_INDEX
,
SFLT_ACCURATE_INDEX
}
SIdxFltStatus
;
SIdxFltStatus
idxGetFltStatus
(
SNode
*
pFilterNode
);
SIdxFltStatus
idxGetFltStatus
(
SNode
*
pFilterNode
,
SMetaDataFilterAPI
*
pAPI
);
int32_t
doFilterTag
(
SNode
*
pFilterNode
,
SIndexMetaArg
*
metaArg
,
SArray
*
result
,
SIdxFltStatus
*
status
);
int32_t
doFilterTag
(
SNode
*
pFilterNode
,
SIndexMetaArg
*
metaArg
,
SArray
*
result
,
SIdxFltStatus
*
status
,
SMetaDataFilterAPI
*
pAPI
);
/*
* init index env
...
...
include/libs/stream/streamState.h
浏览文件 @
cea83344
...
...
@@ -27,65 +27,45 @@
extern
"C"
{
#endif
#include "storageapi.h"
// 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
struct
STdbState
{
rocksdb_t
*
rocksdb
;
rocksdb_column_family_handle_t
**
pHandle
;
rocksdb_writeoptions_t
*
writeOpts
;
rocksdb_readoptions_t
*
readOpts
;
rocksdb_options_t
**
cfOpts
;
rocksdb_options_t
*
dbOpt
;
struct
SStreamTask
*
pOwner
;
void
*
param
;
void
*
env
;
SListNode
*
pComparNode
;
void
*
pBackendHandle
;
char
idstr
[
64
];
void
*
compactFactory
;
TDB
*
db
;
TTB
*
pStateDb
;
TTB
*
pFuncStateDb
;
TTB
*
pFillStateDb
;
// todo refactor
TTB
*
pSessionStateDb
;
TTB
*
pParNameDb
;
TTB
*
pParTagDb
;
TXN
*
txn
;
}
STdbState
;
// incremental state storage
typedef
struct
{
STdbState
*
pTdbState
;
SStreamFileState
*
pFileState
;
int32_t
number
;
SSHashObj
*
parNameMap
;
int64_t
checkPointId
;
int32_t
taskId
;
int64_t
streamId
;
}
SStreamState
;
SStreamState
*
streamStateOpen
(
char
*
path
,
struct
SStreamTask
*
pTask
,
bool
specPath
,
int32_t
szPage
,
int32_t
pages
);
//typedef struct STdbState {
// rocksdb_t* rocksdb;
// rocksdb_column_family_handle_t** pHandle;
// rocksdb_writeoptions_t* writeOpts;
// rocksdb_readoptions_t* readOpts;
// rocksdb_options_t** cfOpts;
// rocksdb_options_t* dbOpt;
// struct SStreamTask* pOwner;
// void* param;
// void* env;
// SListNode* pComparNode;
// void* pBackendHandle;
// char idstr[64];
// void* compactFactory;
//
// TDB* db;
// TTB* pStateDb;
// TTB* pFuncStateDb;
// TTB* pFillStateDb; // todo refactor
// TTB* pSessionStateDb;
// TTB* pParNameDb;
// TTB* pParTagDb;
// TXN* txn;
//} STdbState;
SStreamState
*
streamStateOpen
(
char
*
path
,
void
*
pTask
,
bool
specPath
,
int32_t
szPage
,
int32_t
pages
);
void
streamStateClose
(
SStreamState
*
pState
,
bool
remove
);
int32_t
streamStateBegin
(
SStreamState
*
pState
);
int32_t
streamStateCommit
(
SStreamState
*
pState
);
void
streamStateDestroy
(
SStreamState
*
pState
,
bool
remove
);
int32_t
streamStateDeleteCheckPoint
(
SStreamState
*
pState
,
TSKEY
mark
);
typedef
struct
{
rocksdb_iterator_t
*
iter
;
rocksdb_snapshot_t
*
snapshot
;
rocksdb_readoptions_t
*
readOpt
;
rocksdb_t
*
db
;
TBC
*
pCur
;
int64_t
number
;
}
SStreamStateCur
;
int32_t
streamStateFuncPut
(
SStreamState
*
pState
,
const
SWinKey
*
key
,
const
void
*
value
,
int32_t
vLen
);
int32_t
streamStateFuncGet
(
SStreamState
*
pState
,
const
SWinKey
*
key
,
void
**
ppVal
,
int32_t
*
pVLen
);
...
...
@@ -119,7 +99,7 @@ int32_t streamStateFillDel(SStreamState* pState, const SWinKey* key);
int32_t
streamStateAddIfNotExist
(
SStreamState
*
pState
,
const
SWinKey
*
key
,
void
**
pVal
,
int32_t
*
pVLen
);
int32_t
streamStateReleaseBuf
(
SStreamState
*
pState
,
const
SWinKey
*
key
,
void
*
pVal
);
void
streamFreeVal
(
void
*
val
);
void
stream
State
FreeVal
(
void
*
val
);
SStreamStateCur
*
streamStateGetAndCheckCur
(
SStreamState
*
pState
,
SWinKey
*
key
);
SStreamStateCur
*
streamStateSeekKeyNext
(
SStreamState
*
pState
,
const
SWinKey
*
key
);
...
...
include/libs/stream/tstreamFileState.h
浏览文件 @
cea83344
...
...
@@ -21,23 +21,16 @@
#include "tarray.h"
#include "tdef.h"
#include "tlist.h"
#include "storageapi.h"
#ifdef __cplusplus
extern
"C"
{
#endif
typedef
struct
SStreamFileState
SStreamFileState
;
typedef
struct
SRowBuffPos
{
void
*
pRowBuff
;
void
*
pKey
;
bool
beFlushed
;
bool
beUsed
;
}
SRowBuffPos
;
typedef
SList
SStreamSnapshot
;
typedef
TSKEY
(
*
GetTsFun
)(
void
*
);
SStreamFileState
*
streamFileStateInit
(
int64_t
memSize
,
uint32_t
keySize
,
uint32_t
rowSize
,
uint32_t
selectRowSize
,
GetTsFun
fp
,
void
*
pFile
,
TSKEY
delMark
);
void
streamFileStateDestroy
(
SStreamFileState
*
pFileState
);
...
...
include/libs/stream/tstreamUpdate.h
浏览文件 @
cea83344
...
...
@@ -19,7 +19,7 @@
#include "tarray.h"
#include "tcommon.h"
#include "tmsg.h"
#include "
tscalablebf
.h"
#include "
storageapi
.h"
#ifdef __cplusplus
extern
"C"
{
...
...
@@ -30,18 +30,18 @@ typedef struct SUpdateKey {
TSKEY
ts
;
}
SUpdateKey
;
typedef
struct
SUpdateInfo
{
SArray
*
pTsBuckets
;
uint64_t
numBuckets
;
SArray
*
pTsSBFs
;
uint64_t
numSBFs
;
int64_t
interval
;
int64_t
watermark
;
TSKEY
minTS
;
SScalableBf
*
pCloseWinSBF
;
SHashObj
*
pMap
;
uint64_t
maxDataVersion
;
}
SUpdateInfo
;
//
typedef struct SUpdateInfo {
//
SArray *pTsBuckets;
//
uint64_t numBuckets;
//
SArray *pTsSBFs;
//
uint64_t numSBFs;
//
int64_t interval;
//
int64_t watermark;
//
TSKEY minTS;
//
SScalableBf *pCloseWinSBF;
//
SHashObj *pMap;
//
uint64_t maxDataVersion;
//
} SUpdateInfo;
SUpdateInfo
*
updateInfoInitP
(
SInterval
*
pInterval
,
int64_t
watermark
);
SUpdateInfo
*
updateInfoInit
(
int64_t
interval
,
int32_t
precision
,
int64_t
watermark
);
...
...
source/dnode/mnode/impl/src/mndQuery.c
浏览文件 @
cea83344
...
...
@@ -33,6 +33,7 @@ void mndPostProcessQueryMsg(SRpcMsg *pMsg) {
int32_t
mndProcessQueryMsg
(
SRpcMsg
*
pMsg
)
{
int32_t
code
=
-
1
;
SMnode
*
pMnode
=
pMsg
->
info
.
node
;
SReadHandle
handle
=
{.
mnd
=
pMnode
,
.
pMsgCb
=
&
pMnode
->
msgCb
};
mTrace
(
"msg:%p, in query queue is processing"
,
pMsg
);
...
...
source/dnode/qnode/CMakeLists.txt
浏览文件 @
cea83344
...
...
@@ -14,4 +14,7 @@ target_link_libraries(
PRIVATE qworker
PRIVATE qcom
PRIVATE executor
PRIVATE tdb
PRIVATE wal
PRIVATE index
)
\ No newline at end of file
source/dnode/qnode/src/qnode.c
浏览文件 @
cea83344
...
...
@@ -14,7 +14,6 @@
*/
#include "executor.h"
#include "libs/function/function.h"
#include "qndInt.h"
#include "query.h"
#include "qworker.h"
...
...
source/dnode/snode/CMakeLists.txt
浏览文件 @
cea83344
...
...
@@ -14,4 +14,6 @@ target_link_libraries(
PRIVATE util
PRIVATE qcom
PRIVATE stream
PRIVATE wal
PRIVATE index
)
source/dnode/snode/inc/sndInt.h
浏览文件 @
cea83344
...
...
@@ -53,6 +53,8 @@ int32_t sndStopTaskOfStream(SStreamMeta* pMeta, int64_t streamId);
int32_t sndResumeTaskOfStream(SStreamMeta* pMeta, int64_t streamId);
#endif
void
initStreamStateAPI
(
SStorageAPI
*
pAPI
);
#ifdef __cplusplus
}
#endif
...
...
source/dnode/snode/src/snode.c
浏览文件 @
cea83344
...
...
@@ -62,8 +62,7 @@ FAIL:
}
int32_t
sndExpandTask
(
SSnode
*
pSnode
,
SStreamTask
*
pTask
,
int64_t
ver
)
{
ASSERT
(
pTask
->
taskLevel
==
TASK_LEVEL__AGG
);
ASSERT
(
taosArrayGetSize
(
pTask
->
childEpInfo
)
!=
0
);
ASSERT
(
pTask
->
taskLevel
==
TASK_LEVEL__AGG
&&
taosArrayGetSize
(
pTask
->
childEpInfo
)
!=
0
);
pTask
->
refCnt
=
1
;
pTask
->
status
.
schedStatus
=
TASK_SCHED_STATUS__INACTIVE
;
...
...
@@ -87,9 +86,10 @@ int32_t sndExpandTask(SSnode *pSnode, SStreamTask *pTask, int64_t ver) {
}
int32_t
numOfChildEp
=
taosArrayGetSize
(
pTask
->
childEpInfo
);
SReadHandle
mgHandle
=
{
.
vnode
=
NULL
,
.
numOfVgroups
=
numOfChildEp
,
.
pStateBackend
=
pTask
->
pState
};
SReadHandle
handle
=
{
.
vnode
=
NULL
,
.
numOfVgroups
=
numOfChildEp
,
.
pStateBackend
=
pTask
->
pState
};
initStreamStateAPI
(
&
handle
.
api
);
pTask
->
exec
.
pExecutor
=
qCreateStreamExecTaskInfo
(
pTask
->
exec
.
qmsg
,
&
mgH
andle
,
0
);
pTask
->
exec
.
pExecutor
=
qCreateStreamExecTaskInfo
(
pTask
->
exec
.
qmsg
,
&
h
andle
,
0
);
ASSERT
(
pTask
->
exec
.
pExecutor
);
streamSetupTrigger
(
pTask
);
...
...
source/dnode/snode/src/snodeInitApi.c
0 → 100644
浏览文件 @
cea83344
/*
* 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 "storageapi.h"
#include "tstreamUpdate.h"
#include "streamState.h"
static
void
initStateStoreAPI
(
SStateStore
*
pStore
);
static
void
initFunctionStateStore
(
SFunctionStateStore
*
pStore
);
void
initStreamStateAPI
(
SStorageAPI
*
pAPI
)
{
initStateStoreAPI
(
&
pAPI
->
stateStore
);
initFunctionStateStore
(
&
pAPI
->
functionStore
);
}
void
initStateStoreAPI
(
SStateStore
*
pStore
)
{
pStore
->
streamFileStateInit
=
streamFileStateInit
;
pStore
->
updateInfoDestoryColseWinSBF
=
updateInfoDestoryColseWinSBF
;
pStore
->
streamStateGetByPos
=
streamStateGetByPos
;
pStore
->
streamStatePutParName
=
streamStatePutParName
;
pStore
->
streamStateGetParName
=
streamStateGetParName
;
pStore
->
streamStateAddIfNotExist
=
streamStateAddIfNotExist
;
pStore
->
streamStateReleaseBuf
=
streamStateReleaseBuf
;
pStore
->
streamStateFreeVal
=
streamStateFreeVal
;
pStore
->
streamStatePut
=
streamStatePut
;
pStore
->
streamStateGet
=
streamStateGet
;
pStore
->
streamStateCheck
=
streamStateCheck
;
pStore
->
streamStateGetByPos
=
streamStateGetByPos
;
pStore
->
streamStateDel
=
streamStateDel
;
pStore
->
streamStateClear
=
streamStateClear
;
pStore
->
streamStateSaveInfo
=
streamStateSaveInfo
;
pStore
->
streamStateGetInfo
=
streamStateGetInfo
;
pStore
->
streamStateSetNumber
=
streamStateSetNumber
;
pStore
->
streamStateFillPut
=
streamStateFillPut
;
pStore
->
streamStateFillGet
=
streamStateFillGet
;
pStore
->
streamStateFillDel
=
streamStateFillDel
;
pStore
->
streamStateCurNext
=
streamStateCurNext
;
pStore
->
streamStateCurPrev
=
streamStateCurPrev
;
pStore
->
streamStateGetAndCheckCur
=
streamStateGetAndCheckCur
;
pStore
->
streamStateSeekKeyNext
=
streamStateSeekKeyNext
;
pStore
->
streamStateFillSeekKeyNext
=
streamStateFillSeekKeyNext
;
pStore
->
streamStateFillSeekKeyPrev
=
streamStateFillSeekKeyPrev
;
pStore
->
streamStateFreeCur
=
streamStateFreeCur
;
pStore
->
streamStateGetGroupKVByCur
=
streamStateGetGroupKVByCur
;
pStore
->
streamStateGetKVByCur
=
streamStateGetKVByCur
;
pStore
->
streamStateSessionAddIfNotExist
=
streamStateSessionAddIfNotExist
;
pStore
->
streamStateSessionPut
=
streamStateSessionPut
;
pStore
->
streamStateSessionGet
=
streamStateSessionGet
;
pStore
->
streamStateSessionDel
=
streamStateSessionDel
;
pStore
->
streamStateSessionClear
=
streamStateSessionClear
;
pStore
->
streamStateSessionGetKVByCur
=
streamStateSessionGetKVByCur
;
pStore
->
streamStateStateAddIfNotExist
=
streamStateStateAddIfNotExist
;
pStore
->
streamStateSessionGetKeyByRange
=
streamStateSessionGetKeyByRange
;
pStore
->
updateInfoInit
=
updateInfoInit
;
pStore
->
updateInfoFillBlockData
=
updateInfoFillBlockData
;
pStore
->
updateInfoIsUpdated
=
updateInfoIsUpdated
;
pStore
->
updateInfoIsTableInserted
=
updateInfoIsTableInserted
;
pStore
->
updateInfoDestroy
=
updateInfoDestroy
;
pStore
->
updateInfoInitP
=
updateInfoInitP
;
pStore
->
updateInfoAddCloseWindowSBF
=
updateInfoAddCloseWindowSBF
;
pStore
->
updateInfoDestoryColseWinSBF
=
updateInfoDestoryColseWinSBF
;
pStore
->
updateInfoSerialize
=
updateInfoSerialize
;
pStore
->
updateInfoDeserialize
=
updateInfoDeserialize
;
pStore
->
streamStateSessionSeekKeyNext
=
streamStateSessionSeekKeyNext
;
pStore
->
streamStateSessionSeekKeyCurrentPrev
=
streamStateSessionSeekKeyCurrentPrev
;
pStore
->
streamStateSessionSeekKeyCurrentNext
=
streamStateSessionSeekKeyCurrentNext
;
pStore
->
streamFileStateInit
=
streamFileStateInit
;
pStore
->
streamFileStateDestroy
=
streamFileStateDestroy
;
pStore
->
streamFileStateClear
=
streamFileStateClear
;
pStore
->
needClearDiskBuff
=
needClearDiskBuff
;
pStore
->
streamStateOpen
=
streamStateOpen
;
pStore
->
streamStateClose
=
streamStateClose
;
pStore
->
streamStateBegin
=
streamStateBegin
;
pStore
->
streamStateCommit
=
streamStateCommit
;
pStore
->
streamStateDestroy
=
streamStateDestroy
;
pStore
->
streamStateDeleteCheckPoint
=
streamStateDeleteCheckPoint
;
}
void
initFunctionStateStore
(
SFunctionStateStore
*
pStore
)
{
pStore
->
streamStateFuncPut
=
streamStateFuncPut
;
pStore
->
streamStateFuncGet
=
streamStateFuncGet
;
}
\ No newline at end of file
source/dnode/vnode/CMakeLists.txt
浏览文件 @
cea83344
...
...
@@ -15,6 +15,7 @@ target_sources(
"src/vnd/vnodeSync.c"
"src/vnd/vnodeSnapshot.c"
"src/vnd/vnodeRetention.c"
"src/vnd/vnodeInitApi.c"
# meta
"src/meta/metaOpen.c"
...
...
source/dnode/vnode/inc/vnode.h
浏览文件 @
cea83344
...
...
@@ -26,6 +26,7 @@
#include "tfs.h"
#include "wal.h"
#include "filter.h"
#include "tcommon.h"
#include "tfs.h"
#include "tgrant.h"
...
...
@@ -33,6 +34,7 @@
#include "trow.h"
#include "tdb.h"
#include "storageapi.h"
#ifdef __cplusplus
extern
"C"
{
...
...
@@ -65,17 +67,18 @@ int32_t vnodeStart(SVnode *pVnode);
void
vnodeStop
(
SVnode
*
pVnode
);
int64_t
vnodeGetSyncHandle
(
SVnode
*
pVnode
);
void
vnodeGetSnapshot
(
SVnode
*
pVnode
,
SSnapshot
*
pSnapshot
);
void
vnodeGetInfo
(
SVnode
*
pVnode
,
const
char
**
dbname
,
int32_t
*
vgId
);
void
vnodeGetInfo
(
void
*
pVnode
,
const
char
**
dbname
,
int32_t
*
vgId
,
int64_t
*
numOfTables
,
int64_t
*
numOfNormalTables
);
int32_t
vnodeProcessCreateTSma
(
SVnode
*
pVnode
,
void
*
pCont
,
uint32_t
contLen
);
int32_t
vnodeGetTableList
(
void
*
pVnode
,
int8_t
type
,
SArray
*
pList
);
int32_t
vnodeGetAllTableList
(
SVnode
*
pVnode
,
uint64_t
uid
,
SArray
*
list
);
int32_t
vnodeIsCatchUp
(
SVnode
*
pVnode
);
ESyncRole
vnodeGetRole
(
SVnode
*
pVnode
);
int32_t
vnodeGetCtbIdList
(
SVnode
*
pVnode
,
int64_t
suid
,
SArray
*
list
);
int32_t
vnodeGetCtbIdList
(
void
*
pVnode
,
int64_t
suid
,
SArray
*
list
);
int32_t
vnodeGetCtbIdListByFilter
(
SVnode
*
pVnode
,
int64_t
suid
,
SArray
*
list
,
bool
(
*
filter
)(
void
*
arg
),
void
*
arg
);
int32_t
vnodeGetStbIdList
(
SVnode
*
pVnode
,
int64_t
suid
,
SArray
*
list
);
void
*
vnodeGetIdx
(
SVnode
*
pVnode
);
void
*
vnodeGetIvtIdx
(
SVnode
*
pVnode
);
void
*
vnodeGetIdx
(
void
*
pVnode
);
void
*
vnodeGetIvtIdx
(
void
*
pVnode
);
int32_t
vnodeGetCtbNum
(
SVnode
*
pVnode
,
int64_t
suid
,
int64_t
*
num
);
int32_t
vnodeGetTimeSeriesNum
(
SVnode
*
pVnode
,
int64_t
*
num
);
...
...
@@ -103,57 +106,40 @@ typedef struct SMetaEntry SMetaEntry;
#define META_READER_NOLOCK 0x1
void
metaReaderInit
(
SMetaReader
*
pReader
,
SMeta
*
pMeta
,
int32_t
flags
);
void
_metaReaderInit
(
SMetaReader
*
pReader
,
void
*
pVnode
,
int32_t
flags
,
SStoreMeta
*
pAPI
);
void
metaReaderReleaseLock
(
SMetaReader
*
pReader
);
void
metaReaderClear
(
SMetaReader
*
pReader
);
int32_t
metaGetTableEntryByUid
(
SMetaReader
*
pReader
,
tb_uid_t
uid
);
int32_t
metaGetTableEntryByUidCache
(
SMetaReader
*
pReader
,
tb_uid_t
uid
);
int32_t
meta
Reader
GetTableEntryByUid
(
SMetaReader
*
pReader
,
tb_uid_t
uid
);
int32_t
meta
Reader
GetTableEntryByUidCache
(
SMetaReader
*
pReader
,
tb_uid_t
uid
);
int
metaGetTableEntryByName
(
SMetaReader
*
pReader
,
const
char
*
name
);
int32_t
metaGetTableTags
(
SMeta
*
pMeta
,
uint64_t
suid
,
SArray
*
uidList
);
int32_t
metaGetTableTagsByUids
(
SMeta
*
pMeta
,
int64_t
suid
,
SArray
*
uidList
);
int32_t
metaGetTableTags
(
void
*
pVnode
,
uint64_t
suid
,
SArray
*
uidList
);
int32_t
metaGetTableTagsByUids
(
void
*
pVnode
,
int64_t
suid
,
SArray
*
uidList
);
int32_t
metaReadNext
(
SMetaReader
*
pReader
);
const
void
*
metaGetTableTagVal
(
void
*
tag
,
int16_t
type
,
STagVal
*
tagVal
);
const
void
*
metaGetTableTagVal
(
const
void
*
tag
,
int16_t
type
,
STagVal
*
tagVal
);
int
metaGetTableNameByUid
(
void
*
meta
,
uint64_t
uid
,
char
*
tbName
);
int
metaGetTableSzNameByUid
(
void
*
meta
,
uint64_t
uid
,
char
*
tbName
);
int
metaGetTableUidByName
(
void
*
meta
,
char
*
tbName
,
uint64_t
*
uid
);
int
metaGetTableUidByName
(
void
*
pVnode
,
char
*
tbName
,
uint64_t
*
uid
);
int
metaGetTableTypeByName
(
void
*
meta
,
char
*
tbName
,
ETableType
*
tbType
);
bool
metaIsTableExist
(
SMeta
*
pMeta
,
tb_uid_t
uid
);
bool
metaIsTableExist
(
void
*
pVnode
,
tb_uid_t
uid
);
int32_t
metaGetCachedTableUidList
(
SMeta
*
pMeta
,
tb_uid_t
suid
,
const
uint8_t
*
key
,
int32_t
keyLen
,
SArray
*
pList
,
bool
*
acquired
);
int32_t
metaUidFilterCachePut
(
SMeta
*
pMeta
,
uint64_t
suid
,
const
void
*
pKey
,
int32_t
keyLen
,
void
*
pPayload
,
int32_t
payloadLen
,
double
selectivityRatio
);
int32_t
metaUidCacheClear
(
SMeta
*
pMeta
,
uint64_t
suid
);
tb_uid_t
metaGetTableEntryUidByName
(
SMeta
*
pMeta
,
const
char
*
name
);
int32_t
metaTbGroupCacheClear
(
SMeta
*
pMeta
,
uint64_t
suid
);
int32_t
metaGetCachedTbGroup
(
SMeta
*
pMeta
,
tb_uid_t
suid
,
const
uint8_t
*
pKey
,
int32_t
keyLen
,
SArray
**
pList
);
int32_t
metaPutTbGroupToCache
(
SMeta
*
pMeta
,
uint64_t
suid
,
const
void
*
pKey
,
int32_t
keyLen
,
void
*
pPayload
,
int32_t
payloadLen
);
int32_t
metaTbGroupCacheClear
(
SMeta
*
pMeta
,
uint64_t
suid
);
int32_t
metaGetCachedTbGroup
(
SMeta
*
pMeta
,
tb_uid_t
suid
,
const
uint8_t
*
pKey
,
int32_t
keyLen
,
SArray
**
pList
);
int32_t
metaPutTbGroupToCache
(
SMeta
*
pMeta
,
uint64_t
suid
,
const
void
*
pKey
,
int32_t
keyLen
,
void
*
pPayload
,
int32_t
payloadLen
);
int64_t
metaGetTbNum
(
SMeta
*
pMeta
);
int64_t
metaGetNtbNum
(
SMeta
*
pMeta
);
typedef
struct
{
int64_t
uid
;
int64_t
ctbNum
;
}
SMetaStbStats
;
int32_t
metaGetStbStats
(
SMeta
*
pMeta
,
int64_t
uid
,
SMetaStbStats
*
pInfo
);
typedef
struct
SMetaFltParam
{
tb_uid_t
suid
;
int16_t
cid
;
int16_t
type
;
void
*
val
;
bool
reverse
;
bool
equal
;
int
(
*
filterFunc
)(
void
*
a
,
void
*
b
,
int16_t
type
);
}
SMetaFltParam
;
// TODO, refactor later
int32_t
metaFilterTableIds
(
SMeta
*
pMeta
,
SMetaFltParam
*
param
,
SArray
*
results
);
int32_t
metaFilterCreateTime
(
SMeta
*
pMeta
,
SMetaFltParam
*
parm
,
SArray
*
pUids
);
int32_t
metaFilterTableName
(
SMeta
*
pMeta
,
SMetaFltParam
*
param
,
SArray
*
pUids
);
int32_t
metaFilterTtl
(
SMeta
*
pMeta
,
SMetaFltParam
*
param
,
SArray
*
pUids
);
//typedef struct {
// int64_t uid;
// int64_t ctbNum;
//} SMetaStbStats;
int32_t
metaGetStbStats
(
void
*
pVnode
,
int64_t
uid
,
int64_t
*
numOfTables
);
#if 1 // refact APIs below (TODO)
typedef
SVCreateTbReq
STbCfg
;
...
...
@@ -161,7 +147,7 @@ typedef SVCreateTSmaReq SSmaCfg;
typedef
struct
SMTbCursor
SMTbCursor
;
SMTbCursor
*
metaOpenTbCursor
(
SMeta
*
pMeta
);
SMTbCursor
*
metaOpenTbCursor
(
void
*
pVnode
);
void
metaCloseTbCursor
(
SMTbCursor
*
pTbCur
);
int32_t
metaTbCursorNext
(
SMTbCursor
*
pTbCur
,
ETableType
jumpTableType
);
int32_t
metaTbCursorPrev
(
SMTbCursor
*
pTbCur
,
ETableType
jumpTableType
);
...
...
@@ -183,7 +169,8 @@ typedef struct STsdbReader STsdbReader;
#define CACHESCAN_RETRIEVE_LAST 0x8
int32_t
tsdbReaderOpen
(
SVnode
*
pVnode
,
SQueryTableDataCond
*
pCond
,
void
*
pTableList
,
int32_t
numOfTables
,
SSDataBlock
*
pResBlock
,
STsdbReader
**
ppReader
,
const
char
*
idstr
,
bool
countOnly
,
SHashObj
**
pIgnoreTables
);
SSDataBlock
*
pResBlock
,
STsdbReader
**
ppReader
,
const
char
*
idstr
,
bool
countOnly
,
SHashObj
**
pIgnoreTables
);
int32_t
tsdbSetTableList
(
STsdbReader
*
pReader
,
const
void
*
pTableList
,
int32_t
num
);
void
tsdbReaderSetId
(
STsdbReader
*
pReader
,
const
char
*
idstr
);
void
tsdbReaderClose
(
STsdbReader
*
pReader
);
...
...
@@ -198,47 +185,47 @@ void *tsdbGetIdx(SMeta *pMeta);
void
*
tsdbGetIvtIdx
(
SMeta
*
pMeta
);
uint64_t
tsdbGetReaderMaxVersion
(
STsdbReader
*
pReader
);
void
tsdbReaderSetCloseFlag
(
STsdbReader
*
pReader
);
int64_t
tsdbGetLastTimestamp
(
SVnode
*
pVnode
,
void
*
pTableList
,
int32_t
numOfTables
,
const
char
*
pIdStr
);
int64_t
tsdbGetLastTimestamp
(
SVnode
*
pVnode
,
void
*
pTableList
,
int32_t
numOfTables
,
const
char
*
pIdStr
);
int32_t
tsdbReuseCacherowsReader
(
void
*
pReader
,
void
*
pTableIdList
,
int32_t
numOfTables
);
int32_t
tsdbReuseCacherowsReader
(
void
*
pReader
,
void
*
pTableIdList
,
int32_t
numOfTables
);
int32_t
tsdbCacherowsReaderOpen
(
void
*
pVnode
,
int32_t
type
,
void
*
pTableIdList
,
int32_t
numOfTables
,
int32_t
numOfCols
,
SArray
*
pCidList
,
int32_t
*
pSlotIds
,
uint64_t
suid
,
void
**
pReader
,
const
char
*
idstr
);
int32_t
tsdbRetrieveCacheRows
(
void
*
pReader
,
SSDataBlock
*
pResBlock
,
const
int32_t
*
slotIds
,
const
int32_t
*
dstSlotIds
,
SArray
*
pTableUids
);
void
*
tsdbCacherowsReaderClose
(
void
*
pReader
);
int32_t
tsdbGetTableSchema
(
SVnode
*
pVnode
,
int64_t
uid
,
STSchema
**
pSchema
,
int64_t
*
suid
);
int32_t
tsdbGetTableSchema
(
void
*
pVnode
,
int64_t
uid
,
STSchema
**
pSchema
,
int64_t
*
suid
);
void
tsdbCacheSetCapacity
(
SVnode
*
pVnode
,
size_t
capacity
);
size_t
tsdbCacheGetCapacity
(
SVnode
*
pVnode
);
size_t
tsdbCacheGetUsage
(
SVnode
*
pVnode
);
int32_t
tsdbCacheGetElems
(
SVnode
*
pVnode
);
// tq
typedef
struct
SMetaTableInfo
{
int64_t
suid
;
int64_t
uid
;
SSchemaWrapper
*
schema
;
char
tbName
[
TSDB_TABLE_NAME_LEN
];
}
SMetaTableInfo
;
//
//
tq
//
typedef struct SMetaTableInfo {
//
int64_t suid;
//
int64_t uid;
//
SSchemaWrapper *schema;
//
char tbName[TSDB_TABLE_NAME_LEN];
//
} SMetaTableInfo;
typedef
struct
SIdInfo
{
int64_t
version
;
int32_t
index
;
}
SIdInfo
;
typedef
struct
SSnapContext
{
SMeta
*
pMeta
;
int64_t
snapVersion
;
TBC
*
pCur
;
int64_t
suid
;
int8_t
subType
;
SHashObj
*
idVersion
;
SHashObj
*
suidInfo
;
SArray
*
idList
;
int32_t
index
;
bool
withMeta
;
bool
queryMeta
;
// true-get meta, false-get data
}
SSnapContext
;
//
typedef struct SSnapContext {
//
SMeta *pMeta;
//
int64_t snapVersion;
//
TBC *pCur;
//
int64_t suid;
//
int8_t subType;
//
SHashObj *idVersion;
//
SHashObj *suidInfo;
//
SArray *idList;
//
int32_t index;
//
bool withMeta;
//
bool queryMeta; // true-get meta, false-get data
//
} SSnapContext;
typedef
struct
STqReader
{
SPackedData
msg
;
...
...
@@ -257,21 +244,26 @@ typedef struct STqReader {
}
STqReader
;
STqReader
*
tqReaderOpen
(
SVnode
*
pVnode
);
void
tq
CloseReader
(
STqReader
*
);
void
tq
ReaderClose
(
STqReader
*
);
void
tqReaderSetColIdList
(
STqReader
*
pReader
,
SArray
*
pColIdList
);
int32_t
tqReaderSetTbUidList
(
STqReader
*
pReader
,
const
SArray
*
tbUidList
);
int32_t
tqReaderAddTbUidList
(
STqReader
*
pReader
,
const
SArray
*
pTableUidList
);
int32_t
tqReaderRemoveTbUidList
(
STqReader
*
pReader
,
const
SArray
*
tbUidList
);
int32_t
tqSeekVer
(
STqReader
*
pReader
,
int64_t
ver
,
const
char
*
id
);
bool
tqNextBlockInWal
(
STqReader
*
pReader
,
const
char
*
idstr
);
bool
tqNextBlockImpl
(
STqReader
*
pReader
,
const
char
*
idstr
);
bool
tqReaderIsQueriedTable
(
STqReader
*
pReader
,
uint64_t
uid
);
bool
tqCurrentBlockConsumed
(
const
STqReader
*
pReader
);
int32_t
tqReaderSeek
(
STqReader
*
pReader
,
int64_t
ver
,
const
char
*
id
);
bool
tqNextBlockInWal
(
STqReader
*
pReader
,
const
char
*
idstr
);
bool
tqNextBlockImpl
(
STqReader
*
pReader
,
const
char
*
idstr
);
SWalReader
*
tqGetWalReader
(
STqReader
*
pReader
);
SSDataBlock
*
tqGetResultBlock
(
STqReader
*
pReader
);
int32_t
extractMsgFromWal
(
SWalReader
*
pReader
,
void
**
pItem
,
const
char
*
id
);
int32_t
extractMsgFromWal
(
SWalReader
*
pReader
,
void
**
pItem
,
const
char
*
id
);
int32_t
tqReaderSetSubmitMsg
(
STqReader
*
pReader
,
void
*
msgStr
,
int32_t
msgLen
,
int64_t
ver
);
bool
tqNextDataBlockFilterOut
(
STqReader
*
pReader
,
SHashObj
*
filterOutUids
);
int32_t
tqRetrieveDataBlock
(
STqReader
*
pReader
,
const
char
*
idstr
);
int32_t
tqRetrieveDataBlock
(
STqReader
*
pReader
,
SSDataBlock
**
pRes
,
const
char
*
idstr
);
int32_t
tqRetrieveTaosxBlock
(
STqReader
*
pReader
,
SArray
*
blocks
,
SArray
*
schemas
,
SSubmitTbData
**
pSubmitTbDataRet
);
int32_t
vnodeEnqueueStreamMsg
(
SVnode
*
pVnode
,
SRpcMsg
*
pMsg
);
...
...
@@ -288,10 +280,10 @@ int32_t vnodeSnapWriterOpen(SVnode *pVnode, int64_t sver, int64_t ever, SVSnapWr
int32_t
vnodeSnapWriterClose
(
SVSnapWriter
*
pWriter
,
int8_t
rollback
,
SSnapshot
*
pSnapshot
);
int32_t
vnodeSnapWrite
(
SVSnapWriter
*
pWriter
,
uint8_t
*
pData
,
uint32_t
nData
);
int32_t
buildSnapContext
(
S
Meta
*
pMeta
,
int64_t
snapVersion
,
int64_t
suid
,
int8_t
subType
,
bool
withMeta
,
int32_t
buildSnapContext
(
S
Vnode
*
pVnode
,
int64_t
snapVersion
,
int64_t
suid
,
int8_t
subType
,
bool
withMeta
,
SSnapContext
**
ctxRet
);
int32_t
get
MetafromSnapS
hot
(
SSnapContext
*
ctx
,
void
**
pBuf
,
int32_t
*
contLen
,
int16_t
*
type
,
int64_t
*
uid
);
SMetaTableInfo
get
UidfromSnapS
hot
(
SSnapContext
*
ctx
);
int32_t
get
TableInfoFromSnaps
hot
(
SSnapContext
*
ctx
,
void
**
pBuf
,
int32_t
*
contLen
,
int16_t
*
type
,
int64_t
*
uid
);
SMetaTableInfo
get
MetaTableInfoFromSnaps
hot
(
SSnapContext
*
ctx
);
int32_t
setForSnapShot
(
SSnapContext
*
ctx
,
int64_t
uid
);
int32_t
destroySnapContext
(
SSnapContext
*
ctx
);
...
...
@@ -350,67 +342,62 @@ struct SVnodeCfg {
int32_t
tsdbPageSize
;
};
typedef
struct
{
uint64_t
uid
;
uint64_t
groupId
;
}
STableKeyInfo
;
#define TABLE_ROLLUP_ON ((int8_t)0x1)
#define TABLE_IS_ROLLUP(FLG) (((FLG) & (TABLE_ROLLUP_ON)) != 0)
#define TABLE_SET_ROLLUP(FLG) ((FLG) |= TABLE_ROLLUP_ON)
struct
SMetaEntry
{
int64_t
version
;
int8_t
type
;
int8_t
flags
;
// TODO: need refactor?
tb_uid_t
uid
;
char
*
name
;
union
{
struct
{
SSchemaWrapper
schemaRow
;
SSchemaWrapper
schemaTag
;
SRSmaParam
rsmaParam
;
}
stbEntry
;
struct
{
int64_t
ctime
;
int32_t
ttlDays
;
int32_t
commentLen
;
char
*
comment
;
tb_uid_t
suid
;
uint8_t
*
pTags
;
}
ctbEntry
;
struct
{
int64_t
ctime
;
int32_t
ttlDays
;
int32_t
commentLen
;
char
*
comment
;
int32_t
ncid
;
// next column id
SSchemaWrapper
schemaRow
;
}
ntbEntry
;
struct
{
STSma
*
tsma
;
}
smaEntry
;
};
uint8_t
*
pBuf
;
};
struct
SMetaReader
{
int32_t
flags
;
SMeta
*
pMeta
;
SDecoder
coder
;
SMetaEntry
me
;
void
*
pBuf
;
int32_t
szBuf
;
};
struct
SMTbCursor
{
TBC
*
pDbc
;
void
*
pKey
;
void
*
pVal
;
int32_t
kLen
;
int32_t
vLen
;
SMetaReader
mr
;
};
//
struct SMetaEntry {
//
int64_t version;
//
int8_t type;
//
int8_t flags; // TODO: need refactor?
//
tb_uid_t uid;
//
char *name;
//
union {
//
struct {
//
SSchemaWrapper schemaRow;
//
SSchemaWrapper schemaTag;
//
SRSmaParam rsmaParam;
//
} stbEntry;
//
struct {
//
int64_t ctime;
//
int32_t ttlDays;
//
int32_t commentLen;
//
char *comment;
//
tb_uid_t suid;
//
uint8_t *pTags;
//
} ctbEntry;
//
struct {
//
int64_t ctime;
//
int32_t ttlDays;
//
int32_t commentLen;
//
char *comment;
//
int32_t ncid; // next column id
//
SSchemaWrapper schemaRow;
//
} ntbEntry;
//
struct {
//
STSma *tsma;
//
} smaEntry;
//
};
//
//
uint8_t *pBuf;
//
};
//
struct SMetaReader {
//
int32_t flags;
//
SMeta *pMeta;
//
SDecoder coder;
//
SMetaEntry me;
//
void *pBuf;
//
int32_t szBuf;
//
};
//
struct SMTbCursor {
//
TBC *pDbc;
//
void *pKey;
//
void *pVal;
//
int32_t kLen;
//
int32_t vLen;
//
SMetaReader mr;
//
};
#ifdef __cplusplus
}
...
...
source/dnode/vnode/src/inc/meta.h
浏览文件 @
cea83344
...
...
@@ -162,6 +162,12 @@ typedef struct {
int
metaCreateTagIdxKey
(
tb_uid_t
suid
,
int32_t
cid
,
const
void
*
pTagData
,
int32_t
nTagData
,
int8_t
type
,
tb_uid_t
uid
,
STagIdxKey
**
ppTagIdxKey
,
int32_t
*
nTagIdxKey
);
// TODO, refactor later
int32_t
metaFilterTableIds
(
void
*
pVnode
,
SMetaFltParam
*
param
,
SArray
*
results
);
int32_t
metaFilterCreateTime
(
void
*
pVnode
,
SMetaFltParam
*
parm
,
SArray
*
pUids
);
int32_t
metaFilterTableName
(
void
*
pVnode
,
SMetaFltParam
*
param
,
SArray
*
pUids
);
int32_t
metaFilterTtl
(
void
*
pVnode
,
SMetaFltParam
*
param
,
SArray
*
pUids
);
#ifndef META_REFACT
// SMetaDB
int
metaOpenDB
(
SMeta
*
pMeta
);
...
...
source/dnode/vnode/src/inc/tsdb.h
浏览文件 @
cea83344
...
...
@@ -847,9 +847,6 @@ int32_t tsdbCacheDeleteLastrow(SLRUCache *pCache, tb_uid_t uid, TSKEY eKey);
int32_t
tsdbCacheDeleteLast
(
SLRUCache
*
pCache
,
tb_uid_t
uid
,
TSKEY
eKey
);
int32_t
tsdbCacheDelete
(
SLRUCache
*
pCache
,
tb_uid_t
uid
,
TSKEY
eKey
);
void
tsdbCacheSetCapacity
(
SVnode
*
pVnode
,
size_t
capacity
);
size_t
tsdbCacheGetCapacity
(
SVnode
*
pVnode
);
// int32_t tsdbCacheLastArray2Row(SArray *pLastArray, STSRow **ppRow, STSchema *pSchema);
// ========== inline functions ==========
...
...
source/dnode/vnode/src/inc/vnodeInt.h
浏览文件 @
cea83344
...
...
@@ -161,6 +161,8 @@ void* metaGetIdx(SMeta* pMeta);
void
*
metaGetIvtIdx
(
SMeta
*
pMeta
);
int
metaTtlSmaller
(
SMeta
*
pMeta
,
uint64_t
time
,
SArray
*
uidList
);
void
metaReaderInit
(
SMetaReader
*
pReader
,
SMeta
*
pMeta
,
int32_t
flags
);
int32_t
metaCreateTSma
(
SMeta
*
pMeta
,
int64_t
version
,
SSmaCfg
*
pCfg
);
int32_t
metaDropTSma
(
SMeta
*
pMeta
,
int64_t
indexUid
);
...
...
@@ -473,6 +475,8 @@ struct SCompactInfo {
STimeWindow
tw
;
};
void
initStorageAPI
(
SStorageAPI
*
pAPI
);
#ifdef __cplusplus
}
#endif
...
...
source/dnode/vnode/src/meta/metaQuery.c
浏览文件 @
cea83344
...
...
@@ -17,10 +17,16 @@
#include "osMemory.h"
#include "tencode.h"
void
_metaReaderInit
(
SMetaReader
*
pReader
,
void
*
pVnode
,
int32_t
flags
,
SStoreMeta
*
pAPI
)
{
SMeta
*
pMeta
=
((
SVnode
*
)
pVnode
)
->
pMeta
;
metaReaderInit
(
pReader
,
pMeta
,
flags
);
pReader
->
pAPI
=
pAPI
;
}
void
metaReaderInit
(
SMetaReader
*
pReader
,
SMeta
*
pMeta
,
int32_t
flags
)
{
memset
(
pReader
,
0
,
sizeof
(
*
pReader
));
pReader
->
flags
=
flags
;
pReader
->
pMeta
=
pMeta
;
pReader
->
flags
=
flags
;
if
(
pReader
->
pMeta
&&
!
(
flags
&
META_READER_NOLOCK
))
{
metaRLock
(
pMeta
);
}
...
...
@@ -64,96 +70,20 @@ _err:
return
-
1
;
}
// int metaGetTableEntryByUidTest(void* meta, SArray *uidList) {
//
// SArray* readerList = taosArrayInit(taosArrayGetSize(uidList), sizeof(SMetaReader));
// SArray* uidVersion = taosArrayInit(taosArrayGetSize(uidList), sizeof(STbDbKey));
// SMeta *pMeta = meta;
// int64_t version;
// SHashObj *uHash = taosHashInit(32, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BIGINT), false, HASH_NO_LOCK);
//
// int64_t stt1 = taosGetTimestampUs();
// for(int i = 0; i < taosArrayGetSize(uidList); i++) {
// void* ppVal = NULL;
// int vlen = 0;
// uint64_t * uid = taosArrayGet(uidList, i);
// // query uid.idx
// if (tdbTbGet(pMeta->pUidIdx, uid, sizeof(*uid), &ppVal, &vlen) < 0) {
// continue;
// }
// version = *(int64_t *)ppVal;
//
// STbDbKey tbDbKey = {.version = version, .uid = *uid};
// taosArrayPush(uidVersion, &tbDbKey);
// taosHashPut(uHash, uid, sizeof(int64_t), ppVal, sizeof(int64_t));
// }
// int64_t stt2 = taosGetTimestampUs();
// qDebug("metaGetTableEntryByUidTest1 rows:%d, cost:%ld us", taosArrayGetSize(uidList), stt2-stt1);
//
// TBC *pCur = NULL;
// tdbTbcOpen(pMeta->pTbDb, &pCur, NULL);
// tdbTbcMoveToFirst(pCur);
// void *pKey = NULL;
// int kLen = 0;
//
// while(1){
// SMetaReader pReader = {0};
// int32_t ret = tdbTbcNext(pCur, &pKey, &kLen, &pReader.pBuf, &pReader.szBuf);
// if (ret < 0) break;
// STbDbKey *tmp = (STbDbKey*)pKey;
// int64_t *ver = (int64_t*)taosHashGet(uHash, &tmp->uid, sizeof(int64_t));
// if(ver == NULL || *ver != tmp->version) continue;
// taosArrayPush(readerList, &pReader);
// }
// tdbTbcClose(pCur);
//
// taosArrayClear(readerList);
// int64_t stt3 = taosGetTimestampUs();
// qDebug("metaGetTableEntryByUidTest2 rows:%d, cost:%ld us", taosArrayGetSize(uidList), stt3-stt2);
// for(int i = 0; i < taosArrayGetSize(uidVersion); i++) {
// SMetaReader pReader = {0};
//
// STbDbKey *tbDbKey = taosArrayGet(uidVersion, i);
// // query table.db
// if (tdbTbGet(pMeta->pTbDb, tbDbKey, sizeof(STbDbKey), &pReader.pBuf, &pReader.szBuf) < 0) {
// continue;
// }
// taosArrayPush(readerList, &pReader);
// }
// int64_t stt4 = taosGetTimestampUs();
// qDebug("metaGetTableEntryByUidTest3 rows:%d, cost:%ld us", taosArrayGetSize(uidList), stt4-stt3);
//
// for(int i = 0; i < taosArrayGetSize(readerList); i++){
// SMetaReader* pReader = taosArrayGet(readerList, i);
// metaReaderInit(pReader, meta, 0);
// // decode the entry
// tDecoderInit(&pReader->coder, pReader->pBuf, pReader->szBuf);
//
// if (metaDecodeEntry(&pReader->coder, &pReader->me) < 0) {
// }
// metaReaderClear(pReader);
// }
// int64_t stt5 = taosGetTimestampUs();
// qDebug("metaGetTableEntryByUidTest4 rows:%d, cost:%ld us", taosArrayGetSize(readerList), stt5-stt4);
// return 0;
// }
bool
metaIsTableExist
(
SMeta
*
pMeta
,
tb_uid_t
uid
)
{
// query uid.idx
metaRLock
(
pMeta
);
if
(
tdbTbGet
(
pMeta
->
pUidIdx
,
&
uid
,
sizeof
(
uid
),
NULL
,
NULL
)
<
0
)
{
metaULock
(
pMeta
);
bool
metaIsTableExist
(
void
*
pVnode
,
tb_uid_t
uid
)
{
SVnode
*
pVnodeObj
=
pVnode
;
metaRLock
(
pVnodeObj
->
pMeta
);
// query uid.idx
if
(
tdbTbGet
(
pVnodeObj
->
pMeta
->
pUidIdx
,
&
uid
,
sizeof
(
uid
),
NULL
,
NULL
)
<
0
)
{
metaULock
(
pVnodeObj
->
pMeta
);
return
false
;
}
metaULock
(
pMeta
);
metaULock
(
pVnodeObj
->
pMeta
);
return
true
;
}
int
metaGetTableEntryByUid
(
SMetaReader
*
pReader
,
tb_uid_t
uid
)
{
int
meta
Reader
GetTableEntryByUid
(
SMetaReader
*
pReader
,
tb_uid_t
uid
)
{
SMeta
*
pMeta
=
pReader
->
pMeta
;
int64_t
version1
;
...
...
@@ -167,7 +97,7 @@ int metaGetTableEntryByUid(SMetaReader *pReader, tb_uid_t uid) {
return
metaGetTableEntryByVersion
(
pReader
,
version1
,
uid
);
}
int
metaGetTableEntryByUidCache
(
SMetaReader
*
pReader
,
tb_uid_t
uid
)
{
int
meta
Reader
GetTableEntryByUidCache
(
SMetaReader
*
pReader
,
tb_uid_t
uid
)
{
SMeta
*
pMeta
=
pReader
->
pMeta
;
SMetaInfo
info
;
...
...
@@ -190,7 +120,7 @@ int metaGetTableEntryByName(SMetaReader *pReader, const char *name) {
}
uid
=
*
(
tb_uid_t
*
)
pReader
->
pBuf
;
return
metaGetTableEntryByUid
(
pReader
,
uid
);
return
meta
Reader
GetTableEntryByUid
(
pReader
,
uid
);
}
tb_uid_t
metaGetTableEntryUidByName
(
SMeta
*
pMeta
,
const
char
*
name
)
{
...
...
@@ -210,11 +140,11 @@ tb_uid_t metaGetTableEntryUidByName(SMeta *pMeta, const char *name) {
return
uid
;
}
int
metaGetTableNameByUid
(
void
*
meta
,
uint64_t
uid
,
char
*
tbName
)
{
int
metaGetTableNameByUid
(
void
*
pVnode
,
uint64_t
uid
,
char
*
tbName
)
{
int
code
=
0
;
SMetaReader
mr
=
{
0
};
metaReaderInit
(
&
mr
,
(
SMeta
*
)
m
eta
,
0
);
code
=
metaGetTableEntryByUid
(
&
mr
,
uid
);
metaReaderInit
(
&
mr
,
(
(
SVnode
*
)
pVnode
)
->
pM
eta
,
0
);
code
=
meta
Reader
GetTableEntryByUid
(
&
mr
,
uid
);
if
(
code
<
0
)
{
metaReaderClear
(
&
mr
);
return
-
1
;
...
...
@@ -230,7 +160,7 @@ int metaGetTableSzNameByUid(void *meta, uint64_t uid, char *tbName) {
int
code
=
0
;
SMetaReader
mr
=
{
0
};
metaReaderInit
(
&
mr
,
(
SMeta
*
)
meta
,
0
);
code
=
metaGetTableEntryByUid
(
&
mr
,
uid
);
code
=
meta
Reader
GetTableEntryByUid
(
&
mr
,
uid
);
if
(
code
<
0
)
{
metaReaderClear
(
&
mr
);
return
-
1
;
...
...
@@ -241,15 +171,15 @@ int metaGetTableSzNameByUid(void *meta, uint64_t uid, char *tbName) {
return
0
;
}
int
metaGetTableUidByName
(
void
*
meta
,
char
*
tbName
,
uint64_t
*
uid
)
{
int
metaGetTableUidByName
(
void
*
pVnode
,
char
*
tbName
,
uint64_t
*
uid
)
{
int
code
=
0
;
SMetaReader
mr
=
{
0
};
metaReaderInit
(
&
mr
,
(
SMeta
*
)
m
eta
,
0
);
metaReaderInit
(
&
mr
,
(
(
SVnode
*
)
pVnode
)
->
pM
eta
,
0
);
SMetaReader
*
pReader
=
&
mr
;
// query name.idx
if
(
tdbTbGet
(
pReader
->
pMeta
->
pNameIdx
,
tbName
,
strlen
(
tbName
)
+
1
,
&
pReader
->
pBuf
,
&
pReader
->
szBuf
)
<
0
)
{
if
(
tdbTbGet
(
((
SMeta
*
)
pReader
->
pMeta
)
->
pNameIdx
,
tbName
,
strlen
(
tbName
)
+
1
,
&
pReader
->
pBuf
,
&
pReader
->
szBuf
)
<
0
)
{
terrno
=
TSDB_CODE_PAR_TABLE_NOT_EXIST
;
metaReaderClear
(
&
mr
);
return
-
1
;
...
...
@@ -262,10 +192,10 @@ int metaGetTableUidByName(void *meta, char *tbName, uint64_t *uid) {
return
0
;
}
int
metaGetTableTypeByName
(
void
*
meta
,
char
*
tbName
,
ETableType
*
tbType
)
{
int
metaGetTableTypeByName
(
void
*
pVnode
,
char
*
tbName
,
ETableType
*
tbType
)
{
int
code
=
0
;
SMetaReader
mr
=
{
0
};
metaReaderInit
(
&
mr
,
(
SMeta
*
)
m
eta
,
0
);
metaReaderInit
(
&
mr
,
(
(
SVnode
*
)
pVnode
)
->
pM
eta
,
0
);
code
=
metaGetTableEntryByName
(
&
mr
,
tbName
);
if
(
code
==
0
)
*
tbType
=
mr
.
me
.
type
;
...
...
@@ -283,7 +213,7 @@ int metaReadNext(SMetaReader *pReader) {
}
#if 1 // ===================================================
SMTbCursor
*
metaOpenTbCursor
(
SMeta
*
pMeta
)
{
SMTbCursor
*
metaOpenTbCursor
(
void
*
pVnode
)
{
SMTbCursor
*
pTbCur
=
NULL
;
pTbCur
=
(
SMTbCursor
*
)
taosMemoryCalloc
(
1
,
sizeof
(
*
pTbCur
));
...
...
@@ -291,12 +221,12 @@ SMTbCursor *metaOpenTbCursor(SMeta *pMeta) {
return
NULL
;
}
metaReaderInit
(
&
pTbCur
->
mr
,
pMeta
,
0
);
tdbTbcOpen
(
pMeta
->
pUidIdx
,
&
pTbCur
->
pDbc
,
NULL
);
SVnode
*
pVnodeObj
=
pVnode
;
metaReaderInit
(
&
pTbCur
->
mr
,
pVnodeObj
->
pMeta
,
0
);
tdbTbc
MoveToFirst
(
pTbCur
->
pDbc
);
tdbTbc
Open
(
pVnodeObj
->
pMeta
->
pUidIdx
,
(
TBC
**
)
&
pTbCur
->
pDbc
,
NULL
);
tdbTbcMoveToFirst
((
TBC
*
)
pTbCur
->
pDbc
);
return
pTbCur
;
}
...
...
@@ -306,7 +236,7 @@ void metaCloseTbCursor(SMTbCursor *pTbCur) {
tdbFree
(
pTbCur
->
pVal
);
metaReaderClear
(
&
pTbCur
->
mr
);
if
(
pTbCur
->
pDbc
)
{
tdbTbcClose
(
pTbCur
->
pDbc
);
tdbTbcClose
(
(
TBC
*
)
pTbCur
->
pDbc
);
}
taosMemoryFree
(
pTbCur
);
}
...
...
@@ -318,7 +248,7 @@ int32_t metaTbCursorNext(SMTbCursor *pTbCur, ETableType jumpTableType) {
STbCfg
tbCfg
;
for
(;;)
{
ret
=
tdbTbcNext
(
pTbCur
->
pDbc
,
&
pTbCur
->
pKey
,
&
pTbCur
->
kLen
,
&
pTbCur
->
pVal
,
&
pTbCur
->
vLen
);
ret
=
tdbTbcNext
(
(
TBC
*
)
pTbCur
->
pDbc
,
&
pTbCur
->
pKey
,
&
pTbCur
->
kLen
,
&
pTbCur
->
pVal
,
&
pTbCur
->
vLen
);
if
(
ret
<
0
)
{
return
-
1
;
}
...
...
@@ -342,7 +272,7 @@ int32_t metaTbCursorPrev(SMTbCursor *pTbCur, ETableType jumpTableType) {
STbCfg
tbCfg
;
for
(;;)
{
ret
=
tdbTbcPrev
(
pTbCur
->
pDbc
,
&
pTbCur
->
pKey
,
&
pTbCur
->
kLen
,
&
pTbCur
->
pVal
,
&
pTbCur
->
vLen
);
ret
=
tdbTbcPrev
(
(
TBC
*
)
pTbCur
->
pDbc
,
&
pTbCur
->
pKey
,
&
pTbCur
->
kLen
,
&
pTbCur
->
pVal
,
&
pTbCur
->
vLen
);
if
(
ret
<
0
)
{
return
-
1
;
}
...
...
@@ -876,7 +806,7 @@ STSmaWrapper *metaGetSmaInfoByTable(SMeta *pMeta, tb_uid_t uid, bool deepCopy) {
STSma
*
pTSma
=
NULL
;
for
(
int
i
=
0
;
i
<
pSW
->
number
;
++
i
)
{
smaId
=
*
(
tb_uid_t
*
)
taosArrayGet
(
pSmaIds
,
i
);
if
(
metaGetTableEntryByUid
(
&
mr
,
smaId
)
<
0
)
{
if
(
meta
Reader
GetTableEntryByUid
(
&
mr
,
smaId
)
<
0
)
{
tDecoderClear
(
&
mr
.
coder
);
metaWarn
(
"vgId:%d, no entry for tbId:%"
PRIi64
", smaId:%"
PRIi64
,
TD_VID
(
pMeta
->
pVnode
),
uid
,
smaId
);
continue
;
...
...
@@ -926,7 +856,7 @@ STSma *metaGetSmaInfoByIndex(SMeta *pMeta, int64_t indexUid) {
STSma
*
pTSma
=
NULL
;
SMetaReader
mr
=
{
0
};
metaReaderInit
(
&
mr
,
pMeta
,
0
);
if
(
metaGetTableEntryByUid
(
&
mr
,
indexUid
)
<
0
)
{
if
(
meta
Reader
GetTableEntryByUid
(
&
mr
,
indexUid
)
<
0
)
{
metaWarn
(
"vgId:%d, failed to get table entry for smaId:%"
PRIi64
,
TD_VID
(
pMeta
->
pVnode
),
indexUid
);
metaReaderClear
(
&
mr
);
return
NULL
;
...
...
@@ -1027,7 +957,7 @@ SArray *metaGetSmaTbUids(SMeta *pMeta) {
#endif
const
void
*
metaGetTableTagVal
(
void
*
pTag
,
int16_t
type
,
STagVal
*
val
)
{
const
void
*
metaGetTableTagVal
(
const
void
*
pTag
,
int16_t
type
,
STagVal
*
val
)
{
STag
*
tag
=
(
STag
*
)
pTag
;
if
(
type
==
TSDB_DATA_TYPE_JSON
)
{
return
tag
;
...
...
@@ -1083,8 +1013,10 @@ typedef struct {
int32_t
vLen
;
}
SIdxCursor
;
int32_t
metaFilterCreateTime
(
SMeta
*
pMeta
,
SMetaFltParam
*
param
,
SArray
*
pUids
)
{
int32_t
ret
=
0
;
int32_t
metaFilterCreateTime
(
void
*
pVnode
,
SMetaFltParam
*
arg
,
SArray
*
pUids
)
{
SMeta
*
pMeta
=
((
SVnode
*
)
pVnode
)
->
pMeta
;
SMetaFltParam
*
param
=
arg
;
int32_t
ret
=
0
;
SIdxCursor
*
pCursor
=
NULL
;
pCursor
=
(
SIdxCursor
*
)
taosMemoryCalloc
(
1
,
sizeof
(
SIdxCursor
));
...
...
@@ -1141,9 +1073,11 @@ END:
return
ret
;
}
int32_t
metaFilterTableName
(
SMeta
*
pMeta
,
SMetaFltParam
*
param
,
SArray
*
pUids
)
{
int32_t
ret
=
0
;
char
*
buf
=
NULL
;
int32_t
metaFilterTableName
(
void
*
pVnode
,
SMetaFltParam
*
arg
,
SArray
*
pUids
)
{
SMeta
*
pMeta
=
((
SVnode
*
)
pVnode
)
->
pMeta
;
SMetaFltParam
*
param
=
arg
;
int32_t
ret
=
0
;
char
*
buf
=
NULL
;
STagIdxKey
*
pKey
=
NULL
;
int32_t
nKey
=
0
;
...
...
@@ -1206,9 +1140,11 @@ END:
return
ret
;
}
int32_t
metaFilterTtl
(
SMeta
*
pMeta
,
SMetaFltParam
*
param
,
SArray
*
pUids
)
{
int32_t
ret
=
0
;
char
*
buf
=
NULL
;
int32_t
metaFilterTtl
(
void
*
pVnode
,
SMetaFltParam
*
arg
,
SArray
*
pUids
)
{
SMeta
*
pMeta
=
((
SVnode
*
)
pVnode
)
->
pMeta
;
SMetaFltParam
*
param
=
arg
;
int32_t
ret
=
0
;
char
*
buf
=
NULL
;
STtlIdxKey
*
pKey
=
NULL
;
int32_t
nKey
=
0
;
...
...
@@ -1235,7 +1171,10 @@ END:
// impl later
return
0
;
}
int32_t
metaFilterTableIds
(
SMeta
*
pMeta
,
SMetaFltParam
*
param
,
SArray
*
pUids
)
{
int32_t
metaFilterTableIds
(
void
*
pVnode
,
SMetaFltParam
*
arg
,
SArray
*
pUids
)
{
SMeta
*
pMeta
=
((
SVnode
*
)
pVnode
)
->
pMeta
;
SMetaFltParam
*
param
=
arg
;
SMetaEntry
oStbEntry
=
{
0
};
int32_t
ret
=
-
1
;
char
*
buf
=
NULL
;
...
...
@@ -1418,7 +1357,8 @@ static int32_t metaGetTableTagByUid(SMeta *pMeta, int64_t suid, int64_t uid, voi
return
ret
;
}
int32_t
metaGetTableTagsByUids
(
SMeta
*
pMeta
,
int64_t
suid
,
SArray
*
uidList
)
{
int32_t
metaGetTableTagsByUids
(
void
*
pVnode
,
int64_t
suid
,
SArray
*
uidList
)
{
SMeta
*
pMeta
=
((
SVnode
*
)
pVnode
)
->
pMeta
;
const
int32_t
LIMIT
=
128
;
int32_t
isLock
=
false
;
...
...
@@ -1450,8 +1390,8 @@ int32_t metaGetTableTagsByUids(SMeta *pMeta, int64_t suid, SArray *uidList) {
return
0
;
}
int32_t
metaGetTableTags
(
SMeta
*
pMeta
,
uint64_t
suid
,
SArray
*
pUidTagInfo
)
{
SMCtbCursor
*
pCur
=
metaOpenCtbCursor
(
pMeta
,
suid
,
1
);
int32_t
metaGetTableTags
(
void
*
pVnode
,
uint64_t
suid
,
SArray
*
pUidTagInfo
)
{
SMCtbCursor
*
pCur
=
metaOpenCtbCursor
(
((
SVnode
*
)
pVnode
)
->
pMeta
,
suid
,
1
);
// If len > 0 means there already have uids, and we only want the
// tags of the specified tables, of which uid in the uid list. Otherwise, all table tags are retrieved and kept
...
...
@@ -1556,30 +1496,35 @@ _exit:
return
code
;
}
int32_t
metaGetStbStats
(
SMeta
*
pMeta
,
int64_t
uid
,
SMetaStbStats
*
pInfo
)
{
int32_t
metaGetStbStats
(
void
*
pVnode
,
int64_t
uid
,
int64_t
*
numOfTables
)
{
int32_t
code
=
0
;
*
numOfTables
=
0
;
metaRLock
(
pMeta
);
SVnode
*
pVnodeObj
=
pVnode
;
metaRLock
(
pVnodeObj
->
pMeta
);
// fast path: search cache
if
(
metaStatsCacheGet
(
pMeta
,
uid
,
pInfo
)
==
TSDB_CODE_SUCCESS
)
{
metaULock
(
pMeta
);
SMetaStbStats
state
=
{
0
};
if
(
metaStatsCacheGet
(
pVnodeObj
->
pMeta
,
uid
,
&
state
)
==
TSDB_CODE_SUCCESS
)
{
metaULock
(
pVnodeObj
->
pMeta
);
*
numOfTables
=
state
.
ctbNum
;
goto
_exit
;
}
// slow path: search TDB
int64_t
ctbNum
=
0
;
vnodeGetCtbNum
(
p
Meta
->
p
Vnode
,
uid
,
&
ctbNum
);
vnodeGetCtbNum
(
pVnode
,
uid
,
&
ctbNum
);
metaULock
(
pMeta
);
metaULock
(
pVnodeObj
->
pMeta
);
*
numOfTables
=
ctbNum
;
pInfo
->
uid
=
uid
;
pInfo
->
ctbNum
=
ctbNum
;
state
.
uid
=
uid
;
state
.
ctbNum
=
ctbNum
;
// upsert the cache
metaWLock
(
pMeta
);
metaStatsCacheUpsert
(
p
Meta
,
pInfo
);
metaULock
(
pMeta
);
metaWLock
(
p
VnodeObj
->
p
Meta
);
metaStatsCacheUpsert
(
p
VnodeObj
->
pMeta
,
&
state
);
metaULock
(
p
VnodeObj
->
p
Meta
);
_exit:
return
code
;
...
...
source/dnode/vnode/src/meta/metaSma.c
浏览文件 @
cea83344
...
...
@@ -36,7 +36,7 @@ int32_t metaCreateTSma(SMeta *pMeta, int64_t version, SSmaCfg *pCfg) {
// validate req
// save smaIndex
metaReaderInit
(
&
mr
,
pMeta
,
0
);
if
(
metaGetTableEntryByUidCache
(
&
mr
,
pCfg
->
indexUid
)
==
0
)
{
if
(
meta
Reader
GetTableEntryByUidCache
(
&
mr
,
pCfg
->
indexUid
)
==
0
)
{
#if 1
terrno
=
TSDB_CODE_TSMA_ALREADY_EXIST
;
metaReaderClear
(
&
mr
);
...
...
source/dnode/vnode/src/meta/metaSnapshot.c
浏览文件 @
cea83344
...
...
@@ -222,29 +222,29 @@ static void destroySTableInfoForChildTable(void* data) {
}
static
void
MoveToSnapShotVersion
(
SSnapContext
*
ctx
)
{
tdbTbcClose
(
ctx
->
pCur
);
tdbTbcOpen
(
ctx
->
pMeta
->
pTbDb
,
&
ctx
->
pCur
,
NULL
);
tdbTbcClose
(
(
TBC
*
)
ctx
->
pCur
);
tdbTbcOpen
(
ctx
->
pMeta
->
pTbDb
,
(
TBC
**
)
&
ctx
->
pCur
,
NULL
);
STbDbKey
key
=
{.
version
=
ctx
->
snapVersion
,
.
uid
=
INT64_MAX
};
int
c
=
0
;
tdbTbcMoveTo
(
ctx
->
pCur
,
&
key
,
sizeof
(
key
),
&
c
);
tdbTbcMoveTo
(
(
TBC
*
)
ctx
->
pCur
,
&
key
,
sizeof
(
key
),
&
c
);
if
(
c
<
0
)
{
tdbTbcMoveToPrev
(
ctx
->
pCur
);
tdbTbcMoveToPrev
(
(
TBC
*
)
ctx
->
pCur
);
}
}
static
int32_t
MoveToPosition
(
SSnapContext
*
ctx
,
int64_t
ver
,
int64_t
uid
)
{
tdbTbcClose
(
ctx
->
pCur
);
tdbTbcOpen
(
ctx
->
pMeta
->
pTbDb
,
&
ctx
->
pCur
,
NULL
);
tdbTbcClose
(
(
TBC
*
)
ctx
->
pCur
);
tdbTbcOpen
(
ctx
->
pMeta
->
pTbDb
,
(
TBC
**
)
&
ctx
->
pCur
,
NULL
);
STbDbKey
key
=
{.
version
=
ver
,
.
uid
=
uid
};
int
c
=
0
;
tdbTbcMoveTo
(
ctx
->
pCur
,
&
key
,
sizeof
(
key
),
&
c
);
tdbTbcMoveTo
(
(
TBC
*
)
ctx
->
pCur
,
&
key
,
sizeof
(
key
),
&
c
);
return
c
;
}
static
void
MoveToFirst
(
SSnapContext
*
ctx
)
{
tdbTbcClose
(
ctx
->
pCur
);
tdbTbcOpen
(
ctx
->
pMeta
->
pTbDb
,
&
ctx
->
pCur
,
NULL
);
tdbTbcMoveToFirst
(
ctx
->
pCur
);
tdbTbcClose
(
(
TBC
*
)
ctx
->
pCur
);
tdbTbcOpen
(
ctx
->
pMeta
->
pTbDb
,
(
TBC
**
)
&
ctx
->
pCur
,
NULL
);
tdbTbcMoveToFirst
(
(
TBC
*
)
ctx
->
pCur
);
}
static
void
saveSuperTableInfoForChildTable
(
SMetaEntry
*
me
,
SHashObj
*
suidInfo
)
{
...
...
@@ -260,12 +260,12 @@ static void saveSuperTableInfoForChildTable(SMetaEntry* me, SHashObj* suidInfo)
taosHashPut
(
suidInfo
,
&
me
->
uid
,
sizeof
(
tb_uid_t
),
&
dataTmp
,
sizeof
(
STableInfoForChildTable
));
}
int32_t
buildSnapContext
(
S
Meta
*
pMeta
,
int64_t
snapVersion
,
int64_t
suid
,
int8_t
subType
,
bool
withMeta
,
int32_t
buildSnapContext
(
S
Vnode
*
pVnode
,
int64_t
snapVersion
,
int64_t
suid
,
int8_t
subType
,
bool
withMeta
,
SSnapContext
**
ctxRet
)
{
SSnapContext
*
ctx
=
taosMemoryCalloc
(
1
,
sizeof
(
SSnapContext
));
if
(
ctx
==
NULL
)
return
-
1
;
*
ctxRet
=
ctx
;
ctx
->
pMeta
=
pMeta
;
ctx
->
pMeta
=
p
Vnode
->
p
Meta
;
ctx
->
snapVersion
=
snapVersion
;
ctx
->
suid
=
suid
;
ctx
->
subType
=
subType
;
...
...
@@ -291,7 +291,7 @@ int32_t buildSnapContext(SMeta* pMeta, int64_t snapVersion, int64_t suid, int8_t
metaDebug
(
"tmqsnap init snapVersion:%"
PRIi64
,
ctx
->
snapVersion
);
MoveToFirst
(
ctx
);
while
(
1
)
{
int32_t
ret
=
tdbTbcNext
(
ctx
->
pCur
,
&
pKey
,
&
kLen
,
&
pVal
,
&
vLen
);
int32_t
ret
=
tdbTbcNext
(
(
TBC
*
)
ctx
->
pCur
,
&
pKey
,
&
kLen
,
&
pVal
,
&
vLen
);
if
(
ret
<
0
)
break
;
STbDbKey
*
tmp
=
(
STbDbKey
*
)
pKey
;
if
(
tmp
->
version
>
ctx
->
snapVersion
)
break
;
...
...
@@ -301,7 +301,7 @@ int32_t buildSnapContext(SMeta* pMeta, int64_t snapVersion, int64_t suid, int8_t
continue
;
}
if
(
tdbTbGet
(
pMeta
->
pUidIdx
,
&
tmp
->
uid
,
sizeof
(
tb_uid_t
),
NULL
,
NULL
)
<
if
(
tdbTbGet
(
ctx
->
pMeta
->
pUidIdx
,
&
tmp
->
uid
,
sizeof
(
tb_uid_t
),
NULL
,
NULL
)
<
0
)
{
// check if table exist for now, need optimize later
continue
;
}
...
...
@@ -329,7 +329,7 @@ int32_t buildSnapContext(SMeta* pMeta, int64_t snapVersion, int64_t suid, int8_t
MoveToSnapShotVersion
(
ctx
);
while
(
1
)
{
int32_t
ret
=
tdbTbcPrev
(
ctx
->
pCur
,
&
pKey
,
&
kLen
,
&
pVal
,
&
vLen
);
int32_t
ret
=
tdbTbcPrev
(
(
TBC
*
)
ctx
->
pCur
,
&
pKey
,
&
kLen
,
&
pVal
,
&
vLen
);
if
(
ret
<
0
)
break
;
STbDbKey
*
tmp
=
(
STbDbKey
*
)
pKey
;
...
...
@@ -378,7 +378,7 @@ int32_t buildSnapContext(SMeta* pMeta, int64_t snapVersion, int64_t suid, int8_t
}
int32_t
destroySnapContext
(
SSnapContext
*
ctx
)
{
tdbTbcClose
(
ctx
->
pCur
);
tdbTbcClose
(
(
TBC
*
)
ctx
->
pCur
);
taosArrayDestroy
(
ctx
->
idList
);
taosHashCleanup
(
ctx
->
idVersion
);
taosHashCleanup
(
ctx
->
suidInfo
);
...
...
@@ -466,7 +466,7 @@ int32_t setForSnapShot(SSnapContext* ctx, int64_t uid) {
return
c
;
}
int32_t
get
MetafromSnapS
hot
(
SSnapContext
*
ctx
,
void
**
pBuf
,
int32_t
*
contLen
,
int16_t
*
type
,
int64_t
*
uid
)
{
int32_t
get
TableInfoFromSnaps
hot
(
SSnapContext
*
ctx
,
void
**
pBuf
,
int32_t
*
contLen
,
int16_t
*
type
,
int64_t
*
uid
)
{
int32_t
ret
=
0
;
void
*
pKey
=
NULL
;
void
*
pVal
=
NULL
;
...
...
@@ -496,7 +496,7 @@ int32_t getMetafromSnapShot(SSnapContext* ctx, void** pBuf, int32_t* contLen, in
metaDebug
(
"tmqsnap get meta not exist uid:%"
PRIi64
" version:%"
PRIi64
,
*
uid
,
idInfo
->
version
);
}
tdbTbcGet
(
ctx
->
pCur
,
(
const
void
**
)
&
pKey
,
&
kLen
,
(
const
void
**
)
&
pVal
,
&
vLen
);
tdbTbcGet
(
(
TBC
*
)
ctx
->
pCur
,
(
const
void
**
)
&
pKey
,
&
kLen
,
(
const
void
**
)
&
pVal
,
&
vLen
);
SDecoder
dc
=
{
0
};
SMetaEntry
me
=
{
0
};
tDecoderInit
(
&
dc
,
pVal
,
vLen
);
...
...
@@ -598,7 +598,7 @@ int32_t getMetafromSnapShot(SSnapContext* ctx, void** pBuf, int32_t* contLen, in
return
ret
;
}
SMetaTableInfo
get
UidfromSnapS
hot
(
SSnapContext
*
ctx
)
{
SMetaTableInfo
get
MetaTableInfoFromSnaps
hot
(
SSnapContext
*
ctx
)
{
SMetaTableInfo
result
=
{
0
};
void
*
pKey
=
NULL
;
void
*
pVal
=
NULL
;
...
...
@@ -619,10 +619,10 @@ SMetaTableInfo getUidfromSnapShot(SSnapContext* ctx) {
int32_t
ret
=
MoveToPosition
(
ctx
,
idInfo
->
version
,
*
uidTmp
);
if
(
ret
!=
0
)
{
metaDebug
(
"tmqsnap get
UidfromSnapS
hot not exist uid:%"
PRIi64
" version:%"
PRIi64
,
*
uidTmp
,
idInfo
->
version
);
metaDebug
(
"tmqsnap get
MetaTableInfoFromSnaps
hot not exist uid:%"
PRIi64
" version:%"
PRIi64
,
*
uidTmp
,
idInfo
->
version
);
continue
;
}
tdbTbcGet
(
ctx
->
pCur
,
(
const
void
**
)
&
pKey
,
&
kLen
,
(
const
void
**
)
&
pVal
,
&
vLen
);
tdbTbcGet
(
(
TBC
*
)
ctx
->
pCur
,
(
const
void
**
)
&
pKey
,
&
kLen
,
(
const
void
**
)
&
pVal
,
&
vLen
);
SDecoder
dc
=
{
0
};
SMetaEntry
me
=
{
0
};
tDecoderInit
(
&
dc
,
pVal
,
vLen
);
...
...
source/dnode/vnode/src/meta/metaTable.c
浏览文件 @
cea83344
...
...
@@ -690,7 +690,7 @@ _err:
return
-
1
;
}
int
metaCreateTable
(
SMeta
*
pMeta
,
int64_t
ver
sion
,
SVCreateTbReq
*
pReq
,
STableMetaRsp
**
pMetaRsp
)
{
int
metaCreateTable
(
SMeta
*
pMeta
,
int64_t
ver
,
SVCreateTbReq
*
pReq
,
STableMetaRsp
**
pMetaRsp
)
{
SMetaEntry
me
=
{
0
};
SMetaReader
mr
=
{
0
};
...
...
@@ -729,7 +729,7 @@ int metaCreateTable(SMeta *pMeta, int64_t version, SVCreateTbReq *pReq, STableMe
metaReaderClear
(
&
mr
);
// build SMetaEntry
me
.
version
=
ver
sion
;
me
.
version
=
ver
;
me
.
type
=
pReq
->
type
;
me
.
uid
=
pReq
->
uid
;
me
.
name
=
pReq
->
name
;
...
...
source/dnode/vnode/src/sma/smaRollup.c
浏览文件 @
cea83344
...
...
@@ -276,12 +276,9 @@ static int32_t tdSetRSmaInfoItemParams(SSma *pSma, SRSmaParam *param, SRSmaStat
return
TSDB_CODE_FAILED
;
}
SReadHandle
handle
=
{
.
meta
=
pVnode
->
pMeta
,
.
vnode
=
pVnode
,
.
initTqReader
=
1
,
.
pStateBackend
=
pStreamState
,
};
SReadHandle
handle
=
{
.
vnode
=
pVnode
,
.
initTqReader
=
1
,
.
pStateBackend
=
pStreamState
};
initStorageAPI
(
&
handle
.
api
);
pRSmaInfo
->
taskInfo
[
idx
]
=
qCreateStreamExecTaskInfo
(
param
->
qmsg
[
idx
],
&
handle
,
TD_VID
(
pVnode
));
if
(
!
pRSmaInfo
->
taskInfo
[
idx
])
{
terrno
=
TSDB_CODE_RSMA_QTASKINFO_CREATE
;
...
...
@@ -853,11 +850,8 @@ static int32_t tdCloneQTaskInfo(SSma *pSma, qTaskInfo_t dstTaskInfo, qTaskInfo_t
code
=
qSerializeTaskStatus
(
srcTaskInfo
,
&
pOutput
,
&
len
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
SReadHandle
handle
=
{
.
meta
=
pVnode
->
pMeta
,
.
vnode
=
pVnode
,
.
initTqReader
=
1
,
};
SReadHandle
handle
=
{
.
vnode
=
pVnode
,
.
initTqReader
=
1
};
initStorageAPI
(
&
handle
.
api
);
if
(
ASSERTS
(
!
dstTaskInfo
,
"dstTaskInfo:%p is not NULL"
,
dstTaskInfo
))
{
code
=
TSDB_CODE_APP_ERROR
;
...
...
@@ -904,7 +898,7 @@ static int32_t tdRSmaInfoClone(SSma *pSma, SRSmaInfo *pInfo) {
metaReaderInit
(
&
mr
,
SMA_META
(
pSma
),
0
);
smaDebug
(
"vgId:%d, rsma clone qTaskInfo for suid:%"
PRIi64
,
SMA_VID
(
pSma
),
pInfo
->
suid
);
if
(
metaGetTableEntryByUidCache
(
&
mr
,
pInfo
->
suid
)
<
0
)
{
if
(
meta
Reader
GetTableEntryByUidCache
(
&
mr
,
pInfo
->
suid
)
<
0
)
{
code
=
terrno
;
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
}
...
...
@@ -1131,7 +1125,7 @@ static int32_t tdRSmaRestoreQTaskInfoInit(SSma *pSma, int64_t *nTables) {
for
(
int64_t
i
=
0
;
i
<
arrSize
;
++
i
)
{
suid
=
*
(
tb_uid_t
*
)
taosArrayGet
(
suidList
,
i
);
smaDebug
(
"vgId:%d, rsma restore, suid is %"
PRIi64
,
TD_VID
(
pVnode
),
suid
);
if
(
metaGetTableEntryByUidCache
(
&
mr
,
suid
)
<
0
)
{
if
(
meta
Reader
GetTableEntryByUidCache
(
&
mr
,
suid
)
<
0
)
{
code
=
terrno
;
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
}
...
...
source/dnode/vnode/src/tq/tq.c
浏览文件 @
cea83344
...
...
@@ -69,12 +69,12 @@ static void destroyTqHandle(void* data) {
if
(
pData
->
execHandle
.
subType
==
TOPIC_SUB_TYPE__COLUMN
)
{
taosMemoryFreeClear
(
pData
->
execHandle
.
execCol
.
qmsg
);
}
else
if
(
pData
->
execHandle
.
subType
==
TOPIC_SUB_TYPE__DB
)
{
tq
CloseReader
(
pData
->
execHandle
.
pTqReader
);
tq
ReaderClose
(
pData
->
execHandle
.
pTqReader
);
walCloseReader
(
pData
->
pWalReader
);
taosHashCleanup
(
pData
->
execHandle
.
execDb
.
pFilterOutTbUid
);
}
else
if
(
pData
->
execHandle
.
subType
==
TOPIC_SUB_TYPE__TABLE
)
{
walCloseReader
(
pData
->
pWalReader
);
tq
CloseReader
(
pData
->
execHandle
.
pTqReader
);
tq
ReaderClose
(
pData
->
execHandle
.
pTqReader
);
}
if
(
pData
->
msg
!=
NULL
)
{
rpcFreeCont
(
pData
->
msg
->
pCont
);
...
...
@@ -670,8 +670,9 @@ int32_t tqProcessSubscribeReq(STQ* pTq, int64_t sversion, char* msg, int32_t msg
int64_t
ver
=
pRef
->
refVer
;
pHandle
->
pRef
=
pRef
;
SReadHandle
handle
=
{
.
meta
=
pVnode
->
pMeta
,
.
vnode
=
pVnode
,
.
initTableReader
=
true
,
.
initTqReader
=
true
,
.
version
=
ver
};
SReadHandle
handle
=
{.
vnode
=
pVnode
,
.
initTableReader
=
true
,
.
initTqReader
=
true
,
.
version
=
ver
};
initStorageAPI
(
&
handle
.
api
);
pHandle
->
snapshotVer
=
ver
;
if
(
pHandle
->
execHandle
.
subType
==
TOPIC_SUB_TYPE__COLUMN
)
{
...
...
@@ -689,7 +690,7 @@ int32_t tqProcessSubscribeReq(STQ* pTq, int64_t sversion, char* msg, int32_t msg
pHandle
->
execHandle
.
execDb
.
pFilterOutTbUid
=
taosHashInit
(
64
,
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_BIGINT
),
false
,
HASH_ENTRY_LOCK
);
buildSnapContext
(
handle
.
meta
,
handle
.
version
,
0
,
pHandle
->
execHandle
.
subType
,
pHandle
->
fetchMeta
,
buildSnapContext
(
handle
.
vnode
,
handle
.
version
,
0
,
pHandle
->
execHandle
.
subType
,
pHandle
->
fetchMeta
,
(
SSnapContext
**
)(
&
handle
.
sContext
));
pHandle
->
execHandle
.
task
=
qCreateQueueExecTaskInfo
(
NULL
,
&
handle
,
vgId
,
NULL
,
req
.
newConsumerId
);
...
...
@@ -708,7 +709,7 @@ int32_t tqProcessSubscribeReq(STQ* pTq, int64_t sversion, char* msg, int32_t msg
tqReaderSetTbUidList
(
pHandle
->
execHandle
.
pTqReader
,
tbUidList
);
taosArrayDestroy
(
tbUidList
);
buildSnapContext
(
handle
.
meta
,
handle
.
version
,
req
.
suid
,
pHandle
->
execHandle
.
subType
,
pHandle
->
fetchMeta
,
buildSnapContext
(
handle
.
vnode
,
handle
.
version
,
req
.
suid
,
pHandle
->
execHandle
.
subType
,
pHandle
->
fetchMeta
,
(
SSnapContext
**
)(
&
handle
.
sContext
));
pHandle
->
execHandle
.
task
=
qCreateQueueExecTaskInfo
(
NULL
,
&
handle
,
vgId
,
NULL
,
req
.
newConsumerId
);
}
...
...
@@ -787,8 +788,8 @@ int32_t tqExpandTask(STQ* pTq, SStreamTask* pTask, int64_t ver) {
return
-
1
;
}
SReadHandle
handle
=
{
.
meta
=
pTq
->
pVnode
->
pMeta
,
.
vnode
=
pTq
->
pVnode
,
.
initTqReader
=
1
,
.
pStateBackend
=
pTask
->
pState
}
;
SReadHandle
handle
=
{
.
vnode
=
pTq
->
pVnode
,
.
initTqReader
=
1
,
.
pStateBackend
=
pTask
->
pState
};
initStorageAPI
(
&
handle
.
api
)
;
pTask
->
exec
.
pExecutor
=
qCreateStreamExecTaskInfo
(
pTask
->
exec
.
qmsg
,
&
handle
,
vgId
);
if
(
pTask
->
exec
.
pExecutor
==
NULL
)
{
...
...
@@ -803,9 +804,10 @@ int32_t tqExpandTask(STQ* pTq, SStreamTask* pTask, int64_t ver) {
}
int32_t
numOfVgroups
=
(
int32_t
)
taosArrayGetSize
(
pTask
->
childEpInfo
);
SReadHandle
mgHandle
=
{.
vnode
=
NULL
,
.
numOfVgroups
=
numOfVgroups
,
.
pStateBackend
=
pTask
->
pState
};
SReadHandle
handle
=
{.
vnode
=
NULL
,
.
numOfVgroups
=
numOfVgroups
,
.
pStateBackend
=
pTask
->
pState
};
initStorageAPI
(
&
handle
.
api
);
pTask
->
exec
.
pExecutor
=
qCreateStreamExecTaskInfo
(
pTask
->
exec
.
qmsg
,
&
mgH
andle
,
vgId
);
pTask
->
exec
.
pExecutor
=
qCreateStreamExecTaskInfo
(
pTask
->
exec
.
qmsg
,
&
h
andle
,
vgId
);
if
(
pTask
->
exec
.
pExecutor
==
NULL
)
{
return
-
1
;
}
...
...
source/dnode/vnode/src/tq/tqMeta.c
浏览文件 @
cea83344
...
...
@@ -298,13 +298,14 @@ int32_t tqMetaRestoreHandle(STQ* pTq) {
walSetRefVer
(
handle
.
pRef
,
handle
.
snapshotVer
);
SReadHandle
reader
=
{
.
meta
=
pTq
->
pVnode
->
pMeta
,
.
vnode
=
pTq
->
pVnode
,
.
initTableReader
=
true
,
.
initTqReader
=
true
,
.
version
=
handle
.
snapshotVer
,
.
version
=
handle
.
snapshotVer
};
initStorageAPI
(
&
reader
.
api
);
if
(
handle
.
execHandle
.
subType
==
TOPIC_SUB_TYPE__COLUMN
)
{
handle
.
execHandle
.
task
=
qCreateQueueExecTaskInfo
(
handle
.
execHandle
.
execCol
.
qmsg
,
&
reader
,
vgId
,
&
handle
.
execHandle
.
numOfCols
,
0
);
...
...
@@ -330,7 +331,7 @@ int32_t tqMetaRestoreHandle(STQ* pTq) {
handle
.
pWalReader
=
walOpenReader
(
pTq
->
pVnode
->
pWal
,
NULL
);
handle
.
execHandle
.
pTqReader
=
tqReaderOpen
(
pTq
->
pVnode
);
buildSnapContext
(
reader
.
meta
,
reader
.
version
,
0
,
handle
.
execHandle
.
subType
,
handle
.
fetchMeta
,
buildSnapContext
(
reader
.
vnode
,
reader
.
version
,
0
,
handle
.
execHandle
.
subType
,
handle
.
fetchMeta
,
(
SSnapContext
**
)(
&
reader
.
sContext
));
handle
.
execHandle
.
task
=
qCreateQueueExecTaskInfo
(
NULL
,
&
reader
,
vgId
,
NULL
,
0
);
}
else
if
(
handle
.
execHandle
.
subType
==
TOPIC_SUB_TYPE__TABLE
)
{
...
...
@@ -347,7 +348,7 @@ int32_t tqMetaRestoreHandle(STQ* pTq) {
tqReaderSetTbUidList
(
handle
.
execHandle
.
pTqReader
,
tbUidList
);
taosArrayDestroy
(
tbUidList
);
buildSnapContext
(
reader
.
meta
,
reader
.
version
,
handle
.
execHandle
.
execTb
.
suid
,
handle
.
execHandle
.
subType
,
buildSnapContext
(
reader
.
vnode
,
reader
.
version
,
handle
.
execHandle
.
execTb
.
suid
,
handle
.
execHandle
.
subType
,
handle
.
fetchMeta
,
(
SSnapContext
**
)(
&
reader
.
sContext
));
handle
.
execHandle
.
task
=
qCreateQueueExecTaskInfo
(
NULL
,
&
reader
,
vgId
,
NULL
,
0
);
}
...
...
source/dnode/vnode/src/tq/tqRead.c
浏览文件 @
cea83344
...
...
@@ -273,7 +273,7 @@ STqReader* tqReaderOpen(SVnode* pVnode) {
return
pReader
;
}
void
tq
CloseReader
(
STqReader
*
pReader
)
{
void
tq
ReaderClose
(
STqReader
*
pReader
)
{
// close wal reader
if
(
pReader
->
pWalReader
)
{
walCloseReader
(
pReader
->
pWalReader
);
...
...
@@ -294,7 +294,7 @@ void tqCloseReader(STqReader* pReader) {
taosMemoryFree
(
pReader
);
}
int32_t
tq
SeekVer
(
STqReader
*
pReader
,
int64_t
ver
,
const
char
*
id
)
{
int32_t
tq
ReaderSeek
(
STqReader
*
pReader
,
int64_t
ver
,
const
char
*
id
)
{
if
(
walReaderSeekVer
(
pReader
->
pWalReader
,
ver
)
<
0
)
{
return
-
1
;
}
...
...
@@ -394,8 +394,9 @@ bool tqNextBlockInWal(STqReader* pReader, const char* id) {
SSubmitTbData
*
pSubmitTbData
=
taosArrayGet
(
pReader
->
submit
.
aSubmitTbData
,
pReader
->
nextBlk
);
if
(
pReader
->
tbIdHash
==
NULL
)
{
int32_t
code
=
tqRetrieveDataBlock
(
pReader
,
NULL
);
if
(
code
==
TSDB_CODE_SUCCESS
&&
pReader
->
pResBlock
->
info
.
rows
>
0
)
{
SSDataBlock
*
pRes
=
NULL
;
int32_t
code
=
tqRetrieveDataBlock
(
pReader
,
&
pRes
,
NULL
);
if
(
code
==
TSDB_CODE_SUCCESS
&&
pRes
->
info
.
rows
>
0
)
{
return
true
;
}
}
...
...
@@ -404,8 +405,9 @@ bool tqNextBlockInWal(STqReader* pReader, const char* id) {
if
(
ret
!=
NULL
)
{
tqDebug
(
"tq reader return submit block, uid:%"
PRId64
", ver:%"
PRId64
,
pSubmitTbData
->
uid
,
pReader
->
msg
.
ver
);
int32_t
code
=
tqRetrieveDataBlock
(
pReader
,
NULL
);
if
(
code
==
TSDB_CODE_SUCCESS
&&
pReader
->
pResBlock
->
info
.
rows
>
0
)
{
SSDataBlock
*
pRes
=
NULL
;
int32_t
code
=
tqRetrieveDataBlock
(
pReader
,
&
pRes
,
NULL
);
if
(
code
==
TSDB_CODE_SUCCESS
&&
pRes
->
info
.
rows
>
0
)
{
return
true
;
}
}
else
{
...
...
@@ -440,6 +442,14 @@ int32_t tqReaderSetSubmitMsg(STqReader* pReader, void* msgStr, int32_t msgLen, i
return
0
;
}
SWalReader
*
tqGetWalReader
(
STqReader
*
pReader
)
{
return
pReader
->
pWalReader
;
}
SSDataBlock
*
tqGetResultBlock
(
STqReader
*
pReader
)
{
return
pReader
->
pResBlock
;
}
bool
tqNextBlockImpl
(
STqReader
*
pReader
,
const
char
*
idstr
)
{
if
(
pReader
->
msg
.
msgStr
==
NULL
)
{
return
false
;
...
...
@@ -592,12 +602,14 @@ static int32_t doSetVal(SColumnInfoData* pColumnInfoData, int32_t rowIndex, SCol
return
code
;
}
int32_t
tqRetrieveDataBlock
(
STqReader
*
pReader
,
const
char
*
id
)
{
int32_t
tqRetrieveDataBlock
(
STqReader
*
pReader
,
SSDataBlock
**
pRes
,
const
char
*
id
)
{
tqDebug
(
"tq reader retrieve data block %p, index:%d"
,
pReader
->
msg
.
msgStr
,
pReader
->
nextBlk
);
SSubmitTbData
*
pSubmitTbData
=
taosArrayGet
(
pReader
->
submit
.
aSubmitTbData
,
pReader
->
nextBlk
++
);
SSDataBlock
*
pBlock
=
pReader
->
pResBlock
;
*
pRes
=
pBlock
;
blockDataCleanup
(
pBlock
);
int32_t
sversion
=
pSubmitTbData
->
sver
;
...
...
@@ -1024,6 +1036,14 @@ int tqReaderAddTbUidList(STqReader* pReader, const SArray* pTableUidList) {
return
0
;
}
bool
tqReaderIsQueriedTable
(
STqReader
*
pReader
,
uint64_t
uid
)
{
return
taosHashGet
(
pReader
->
tbIdHash
,
&
uid
,
sizeof
(
uint64_t
));
}
bool
tqCurrentBlockConsumed
(
const
STqReader
*
pReader
)
{
return
pReader
->
msg
.
msgStr
==
NULL
;
}
int
tqReaderRemoveTbUidList
(
STqReader
*
pReader
,
const
SArray
*
tbUidList
)
{
for
(
int32_t
i
=
0
;
i
<
taosArrayGetSize
(
tbUidList
);
i
++
)
{
int64_t
*
pKey
=
(
int64_t
*
)
taosArrayGet
(
tbUidList
,
i
);
...
...
@@ -1069,7 +1089,7 @@ int32_t tqUpdateTbUidList(STQ* pTq, const SArray* tbUidList, bool isAdd) {
for
(
int32_t
i
=
0
;
i
<
taosArrayGetSize
(
tbUidList
);
++
i
)
{
uint64_t
*
id
=
(
uint64_t
*
)
taosArrayGet
(
tbUidList
,
i
);
int32_t
code
=
metaGetTableEntryByUidCache
(
&
mr
,
*
id
);
int32_t
code
=
meta
Reader
GetTableEntryByUidCache
(
&
mr
,
*
id
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
tqError
(
"failed to get table meta, uid:%"
PRIu64
" code:%s"
,
*
id
,
tstrerror
(
terrno
));
continue
;
...
...
source/dnode/vnode/src/tq/tqRestore.c
浏览文件 @
cea83344
...
...
@@ -61,9 +61,10 @@ static int32_t doSetOffsetForWalReader(SStreamTask *pTask, int32_t vgId) {
// seek the stored version and extract data from WAL
int64_t
firstVer
=
walReaderGetValidFirstVer
(
pTask
->
exec
.
pWalReader
);
if
(
pTask
->
chkInfo
.
currentVer
<
firstVer
)
{
tqWarn
(
"vgId:%d s-task:%s ver:%"
PRId64
" earlier than the first ver of wal range %"
PRId64
", forward to %"
PRId64
,
vgId
,
pTask
->
id
.
idStr
,
pTask
->
chkInfo
.
currentVer
,
firstVer
,
firstVer
);
pTask
->
chkInfo
.
currentVer
=
firstVer
;
tqWarn
(
"vgId:%d s-task:%s ver earlier than the first ver of wal range %"
PRId64
", forward to %"
PRId64
,
vgId
,
pTask
->
id
.
idStr
,
firstVer
,
pTask
->
chkInfo
.
currentVer
);
// todo need retry if failed
int32_t
code
=
walReaderSeekVer
(
pTask
->
exec
.
pWalReader
,
pTask
->
chkInfo
.
currentVer
);
...
...
source/dnode/vnode/src/tq/tqScan.c
浏览文件 @
cea83344
...
...
@@ -51,7 +51,7 @@ static int32_t tqAddTbNameToRsp(const STQ* pTq, int64_t uid, STaosxRsp* pRsp, in
metaReaderInit
(
&
mr
,
pTq
->
pVnode
->
pMeta
,
0
);
// TODO add reference to gurantee success
if
(
metaGetTableEntryByUidCache
(
&
mr
,
uid
)
<
0
)
{
if
(
meta
Reader
GetTableEntryByUidCache
(
&
mr
,
uid
)
<
0
)
{
metaReaderClear
(
&
mr
);
return
-
1
;
}
...
...
source/dnode/vnode/src/tsdb/tsdbCache.c
浏览文件 @
cea83344
...
...
@@ -1432,7 +1432,7 @@ static tb_uid_t getTableSuidByUid(tb_uid_t uid, STsdb *pTsdb) {
SMetaReader
mr
=
{
0
};
metaReaderInit
(
&
mr
,
pTsdb
->
pVnode
->
pMeta
,
0
);
if
(
metaGetTableEntryByUidCache
(
&
mr
,
uid
)
<
0
)
{
if
(
meta
Reader
GetTableEntryByUidCache
(
&
mr
,
uid
)
<
0
)
{
metaReaderClear
(
&
mr
);
// table not esist
return
0
;
}
...
...
source/dnode/vnode/src/tsdb/tsdbRead.c
浏览文件 @
cea83344
...
...
@@ -5380,10 +5380,10 @@ int64_t tsdbGetNumOfRowsInMemTable(STsdbReader* pReader) {
return
rows
;
}
int32_t
tsdbGetTableSchema
(
SVnode
*
pVnode
,
int64_t
uid
,
STSchema
**
pSchema
,
int64_t
*
suid
)
{
int32_t
tsdbGetTableSchema
(
void
*
pVnode
,
int64_t
uid
,
STSchema
**
pSchema
,
int64_t
*
suid
)
{
SMetaReader
mr
=
{
0
};
metaReaderInit
(
&
mr
,
pVnode
->
pMeta
,
0
);
int32_t
code
=
metaGetTableEntryByUidCache
(
&
mr
,
uid
);
metaReaderInit
(
&
mr
,
((
SVnode
*
)
pVnode
)
->
pMeta
,
0
);
int32_t
code
=
meta
Reader
GetTableEntryByUidCache
(
&
mr
,
uid
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
terrno
=
TSDB_CODE_TDB_INVALID_TABLE_ID
;
metaReaderClear
(
&
mr
);
...
...
@@ -5396,7 +5396,7 @@ int32_t tsdbGetTableSchema(SVnode* pVnode, int64_t uid, STSchema** pSchema, int6
if
(
mr
.
me
.
type
==
TSDB_CHILD_TABLE
)
{
tDecoderClear
(
&
mr
.
coder
);
*
suid
=
mr
.
me
.
ctbEntry
.
suid
;
code
=
metaGetTableEntryByUidCache
(
&
mr
,
*
suid
);
code
=
meta
Reader
GetTableEntryByUidCache
(
&
mr
,
*
suid
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
terrno
=
TSDB_CODE_TDB_INVALID_TABLE_ID
;
metaReaderClear
(
&
mr
);
...
...
@@ -5412,7 +5412,7 @@ int32_t tsdbGetTableSchema(SVnode* pVnode, int64_t uid, STSchema** pSchema, int6
metaReaderClear
(
&
mr
);
// get the newest table schema version
code
=
metaGetTbTSchemaEx
(
pVnode
->
pMeta
,
*
suid
,
uid
,
-
1
,
pSchema
);
code
=
metaGetTbTSchemaEx
(
((
SVnode
*
)
pVnode
)
->
pMeta
,
*
suid
,
uid
,
-
1
,
pSchema
);
return
code
;
}
...
...
source/dnode/vnode/src/vnd/vnodeInitApi.c
0 → 100644
浏览文件 @
cea83344
/*
* 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 "storageapi.h"
#include "vnodeInt.h"
#include "tstreamUpdate.h"
#include "meta.h"
static
void
initTsdbReaderAPI
(
TsdReader
*
pReader
);
static
void
initMetadataAPI
(
SStoreMeta
*
pMeta
);
static
void
initTqAPI
(
SStoreTqReader
*
pTq
);
static
void
initStateStoreAPI
(
SStateStore
*
pStore
);
static
void
initMetaReaderAPI
(
SStoreMetaReader
*
pMetaReader
);
static
void
initMetaFilterAPI
(
SMetaDataFilterAPI
*
pFilter
);
static
void
initFunctionStateStore
(
SFunctionStateStore
*
pStore
);
static
void
initCacheFn
(
SStoreCacheReader
*
pCache
);
static
void
initSnapshotFn
(
SStoreSnapshotFn
*
pSnapshot
);
void
initStorageAPI
(
SStorageAPI
*
pAPI
)
{
initTsdbReaderAPI
(
&
pAPI
->
tsdReader
);
initMetadataAPI
(
&
pAPI
->
metaFn
);
initTqAPI
(
&
pAPI
->
tqReaderFn
);
initStateStoreAPI
(
&
pAPI
->
stateStore
);
initMetaReaderAPI
(
&
pAPI
->
metaReaderFn
);
initMetaFilterAPI
(
&
pAPI
->
metaFilter
);
initFunctionStateStore
(
&
pAPI
->
functionStore
);
initCacheFn
(
&
pAPI
->
cacheFn
);
initSnapshotFn
(
&
pAPI
->
snapshotFn
);
}
void
initTsdbReaderAPI
(
TsdReader
*
pReader
)
{
pReader
->
tsdReaderOpen
=
(
__store_reader_open_fn_t
)
tsdbReaderOpen
;
pReader
->
tsdReaderClose
=
tsdbReaderClose
;
pReader
->
tsdNextDataBlock
=
tsdbNextDataBlock
;
pReader
->
tsdReaderRetrieveDataBlock
=
tsdbRetrieveDataBlock
;
pReader
->
tsdReaderReleaseDataBlock
=
tsdbReleaseDataBlock
;
pReader
->
tsdReaderRetrieveBlockSMAInfo
=
tsdbRetrieveDatablockSMA
;
pReader
->
tsdReaderNotifyClosing
=
tsdbReaderSetCloseFlag
;
pReader
->
tsdReaderResetStatus
=
tsdbReaderReset
;
pReader
->
tsdReaderGetDataBlockDistInfo
=
tsdbGetFileBlocksDistInfo
;
pReader
->
tsdReaderGetNumOfInMemRows
=
tsdbGetNumOfRowsInMemTable
;
// todo this function should be moved away
pReader
->
tsdSetQueryTableList
=
tsdbSetTableList
;
pReader
->
tsdSetReaderTaskId
=
(
void
(
*
)(
void
*
,
const
char
*
))
tsdbReaderSetId
;
}
void
initMetadataAPI
(
SStoreMeta
*
pMeta
)
{
pMeta
->
isTableExisted
=
metaIsTableExist
;
pMeta
->
openTableMetaCursor
=
metaOpenTbCursor
;
pMeta
->
closeTableMetaCursor
=
metaCloseTbCursor
;
pMeta
->
cursorNext
=
metaTbCursorNext
;
pMeta
->
cursorPrev
=
metaTbCursorPrev
;
pMeta
->
getBasicInfo
=
vnodeGetInfo
;
pMeta
->
getNumOfChildTables
=
metaGetStbStats
;
pMeta
->
getChildTableList
=
vnodeGetCtbIdList
;
pMeta
->
storeGetIndexInfo
=
vnodeGetIdx
;
pMeta
->
getInvertIndex
=
vnodeGetIvtIdx
;
pMeta
->
extractTagVal
=
(
const
void
*
(
*
)(
const
void
*
,
int16_t
,
STagVal
*
))
metaGetTableTagVal
;
pMeta
->
getTableTags
=
metaGetTableTags
;
pMeta
->
getTableTagsByUid
=
metaGetTableTagsByUids
;
pMeta
->
getTableUidByName
=
metaGetTableUidByName
;
pMeta
->
getTableTypeByName
=
metaGetTableTypeByName
;
pMeta
->
getTableNameByUid
=
metaGetTableNameByUid
;
pMeta
->
getTableSchema
=
tsdbGetTableSchema
;
// todo refactor
pMeta
->
storeGetTableList
=
vnodeGetTableList
;
}
void
initTqAPI
(
SStoreTqReader
*
pTq
)
{
pTq
->
tqReaderOpen
=
tqReaderOpen
;
pTq
->
tqReaderSetColIdList
=
tqReaderSetColIdList
;
pTq
->
tqReaderClose
=
tqReaderClose
;
pTq
->
tqReaderSeek
=
tqReaderSeek
;
pTq
->
tqRetrieveBlock
=
tqRetrieveDataBlock
;
pTq
->
tqReaderNextBlockInWal
=
tqNextBlockInWal
;
pTq
->
tqNextBlockImpl
=
tqNextBlockImpl
;
// todo remove it
pTq
->
tqReaderAddTables
=
tqReaderAddTbUidList
;
pTq
->
tqReaderSetQueryTableList
=
tqReaderSetTbUidList
;
pTq
->
tqReaderRemoveTables
=
tqReaderRemoveTbUidList
;
pTq
->
tqReaderIsQueriedTable
=
tqReaderIsQueriedTable
;
pTq
->
tqReaderCurrentBlockConsumed
=
tqCurrentBlockConsumed
;
pTq
->
tqReaderGetWalReader
=
tqGetWalReader
;
// todo remove it
pTq
->
tqReaderRetrieveTaosXBlock
=
tqRetrieveTaosxBlock
;
// todo remove it
pTq
->
tqReaderSetSubmitMsg
=
tqReaderSetSubmitMsg
;
// todo remove it
pTq
->
tqGetResultBlock
=
tqGetResultBlock
;
pTq
->
tqReaderNextBlockFilterOut
=
tqNextDataBlockFilterOut
;
}
void
initStateStoreAPI
(
SStateStore
*
pStore
)
{
pStore
->
streamFileStateInit
=
streamFileStateInit
;
pStore
->
updateInfoDestoryColseWinSBF
=
updateInfoDestoryColseWinSBF
;
pStore
->
streamStateGetByPos
=
streamStateGetByPos
;
pStore
->
streamStatePutParName
=
streamStatePutParName
;
pStore
->
streamStateGetParName
=
streamStateGetParName
;
pStore
->
streamStateAddIfNotExist
=
streamStateAddIfNotExist
;
pStore
->
streamStateReleaseBuf
=
streamStateReleaseBuf
;
pStore
->
streamStateFreeVal
=
streamStateFreeVal
;
pStore
->
streamStatePut
=
streamStatePut
;
pStore
->
streamStateGet
=
streamStateGet
;
pStore
->
streamStateCheck
=
streamStateCheck
;
pStore
->
streamStateGetByPos
=
streamStateGetByPos
;
pStore
->
streamStateDel
=
streamStateDel
;
pStore
->
streamStateClear
=
streamStateClear
;
pStore
->
streamStateSaveInfo
=
streamStateSaveInfo
;
pStore
->
streamStateGetInfo
=
streamStateGetInfo
;
pStore
->
streamStateSetNumber
=
streamStateSetNumber
;
pStore
->
streamStateFillPut
=
streamStateFillPut
;
pStore
->
streamStateFillGet
=
streamStateFillGet
;
pStore
->
streamStateFillDel
=
streamStateFillDel
;
pStore
->
streamStateCurNext
=
streamStateCurNext
;
pStore
->
streamStateCurPrev
=
streamStateCurPrev
;
pStore
->
streamStateGetAndCheckCur
=
streamStateGetAndCheckCur
;
pStore
->
streamStateSeekKeyNext
=
streamStateSeekKeyNext
;
pStore
->
streamStateFillSeekKeyNext
=
streamStateFillSeekKeyNext
;
pStore
->
streamStateFillSeekKeyPrev
=
streamStateFillSeekKeyPrev
;
pStore
->
streamStateFreeCur
=
streamStateFreeCur
;
pStore
->
streamStateGetGroupKVByCur
=
streamStateGetGroupKVByCur
;
pStore
->
streamStateGetKVByCur
=
streamStateGetKVByCur
;
pStore
->
streamStateSessionAddIfNotExist
=
streamStateSessionAddIfNotExist
;
pStore
->
streamStateSessionPut
=
streamStateSessionPut
;
pStore
->
streamStateSessionGet
=
streamStateSessionGet
;
pStore
->
streamStateSessionDel
=
streamStateSessionDel
;
pStore
->
streamStateSessionClear
=
streamStateSessionClear
;
pStore
->
streamStateSessionGetKVByCur
=
streamStateSessionGetKVByCur
;
pStore
->
streamStateStateAddIfNotExist
=
streamStateStateAddIfNotExist
;
pStore
->
streamStateSessionGetKeyByRange
=
streamStateSessionGetKeyByRange
;
pStore
->
updateInfoInit
=
updateInfoInit
;
pStore
->
updateInfoFillBlockData
=
updateInfoFillBlockData
;
pStore
->
updateInfoIsUpdated
=
updateInfoIsUpdated
;
pStore
->
updateInfoIsTableInserted
=
updateInfoIsTableInserted
;
pStore
->
updateInfoDestroy
=
updateInfoDestroy
;
pStore
->
updateInfoInitP
=
updateInfoInitP
;
pStore
->
updateInfoAddCloseWindowSBF
=
updateInfoAddCloseWindowSBF
;
pStore
->
updateInfoDestoryColseWinSBF
=
updateInfoDestoryColseWinSBF
;
pStore
->
updateInfoSerialize
=
updateInfoSerialize
;
pStore
->
updateInfoDeserialize
=
updateInfoDeserialize
;
pStore
->
streamStateSessionSeekKeyNext
=
streamStateSessionSeekKeyNext
;
pStore
->
streamStateSessionSeekKeyCurrentPrev
=
streamStateSessionSeekKeyCurrentPrev
;
pStore
->
streamStateSessionSeekKeyCurrentNext
=
streamStateSessionSeekKeyCurrentNext
;
pStore
->
streamFileStateInit
=
streamFileStateInit
;
pStore
->
streamFileStateDestroy
=
streamFileStateDestroy
;
pStore
->
streamFileStateClear
=
streamFileStateClear
;
pStore
->
needClearDiskBuff
=
needClearDiskBuff
;
pStore
->
streamStateOpen
=
streamStateOpen
;
pStore
->
streamStateClose
=
streamStateClose
;
pStore
->
streamStateBegin
=
streamStateBegin
;
pStore
->
streamStateCommit
=
streamStateCommit
;
pStore
->
streamStateDestroy
=
streamStateDestroy
;
pStore
->
streamStateDeleteCheckPoint
=
streamStateDeleteCheckPoint
;
}
void
initMetaReaderAPI
(
SStoreMetaReader
*
pMetaReader
)
{
pMetaReader
->
initReader
=
_metaReaderInit
;
pMetaReader
->
clearReader
=
metaReaderClear
;
pMetaReader
->
getTableEntryByUid
=
metaReaderGetTableEntryByUid
;
pMetaReader
->
getEntryGetUidCache
=
metaReaderGetTableEntryByUidCache
;
pMetaReader
->
getTableEntryByName
=
metaGetTableEntryByName
;
pMetaReader
->
readerReleaseLock
=
metaReaderReleaseLock
;
}
void
initMetaFilterAPI
(
SMetaDataFilterAPI
*
pFilter
)
{
pFilter
->
metaFilterCreateTime
=
metaFilterCreateTime
;
pFilter
->
metaFilterTableIds
=
metaFilterTableIds
;
pFilter
->
metaFilterTableName
=
metaFilterTableName
;
pFilter
->
metaFilterTtl
=
metaFilterTtl
;
}
void
initFunctionStateStore
(
SFunctionStateStore
*
pStore
)
{
pStore
->
streamStateFuncPut
=
streamStateFuncPut
;
pStore
->
streamStateFuncGet
=
streamStateFuncGet
;
}
void
initCacheFn
(
SStoreCacheReader
*
pCache
)
{
pCache
->
openReader
=
tsdbCacherowsReaderOpen
;
pCache
->
closeReader
=
tsdbCacherowsReaderClose
;
pCache
->
retrieveRows
=
tsdbRetrieveCacheRows
;
pCache
->
reuseReader
=
tsdbReuseCacherowsReader
;
}
void
initSnapshotFn
(
SStoreSnapshotFn
*
pSnapshot
)
{
pSnapshot
->
createSnapshot
=
setForSnapShot
;
pSnapshot
->
destroySnapshot
=
destroySnapContext
;
pSnapshot
->
getMetaTableInfoFromSnapshot
=
getMetaTableInfoFromSnapshot
;
pSnapshot
->
getTableInfoFromSnapshot
=
getTableInfoFromSnapshot
;
}
\ No newline at end of file
source/dnode/vnode/src/vnd/vnodeQuery.c
浏览文件 @
cea83344
...
...
@@ -80,7 +80,7 @@ int vnodeGetTableMeta(SVnode *pVnode, SRpcMsg *pMsg, bool direct) {
metaRsp
.
suid
=
mer1
.
me
.
uid
;
}
else
if
(
mer1
.
me
.
type
==
TSDB_CHILD_TABLE
)
{
metaReaderInit
(
&
mer2
,
pVnode
->
pMeta
,
META_READER_NOLOCK
);
if
(
metaGetTableEntryByUid
(
&
mer2
,
mer1
.
me
.
ctbEntry
.
suid
)
<
0
)
goto
_exit
;
if
(
meta
Reader
GetTableEntryByUid
(
&
mer2
,
mer1
.
me
.
ctbEntry
.
suid
)
<
0
)
goto
_exit
;
strcpy
(
metaRsp
.
stbName
,
mer2
.
me
.
name
);
metaRsp
.
suid
=
mer2
.
me
.
uid
;
...
...
@@ -189,7 +189,7 @@ int vnodeGetTableCfg(SVnode *pVnode, SRpcMsg *pMsg, bool direct) {
goto
_exit
;
}
else
if
(
mer1
.
me
.
type
==
TSDB_CHILD_TABLE
)
{
metaReaderInit
(
&
mer2
,
pVnode
->
pMeta
,
0
);
if
(
metaGetTableEntryByUid
(
&
mer2
,
mer1
.
me
.
ctbEntry
.
suid
)
<
0
)
goto
_exit
;
if
(
meta
Reader
GetTableEntryByUid
(
&
mer2
,
mer1
.
me
.
ctbEntry
.
suid
)
<
0
)
goto
_exit
;
strcpy
(
cfgRsp
.
stbName
,
mer2
.
me
.
name
);
schema
=
mer2
.
me
.
stbEntry
.
schemaRow
;
...
...
@@ -410,13 +410,32 @@ void vnodeResetLoad(SVnode *pVnode, SVnodeLoad *pLoad) {
"nBatchInsertSuccess"
);
}
void
vnodeGetInfo
(
SVnode
*
pVnode
,
const
char
**
dbname
,
int32_t
*
vgId
)
{
void
vnodeGetInfo
(
void
*
pVnode
,
const
char
**
dbname
,
int32_t
*
vgId
,
int64_t
*
numOfTables
,
int64_t
*
numOfNormalTables
)
{
SVnode
*
pVnodeObj
=
pVnode
;
SVnodeCfg
*
pConf
=
&
pVnodeObj
->
config
;
if
(
dbname
)
{
*
dbname
=
p
Vnode
->
config
.
dbname
;
*
dbname
=
p
Conf
->
dbname
;
}
if
(
vgId
)
{
*
vgId
=
TD_VID
(
pVnode
);
*
vgId
=
TD_VID
(
pVnodeObj
);
}
if
(
numOfTables
)
{
*
numOfTables
=
pConf
->
vndStats
.
numOfNTables
+
pConf
->
vndStats
.
numOfCTables
;
}
if
(
numOfNormalTables
)
{
*
numOfNormalTables
=
pConf
->
vndStats
.
numOfNTables
;
}
}
int32_t
vnodeGetTableList
(
void
*
pVnode
,
int8_t
type
,
SArray
*
pList
)
{
if
(
type
==
TSDB_SUPER_TABLE
)
{
return
vnodeGetStbIdList
(
pVnode
,
0
,
pList
);
}
else
{
return
TSDB_CODE_INVALID_PARA
;
}
}
...
...
@@ -440,8 +459,10 @@ int32_t vnodeGetAllTableList(SVnode *pVnode, uint64_t uid, SArray *list) {
int32_t
vnodeGetCtbIdListByFilter
(
SVnode
*
pVnode
,
int64_t
suid
,
SArray
*
list
,
bool
(
*
filter
)(
void
*
arg
),
void
*
arg
)
{
return
0
;
}
int32_t
vnodeGetCtbIdList
(
SVnode
*
pVnode
,
int64_t
suid
,
SArray
*
list
)
{
SMCtbCursor
*
pCur
=
metaOpenCtbCursor
(
pVnode
->
pMeta
,
suid
,
1
);
int32_t
vnodeGetCtbIdList
(
void
*
pVnode
,
int64_t
suid
,
SArray
*
list
)
{
SVnode
*
pVnodeObj
=
pVnode
;
SMCtbCursor
*
pCur
=
metaOpenCtbCursor
(
pVnodeObj
->
pMeta
,
suid
,
1
);
while
(
1
)
{
tb_uid_t
id
=
metaCtbCursorNext
(
pCur
);
...
...
@@ -529,10 +550,8 @@ int32_t vnodeGetTimeSeriesNum(SVnode *pVnode, int64_t *num) {
for
(
int64_t
i
=
0
;
i
<
arrSize
;
++
i
)
{
tb_uid_t
suid
=
*
(
tb_uid_t
*
)
taosArrayGet
(
suidList
,
i
);
SMetaStbStats
stats
=
{
0
};
metaGetStbStats
(
pVnode
->
pMeta
,
suid
,
&
stats
);
int64_t
ctbNum
=
stats
.
ctbNum
;
// vnodeGetCtbNum(pVnode, id, &ctbNum);
int64_t
ctbNum
=
0
;
metaGetStbStats
(
pVnode
,
suid
,
&
ctbNum
);
int
numOfCols
=
0
;
vnodeGetStbColumnNum
(
pVnode
,
suid
,
&
numOfCols
);
...
...
@@ -567,16 +586,17 @@ int32_t vnodeGetAllCtbNum(SVnode *pVnode, int64_t *num) {
return
TSDB_CODE_SUCCESS
;
}
void
*
vnodeGetIdx
(
SVnode
*
pVnode
)
{
void
*
vnodeGetIdx
(
void
*
pVnode
)
{
if
(
pVnode
==
NULL
)
{
return
NULL
;
}
return
metaGetIdx
(
pVnode
->
pMeta
);
return
metaGetIdx
(((
SVnode
*
)
pVnode
)
->
pMeta
);
}
void
*
vnodeGetIvtIdx
(
SVnode
*
pVnode
)
{
void
*
vnodeGetIvtIdx
(
void
*
pVnode
)
{
if
(
pVnode
==
NULL
)
{
return
NULL
;
}
return
metaGetIvtIdx
(
pVnode
->
pMeta
);
return
metaGetIvtIdx
(
((
SVnode
*
)
pVnode
)
->
pMeta
);
}
source/dnode/vnode/src/vnd/vnodeSvr.c
浏览文件 @
cea83344
此差异已折叠。
点击以展开。
source/libs/executor/CMakeLists.txt
浏览文件 @
cea83344
aux_source_directory
(
src EXECUTOR_SRC
)
#add_library(executor ${EXECUTOR_SRC})
add_library
(
executor STATIC
${
EXECUTOR_SRC
}
)
target_link_libraries
(
executor
PRIVATE os util common function parser planner qcom
vnode scalar nodes index stream
PRIVATE os util common function parser planner qcom
scalar nodes index wal tdb
)
target_include_directories
(
...
...
source/libs/executor/inc/dataSinkInt.h
浏览文件 @
cea83344
...
...
@@ -22,6 +22,7 @@ extern "C" {
#include "dataSinkMgt.h"
#include "plannodes.h"
#include "storageapi.h"
#include "tcommon.h"
struct
SDataSink
;
...
...
@@ -29,6 +30,7 @@ struct SDataSinkHandle;
typedef
struct
SDataSinkManager
{
SDataSinkMgtCfg
cfg
;
SStorageAPI
*
pAPI
;
}
SDataSinkManager
;
typedef
int32_t
(
*
FPutDataBlock
)(
struct
SDataSinkHandle
*
pHandle
,
const
SInputData
*
pInput
,
bool
*
pContinue
);
...
...
source/libs/executor/inc/executil.h
浏览文件 @
cea83344
...
...
@@ -12,17 +12,17 @@
* 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 TDENGINE_
QUERY
UTIL_H
#define TDENGINE_
QUERY
UTIL_H
#ifndef TDENGINE_
EXEC
UTIL_H
#define TDENGINE_
EXEC
UTIL_H
#include "executor.h"
#include "function.h"
#include "nodes.h"
#include "plannodes.h"
#include "storageapi.h"
#include "tcommon.h"
#include "tpagedbuf.h"
#include "tsimplehash.h"
#include "vnode.h"
#define T_LONG_JMP(_obj, _c) \
do { \
...
...
@@ -154,7 +154,7 @@ int32_t getNumOfTotalRes(SGroupResInfo* pGroupResInfo);
SSDataBlock
*
createDataBlockFromDescNode
(
SDataBlockDescNode
*
pNode
);
EDealRes
doTranslateTagExpr
(
SNode
**
pNode
,
void
*
pContext
);
int32_t
getGroupIdFromTagsVal
(
void
*
p
Meta
,
uint64_t
uid
,
SNodeList
*
pGroupNode
,
char
*
keyBuf
,
uint64_t
*
pGroupId
);
int32_t
getGroupIdFromTagsVal
(
void
*
p
Vnode
,
uint64_t
uid
,
SNodeList
*
pGroupNode
,
char
*
keyBuf
,
uint64_t
*
pGroupId
,
SStorageAPI
*
pAPI
);
size_t
getTableTagsBufLen
(
const
SNodeList
*
pGroups
);
SArray
*
createSortInfo
(
SNodeList
*
pNodeList
);
...
...
@@ -166,7 +166,7 @@ void createExprFromOneNode(SExprInfo* pExp, SNode* pNode, int16_t slotId);
void
createExprFromTargetNode
(
SExprInfo
*
pExp
,
STargetNode
*
pTargetNode
);
SExprInfo
*
createExprInfo
(
SNodeList
*
pNodeList
,
SNodeList
*
pGroupKeys
,
int32_t
*
numOfExprs
);
SqlFunctionCtx
*
createSqlFunctionCtx
(
SExprInfo
*
pExprInfo
,
int32_t
numOfOutput
,
int32_t
**
rowEntryInfoOffset
);
SqlFunctionCtx
*
createSqlFunctionCtx
(
SExprInfo
*
pExprInfo
,
int32_t
numOfOutput
,
int32_t
**
rowEntryInfoOffset
,
SFunctionStateStore
*
pStore
);
void
relocateColumnData
(
SSDataBlock
*
pBlock
,
const
SArray
*
pColMatchInfo
,
SArray
*
pCols
,
bool
outputEveryColumn
);
void
initExecTimeWindowInfo
(
SColumnInfoData
*
pColData
,
STimeWindow
*
pQueryWindow
);
...
...
@@ -178,8 +178,8 @@ void cleanupQueryTableDataCond(SQueryTableDataCond* pCond);
int32_t
convertFillType
(
int32_t
mode
);
int32_t
resultrowComparAsc
(
const
void
*
p1
,
const
void
*
p2
);
int32_t
isQualifiedTable
(
STableKeyInfo
*
info
,
SNode
*
pTagCond
,
void
*
metaHandle
,
bool
*
pQualified
);
int32_t
isQualifiedTable
(
STableKeyInfo
*
info
,
SNode
*
pTagCond
,
void
*
metaHandle
,
bool
*
pQualified
,
SStorageAPI
*
pAPI
);
void
printDataBlock
(
SSDataBlock
*
pBlock
,
const
char
*
flag
);
#endif // TDENGINE_
QUERY
UTIL_H
#endif // TDENGINE_
EXEC
UTIL_H
source/libs/executor/inc/executorInt.h
浏览文件 @
cea83344
...
...
@@ -38,13 +38,15 @@ extern "C" {
#include "tlockfree.h"
#include "tmsg.h"
#include "tpagedbuf.h"
#include "tstream.h"
#include "tstreamUpdate.h"
#include "vnode.h"
//#include "tstream.h"
//#include "tstreamUpdate.h"
#include "tlrucache.h"
typedef
int32_t
(
*
__block_search_fn_t
)(
char
*
data
,
int32_t
num
,
int64_t
key
,
int32_t
order
);
typedef
struct
STsdbReader
STsdbReader
;
typedef
struct
STqReader
STqReader
;
#define IS_VALID_SESSION_WIN(winInfo) ((winInfo).sessionWin.win.skey > 0)
#define SET_SESSION_WIN_INVALID(winInfo) ((winInfo).sessionWin.win.skey = INT64_MIN)
#define IS_INVALID_SESSION_WIN_KEY(winKey) ((winKey).win.skey <= 0)
...
...
@@ -206,6 +208,7 @@ typedef struct STableScanBase {
SLimitInfo
limitInfo
;
// there are more than one table list exists in one task, if only one vnode exists.
STableListInfo
*
pTableListInfo
;
TsdReader
readerAPI
;
}
STableScanBase
;
typedef
struct
STableScanInfo
{
...
...
@@ -221,6 +224,7 @@ typedef struct STableScanInfo {
int8_t
assignBlockUid
;
bool
hasGroupByTag
;
bool
countOnly
;
// TsdReader readerAPI;
}
STableScanInfo
;
typedef
struct
STableMergeScanInfo
{
...
...
@@ -280,6 +284,7 @@ typedef struct SStreamAggSupporter {
int32_t
stateKeySize
;
int16_t
stateKeyType
;
SDiskbasedBuf
*
pResultBuf
;
SStateStore
stateStore
;
}
SStreamAggSupporter
;
typedef
struct
SWindowSupporter
{
...
...
@@ -335,7 +340,7 @@ typedef struct SStreamScanInfo {
STqReader
*
tqReader
;
uint64_t
groupId
;
SUpdateInfo
*
pUpdateInfo
;
struct
SUpdateInfo
*
pUpdateInfo
;
EStreamScanMode
scanMode
;
struct
SOperatorInfo
*
pStreamScanOp
;
...
...
@@ -366,15 +371,18 @@ typedef struct SStreamScanInfo {
SSDataBlock
*
pCreateTbRes
;
int8_t
igCheckUpdate
;
int8_t
igExpired
;
SStreamState
*
pState
;
void
*
pState
;
//void
SStoreTqReader
readerFn
;
SStateStore
stateStore
;
}
SStreamScanInfo
;
typedef
struct
{
SVnode
*
vnode
;
SSDataBlock
pRes
;
// result SSDataBlock
STsdbReader
*
dataReader
;
SSnapContext
*
sContext
;
STableListInfo
*
pTableListInfo
;
struct
SVnode
*
vnode
;
// todo remove this
SSDataBlock
pRes
;
// result SSDataBlock
STsdbReader
*
dataReader
;
struct
SSnapContext
*
sContext
;
SStorageAPI
*
pAPI
;
STableListInfo
*
pTableListInfo
;
}
SStreamRawScanInfo
;
typedef
struct
STableCountScanSupp
{
...
...
@@ -441,12 +449,13 @@ typedef struct SStreamIntervalOperatorInfo {
bool
isFinal
;
SArray
*
pChildren
;
int32_t
numOfChild
;
SStreamState
*
pState
;
SStreamState
*
pState
;
// void
SWinKey
delKey
;
uint64_t
numOfDatapack
;
SArray
*
pUpdated
;
SSHashObj
*
pUpdatedMap
;
int64_t
dataVersion
;
SStateStore
statestore
;
}
SStreamIntervalOperatorInfo
;
typedef
struct
SDataGroupInfo
{
...
...
@@ -543,6 +552,7 @@ typedef struct SStreamFillSupporter {
int32_t
rowSize
;
SSHashObj
*
pResMap
;
bool
hasDelete
;
SStorageAPI
*
pAPI
;
}
SStreamFillSupporter
;
typedef
struct
SStreamFillOperatorInfo
{
...
...
@@ -569,12 +579,11 @@ void cleanupQueriedTableScanInfo(SSchemaInfo* pSchemaInfo);
void
initBasicInfo
(
SOptrBasicInfo
*
pInfo
,
SSDataBlock
*
pBlock
);
void
cleanupBasicInfo
(
SOptrBasicInfo
*
pInfo
);
int32_t
initExprSupp
(
SExprSupp
*
pSup
,
SExprInfo
*
pExprInfo
,
int32_t
numOfExpr
);
int32_t
initExprSupp
(
SExprSupp
*
pSup
,
SExprInfo
*
pExprInfo
,
int32_t
numOfExpr
,
SFunctionStateStore
*
pStore
);
void
cleanupExprSupp
(
SExprSupp
*
pSup
);
int32_t
initAggSup
(
SExprSupp
*
pSup
,
SAggSupporter
*
pAggSup
,
SExprInfo
*
pExprInfo
,
int32_t
numOfCols
,
size_t
keyBufSize
,
const
char
*
pkey
,
void
*
pState
);
const
char
*
pkey
,
void
*
pState
,
SFunctionStateStore
*
pStore
);
void
cleanupAggSup
(
SAggSupporter
*
pAggSup
);
void
initResultSizeInfo
(
SResultInfo
*
pResultInfo
,
int32_t
numOfRows
);
...
...
@@ -636,7 +645,7 @@ bool isInTimeWindow(STimeWindow* pWin, TSKEY ts, int64_t gap);
bool
functionNeedToExecute
(
SqlFunctionCtx
*
pCtx
);
bool
isOverdue
(
TSKEY
ts
,
STimeWindowAggSupp
*
pSup
);
bool
isCloseWindow
(
STimeWindow
*
pWin
,
STimeWindowAggSupp
*
pSup
);
bool
isDeletedStreamWindow
(
STimeWindow
*
pWin
,
uint64_t
groupId
,
SStreamState
*
pState
,
STimeWindowAggSupp
*
pTwSup
);
bool
isDeletedStreamWindow
(
STimeWindow
*
pWin
,
uint64_t
groupId
,
void
*
pState
,
STimeWindowAggSupp
*
pTwSup
,
SStateStore
*
pStore
);
void
appendOneRowToStreamSpecialBlock
(
SSDataBlock
*
pBlock
,
TSKEY
*
pStartTs
,
TSKEY
*
pEndTs
,
uint64_t
*
pUid
,
uint64_t
*
pGp
,
void
*
pTbName
);
uint64_t
calGroupIdByData
(
SPartitionBySupporter
*
pParSup
,
SExprSupp
*
pExprSup
,
SSDataBlock
*
pBlock
,
int32_t
rowId
);
...
...
@@ -645,20 +654,17 @@ int32_t finalizeResultRows(SDiskbasedBuf* pBuf, SResultRowPosition* resultRowPos
SSDataBlock
*
pBlock
,
SExecTaskInfo
*
pTaskInfo
);
bool
groupbyTbname
(
SNodeList
*
pGroupList
);
int32_t
buildDataBlockFromGroupRes
(
struct
SOperatorInfo
*
pOperator
,
SStreamState
*
pState
,
SSDataBlock
*
pBlock
,
SExprSupp
*
pSup
,
int32_t
buildDataBlockFromGroupRes
(
struct
SOperatorInfo
*
pOperator
,
void
*
pState
,
SSDataBlock
*
pBlock
,
SExprSupp
*
pSup
,
SGroupResInfo
*
pGroupResInfo
);
int32_t
saveSessionDiscBuf
(
SStreamState
*
pState
,
SSessionKey
*
key
,
void
*
buf
,
int32_t
size
);
int32_t
buildSessionResultDataBlock
(
struct
SOperatorInfo
*
pOperator
,
SStreamState
*
pState
,
SSDataBlock
*
pBlock
,
int32_t
saveSessionDiscBuf
(
void
*
pState
,
SSessionKey
*
key
,
void
*
buf
,
int32_t
size
,
SStateStore
*
pAPI
);
int32_t
buildSessionResultDataBlock
(
struct
SOperatorInfo
*
pOperator
,
void
*
pState
,
SSDataBlock
*
pBlock
,
SExprSupp
*
pSup
,
SGroupResInfo
*
pGroupResInfo
);
int32_t
setOutputBuf
(
SStreamState
*
pState
,
STimeWindow
*
win
,
SResultRow
**
pResult
,
int64_t
tableGroupId
,
SqlFunctionCtx
*
pCtx
,
int32_t
numOfOutput
,
int32_t
*
rowEntryInfoOffset
,
SAggSupporter
*
pAggSup
);
int32_t
releaseOutputBuf
(
SStreamState
*
pState
,
SWinKey
*
pKey
,
SResultRow
*
pResult
);
int32_t
saveOutputBuf
(
SStreamState
*
pState
,
SWinKey
*
pKey
,
SResultRow
*
pResult
,
int32_t
resSize
);
int32_t
releaseOutputBuf
(
void
*
pState
,
SWinKey
*
pKey
,
SResultRow
*
pResult
,
SStateStore
*
pAPI
);
void
getNextIntervalWindow
(
SInterval
*
pInterval
,
STimeWindow
*
tw
,
int32_t
order
);
int32_t
getForwardStepsInBlock
(
int32_t
numOfRows
,
__block_search_fn_t
searchFn
,
TSKEY
ekey
,
int32_t
pos
,
int32_t
order
,
int64_t
*
pData
);
void
appendCreateTableRow
(
SStreamState
*
pState
,
SExprSupp
*
pTableSup
,
SExprSupp
*
pTagSup
,
uint64_t
groupId
,
SSDataBlock
*
pSrcBlock
,
int32_t
rowId
,
SSDataBlock
*
pDestBlock
);
void
appendCreateTableRow
(
void
*
pState
,
SExprSupp
*
pTableSup
,
SExprSupp
*
pTagSup
,
uint64_t
groupId
,
SSDataBlock
*
pSrcBlock
,
int32_t
rowId
,
SSDataBlock
*
pDestBlock
,
SStateStore
*
pAPI
);
SSDataBlock
*
buildCreateTableBlock
(
SExprSupp
*
tbName
,
SExprSupp
*
tag
);
SExprInfo
*
createExpr
(
SNodeList
*
pNodeList
,
int32_t
*
numOfExprs
);
...
...
source/libs/executor/inc/operator.h
浏览文件 @
cea83344
...
...
@@ -156,7 +156,7 @@ void destroyOperator(SOperatorInfo* pOperator);
SOperatorInfo
*
extractOperatorInTree
(
SOperatorInfo
*
pOperator
,
int32_t
type
,
const
char
*
id
);
int32_t
getTableScanInfo
(
SOperatorInfo
*
pOperator
,
int32_t
*
order
,
int32_t
*
scanFlag
,
bool
inheritUsOrder
);
int32_t
stopTableScanOperator
(
SOperatorInfo
*
pOperator
,
const
char
*
pIdStr
);
int32_t
stopTableScanOperator
(
SOperatorInfo
*
pOperator
,
const
char
*
pIdStr
,
SStorageAPI
*
pAPI
);
int32_t
getOperatorExplainExecInfo
(
struct
SOperatorInfo
*
operatorInfo
,
SArray
*
pExecInfoList
);
#ifdef __cplusplus
...
...
source/libs/executor/inc/querytask.h
浏览文件 @
cea83344
...
...
@@ -56,20 +56,19 @@ typedef struct STaskStopInfo {
}
STaskStopInfo
;
typedef
struct
{
STqOffsetVal
currentOffset
;
// for tmq
SMqMetaRsp
metaRsp
;
// for tmq fetching meta
int64_t
snapshotVer
;
// SPackedData submit; // todo remove it
SSchemaWrapper
*
schema
;
char
tbName
[
TSDB_TABLE_NAME_LEN
];
// this is the current scan table: todo refactor
int8_t
recoverStep
;
int8_t
recoverScanFinished
;
SQueryTableDataCond
tableCond
;
int64_t
fillHistoryVer1
;
int64_t
fillHistoryVer2
;
SStreamState
*
pState
;
int64_t
dataVersion
;
int64_t
checkPointId
;
STqOffsetVal
currentOffset
;
// for tmq
SMqMetaRsp
metaRsp
;
// for tmq fetching meta
int64_t
snapshotVer
;
SSchemaWrapper
*
schema
;
char
tbName
[
TSDB_TABLE_NAME_LEN
];
// this is the current scan table: todo refactor
int8_t
recoverStep
;
int8_t
recoverScanFinished
;
SQueryTableDataCond
tableCond
;
int64_t
fillHistoryVer1
;
int64_t
fillHistoryVer2
;
SStreamState
*
pState
;
int64_t
dataVersion
;
int64_t
checkPointId
;
}
SStreamTaskInfo
;
struct
SExecTaskInfo
{
...
...
@@ -92,10 +91,11 @@ struct SExecTaskInfo {
SArray
*
pResultBlockList
;
// result block list
STaskStopInfo
stopInfo
;
SRWLatch
lock
;
// secure the access of STableListInfo
SStorageAPI
storageAPI
;
};
void
buildTaskId
(
uint64_t
taskId
,
uint64_t
queryId
,
char
*
dst
);
SExecTaskInfo
*
doCreateTask
(
uint64_t
queryId
,
uint64_t
taskId
,
int32_t
vgId
,
EOPTR_EXEC_MODEL
model
);
SExecTaskInfo
*
doCreateTask
(
uint64_t
queryId
,
uint64_t
taskId
,
int32_t
vgId
,
EOPTR_EXEC_MODEL
model
,
SStorageAPI
*
pAPI
);
void
doDestroyTask
(
SExecTaskInfo
*
pTaskInfo
);
bool
isTaskKilled
(
SExecTaskInfo
*
pTaskInfo
);
void
setTaskKilled
(
SExecTaskInfo
*
pTaskInfo
,
int32_t
rspCode
);
...
...
source/libs/executor/src/aggregateoperator.c
浏览文件 @
cea83344
...
...
@@ -21,7 +21,6 @@
#include "tname.h"
#include "executorInt.h"
#include "index.h"
#include "operator.h"
#include "query.h"
#include "querytask.h"
...
...
@@ -30,6 +29,7 @@
#include "tglobal.h"
#include "thash.h"
#include "ttypes.h"
#include "index.h"
typedef
struct
{
bool
hasAgg
;
...
...
@@ -84,7 +84,7 @@ SOperatorInfo* createAggregateOperatorInfo(SOperatorInfo* downstream, SAggPhysiN
int32_t
num
=
0
;
SExprInfo
*
pExprInfo
=
createExprInfo
(
pAggNode
->
pAggFuncs
,
pAggNode
->
pGroupKeys
,
&
num
);
int32_t
code
=
initAggSup
(
&
pOperator
->
exprSupp
,
&
pInfo
->
aggSup
,
pExprInfo
,
num
,
keyBufSize
,
pTaskInfo
->
id
.
str
,
pTaskInfo
->
streamInfo
.
pState
);
pTaskInfo
->
streamInfo
.
pState
,
&
pTaskInfo
->
storageAPI
.
functionStore
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
goto
_error
;
}
...
...
@@ -95,7 +95,7 @@ SOperatorInfo* createAggregateOperatorInfo(SOperatorInfo* downstream, SAggPhysiN
pScalarExprInfo
=
createExprInfo
(
pAggNode
->
pExprs
,
NULL
,
&
numOfScalarExpr
);
}
code
=
initExprSupp
(
&
pInfo
->
scalarExprSup
,
pScalarExprInfo
,
numOfScalarExpr
);
code
=
initExprSupp
(
&
pInfo
->
scalarExprSup
,
pScalarExprInfo
,
numOfScalarExpr
,
&
pTaskInfo
->
storageAPI
.
functionStore
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
goto
_error
;
}
...
...
@@ -485,8 +485,8 @@ void cleanupAggSup(SAggSupporter* pAggSup) {
}
int32_t
initAggSup
(
SExprSupp
*
pSup
,
SAggSupporter
*
pAggSup
,
SExprInfo
*
pExprInfo
,
int32_t
numOfCols
,
size_t
keyBufSize
,
const
char
*
pkey
,
void
*
pState
)
{
int32_t
code
=
initExprSupp
(
pSup
,
pExprInfo
,
numOfCols
);
const
char
*
pkey
,
void
*
pState
,
SFunctionStateStore
*
pStore
)
{
int32_t
code
=
initExprSupp
(
pSup
,
pExprInfo
,
numOfCols
,
pStore
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
return
code
;
}
...
...
source/libs/executor/src/cachescanoperator.c
浏览文件 @
cea83344
...
...
@@ -13,8 +13,8 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "function.h"
#include "os.h"
#include "function.h"
#include "tname.h"
#include "tdatablock.h"
...
...
@@ -27,6 +27,8 @@
#include "thash.h"
#include "ttypes.h"
#include "storageapi.h"
typedef
struct
SCacheRowsScanInfo
{
SSDataBlock
*
pRes
;
SReadHandle
readHandle
;
...
...
@@ -102,9 +104,9 @@ SOperatorInfo* createCacherowsScanOperator(SLastRowScanPhysiNode* pScanNode, SRe
STableKeyInfo
*
pList
=
tableListGetInfo
(
pTableListInfo
,
0
);
uint64_t
suid
=
tableListGetSuid
(
pTableListInfo
);
code
=
tsdbCacherowsReaderOpen
(
pInfo
->
readHandle
.
vnode
,
pInfo
->
retrieveType
,
pList
,
totalTables
,
taosArrayGetSize
(
pInfo
->
matchInfo
.
pList
),
pCidList
,
pInfo
->
pSlotIds
,
suid
,
&
pInfo
->
pLastrowReader
,
pTaskInfo
->
id
.
str
);
code
=
pInfo
->
readHandle
.
api
.
cacheFn
.
openReader
(
pInfo
->
readHandle
.
vnode
,
pInfo
->
retrieveType
,
pList
,
totalTables
,
taosArrayGetSize
(
pInfo
->
matchInfo
.
pList
),
pCidList
,
pInfo
->
pSlotIds
,
suid
,
&
pInfo
->
pLastrowReader
,
pTaskInfo
->
id
.
str
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
goto
_error
;
}
...
...
@@ -124,7 +126,7 @@ SOperatorInfo* createCacherowsScanOperator(SLastRowScanPhysiNode* pScanNode, SRe
if
(
pScanNode
->
scan
.
pScanPseudoCols
!=
NULL
)
{
SExprSupp
*
p
=
&
pInfo
->
pseudoExprSup
;
p
->
pExprInfo
=
createExprInfo
(
pScanNode
->
scan
.
pScanPseudoCols
,
NULL
,
&
p
->
numOfExprs
);
p
->
pCtx
=
createSqlFunctionCtx
(
p
->
pExprInfo
,
p
->
numOfExprs
,
&
p
->
rowEntryInfoOffset
);
p
->
pCtx
=
createSqlFunctionCtx
(
p
->
pExprInfo
,
p
->
numOfExprs
,
&
p
->
rowEntryInfoOffset
,
&
pTaskInfo
->
storageAPI
.
functionStore
);
}
setOperatorInfo
(
pOperator
,
"CachedRowScanOperator"
,
QUERY_NODE_PHYSICAL_PLAN_LAST_ROW_SCAN
,
false
,
OP_NOT_OPENED
,
...
...
@@ -172,7 +174,7 @@ SSDataBlock* doScanCache(SOperatorInfo* pOperator) {
blockDataCleanup
(
pInfo
->
pBufferredRes
);
taosArrayClear
(
pInfo
->
pUidList
);
int32_t
code
=
tsdbRetrieveCach
eRows
(
pInfo
->
pLastrowReader
,
pInfo
->
pBufferredRes
,
pInfo
->
pSlotIds
,
int32_t
code
=
pInfo
->
readHandle
.
api
.
cacheFn
.
retriev
eRows
(
pInfo
->
pLastrowReader
,
pInfo
->
pBufferredRes
,
pInfo
->
pSlotIds
,
pInfo
->
pDstSlotIds
,
pInfo
->
pUidList
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
T_LONG_JMP
(
pTaskInfo
->
env
,
code
);
...
...
@@ -239,7 +241,7 @@ SSDataBlock* doScanCache(SOperatorInfo* pOperator) {
}
if
(
NULL
==
pInfo
->
pLastrowReader
)
{
code
=
tsdbCacherowsReaderOpen
(
pInfo
->
readHandle
.
vnode
,
pInfo
->
retrieveType
,
pList
,
num
,
code
=
pInfo
->
readHandle
.
api
.
cacheFn
.
openReader
(
pInfo
->
readHandle
.
vnode
,
pInfo
->
retrieveType
,
pList
,
num
,
taosArrayGetSize
(
pInfo
->
matchInfo
.
pList
),
pInfo
->
pCidList
,
pInfo
->
pSlotIds
,
suid
,
&
pInfo
->
pLastrowReader
,
pTaskInfo
->
id
.
str
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
...
...
@@ -248,12 +250,12 @@ SSDataBlock* doScanCache(SOperatorInfo* pOperator) {
continue
;
}
}
else
{
tsdbReuseCacherows
Reader
(
pInfo
->
pLastrowReader
,
pList
,
num
);
pInfo
->
readHandle
.
api
.
cacheFn
.
reuse
Reader
(
pInfo
->
pLastrowReader
,
pList
,
num
);
}
taosArrayClear
(
pInfo
->
pUidList
);
code
=
tsdbRetrieveCach
eRows
(
pInfo
->
pLastrowReader
,
pInfo
->
pRes
,
pInfo
->
pSlotIds
,
pInfo
->
pDstSlotIds
,
code
=
pInfo
->
readHandle
.
api
.
cacheFn
.
retriev
eRows
(
pInfo
->
pLastrowReader
,
pInfo
->
pRes
,
pInfo
->
pSlotIds
,
pInfo
->
pDstSlotIds
,
pInfo
->
pUidList
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
T_LONG_JMP
(
pTaskInfo
->
env
,
code
);
...
...
@@ -287,7 +289,7 @@ SSDataBlock* doScanCache(SOperatorInfo* pOperator) {
}
}
pInfo
->
pLastrowReader
=
tsdbCacherowsReaderClose
(
pInfo
->
pLastrowReader
);
pInfo
->
pLastrowReader
=
pInfo
->
readHandle
.
api
.
cacheFn
.
closeReader
(
pInfo
->
pLastrowReader
);
setOperatorCompleted
(
pOperator
);
return
NULL
;
}
...
...
@@ -305,7 +307,7 @@ void destroyCacheScanOperator(void* param) {
tableListDestroy
(
pInfo
->
pTableList
);
if
(
pInfo
->
pLastrowReader
!=
NULL
)
{
pInfo
->
pLastrowReader
=
tsdbCacherowsReaderClose
(
pInfo
->
pLastrowReader
);
pInfo
->
pLastrowReader
=
pInfo
->
readHandle
.
api
.
cacheFn
.
closeReader
(
pInfo
->
pLastrowReader
);
}
cleanupExprSupp
(
&
pInfo
->
pseudoExprSup
);
...
...
source/libs/executor/src/dataInserter.c
浏览文件 @
cea83344
...
...
@@ -17,6 +17,7 @@
#include "dataSinkMgt.h"
#include "executorInt.h"
#include "planner.h"
#include "storageapi.h"
#include "tcompression.h"
#include "tdatablock.h"
#include "tglobal.h"
...
...
@@ -428,8 +429,7 @@ int32_t createDataInserter(SDataSinkManager* pManager, const SDataSinkNode* pDat
inserter
->
explain
=
pInserterNode
->
explain
;
int64_t
suid
=
0
;
int32_t
code
=
tsdbGetTableSchema
(
inserter
->
pParam
->
readHandle
->
vnode
,
pInserterNode
->
tableId
,
&
inserter
->
pSchema
,
&
suid
);
int32_t
code
=
pManager
->
pAPI
->
metaFn
.
getTableSchema
(
inserter
->
pParam
->
readHandle
->
vnode
,
pInserterNode
->
tableId
,
&
inserter
->
pSchema
,
&
suid
);
if
(
code
)
{
destroyDataSinker
((
SDataSinkHandle
*
)
inserter
);
taosMemoryFree
(
inserter
);
...
...
source/libs/executor/src/dataSinkMgt.c
浏览文件 @
cea83344
...
...
@@ -21,8 +21,9 @@
static
SDataSinkManager
gDataSinkManager
=
{
0
};
SDataSinkStat
gDataSinkStat
=
{
0
};
int32_t
dsDataSinkMgtInit
(
SDataSinkMgtCfg
*
cfg
)
{
int32_t
dsDataSinkMgtInit
(
SDataSinkMgtCfg
*
cfg
,
SStorageAPI
*
pAPI
)
{
gDataSinkManager
.
cfg
=
*
cfg
;
gDataSinkManager
.
pAPI
=
pAPI
;
return
0
;
// to avoid compiler eror
}
...
...
source/libs/executor/src/eventwindowoperator.c
浏览文件 @
cea83344
...
...
@@ -92,7 +92,7 @@ SOperatorInfo* createEventwindowOperatorInfo(SOperatorInfo* downstream, SPhysiNo
if
(
pEventWindowNode
->
window
.
pExprs
!=
NULL
)
{
int32_t
numOfScalarExpr
=
0
;
SExprInfo
*
pScalarExprInfo
=
createExprInfo
(
pEventWindowNode
->
window
.
pExprs
,
NULL
,
&
numOfScalarExpr
);
code
=
initExprSupp
(
&
pInfo
->
scalarSup
,
pScalarExprInfo
,
numOfScalarExpr
);
code
=
initExprSupp
(
&
pInfo
->
scalarSup
,
pScalarExprInfo
,
numOfScalarExpr
,
&
pTaskInfo
->
storageAPI
.
functionStore
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
goto
_error
;
}
...
...
@@ -110,7 +110,7 @@ SOperatorInfo* createEventwindowOperatorInfo(SOperatorInfo* downstream, SPhysiNo
initResultSizeInfo
(
&
pOperator
->
resultInfo
,
4096
);
code
=
initAggSup
(
&
pOperator
->
exprSupp
,
&
pInfo
->
aggSup
,
pExprInfo
,
num
,
keyBufSize
,
pTaskInfo
->
id
.
str
,
pTaskInfo
->
streamInfo
.
pState
);
pTaskInfo
->
streamInfo
.
pState
,
&
pTaskInfo
->
storageAPI
.
functionStore
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
goto
_error
;
}
...
...
source/libs/executor/src/executil.c
浏览文件 @
cea83344
此差异已折叠。
点击以展开。
source/libs/executor/src/executor.c
浏览文件 @
cea83344
...
...
@@ -14,6 +14,8 @@
*/
#include "executor.h"
#include <libs/transport/trpc.h>
#include <libs/wal/wal.h>
#include "executorInt.h"
#include "operator.h"
#include "planner.h"
...
...
@@ -21,7 +23,8 @@
#include "tdatablock.h"
#include "tref.h"
#include "tudf.h"
#include "vnode.h"
#include "storageapi.h"
static
TdThreadOnce
initPoolOnce
=
PTHREAD_ONCE_INIT
;
int32_t
exchangeObjRefPool
=
-
1
;
...
...
@@ -156,18 +159,18 @@ static int32_t doSetStreamBlock(SOperatorInfo* pOperator, void* input, size_t nu
}
}
void
doSetTaskId
(
SOperatorInfo
*
pOperator
)
{
void
doSetTaskId
(
SOperatorInfo
*
pOperator
,
SStorageAPI
*
pAPI
)
{
SExecTaskInfo
*
pTaskInfo
=
pOperator
->
pTaskInfo
;
if
(
pOperator
->
operatorType
==
QUERY_NODE_PHYSICAL_PLAN_STREAM_SCAN
)
{
SStreamScanInfo
*
pStreamScanInfo
=
pOperator
->
info
;
if
(
pStreamScanInfo
->
pTableScanOp
!=
NULL
)
{
STableScanInfo
*
pScanInfo
=
pStreamScanInfo
->
pTableScanOp
->
info
;
if
(
pScanInfo
->
base
.
dataReader
!=
NULL
)
{
tsdbReaderSet
Id
(
pScanInfo
->
base
.
dataReader
,
pTaskInfo
->
id
.
str
);
pAPI
->
tsdReader
.
tsdSetReaderTask
Id
(
pScanInfo
->
base
.
dataReader
,
pTaskInfo
->
id
.
str
);
}
}
}
else
{
doSetTaskId
(
pOperator
->
pDownstream
[
0
]);
doSetTaskId
(
pOperator
->
pDownstream
[
0
]
,
pAPI
);
}
}
...
...
@@ -177,7 +180,7 @@ void qSetTaskId(qTaskInfo_t tinfo, uint64_t taskId, uint64_t queryId) {
buildTaskId
(
taskId
,
queryId
,
pTaskInfo
->
id
.
str
);
// set the idstr for tsdbReader
doSetTaskId
(
pTaskInfo
->
pRoot
);
doSetTaskId
(
pTaskInfo
->
pRoot
,
&
pTaskInfo
->
storageAPI
);
}
int32_t
qSetStreamOpOpen
(
qTaskInfo_t
tinfo
)
{
...
...
@@ -249,7 +252,7 @@ int32_t qSetSMAInput(qTaskInfo_t tinfo, const void* pBlocks, size_t numOfBlocks,
qTaskInfo_t
qCreateQueueExecTaskInfo
(
void
*
msg
,
SReadHandle
*
pReaderHandle
,
int32_t
vgId
,
int32_t
*
numOfCols
,
uint64_t
id
)
{
if
(
msg
==
NULL
)
{
// create raw scan
SExecTaskInfo
*
pTaskInfo
=
doCreateTask
(
0
,
id
,
vgId
,
OPTR_EXEC_MODEL_QUEUE
);
SExecTaskInfo
*
pTaskInfo
=
doCreateTask
(
0
,
id
,
vgId
,
OPTR_EXEC_MODEL_QUEUE
,
&
pReaderHandle
->
api
);
if
(
NULL
==
pTaskInfo
)
{
terrno
=
TSDB_CODE_OUT_OF_MEMORY
;
return
NULL
;
...
...
@@ -261,6 +264,7 @@ qTaskInfo_t qCreateQueueExecTaskInfo(void* msg, SReadHandle* pReaderHandle, int3
return
NULL
;
}
pTaskInfo
->
storageAPI
=
pReaderHandle
->
api
;
qDebug
(
"create raw scan task info completed, vgId:%d, %s"
,
vgId
,
GET_TASKID
(
pTaskInfo
));
return
pTaskInfo
;
}
...
...
@@ -320,7 +324,8 @@ qTaskInfo_t qCreateStreamExecTaskInfo(void* msg, SReadHandle* readers, int32_t v
return
pTaskInfo
;
}
static
SArray
*
filterUnqualifiedTables
(
const
SStreamScanInfo
*
pScanInfo
,
const
SArray
*
tableIdList
,
const
char
*
idstr
)
{
static
SArray
*
filterUnqualifiedTables
(
const
SStreamScanInfo
*
pScanInfo
,
const
SArray
*
tableIdList
,
const
char
*
idstr
,
SStorageAPI
*
pAPI
)
{
SArray
*
qa
=
taosArrayInit
(
4
,
sizeof
(
tb_uid_t
));
int32_t
numOfUids
=
taosArrayGetSize
(
tableIdList
);
if
(
numOfUids
==
0
)
{
...
...
@@ -336,11 +341,11 @@ static SArray* filterUnqualifiedTables(const SStreamScanInfo* pScanInfo, const S
// let's discard the tables those are not created according to the queried super table.
SMetaReader
mr
=
{
0
};
metaReaderInit
(
&
mr
,
pScanInfo
->
readHandle
.
meta
,
0
);
pAPI
->
metaReaderFn
.
initReader
(
&
mr
,
pScanInfo
->
readHandle
.
vnode
,
0
,
&
pAPI
->
metaFn
);
for
(
int32_t
i
=
0
;
i
<
numOfUids
;
++
i
)
{
uint64_t
*
id
=
(
uint64_t
*
)
taosArrayGet
(
tableIdList
,
i
);
int32_t
code
=
metaG
etTableEntryByUid
(
&
mr
,
*
id
);
int32_t
code
=
pAPI
->
metaReaderFn
.
g
etTableEntryByUid
(
&
mr
,
*
id
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
qError
(
"failed to get table meta, uid:%"
PRIu64
" code:%s, %s"
,
*
id
,
tstrerror
(
terrno
),
idstr
);
continue
;
...
...
@@ -368,7 +373,7 @@ static SArray* filterUnqualifiedTables(const SStreamScanInfo* pScanInfo, const S
if
(
pScanInfo
->
pTagCond
!=
NULL
)
{
bool
qualified
=
false
;
STableKeyInfo
info
=
{.
groupId
=
0
,
.
uid
=
mr
.
me
.
uid
};
code
=
isQualifiedTable
(
&
info
,
pScanInfo
->
pTagCond
,
pScanInfo
->
readHandle
.
meta
,
&
qualified
);
code
=
isQualifiedTable
(
&
info
,
pScanInfo
->
pTagCond
,
pScanInfo
->
readHandle
.
vnode
,
&
qualified
,
pAPI
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
qError
(
"failed to filter new table, uid:0x%"
PRIx64
", %s"
,
info
.
uid
,
idstr
);
continue
;
...
...
@@ -383,7 +388,7 @@ static SArray* filterUnqualifiedTables(const SStreamScanInfo* pScanInfo, const S
taosArrayPush
(
qa
,
id
);
}
metaReaderClea
r
(
&
mr
);
pAPI
->
metaReaderFn
.
clearReade
r
(
&
mr
);
return
qa
;
}
...
...
@@ -401,10 +406,10 @@ int32_t qUpdateTableListForStreamScanner(qTaskInfo_t tinfo, const SArray* tableI
SStreamScanInfo
*
pScanInfo
=
pInfo
->
info
;
if
(
isAdd
)
{
// add new table id
SArray
*
qa
=
filterUnqualifiedTables
(
pScanInfo
,
tableIdList
,
id
);
SArray
*
qa
=
filterUnqualifiedTables
(
pScanInfo
,
tableIdList
,
id
,
&
pTaskInfo
->
storageAPI
);
int32_t
numOfQualifiedTables
=
taosArrayGetSize
(
qa
);
qDebug
(
"%d qualified child tables added into stream scanner, %s"
,
numOfQualifiedTables
,
id
);
code
=
tqReaderAddTbUidList
(
pScanInfo
->
tqReader
,
qa
);
code
=
pTaskInfo
->
storageAPI
.
tqReaderFn
.
tqReaderAddTables
(
pScanInfo
->
tqReader
,
qa
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
taosArrayDestroy
(
qa
);
return
code
;
...
...
@@ -433,8 +438,8 @@ int32_t qUpdateTableListForStreamScanner(qTaskInfo_t tinfo, const SArray* tableI
if
(
assignUid
)
{
keyInfo
.
groupId
=
keyInfo
.
uid
;
}
else
{
code
=
getGroupIdFromTagsVal
(
pScanInfo
->
readHandle
.
meta
,
keyInfo
.
uid
,
pScanInfo
->
pGroupTags
,
keyBuf
,
&
keyInfo
.
groupId
);
code
=
getGroupIdFromTagsVal
(
pScanInfo
->
readHandle
.
vnode
,
keyInfo
.
uid
,
pScanInfo
->
pGroupTags
,
keyBuf
,
&
keyInfo
.
groupId
,
&
pTaskInfo
->
storageAPI
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
taosMemoryFree
(
keyBuf
);
taosArrayDestroy
(
qa
);
...
...
@@ -456,7 +461,7 @@ int32_t qUpdateTableListForStreamScanner(qTaskInfo_t tinfo, const SArray* tableI
}
else
{
// remove the table id in current list
qDebug
(
"%d remove child tables from the stream scanner, %s"
,
(
int32_t
)
taosArrayGetSize
(
tableIdList
),
id
);
taosWLockLatch
(
&
pTaskInfo
->
lock
);
code
=
tqReaderRemoveTbUidList
(
pScanInfo
->
tqReader
,
tableIdList
);
code
=
pTaskInfo
->
storageAPI
.
tqReaderFn
.
tqReaderRemoveTables
(
pScanInfo
->
tqReader
,
tableIdList
);
taosWUnLockLatch
(
&
pTaskInfo
->
lock
);
}
...
...
@@ -502,7 +507,7 @@ int32_t qCreateExecTask(SReadHandle* readHandle, int32_t vgId, uint64_t taskId,
}
SDataSinkMgtCfg
cfg
=
{.
maxDataBlockNum
=
500
,
.
maxDataBlockNumPerQuery
=
50
};
code
=
dsDataSinkMgtInit
(
&
cfg
);
code
=
dsDataSinkMgtInit
(
&
cfg
,
&
(
*
pTask
)
->
storageAPI
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
qError
(
"failed to dsDataSinkMgtInit, code:%s, %s"
,
tstrerror
(
code
),
(
*
pTask
)
->
id
.
str
);
goto
_error
;
...
...
@@ -1060,6 +1065,8 @@ void qStreamSetOpen(qTaskInfo_t tinfo) {
int32_t
qStreamPrepareScan
(
qTaskInfo_t
tinfo
,
STqOffsetVal
*
pOffset
,
int8_t
subType
)
{
SExecTaskInfo
*
pTaskInfo
=
(
SExecTaskInfo
*
)
tinfo
;
SStorageAPI
*
pAPI
=
&
pTaskInfo
->
storageAPI
;
SOperatorInfo
*
pOperator
=
pTaskInfo
->
pRoot
;
const
char
*
id
=
GET_TASKID
(
pTaskInfo
);
...
...
@@ -1081,12 +1088,14 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT
if
(
pOffset
->
type
==
TMQ_OFFSET__LOG
)
{
// todo refactor: move away
tsdb
ReaderClose
(
pScanBaseInfo
->
dataReader
);
pTaskInfo
->
storageAPI
.
tsdReader
.
tsd
ReaderClose
(
pScanBaseInfo
->
dataReader
);
pScanBaseInfo
->
dataReader
=
NULL
;
walReaderVerifyOffset
(
pInfo
->
tqReader
->
pWalReader
,
pOffset
);
if
(
tqSeekVer
(
pInfo
->
tqReader
,
pOffset
->
version
+
1
,
id
)
<
0
)
{
qError
(
"tqSeekVer failed ver:%"
PRId64
", %s"
,
pOffset
->
version
+
1
,
id
);
SStoreTqReader
*
pReaderAPI
=
&
pTaskInfo
->
storageAPI
.
tqReaderFn
;
SWalReader
*
pWalReader
=
pReaderAPI
->
tqReaderGetWalReader
(
pInfo
->
tqReader
);
walReaderVerifyOffset
(
pWalReader
,
pOffset
);
if
(
pReaderAPI
->
tqReaderSeek
(
pInfo
->
tqReader
,
pOffset
->
version
+
1
,
id
)
<
0
)
{
qError
(
"tqReaderSeek failed ver:%"
PRId64
", %s"
,
pOffset
->
version
+
1
,
id
);
return
-
1
;
}
}
else
if
(
pOffset
->
type
==
TMQ_OFFSET__SNAPSHOT_DATA
)
{
...
...
@@ -1141,8 +1150,8 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT
pScanInfo
->
scanTimes
=
0
;
if
(
pScanBaseInfo
->
dataReader
==
NULL
)
{
int32_t
code
=
tsdb
ReaderOpen
(
pScanBaseInfo
->
readHandle
.
vnode
,
&
pScanBaseInfo
->
cond
,
&
keyInfo
,
1
,
pScanInfo
->
pResBlock
,
&
pScanBaseInfo
->
dataReader
,
id
,
false
,
NULL
);
int32_t
code
=
pTaskInfo
->
storageAPI
.
tsdReader
.
tsd
ReaderOpen
(
pScanBaseInfo
->
readHandle
.
vnode
,
&
pScanBaseInfo
->
cond
,
&
keyInfo
,
1
,
pScanInfo
->
pResBlock
,
(
void
**
)
&
pScanBaseInfo
->
dataReader
,
id
,
false
,
NULL
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
qError
(
"prepare read tsdb snapshot failed, uid:%"
PRId64
", code:%s %s"
,
pOffset
->
uid
,
tstrerror
(
code
),
id
);
terrno
=
code
;
...
...
@@ -1152,8 +1161,8 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT
qDebug
(
"tsdb reader created with offset(snapshot) uid:%"
PRId64
" ts:%"
PRId64
" table index:%d, total:%d, %s"
,
uid
,
pScanBaseInfo
->
cond
.
twindows
.
skey
,
pScanInfo
->
currentTable
,
numOfTables
,
id
);
}
else
{
tsdbSet
TableList
(
pScanBaseInfo
->
dataReader
,
&
keyInfo
,
1
);
tsdbReaderReset
(
pScanBaseInfo
->
dataReader
,
&
pScanBaseInfo
->
cond
);
pTaskInfo
->
storageAPI
.
tsdReader
.
tsdSetQuery
TableList
(
pScanBaseInfo
->
dataReader
,
&
keyInfo
,
1
);
pTaskInfo
->
storageAPI
.
tsdReader
.
tsdReaderResetStatus
(
pScanBaseInfo
->
dataReader
,
&
pScanBaseInfo
->
cond
);
qDebug
(
"tsdb reader offset seek snapshot to uid:%"
PRId64
" ts %"
PRId64
" table index:%d numOfTable:%d, %s"
,
uid
,
pScanBaseInfo
->
cond
.
twindows
.
skey
,
pScanInfo
->
currentTable
,
numOfTables
,
id
);
}
...
...
@@ -1175,14 +1184,14 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT
SOperatorInfo
*
p
=
extractOperatorInTree
(
pOperator
,
QUERY_NODE_PHYSICAL_PLAN_TABLE_SCAN
,
id
);
STableListInfo
*
pTableListInfo
=
((
SStreamRawScanInfo
*
)(
p
->
info
))
->
pTableListInfo
;
if
(
setForSnapS
hot
(
sContext
,
pOffset
->
uid
)
!=
0
)
{
if
(
pAPI
->
snapshotFn
.
createSnaps
hot
(
sContext
,
pOffset
->
uid
)
!=
0
)
{
qError
(
"setDataForSnapShot error. uid:%"
PRId64
" , %s"
,
pOffset
->
uid
,
id
);
terrno
=
TSDB_CODE_PAR_INTERNAL_ERROR
;
return
-
1
;
}
SMetaTableInfo
mtInfo
=
getUidfromSnapS
hot
(
sContext
);
tsdb
ReaderClose
(
pInfo
->
dataReader
);
SMetaTableInfo
mtInfo
=
pTaskInfo
->
storageAPI
.
snapshotFn
.
getMetaTableInfoFromSnaps
hot
(
sContext
);
pTaskInfo
->
storageAPI
.
tsdReader
.
tsd
ReaderClose
(
pInfo
->
dataReader
);
pInfo
->
dataReader
=
NULL
;
cleanupQueryTableDataCond
(
&
pTaskInfo
->
streamInfo
.
tableCond
);
...
...
@@ -1200,7 +1209,7 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT
STableKeyInfo
*
pList
=
tableListGetInfo
(
pTableListInfo
,
0
);
int32_t
size
=
tableListGetSize
(
pTableListInfo
);
tsdbReaderOpen
(
pInfo
->
vnode
,
&
pTaskInfo
->
streamInfo
.
tableCond
,
pList
,
size
,
NULL
,
&
pInfo
->
dataReader
,
NULL
,
pTaskInfo
->
storageAPI
.
tsdReader
.
tsdReaderOpen
(
pInfo
->
vnode
,
&
pTaskInfo
->
streamInfo
.
tableCond
,
pList
,
size
,
NULL
,
(
void
**
)
&
pInfo
->
dataReader
,
NULL
,
false
,
NULL
);
cleanupQueryTableDataCond
(
&
pTaskInfo
->
streamInfo
.
tableCond
);
...
...
@@ -1212,7 +1221,7 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT
}
else
if
(
pOffset
->
type
==
TMQ_OFFSET__SNAPSHOT_META
)
{
SStreamRawScanInfo
*
pInfo
=
pOperator
->
info
;
SSnapContext
*
sContext
=
pInfo
->
sContext
;
if
(
setForSnapS
hot
(
sContext
,
pOffset
->
uid
)
!=
0
)
{
if
(
pTaskInfo
->
storageAPI
.
snapshotFn
.
createSnaps
hot
(
sContext
,
pOffset
->
uid
)
!=
0
)
{
qError
(
"setForSnapShot error. uid:%"
PRIu64
" ,version:%"
PRId64
,
pOffset
->
uid
,
pOffset
->
version
);
terrno
=
TSDB_CODE_PAR_INTERNAL_ERROR
;
return
-
1
;
...
...
@@ -1221,7 +1230,7 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT
id
);
}
else
if
(
pOffset
->
type
==
TMQ_OFFSET__LOG
)
{
SStreamRawScanInfo
*
pInfo
=
pOperator
->
info
;
tsdb
ReaderClose
(
pInfo
->
dataReader
);
pTaskInfo
->
storageAPI
.
tsdReader
.
tsd
ReaderClose
(
pInfo
->
dataReader
);
pInfo
->
dataReader
=
NULL
;
qDebug
(
"tmqsnap qStreamPrepareScan snapshot log, %s"
,
id
);
}
...
...
source/libs/executor/src/executorInt.c
浏览文件 @
cea83344
...
...
@@ -33,7 +33,7 @@
#include "tcompare.h"
#include "thash.h"
#include "ttypes.h"
#include "
vnode
.h"
#include "
storageapi
.h"
#define SET_REVERSE_SCAN_FLAG(runtime) ((runtime)->scanFlag = REVERSE_SCAN)
#define GET_FORWARD_DIRECTION_FACTOR(ord) (((ord) == TSDB_ORDER_ASC) ? QUERY_ASC_FORWARD_STEP : QUERY_DESC_FORWARD_STEP)
...
...
@@ -844,6 +844,8 @@ int32_t doCopyToSDataBlock(SExecTaskInfo* pTaskInfo, SSDataBlock* pBlock, SExprS
void
doBuildStreamResBlock
(
SOperatorInfo
*
pOperator
,
SOptrBasicInfo
*
pbInfo
,
SGroupResInfo
*
pGroupResInfo
,
SDiskbasedBuf
*
pBuf
)
{
SExecTaskInfo
*
pTaskInfo
=
pOperator
->
pTaskInfo
;
SStorageAPI
*
pAPI
=
&
pTaskInfo
->
storageAPI
;
SSDataBlock
*
pBlock
=
pbInfo
->
pRes
;
// set output datablock version
...
...
@@ -860,12 +862,13 @@ void doBuildStreamResBlock(SOperatorInfo* pOperator, SOptrBasicInfo* pbInfo, SGr
doCopyToSDataBlock
(
pTaskInfo
,
pBlock
,
&
pOperator
->
exprSupp
,
pBuf
,
pGroupResInfo
,
pOperator
->
resultInfo
.
threshold
,
false
);
void
*
tbname
=
NULL
;
if
(
streamStateGetParName
(
pTaskInfo
->
streamInfo
.
pState
,
pBlock
->
info
.
id
.
groupId
,
&
tbname
)
<
0
)
{
if
(
pAPI
->
stateStore
.
streamStateGetParName
((
void
*
)
pTaskInfo
->
streamInfo
.
pState
,
pBlock
->
info
.
id
.
groupId
,
&
tbname
)
<
0
)
{
pBlock
->
info
.
parTbName
[
0
]
=
0
;
}
else
{
memcpy
(
pBlock
->
info
.
parTbName
,
tbname
,
TSDB_TABLE_NAME_LEN
);
}
streamFreeVal
(
tbname
);
pAPI
->
stateStore
.
streamStateFreeVal
(
tbname
);
}
void
doBuildResultDatablock
(
SOperatorInfo
*
pOperator
,
SOptrBasicInfo
*
pbInfo
,
SGroupResInfo
*
pGroupResInfo
,
...
...
@@ -976,11 +979,11 @@ static void* destroySqlFunctionCtx(SqlFunctionCtx* pCtx, int32_t numOfOutput) {
return
NULL
;
}
int32_t
initExprSupp
(
SExprSupp
*
pSup
,
SExprInfo
*
pExprInfo
,
int32_t
numOfExpr
)
{
int32_t
initExprSupp
(
SExprSupp
*
pSup
,
SExprInfo
*
pExprInfo
,
int32_t
numOfExpr
,
SFunctionStateStore
*
pStore
)
{
pSup
->
pExprInfo
=
pExprInfo
;
pSup
->
numOfExprs
=
numOfExpr
;
if
(
pSup
->
pExprInfo
!=
NULL
)
{
pSup
->
pCtx
=
createSqlFunctionCtx
(
pExprInfo
,
numOfExpr
,
&
pSup
->
rowEntryInfoOffset
);
pSup
->
pCtx
=
createSqlFunctionCtx
(
pExprInfo
,
numOfExpr
,
&
pSup
->
rowEntryInfoOffset
,
pStore
);
if
(
pSup
->
pCtx
==
NULL
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
...
...
@@ -1066,122 +1069,22 @@ int32_t createDataSinkParam(SDataSinkNode* pNode, void** pParam, SExecTaskInfo*
return
TSDB_CODE_SUCCESS
;
}
int32_t
resultRowEncode
(
void
*
k
,
int32_t
*
size
,
char
*
buf
)
{
// SResultRow* key = k;
// int len = 0;
// int struLen = *size;
// len += taosEncodeFixedI32((void**)&buf, key->pageId);
// uint32_t offset = key->offset;
// len += taosEncodeFixedU32((void**)&buf, offset);
// len += taosEncodeFixedI8((void**)&buf, key->startInterp);
// len += taosEncodeFixedI8((void**)&buf, key->endInterp);
// len += taosEncodeFixedI8((void**)&buf, key->closed);
// len += taosEncodeFixedU32((void**)&buf, key->numOfRows);
// len += taosEncodeFixedI64((void**)&buf, key->win.skey);
// len += taosEncodeFixedI64((void**)&buf, key->win.ekey);
// int32_t numOfEntryInfo = (struLen - sizeof(SResultRow)) / sizeof(struct SResultRowEntryInfo);
// len += taosEncodeFixedI32((void**)&buf, numOfEntryInfo);
// for (int i = 0; i < numOfEntryInfo; i++) {
// SResultRowEntryInfo* p = &key->pEntryInfo[i];
// uint8_t value = p->initialized ? 1 : 0;
// len += taosEncodeFixedU8((void**)&buf, value);
// value = p->complete ? 1 : 0;
// len += taosEncodeFixedU8((void**)&buf, value);
// value = p->isNullRes;
// len += taosEncodeFixedU8((void**)&buf, value);
// len += taosEncodeFixedU16((void**)&buf, p->numOfRes);
// }
// {
// char* strBuf = taosMemoryCalloc(1, *size * 100);
// resultRowToString(key, *size, strBuf);
// qWarn("encode result row:%s", strBuf);
// }
// return len;
return
0
;
}
int32_t
resultRowDecode
(
void
**
k
,
size_t
size
,
char
*
buf
)
{
// char* p1 = buf;
// int32_t numOfEntryInfo = 0;
// uint32_t entryOffset = sizeof(int32_t) + sizeof(uint32_t) + sizeof(int8_t) + sizeof(int8_t) + sizeof(int8_t) +
// sizeof(uint32_t) + sizeof(int64_t) + sizeof(int64_t);
// taosDecodeFixedI32(p1 + entryOffset, &numOfEntryInfo);
// char* p = buf;
// size = sizeof(SResultRow) + numOfEntryInfo * sizeof(SResultRowEntryInfo);
// SResultRow* key = taosMemoryCalloc(1, size);
// p = taosDecodeFixedI32(p, (int32_t*)&key->pageId);
// uint32_t offset = 0;
// p = taosDecodeFixedU32(p, &offset);
// key->offset = offset;
// p = taosDecodeFixedI8(p, (int8_t*)(&key->startInterp));
// p = taosDecodeFixedI8(p, (int8_t*)(&key->endInterp));
// p = taosDecodeFixedI8(p, (int8_t*)&key->closed);
// p = taosDecodeFixedU32(p, &key->numOfRows);
// p = taosDecodeFixedI64(p, &key->win.skey);
// p = taosDecodeFixedI64(p, &key->win.ekey);
// p = taosDecodeFixedI32(p, &numOfEntryInfo);
// for (int i = 0; i < numOfEntryInfo; i++) {
// SResultRowEntryInfo* pInfo = &key->pEntryInfo[i];
// uint8_t value = 0;
// p = taosDecodeFixedU8(p, &value);
// pInfo->initialized = (value == 1) ? true : false;
// p = taosDecodeFixedU8(p, &value);
// pInfo->complete = (value == 1) ? true : false;
// p = taosDecodeFixedU8(p, &value);
// pInfo->isNullRes = value;
// p = taosDecodeFixedU16(p, &pInfo->numOfRes);
// }
// *k = key;
// {
// char* strBuf = taosMemoryCalloc(1, size * 100);
// resultRowToString(key, size, strBuf);
// qWarn("decode result row:%s", strBuf);
// }
// return size;
return
0
;
}
int32_t
saveOutputBuf
(
SStreamState
*
pState
,
SWinKey
*
pKey
,
SResultRow
*
pResult
,
int32_t
resSize
)
{
// char* buf = taosMemoryCalloc(1, resSize * 10);
// int len = resultRowEncode((void*)pResult, &resSize, buf);
// char* buf = taosMemoryCalloc(1, resSize);
// memcpy(buf, pResult, resSize);
streamStatePut
(
pState
,
pKey
,
(
char
*
)
pResult
,
resSize
);
// taosMemoryFree(buf);
int32_t
releaseOutputBuf
(
void
*
pState
,
SWinKey
*
pKey
,
SResultRow
*
pResult
,
SStateStore
*
pAPI
)
{
pAPI
->
streamStateReleaseBuf
(
pState
,
pKey
,
pResult
);
return
TSDB_CODE_SUCCESS
;
}
int32_t
releaseOutputBuf
(
SStreamState
*
pState
,
SWinKey
*
pKey
,
SResultRow
*
pResult
)
{
streamStateReleaseBuf
(
pState
,
pKey
,
pResult
);
int32_t
saveSessionDiscBuf
(
void
*
pState
,
SSessionKey
*
key
,
void
*
buf
,
int32_t
size
,
SStateStore
*
pAPI
)
{
pAPI
->
streamStateSessionPut
(
pState
,
key
,
(
const
void
*
)
buf
,
size
);
releaseOutputBuf
(
pState
,
NULL
,
(
SResultRow
*
)
buf
,
pAPI
);
return
TSDB_CODE_SUCCESS
;
}
int32_t
saveSessionDiscBuf
(
SStreamState
*
pState
,
SSessionKey
*
key
,
void
*
buf
,
int32_t
size
)
{
streamStateSessionPut
(
pState
,
key
,
(
const
void
*
)
buf
,
size
);
releaseOutputBuf
(
pState
,
NULL
,
(
SResultRow
*
)
buf
);
return
TSDB_CODE_SUCCESS
;
}
int32_t
buildSessionResultDataBlock
(
SOperatorInfo
*
pOperator
,
SStreamState
*
pState
,
SSDataBlock
*
pBlock
,
int32_t
buildSessionResultDataBlock
(
SOperatorInfo
*
pOperator
,
void
*
pState
,
SSDataBlock
*
pBlock
,
SExprSupp
*
pSup
,
SGroupResInfo
*
pGroupResInfo
)
{
SExecTaskInfo
*
pTaskInfo
=
pOperator
->
pTaskInfo
;
SStorageAPI
*
pAPI
=
&
pTaskInfo
->
storageAPI
;
SExprInfo
*
pExprInfo
=
pSup
->
pExprInfo
;
int32_t
numOfExprs
=
pSup
->
numOfExprs
;
int32_t
*
rowEntryOffset
=
pSup
->
rowEntryInfoOffset
;
...
...
@@ -1193,7 +1096,7 @@ int32_t buildSessionResultDataBlock(SOperatorInfo* pOperator, SStreamState* pSta
SSessionKey
*
pKey
=
taosArrayGet
(
pGroupResInfo
->
pRows
,
i
);
int32_t
size
=
0
;
void
*
pVal
=
NULL
;
int32_t
code
=
streamStateSessionGet
(
pState
,
pKey
,
&
pVal
,
&
size
);
int32_t
code
=
pAPI
->
stateStore
.
streamStateSessionGet
(
pState
,
pKey
,
&
pVal
,
&
size
);
ASSERT
(
code
==
0
);
if
(
code
==
-
1
)
{
// coverity scan
...
...
@@ -1205,7 +1108,7 @@ int32_t buildSessionResultDataBlock(SOperatorInfo* pOperator, SStreamState* pSta
// no results, continue to check the next one
if
(
pRow
->
numOfRows
==
0
)
{
pGroupResInfo
->
index
+=
1
;
releaseOutputBuf
(
pState
,
NULL
,
pRow
);
releaseOutputBuf
(
pState
,
NULL
,
pRow
,
&
pAPI
->
stateStore
);
continue
;
}
...
...
@@ -1213,23 +1116,23 @@ int32_t buildSessionResultDataBlock(SOperatorInfo* pOperator, SStreamState* pSta
pBlock
->
info
.
id
.
groupId
=
pKey
->
groupId
;
void
*
tbname
=
NULL
;
if
(
streamStateGetParName
(
pTaskInfo
->
streamInfo
.
pState
,
pBlock
->
info
.
id
.
groupId
,
&
tbname
)
<
0
)
{
if
(
pAPI
->
stateStore
.
streamStateGetParName
((
void
*
)
pTaskInfo
->
streamInfo
.
pState
,
pBlock
->
info
.
id
.
groupId
,
&
tbname
)
<
0
)
{
pBlock
->
info
.
parTbName
[
0
]
=
0
;
}
else
{
memcpy
(
pBlock
->
info
.
parTbName
,
tbname
,
TSDB_TABLE_NAME_LEN
);
}
stream
FreeVal
(
tbname
);
pAPI
->
stateStore
.
streamState
FreeVal
(
tbname
);
}
else
{
// current value belongs to different group, it can't be packed into one datablock
if
(
pBlock
->
info
.
id
.
groupId
!=
pKey
->
groupId
)
{
releaseOutputBuf
(
pState
,
NULL
,
pRow
);
releaseOutputBuf
(
pState
,
NULL
,
pRow
,
&
pAPI
->
stateStore
);
break
;
}
}
if
(
pBlock
->
info
.
rows
+
pRow
->
numOfRows
>
pBlock
->
info
.
capacity
)
{
ASSERT
(
pBlock
->
info
.
rows
>
0
);
releaseOutputBuf
(
pState
,
NULL
,
pRow
);
releaseOutputBuf
(
pState
,
NULL
,
pRow
,
&
pAPI
->
stateStore
);
break
;
}
...
...
@@ -1260,7 +1163,7 @@ int32_t buildSessionResultDataBlock(SOperatorInfo* pOperator, SStreamState* pSta
pBlock
->
info
.
dataLoad
=
1
;
pBlock
->
info
.
rows
+=
pRow
->
numOfRows
;
releaseOutputBuf
(
pState
,
NULL
,
pRow
);
releaseOutputBuf
(
pState
,
NULL
,
pRow
,
&
pAPI
->
stateStore
);
}
blockDataUpdateTsWindow
(
pBlock
,
0
);
return
TSDB_CODE_SUCCESS
;
...
...
@@ -1292,7 +1195,7 @@ void qStreamCloseTsdbReader(void* task) {
qDebug
(
"wait for the reader stopping"
);
}
tsdb
ReaderClose
(
pTSInfo
->
base
.
dataReader
);
pTaskInfo
->
storageAPI
.
tsdReader
.
tsd
ReaderClose
(
pTSInfo
->
base
.
dataReader
);
pTSInfo
->
base
.
dataReader
=
NULL
;
// restore the status, todo refactor.
...
...
source/libs/executor/src/filloperator.c
浏览文件 @
cea83344
...
...
@@ -338,7 +338,7 @@ SOperatorInfo* createFillOperatorInfo(SOperatorInfo* downstream, SFillPhysiNode*
goto
_error
;
}
code
=
initExprSupp
(
pNoFillSupp
,
pNoFillSupp
->
pExprInfo
,
pNoFillSupp
->
numOfExprs
);
code
=
initExprSupp
(
pNoFillSupp
,
pNoFillSupp
->
pExprInfo
,
pNoFillSupp
->
numOfExprs
,
&
pTaskInfo
->
storageAPI
.
functionStore
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
goto
_error
;
}
...
...
@@ -355,7 +355,7 @@ SOperatorInfo* createFillOperatorInfo(SOperatorInfo* downstream, SFillPhysiNode*
initResultSizeInfo
(
&
pOperator
->
resultInfo
,
4096
);
blockDataEnsureCapacity
(
pInfo
->
pRes
,
pOperator
->
resultInfo
.
capacity
);
code
=
initExprSupp
(
&
pOperator
->
exprSupp
,
pExprInfo
,
pInfo
->
numOfExpr
);
code
=
initExprSupp
(
&
pOperator
->
exprSupp
,
pExprInfo
,
pInfo
->
numOfExpr
,
&
pTaskInfo
->
storageAPI
.
functionStore
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
goto
_error
;
}
...
...
@@ -443,7 +443,7 @@ void* destroyStreamFillSupporter(SStreamFillSupporter* pFillSup) {
pFillSup
->
pAllColInfo
=
destroyFillColumnInfo
(
pFillSup
->
pAllColInfo
,
pFillSup
->
numOfFillCols
,
pFillSup
->
numOfAllCols
);
tSimpleHashCleanup
(
pFillSup
->
pResMap
);
pFillSup
->
pResMap
=
NULL
;
releaseOutputBuf
(
NULL
,
NULL
,
(
SResultRow
*
)
pFillSup
->
cur
.
pRowVal
);
releaseOutputBuf
(
NULL
,
NULL
,
(
SResultRow
*
)
pFillSup
->
cur
.
pRowVal
,
&
pFillSup
->
pAPI
->
stateStore
);
//?????
pFillSup
->
cur
.
pRowVal
=
NULL
;
cleanupExprSupp
(
&
pFillSup
->
notFillExprSup
);
...
...
@@ -490,74 +490,78 @@ static void resetFillWindow(SResultRowData* pRowData) {
pRowData
->
pRowVal
=
NULL
;
}
void
resetPrevAndNextWindow
(
SStreamFillSupporter
*
pFillSup
,
SStreamState
*
pState
)
{
void
resetPrevAndNextWindow
(
SStreamFillSupporter
*
pFillSup
,
void
*
pState
,
SStorageAPI
*
pAPI
)
{
resetFillWindow
(
&
pFillSup
->
prev
);
releaseOutputBuf
(
NULL
,
NULL
,
(
SResultRow
*
)
pFillSup
->
cur
.
pRowVal
);
releaseOutputBuf
(
NULL
,
NULL
,
(
SResultRow
*
)
pFillSup
->
cur
.
pRowVal
,
&
pAPI
->
stateStore
);
//???
resetFillWindow
(
&
pFillSup
->
cur
);
resetFillWindow
(
&
pFillSup
->
next
);
resetFillWindow
(
&
pFillSup
->
nextNext
);
}
void
getCurWindowFromDiscBuf
(
SOperatorInfo
*
pOperator
,
TSKEY
ts
,
uint64_t
groupId
,
SStreamFillSupporter
*
pFillSup
)
{
SStreamState
*
pState
=
pOperator
->
pTaskInfo
->
streamInfo
.
pState
;
resetPrevAndNextWindow
(
pFillSup
,
pState
);
SStorageAPI
*
pAPI
=
&
pOperator
->
pTaskInfo
->
storageAPI
;
void
*
pState
=
pOperator
->
pTaskInfo
->
streamInfo
.
pState
;
resetPrevAndNextWindow
(
pFillSup
,
pState
,
pAPI
);
SWinKey
key
=
{.
ts
=
ts
,
.
groupId
=
groupId
};
int32_t
curVLen
=
0
;
int32_t
code
=
streamStateFillGet
(
pState
,
&
key
,
(
void
**
)
&
pFillSup
->
cur
.
pRowVal
,
&
curVLen
);
int32_t
code
=
pAPI
->
stateStore
.
streamStateFillGet
(
pState
,
&
key
,
(
void
**
)
&
pFillSup
->
cur
.
pRowVal
,
&
curVLen
);
ASSERT
(
code
==
TSDB_CODE_SUCCESS
);
pFillSup
->
cur
.
key
=
key
.
ts
;
}
void
getWindowFromDiscBuf
(
SOperatorInfo
*
pOperator
,
TSKEY
ts
,
uint64_t
groupId
,
SStreamFillSupporter
*
pFillSup
)
{
SStreamState
*
pState
=
pOperator
->
pTaskInfo
->
streamInfo
.
pState
;
resetPrevAndNextWindow
(
pFillSup
,
pState
);
SStorageAPI
*
pAPI
=
&
pOperator
->
pTaskInfo
->
storageAPI
;
void
*
pState
=
pOperator
->
pTaskInfo
->
streamInfo
.
pState
;
resetPrevAndNextWindow
(
pFillSup
,
pState
,
pAPI
);
SWinKey
key
=
{.
ts
=
ts
,
.
groupId
=
groupId
};
void
*
curVal
=
NULL
;
int32_t
curVLen
=
0
;
int32_t
code
=
streamStateFillGet
(
pState
,
&
key
,
(
void
**
)
&
curVal
,
&
curVLen
);
int32_t
code
=
pAPI
->
stateStore
.
streamStateFillGet
(
pState
,
&
key
,
(
void
**
)
&
curVal
,
&
curVLen
);
ASSERT
(
code
==
TSDB_CODE_SUCCESS
);
pFillSup
->
cur
.
key
=
key
.
ts
;
pFillSup
->
cur
.
pRowVal
=
curVal
;
SStreamStateCur
*
pCur
=
streamStateFillSeekKeyPrev
(
pState
,
&
key
);
SStreamStateCur
*
pCur
=
pAPI
->
stateStore
.
streamStateFillSeekKeyPrev
(
pState
,
&
key
);
SWinKey
preKey
=
{.
ts
=
INT64_MIN
,
.
groupId
=
groupId
};
void
*
preVal
=
NULL
;
int32_t
preVLen
=
0
;
code
=
streamStateGetGroupKVByCur
(
pCur
,
&
preKey
,
(
const
void
**
)
&
preVal
,
&
preVLen
);
code
=
pAPI
->
stateStore
.
streamStateGetGroupKVByCur
(
pCur
,
&
preKey
,
(
const
void
**
)
&
preVal
,
&
preVLen
);
if
(
code
==
TSDB_CODE_SUCCESS
)
{
pFillSup
->
prev
.
key
=
preKey
.
ts
;
pFillSup
->
prev
.
pRowVal
=
preVal
;
code
=
streamStateCurNext
(
pState
,
pCur
);
code
=
pAPI
->
stateStore
.
streamStateCurNext
(
pState
,
pCur
);
ASSERT
(
code
==
TSDB_CODE_SUCCESS
);
code
=
streamStateCurNext
(
pState
,
pCur
);
code
=
pAPI
->
stateStore
.
streamStateCurNext
(
pState
,
pCur
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
streamStateFreeCur
(
pCur
);
pAPI
->
stateStore
.
streamStateFreeCur
(
pCur
);
pCur
=
NULL
;
}
}
else
{
streamStateFreeCur
(
pCur
);
pCur
=
streamStateFillSeekKeyNext
(
pState
,
&
key
);
pAPI
->
stateStore
.
streamStateFreeCur
(
pCur
);
pCur
=
pAPI
->
stateStore
.
streamStateFillSeekKeyNext
(
pState
,
&
key
);
}
SWinKey
nextKey
=
{.
ts
=
INT64_MIN
,
.
groupId
=
groupId
};
void
*
nextVal
=
NULL
;
int32_t
nextVLen
=
0
;
code
=
streamStateGetGroupKVByCur
(
pCur
,
&
nextKey
,
(
const
void
**
)
&
nextVal
,
&
nextVLen
);
code
=
pAPI
->
stateStore
.
streamStateGetGroupKVByCur
(
pCur
,
&
nextKey
,
(
const
void
**
)
&
nextVal
,
&
nextVLen
);
if
(
code
==
TSDB_CODE_SUCCESS
)
{
pFillSup
->
next
.
key
=
nextKey
.
ts
;
pFillSup
->
next
.
pRowVal
=
nextVal
;
if
(
pFillSup
->
type
==
TSDB_FILL_PREV
||
pFillSup
->
type
==
TSDB_FILL_NEXT
)
{
code
=
streamStateCurNext
(
pState
,
pCur
);
code
=
pAPI
->
stateStore
.
streamStateCurNext
(
pState
,
pCur
);
if
(
code
==
TSDB_CODE_SUCCESS
)
{
SWinKey
nextNextKey
=
{.
groupId
=
groupId
};
void
*
nextNextVal
=
NULL
;
int32_t
nextNextVLen
=
0
;
code
=
streamStateGetGroupKVByCur
(
pCur
,
&
nextNextKey
,
(
const
void
**
)
&
nextNextVal
,
&
nextNextVLen
);
code
=
pAPI
->
stateStore
.
streamStateGetGroupKVByCur
(
pCur
,
&
nextNextKey
,
(
const
void
**
)
&
nextNextVal
,
&
nextNextVLen
);
if
(
code
==
TSDB_CODE_SUCCESS
)
{
pFillSup
->
nextNext
.
key
=
nextNextKey
.
ts
;
pFillSup
->
nextNext
.
pRowVal
=
nextNextVal
;
...
...
@@ -565,7 +569,7 @@ void getWindowFromDiscBuf(SOperatorInfo* pOperator, TSKEY ts, uint64_t groupId,
}
}
}
streamStateFreeCur
(
pCur
);
pAPI
->
stateStore
.
streamStateFreeCur
(
pCur
);
}
static
bool
hasPrevWindow
(
SStreamFillSupporter
*
pFillSup
)
{
return
pFillSup
->
prev
.
key
!=
INT64_MIN
;
}
...
...
@@ -922,8 +926,10 @@ static void doStreamFillLinear(SStreamFillSupporter* pFillSup, SStreamFillInfo*
}
static
void
keepResultInDiscBuf
(
SOperatorInfo
*
pOperator
,
uint64_t
groupId
,
SResultRowData
*
pRow
,
int32_t
len
)
{
SStorageAPI
*
pAPI
=
&
pOperator
->
pTaskInfo
->
storageAPI
;
SWinKey
key
=
{.
groupId
=
groupId
,
.
ts
=
pRow
->
key
};
int32_t
code
=
streamStateFillPut
(
pOperator
->
pTaskInfo
->
streamInfo
.
pState
,
&
key
,
pRow
->
pRowVal
,
len
);
int32_t
code
=
pAPI
->
stateStore
.
streamStateFillPut
(
pOperator
->
pTaskInfo
->
streamInfo
.
pState
,
&
key
,
pRow
->
pRowVal
,
len
);
qDebug
(
"===stream===fill operator save key ts:%"
PRId64
" group id:%"
PRIu64
" code:%d"
,
key
.
ts
,
key
.
groupId
,
code
);
ASSERT
(
code
==
TSDB_CODE_SUCCESS
);
}
...
...
@@ -1021,7 +1027,8 @@ static void doStreamFillImpl(SOperatorInfo* pOperator) {
}
static
void
buildDeleteRange
(
SOperatorInfo
*
pOp
,
TSKEY
start
,
TSKEY
end
,
uint64_t
groupId
,
SSDataBlock
*
delRes
)
{
SStreamState
*
pState
=
pOp
->
pTaskInfo
->
streamInfo
.
pState
;
SStorageAPI
*
pAPI
=
&
pOp
->
pTaskInfo
->
storageAPI
;
void
*
pState
=
pOp
->
pTaskInfo
->
streamInfo
.
pState
;
SSDataBlock
*
pBlock
=
delRes
;
SColumnInfoData
*
pStartCol
=
taosArrayGet
(
pBlock
->
pDataBlock
,
START_TS_COLUMN_INDEX
);
...
...
@@ -1041,14 +1048,14 @@ static void buildDeleteRange(SOperatorInfo* pOp, TSKEY start, TSKEY end, uint64_
SColumnInfoData
*
pTableCol
=
taosArrayGet
(
pBlock
->
pDataBlock
,
TABLE_NAME_COLUMN_INDEX
);
void
*
tbname
=
NULL
;
streamStateGetParName
(
pOp
->
pTaskInfo
->
streamInfo
.
pState
,
groupId
,
&
tbname
);
pAPI
->
stateStore
.
streamStateGetParName
(
pOp
->
pTaskInfo
->
streamInfo
.
pState
,
groupId
,
&
tbname
);
if
(
tbname
==
NULL
)
{
colDataSetNULL
(
pTableCol
,
pBlock
->
info
.
rows
);
}
else
{
char
parTbName
[
VARSTR_HEADER_SIZE
+
TSDB_TABLE_NAME_LEN
];
STR_WITH_MAXSIZE_TO_VARSTR
(
parTbName
,
tbname
,
sizeof
(
parTbName
));
colDataSetVal
(
pTableCol
,
pBlock
->
info
.
rows
,
(
const
char
*
)
parTbName
,
false
);
stream
FreeVal
(
tbname
);
pAPI
->
stateStore
.
streamState
FreeVal
(
tbname
);
}
pBlock
->
info
.
rows
++
;
...
...
@@ -1070,12 +1077,13 @@ static void buildDeleteResult(SOperatorInfo* pOperator, TSKEY startTs, TSKEY end
}
static
void
doDeleteFillResultImpl
(
SOperatorInfo
*
pOperator
,
TSKEY
startTs
,
TSKEY
endTs
,
uint64_t
groupId
)
{
SStorageAPI
*
pAPI
=
&
pOperator
->
pTaskInfo
->
storageAPI
;
SStreamFillOperatorInfo
*
pInfo
=
pOperator
->
info
;
getWindowFromDiscBuf
(
pOperator
,
startTs
,
groupId
,
pInfo
->
pFillSup
);
setDeleteFillValueInfo
(
startTs
,
endTs
,
pInfo
->
pFillSup
,
pInfo
->
pFillInfo
);
SWinKey
key
=
{.
ts
=
startTs
,
.
groupId
=
groupId
};
if
(
!
pInfo
->
pFillInfo
->
needFill
)
{
streamStateFillDel
(
pOperator
->
pTaskInfo
->
streamInfo
.
pState
,
&
key
);
pAPI
->
stateStore
.
streamStateFillDel
(
pOperator
->
pTaskInfo
->
streamInfo
.
pState
,
&
key
);
buildDeleteResult
(
pOperator
,
startTs
,
endTs
,
groupId
,
pInfo
->
pDelRes
);
}
else
{
STimeRange
tw
=
{
...
...
@@ -1093,6 +1101,8 @@ static void doDeleteFillResultImpl(SOperatorInfo* pOperator, TSKEY startTs, TSKE
}
static
void
doDeleteFillFinalize
(
SOperatorInfo
*
pOperator
)
{
SStorageAPI
*
pAPI
=
&
pOperator
->
pTaskInfo
->
storageAPI
;
SStreamFillOperatorInfo
*
pInfo
=
pOperator
->
info
;
SStreamFillInfo
*
pFillInfo
=
pInfo
->
pFillInfo
;
int32_t
size
=
taosArrayGetSize
(
pFillInfo
->
delRanges
);
...
...
@@ -1109,17 +1119,16 @@ static void doDeleteFillFinalize(SOperatorInfo* pOperator) {
pInfo
->
pRes
->
info
.
id
.
groupId
=
range
->
groupId
;
}
SWinKey
key
=
{.
ts
=
range
->
skey
,
.
groupId
=
range
->
groupId
};
streamStateFillDel
(
pOperator
->
pTaskInfo
->
streamInfo
.
pState
,
&
key
);
pAPI
->
stateStore
.
streamStateFillDel
(
pOperator
->
pTaskInfo
->
streamInfo
.
pState
,
&
key
);
}
}
static
void
doDeleteFillResult
(
SOperatorInfo
*
pOperator
)
{
SStorageAPI
*
pAPI
=
&
pOperator
->
pTaskInfo
->
storageAPI
;
SStreamFillOperatorInfo
*
pInfo
=
pOperator
->
info
;
SStreamFillSupporter
*
pFillSup
=
pInfo
->
pFillSup
;
SStreamFillInfo
*
pFillInfo
=
pInfo
->
pFillInfo
;
SSDataBlock
*
pBlock
=
pInfo
->
pSrcDelBlock
;
SSDataBlock
*
pRes
=
pInfo
->
pRes
;
SSDataBlock
*
pDelRes
=
pInfo
->
pDelRes
;
SColumnInfoData
*
pStartCol
=
taosArrayGet
(
pBlock
->
pDataBlock
,
START_TS_COLUMN_INDEX
);
TSKEY
*
tsStarts
=
(
TSKEY
*
)
pStartCol
->
pData
;
...
...
@@ -1130,7 +1139,8 @@ static void doDeleteFillResult(SOperatorInfo* pOperator) {
TSKEY
endTs
=
ts
;
uint64_t
groupId
=
groupIds
[
pInfo
->
srcDelRowIndex
];
SWinKey
key
=
{.
ts
=
ts
,
.
groupId
=
groupId
};
SStreamStateCur
*
pCur
=
streamStateGetAndCheckCur
(
pOperator
->
pTaskInfo
->
streamInfo
.
pState
,
&
key
);
SStreamStateCur
*
pCur
=
pAPI
->
stateStore
.
streamStateGetAndCheckCur
(
pOperator
->
pTaskInfo
->
streamInfo
.
pState
,
&
key
);
if
(
!
pCur
)
{
pInfo
->
srcDelRowIndex
++
;
continue
;
...
...
@@ -1152,15 +1162,15 @@ static void doDeleteFillResult(SOperatorInfo* pOperator) {
SWinKey
delKey
=
{.
groupId
=
delGroupId
,
.
ts
=
delTs
};
if
(
delTs
==
nextKey
.
ts
)
{
code
=
streamStateCurNext
(
pOperator
->
pTaskInfo
->
streamInfo
.
pState
,
pCur
);
code
=
pAPI
->
stateStore
.
streamStateCurNext
(
pOperator
->
pTaskInfo
->
streamInfo
.
pState
,
pCur
);
if
(
code
==
TSDB_CODE_SUCCESS
)
{
code
=
streamStateGetGroupKVByCur
(
pCur
,
&
nextKey
,
(
const
void
**
)
&
nextVal
,
&
nextLen
);
code
=
pAPI
->
stateStore
.
streamStateGetGroupKVByCur
(
pCur
,
&
nextKey
,
(
const
void
**
)
&
nextVal
,
&
nextLen
);
}
// ts will be deleted later
if
(
delTs
!=
ts
)
{
streamStateFillDel
(
pOperator
->
pTaskInfo
->
streamInfo
.
pState
,
&
delKey
);
streamStateFreeCur
(
pCur
);
pCur
=
streamStateGetAndCheckCur
(
pOperator
->
pTaskInfo
->
streamInfo
.
pState
,
&
nextKey
);
pAPI
->
stateStore
.
streamStateFillDel
(
pOperator
->
pTaskInfo
->
streamInfo
.
pState
,
&
delKey
);
pAPI
->
stateStore
.
streamStateFreeCur
(
pCur
);
pCur
=
pAPI
->
stateStore
.
streamStateGetAndCheckCur
(
pOperator
->
pTaskInfo
->
streamInfo
.
pState
,
&
nextKey
);
}
endTs
=
TMAX
(
delTs
,
nextKey
.
ts
-
1
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
...
...
@@ -1169,9 +1179,11 @@ static void doDeleteFillResult(SOperatorInfo* pOperator) {
}
pInfo
->
srcDelRowIndex
++
;
}
streamStateFreeCur
(
pCur
);
pAPI
->
stateStore
.
streamStateFreeCur
(
pCur
);
doDeleteFillResultImpl
(
pOperator
,
ts
,
endTs
,
groupId
);
}
pFillInfo
->
current
=
pFillInfo
->
end
+
1
;
}
...
...
@@ -1322,7 +1334,7 @@ static int32_t initResultBuf(SStreamFillSupporter* pFillSup) {
}
static
SStreamFillSupporter
*
initStreamFillSup
(
SStreamFillPhysiNode
*
pPhyFillNode
,
SInterval
*
pInterval
,
SExprInfo
*
pFillExprInfo
,
int32_t
numOfFillCols
)
{
SExprInfo
*
pFillExprInfo
,
int32_t
numOfFillCols
,
SStorageAPI
*
pAPI
)
{
SStreamFillSupporter
*
pFillSup
=
taosMemoryCalloc
(
1
,
sizeof
(
SStreamFillSupporter
));
if
(
!
pFillSup
)
{
return
NULL
;
...
...
@@ -1335,6 +1347,7 @@ static SStreamFillSupporter* initStreamFillSup(SStreamFillPhysiNode* pPhyFillNod
pFillSup
->
type
=
convertFillType
(
pPhyFillNode
->
mode
);
pFillSup
->
numOfAllCols
=
pFillSup
->
numOfFillCols
+
numOfNotFillCols
;
pFillSup
->
interval
=
*
pInterval
;
pFillSup
->
pAPI
=
pAPI
;
int32_t
code
=
initResultBuf
(
pFillSup
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
...
...
@@ -1343,7 +1356,7 @@ static SStreamFillSupporter* initStreamFillSup(SStreamFillPhysiNode* pPhyFillNod
}
SExprInfo
*
noFillExpr
=
createExprInfo
(
pPhyFillNode
->
pNotFillExprs
,
NULL
,
&
numOfNotFillCols
);
code
=
initExprSupp
(
&
pFillSup
->
notFillExprSup
,
noFillExpr
,
numOfNotFillCols
);
code
=
initExprSupp
(
&
pFillSup
->
notFillExprSup
,
noFillExpr
,
numOfNotFillCols
,
&
pAPI
->
functionStore
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
destroyStreamFillSupporter
(
pFillSup
);
return
NULL
;
...
...
@@ -1414,7 +1427,7 @@ SOperatorInfo* createStreamFillOperatorInfo(SOperatorInfo* downstream, SStreamFi
SInterval
*
pInterval
=
&
((
SStreamIntervalOperatorInfo
*
)
downstream
->
info
)
->
interval
;
int32_t
numOfFillCols
=
0
;
SExprInfo
*
pFillExprInfo
=
createExprInfo
(
pPhyFillNode
->
pFillExprs
,
NULL
,
&
numOfFillCols
);
pInfo
->
pFillSup
=
initStreamFillSup
(
pPhyFillNode
,
pInterval
,
pFillExprInfo
,
numOfFillCols
);
pInfo
->
pFillSup
=
initStreamFillSup
(
pPhyFillNode
,
pInterval
,
pFillExprInfo
,
numOfFillCols
,
&
pTaskInfo
->
storageAPI
);
if
(
!
pInfo
->
pFillSup
)
{
goto
_error
;
}
...
...
@@ -1479,7 +1492,7 @@ SOperatorInfo* createStreamFillOperatorInfo(SOperatorInfo* downstream, SStreamFi
goto
_error
;
}
code
=
initExprSupp
(
&
pOperator
->
exprSupp
,
pFillExprInfo
,
numOfFillCols
);
code
=
initExprSupp
(
&
pOperator
->
exprSupp
,
pFillExprInfo
,
numOfFillCols
,
&
pTaskInfo
->
storageAPI
.
functionStore
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
goto
_error
;
}
...
...
source/libs/executor/src/groupoperator.c
浏览文件 @
cea83344
...
...
@@ -451,7 +451,7 @@ SOperatorInfo* createGroupOperatorInfo(SOperatorInfo* downstream, SAggPhysiNode*
}
pInfo
->
pGroupCols
=
extractColumnInfo
(
pAggNode
->
pGroupKeys
);
code
=
initExprSupp
(
&
pInfo
->
scalarSup
,
pScalarExprInfo
,
numOfScalarExpr
);
code
=
initExprSupp
(
&
pInfo
->
scalarSup
,
pScalarExprInfo
,
numOfScalarExpr
,
&
pTaskInfo
->
storageAPI
.
functionStore
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
goto
_error
;
}
...
...
@@ -467,7 +467,7 @@ SOperatorInfo* createGroupOperatorInfo(SOperatorInfo* downstream, SAggPhysiNode*
int32_t
num
=
0
;
SExprInfo
*
pExprInfo
=
createExprInfo
(
pAggNode
->
pAggFuncs
,
pAggNode
->
pGroupKeys
,
&
num
);
code
=
initAggSup
(
&
pOperator
->
exprSupp
,
&
pInfo
->
aggSup
,
pExprInfo
,
num
,
pInfo
->
groupKeyLen
,
pTaskInfo
->
id
.
str
,
pTaskInfo
->
streamInfo
.
pState
);
pTaskInfo
->
streamInfo
.
pState
,
&
pTaskInfo
->
storageAPI
.
functionStore
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
goto
_error
;
}
...
...
@@ -849,7 +849,7 @@ SOperatorInfo* createPartitionOperatorInfo(SOperatorInfo* downstream, SPartition
if
(
pPartNode
->
pExprs
!=
NULL
)
{
int32_t
num
=
0
;
SExprInfo
*
pExprInfo1
=
createExprInfo
(
pPartNode
->
pExprs
,
NULL
,
&
num
);
int32_t
code
=
initExprSupp
(
&
pInfo
->
scalarSup
,
pExprInfo1
,
num
);
int32_t
code
=
initExprSupp
(
&
pInfo
->
scalarSup
,
pExprInfo1
,
num
,
&
pTaskInfo
->
storageAPI
.
functionStore
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
terrno
=
code
;
pTaskInfo
->
code
=
terrno
;
...
...
@@ -951,6 +951,8 @@ static bool hasRemainPartion(SStreamPartitionOperatorInfo* pInfo) { return pInfo
static
bool
hasRemainTbName
(
SStreamPartitionOperatorInfo
*
pInfo
)
{
return
pInfo
->
pTbNameIte
!=
NULL
;
}
static
SSDataBlock
*
buildStreamPartitionResult
(
SOperatorInfo
*
pOperator
)
{
SStorageAPI
*
pAPI
=
&
pOperator
->
pTaskInfo
->
storageAPI
;
SStreamPartitionOperatorInfo
*
pInfo
=
pOperator
->
info
;
SSDataBlock
*
pDest
=
pInfo
->
binfo
.
pRes
;
ASSERT
(
hasRemainPartion
(
pInfo
));
...
...
@@ -973,9 +975,9 @@ static SSDataBlock* buildStreamPartitionResult(SOperatorInfo* pOperator) {
pDest
->
info
.
parTbName
[
0
]
=
0
;
if
(
pInfo
->
tbnameCalSup
.
numOfExprs
>
0
)
{
void
*
tbname
=
NULL
;
if
(
streamStateGetParName
(
pOperator
->
pTaskInfo
->
streamInfo
.
pState
,
pParInfo
->
groupId
,
&
tbname
)
==
0
)
{
if
(
pAPI
->
stateStore
.
streamStateGetParName
(
pOperator
->
pTaskInfo
->
streamInfo
.
pState
,
pParInfo
->
groupId
,
&
tbname
)
==
0
)
{
memcpy
(
pDest
->
info
.
parTbName
,
tbname
,
TSDB_TABLE_NAME_LEN
);
stream
FreeVal
(
tbname
);
pAPI
->
stateStore
.
streamState
FreeVal
(
tbname
);
}
}
taosArrayDestroy
(
pParInfo
->
rowIds
);
...
...
@@ -991,10 +993,10 @@ static SSDataBlock* buildStreamPartitionResult(SOperatorInfo* pOperator) {
return
pDest
;
}
void
appendCreateTableRow
(
SStreamState
*
pState
,
SExprSupp
*
pTableSup
,
SExprSupp
*
pTagSup
,
uint64_t
groupId
,
SSDataBlock
*
pSrcBlock
,
int32_t
rowId
,
SSDataBlock
*
pDestBlock
)
{
void
appendCreateTableRow
(
void
*
pState
,
SExprSupp
*
pTableSup
,
SExprSupp
*
pTagSup
,
uint64_t
groupId
,
SSDataBlock
*
pSrcBlock
,
int32_t
rowId
,
SSDataBlock
*
pDestBlock
,
SStateStore
*
pAPI
)
{
void
*
pValue
=
NULL
;
if
(
streamStateGetParName
(
pState
,
groupId
,
&
pValue
)
!=
0
)
{
if
(
pAPI
->
streamStateGetParName
(
pState
,
groupId
,
&
pValue
)
!=
0
)
{
SSDataBlock
*
pTmpBlock
=
blockCopyOneRow
(
pSrcBlock
,
rowId
);
memset
(
pTmpBlock
->
info
.
parTbName
,
0
,
TSDB_TABLE_NAME_LEN
);
pTmpBlock
->
info
.
id
.
groupId
=
groupId
;
...
...
@@ -1011,7 +1013,7 @@ void appendCreateTableRow(SStreamState* pState, SExprSupp* pTableSup, SExprSupp*
void
*
pData
=
colDataGetData
(
pTbCol
,
pDestBlock
->
info
.
rows
-
1
);
len
=
TMIN
(
varDataLen
(
pData
),
TSDB_TABLE_NAME_LEN
-
1
);
memcpy
(
tbName
,
varDataVal
(
pData
),
len
);
streamStatePutParName
(
pState
,
groupId
,
tbName
);
pAPI
->
streamStatePutParName
(
pState
,
groupId
,
tbName
);
}
memcpy
(
pTmpBlock
->
info
.
parTbName
,
tbName
,
len
);
pDestBlock
->
info
.
rows
--
;
...
...
@@ -1035,10 +1037,12 @@ void appendCreateTableRow(SStreamState* pState, SExprSupp* pTableSup, SExprSupp*
}
else
{
memcpy
(
pSrcBlock
->
info
.
parTbName
,
pValue
,
TSDB_TABLE_NAME_LEN
);
}
streamStateReleaseBuf
(
pState
,
NULL
,
pValue
);
pAPI
->
streamStateReleaseBuf
(
pState
,
NULL
,
pValue
);
}
static
SSDataBlock
*
buildStreamCreateTableResult
(
SOperatorInfo
*
pOperator
)
{
SExecTaskInfo
*
pTask
=
pOperator
->
pTaskInfo
;
SStreamPartitionOperatorInfo
*
pInfo
=
pOperator
->
info
;
if
((
pInfo
->
tbnameCalSup
.
numOfExprs
==
0
&&
pInfo
->
tagCalSup
.
numOfExprs
==
0
)
||
taosHashGetSize
(
pInfo
->
pPartitions
)
==
0
)
{
...
...
@@ -1051,8 +1055,8 @@ static SSDataBlock* buildStreamCreateTableResult(SOperatorInfo* pOperator) {
if
(
pInfo
->
pTbNameIte
!=
NULL
)
{
SPartitionDataInfo
*
pParInfo
=
(
SPartitionDataInfo
*
)
pInfo
->
pTbNameIte
;
int32_t
rowId
=
*
(
int32_t
*
)
taosArrayGet
(
pParInfo
->
rowIds
,
0
);
appendCreateTableRow
(
p
Operator
->
pTaskInfo
->
streamInfo
.
pState
,
&
pInfo
->
tbnameCalSup
,
&
pInfo
->
tagCalSup
,
pParInfo
->
groupId
,
pSrc
,
rowId
,
pInfo
->
pCreateTbRes
);
appendCreateTableRow
(
p
Task
->
streamInfo
.
pState
,
&
pInfo
->
tbnameCalSup
,
&
pInfo
->
tagCalSup
,
pParInfo
->
groupId
,
pSrc
,
rowId
,
pInfo
->
pCreateTbRes
,
&
pTask
->
storageAPI
.
stateStore
);
pInfo
->
pTbNameIte
=
taosHashIterate
(
pInfo
->
pPartitions
,
pInfo
->
pTbNameIte
);
}
return
pInfo
->
pCreateTbRes
->
info
.
rows
>
0
?
pInfo
->
pCreateTbRes
:
NULL
;
...
...
@@ -1165,14 +1169,17 @@ static void destroyStreamPartitionOperatorInfo(void* param) {
}
void
initParDownStream
(
SOperatorInfo
*
downstream
,
SPartitionBySupporter
*
pParSup
,
SExprSupp
*
pExpr
)
{
SStorageAPI
*
pAPI
=
&
downstream
->
pTaskInfo
->
storageAPI
;
if
(
downstream
->
operatorType
!=
QUERY_NODE_PHYSICAL_PLAN_STREAM_SCAN
)
{
return
;
}
SStreamScanInfo
*
pScanInfo
=
downstream
->
info
;
pScanInfo
->
partitionSup
=
*
pParSup
;
pScanInfo
->
pPartScalarSup
=
pExpr
;
if
(
!
pScanInfo
->
igCheckUpdate
&&
!
pScanInfo
->
pUpdateInfo
)
{
pScanInfo
->
pUpdateInfo
=
updateInfoInit
(
60000
,
TSDB_TIME_PRECISION_MILLI
,
0
);
pScanInfo
->
pUpdateInfo
=
pAPI
->
stateStore
.
updateInfoInit
(
60000
,
TSDB_TIME_PRECISION_MILLI
,
0
);
}
}
...
...
@@ -1236,7 +1243,7 @@ SOperatorInfo* createStreamPartitionOperatorInfo(SOperatorInfo* downstream, SStr
if
(
pPartNode
->
part
.
pExprs
!=
NULL
)
{
int32_t
num
=
0
;
SExprInfo
*
pCalExprInfo
=
createExprInfo
(
pPartNode
->
part
.
pExprs
,
NULL
,
&
num
);
code
=
initExprSupp
(
&
pInfo
->
scalarSup
,
pCalExprInfo
,
num
);
code
=
initExprSupp
(
&
pInfo
->
scalarSup
,
pCalExprInfo
,
num
,
&
pTaskInfo
->
storageAPI
.
functionStore
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
goto
_error
;
}
...
...
@@ -1251,7 +1258,7 @@ SOperatorInfo* createStreamPartitionOperatorInfo(SOperatorInfo* downstream, SStr
}
pInfo
->
tbnameCalSup
.
pExprInfo
=
pSubTableExpr
;
createExprFromOneNode
(
pSubTableExpr
,
pPartNode
->
pSubtable
,
0
);
code
=
initExprSupp
(
&
pInfo
->
tbnameCalSup
,
pSubTableExpr
,
1
);
code
=
initExprSupp
(
&
pInfo
->
tbnameCalSup
,
pSubTableExpr
,
1
,
&
pTaskInfo
->
storageAPI
.
functionStore
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
goto
_error
;
}
...
...
@@ -1265,7 +1272,7 @@ SOperatorInfo* createStreamPartitionOperatorInfo(SOperatorInfo* downstream, SStr
code
=
TSDB_CODE_OUT_OF_MEMORY
;
goto
_error
;
}
if
(
initExprSupp
(
&
pInfo
->
tagCalSup
,
pTagExpr
,
numOfTags
)
!=
0
)
{
if
(
initExprSupp
(
&
pInfo
->
tagCalSup
,
pTagExpr
,
numOfTags
,
&
pTaskInfo
->
storageAPI
.
functionStore
)
!=
0
)
{
code
=
TSDB_CODE_OUT_OF_MEMORY
;
goto
_error
;
}
...
...
source/libs/executor/src/operator.c
浏览文件 @
cea83344
...
...
@@ -25,7 +25,8 @@
#include "operator.h"
#include "query.h"
#include "querytask.h"
#include "vnode.h"
#include "storageapi.h"
SOperatorFpSet
createOperatorFpSet
(
__optr_open_fn_t
openFn
,
__optr_fn_t
nextFn
,
__optr_fn_t
cleanup
,
__optr_close_fn_t
closeFn
,
__optr_reqBuf_fn_t
reqBufFn
,
...
...
@@ -233,11 +234,12 @@ int32_t getTableScanInfo(SOperatorInfo* pOperator, int32_t* order, int32_t* scan
}
static
ERetType
doStopDataReader
(
SOperatorInfo
*
pOperator
,
STraverParam
*
pParam
,
const
char
*
pIdStr
)
{
SStorageAPI
*
pAPI
=
pParam
->
pParam
;
if
(
pOperator
->
operatorType
==
QUERY_NODE_PHYSICAL_PLAN_TABLE_SCAN
)
{
STableScanInfo
*
pInfo
=
pOperator
->
info
;
if
(
pInfo
->
base
.
dataReader
!=
NULL
)
{
tsdbReaderSetCloseFla
g
(
pInfo
->
base
.
dataReader
);
pAPI
->
tsdReader
.
tsdReaderNotifyClosin
g
(
pInfo
->
base
.
dataReader
);
}
return
OPTR_FN_RET_ABORT
;
}
else
if
(
pOperator
->
operatorType
==
QUERY_NODE_PHYSICAL_PLAN_STREAM_SCAN
)
{
...
...
@@ -246,7 +248,7 @@ static ERetType doStopDataReader(SOperatorInfo* pOperator, STraverParam* pParam,
if
(
pInfo
->
pTableScanOp
!=
NULL
)
{
STableScanInfo
*
pTableScanInfo
=
pInfo
->
pTableScanOp
->
info
;
if
(
pTableScanInfo
!=
NULL
&&
pTableScanInfo
->
base
.
dataReader
!=
NULL
)
{
tsdbReaderSetCloseFla
g
(
pTableScanInfo
->
base
.
dataReader
);
pAPI
->
tsdReader
.
tsdReaderNotifyClosin
g
(
pTableScanInfo
->
base
.
dataReader
);
}
}
...
...
@@ -256,8 +258,8 @@ static ERetType doStopDataReader(SOperatorInfo* pOperator, STraverParam* pParam,
return
OPTR_FN_RET_CONTINUE
;
}
int32_t
stopTableScanOperator
(
SOperatorInfo
*
pOperator
,
const
char
*
pIdStr
)
{
STraverParam
p
=
{
0
};
int32_t
stopTableScanOperator
(
SOperatorInfo
*
pOperator
,
const
char
*
pIdStr
,
SStorageAPI
*
pAPI
)
{
STraverParam
p
=
{
.
pParam
=
pAPI
};
traverseOperatorTree
(
pOperator
,
doStopDataReader
,
&
p
,
pIdStr
);
return
p
.
code
;
}
...
...
@@ -378,17 +380,18 @@ SOperatorInfo* createOperator(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo, SR
STableListInfo
*
pTableListInfo
=
tableListCreate
();
if
(
pBlockNode
->
tableType
==
TSDB_SUPER_TABLE
)
{
SArray
*
pList
=
taosArrayInit
(
4
,
sizeof
(
STableKeyInfo
));
int32_t
code
=
vnodeGetAll
TableList
(
pHandle
->
vnode
,
pBlockNode
->
uid
,
pList
);
SArray
*
pList
=
taosArrayInit
(
4
,
sizeof
(
uint64_t
));
int32_t
code
=
pTaskInfo
->
storageAPI
.
metaFn
.
getChild
TableList
(
pHandle
->
vnode
,
pBlockNode
->
uid
,
pList
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
pTaskInfo
->
code
=
terrno
;
pTaskInfo
->
code
=
code
;
taosArrayDestroy
(
pList
);
return
NULL
;
}
size_t
num
=
taosArrayGetSize
(
pList
);
for
(
int32_t
i
=
0
;
i
<
num
;
++
i
)
{
STableKeyInfo
*
p
=
taosArrayGet
(
pList
,
i
);
tableListAddTableInfo
(
pTableListInfo
,
p
->
u
id
,
0
);
uint64_t
*
id
=
taosArrayGet
(
pList
,
i
);
tableListAddTableInfo
(
pTableListInfo
,
*
id
,
0
);
}
taosArrayDestroy
(
pList
);
...
...
source/libs/executor/src/projectoperator.c
浏览文件 @
cea83344
...
...
@@ -18,6 +18,7 @@
#include "functionMgt.h"
#include "operator.h"
#include "querytask.h"
#include "tdatablock.h"
typedef
struct
SProjectOperatorInfo
{
SOptrBasicInfo
binfo
;
...
...
@@ -114,7 +115,7 @@ SOperatorInfo* createProjectOperatorInfo(SOperatorInfo* downstream, SProjectPhys
initResultSizeInfo
(
&
pOperator
->
resultInfo
,
numOfRows
);
code
=
initAggSup
(
&
pOperator
->
exprSupp
,
&
pInfo
->
aggSup
,
pExprInfo
,
numOfCols
,
keyBufSize
,
pTaskInfo
->
id
.
str
,
pTaskInfo
->
streamInfo
.
pState
);
pTaskInfo
->
streamInfo
.
pState
,
&
pTaskInfo
->
storageAPI
.
functionStore
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
goto
_error
;
}
...
...
@@ -369,7 +370,7 @@ SOperatorInfo* createIndefinitOutputOperatorInfo(SOperatorInfo* downstream, SPhy
if
(
pPhyNode
->
pExprs
!=
NULL
)
{
int32_t
num
=
0
;
SExprInfo
*
pSExpr
=
createExprInfo
(
pPhyNode
->
pExprs
,
NULL
,
&
num
);
int32_t
code
=
initExprSupp
(
&
pInfo
->
scalarSup
,
pSExpr
,
num
);
int32_t
code
=
initExprSupp
(
&
pInfo
->
scalarSup
,
pSExpr
,
num
,
&
pTaskInfo
->
storageAPI
.
functionStore
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
goto
_error
;
}
...
...
@@ -391,7 +392,7 @@ SOperatorInfo* createIndefinitOutputOperatorInfo(SOperatorInfo* downstream, SPhy
blockDataEnsureCapacity
(
pResBlock
,
numOfRows
);
int32_t
code
=
initAggSup
(
pSup
,
&
pInfo
->
aggSup
,
pExprInfo
,
numOfExpr
,
keyBufSize
,
pTaskInfo
->
id
.
str
,
pTaskInfo
->
streamInfo
.
pState
);
pTaskInfo
->
streamInfo
.
pState
,
&
pTaskInfo
->
storageAPI
.
functionStore
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
goto
_error
;
}
...
...
source/libs/executor/src/querytask.c
浏览文件 @
cea83344
此差异已折叠。
点击以展开。
source/libs/executor/src/scanoperator.c
浏览文件 @
cea83344
此差异已折叠。
点击以展开。
source/libs/executor/src/sortoperator.c
浏览文件 @
cea83344
此差异已折叠。
点击以展开。
source/libs/executor/src/sysscanoperator.c
浏览文件 @
cea83344
此差异已折叠。
点击以展开。
source/libs/executor/src/timesliceoperator.c
浏览文件 @
cea83344
此差异已折叠。
点击以展开。
source/libs/executor/src/timewindowoperator.c
浏览文件 @
cea83344
此差异已折叠。
点击以展开。
source/libs/function/CMakeLists.txt
浏览文件 @
cea83344
此差异已折叠。
点击以展开。
source/libs/function/src/builtinsimpl.c
浏览文件 @
cea83344
此差异已折叠。
点击以展开。
source/libs/index/CMakeLists.txt
浏览文件 @
cea83344
此差异已折叠。
点击以展开。
source/libs/index/src/indexFilter.c
浏览文件 @
cea83344
此差异已折叠。
点击以展开。
source/libs/qworker/CMakeLists.txt
浏览文件 @
cea83344
此差异已折叠。
点击以展开。
source/libs/qworker/src/qwMsg.c
浏览文件 @
cea83344
此差异已折叠。
点击以展开。
source/libs/qworker/test/CMakeLists.txt
浏览文件 @
cea83344
此差异已折叠。
点击以展开。
source/libs/scalar/CMakeLists.txt
浏览文件 @
cea83344
此差异已折叠。
点击以展开。
source/libs/scheduler/CMakeLists.txt
浏览文件 @
cea83344
此差异已折叠。
点击以展开。
source/libs/stream/CMakeLists.txt
浏览文件 @
cea83344
此差异已折叠。
点击以展开。
source/libs/stream/inc/streamBackendRocksdb.h
浏览文件 @
cea83344
此差异已折叠。
点击以展开。
source/libs/stream/src/streamBackendRocksdb.c
浏览文件 @
cea83344
此差异已折叠。
点击以展开。
source/libs/stream/src/streamExec.c
浏览文件 @
cea83344
此差异已折叠。
点击以展开。
source/libs/stream/src/streamState.c
浏览文件 @
cea83344
此差异已折叠。
点击以展开。
source/libs/stream/src/tstreamFileState.c
浏览文件 @
cea83344
此差异已折叠。
点击以展开。
source/libs/stream/test/CMakeLists.txt
浏览文件 @
cea83344
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录