Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
74513630
T
TDengine
项目概览
taosdata
/
TDengine
大约 2 年 前同步成功
通知
1192
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看板
提交
74513630
编写于
6月 02, 2022
作者:
dengyihao
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'DEV' into idx
上级
a7d2042e
8bf48907
变更
75
隐藏空白更改
内联
并排
Showing
75 changed file
with
1243 addition
and
1475 deletion
+1243
-1475
include/common/tdataformat.h
include/common/tdataformat.h
+16
-24
include/libs/nodes/nodes.h
include/libs/nodes/nodes.h
+1
-0
include/libs/nodes/plannodes.h
include/libs/nodes/plannodes.h
+23
-14
include/libs/planner/planner.h
include/libs/planner/planner.h
+1
-1
source/client/src/clientSml.c
source/client/src/clientSml.c
+4
-4
source/client/test/smlTest.cpp
source/client/test/smlTest.cpp
+22
-0
source/common/src/tdataformat.c
source/common/src/tdataformat.c
+268
-435
source/dnode/mgmt/exe/dmMain.c
source/dnode/mgmt/exe/dmMain.c
+1
-1
source/dnode/mgmt/mgmt_vnode/src/vmHandle.c
source/dnode/mgmt/mgmt_vnode/src/vmHandle.c
+2
-0
source/dnode/mgmt/mgmt_vnode/src/vmWorker.c
source/dnode/mgmt/mgmt_vnode/src/vmWorker.c
+28
-27
source/dnode/mgmt/node_mgmt/src/dmEnv.c
source/dnode/mgmt/node_mgmt/src/dmEnv.c
+5
-5
source/dnode/mgmt/node_util/src/dmEps.c
source/dnode/mgmt/node_util/src/dmEps.c
+4
-2
source/dnode/mgmt/node_util/src/dmFile.c
source/dnode/mgmt/node_util/src/dmFile.c
+1
-1
source/dnode/mnode/impl/src/mndMnode.c
source/dnode/mnode/impl/src/mndMnode.c
+4
-4
source/dnode/mnode/impl/src/mndSubscribe.c
source/dnode/mnode/impl/src/mndSubscribe.c
+1
-1
source/dnode/mnode/impl/src/mndVgroup.c
source/dnode/mnode/impl/src/mndVgroup.c
+1
-1
source/dnode/vnode/CMakeLists.txt
source/dnode/vnode/CMakeLists.txt
+0
-1
source/dnode/vnode/src/inc/meta.h
source/dnode/vnode/src/inc/meta.h
+6
-6
source/dnode/vnode/src/inc/vnd.h
source/dnode/vnode/src/inc/vnd.h
+1
-1
source/dnode/vnode/src/meta/metaOpen.c
source/dnode/vnode/src/meta/metaOpen.c
+12
-12
source/dnode/vnode/src/meta/metaQuery.c
source/dnode/vnode/src/meta/metaQuery.c
+2
-2
source/dnode/vnode/src/meta/metaSma.c
source/dnode/vnode/src/meta/metaSma.c
+2
-2
source/dnode/vnode/src/meta/metaTable.c
source/dnode/vnode/src/meta/metaTable.c
+5
-5
source/dnode/vnode/src/sma/sma.c
source/dnode/vnode/src/sma/sma.c
+4
-4
source/dnode/vnode/src/sma/smaEnv.c
source/dnode/vnode/src/sma/smaEnv.c
+5
-5
source/dnode/vnode/src/sma/smaRollup.c
source/dnode/vnode/src/sma/smaRollup.c
+15
-15
source/dnode/vnode/src/sma/smaTimeRange.c
source/dnode/vnode/src/sma/smaTimeRange.c
+37
-37
source/dnode/vnode/src/tsdb/tsdbCommit.c
source/dnode/vnode/src/tsdb/tsdbCommit.c
+37
-25
source/dnode/vnode/src/tsdb/tsdbCommit2.c
source/dnode/vnode/src/tsdb/tsdbCommit2.c
+0
-28
source/dnode/vnode/src/tsdb/tsdbFS.c
source/dnode/vnode/src/tsdb/tsdbFS.c
+36
-36
source/dnode/vnode/src/tsdb/tsdbFile.c
source/dnode/vnode/src/tsdb/tsdbFile.c
+4
-4
source/dnode/vnode/src/tsdb/tsdbMemTable2.c
source/dnode/vnode/src/tsdb/tsdbMemTable2.c
+96
-276
source/dnode/vnode/src/tsdb/tsdbOpen.c
source/dnode/vnode/src/tsdb/tsdbOpen.c
+3
-3
source/dnode/vnode/src/tsdb/tsdbRead.c
source/dnode/vnode/src/tsdb/tsdbRead.c
+4
-4
source/dnode/vnode/src/tsdb/tsdbReadImpl.c
source/dnode/vnode/src/tsdb/tsdbReadImpl.c
+27
-27
source/dnode/vnode/src/tsdb/tsdbWrite.c
source/dnode/vnode/src/tsdb/tsdbWrite.c
+6
-6
source/dnode/vnode/src/vnd/vnodeBufPool.c
source/dnode/vnode/src/vnd/vnodeBufPool.c
+3
-3
source/dnode/vnode/src/vnd/vnodeCommit.c
source/dnode/vnode/src/vnd/vnodeCommit.c
+9
-9
source/dnode/vnode/src/vnd/vnodeOpen.c
source/dnode/vnode/src/vnd/vnodeOpen.c
+14
-14
source/dnode/vnode/src/vnd/vnodeSvr.c
source/dnode/vnode/src/vnd/vnodeSvr.c
+10
-9
source/dnode/vnode/src/vnd/vnodeSync.c
source/dnode/vnode/src/vnd/vnodeSync.c
+8
-6
source/libs/function/src/builtins.c
source/libs/function/src/builtins.c
+15
-20
source/libs/function/src/tudf.c
source/libs/function/src/tudf.c
+3
-1
source/libs/nodes/src/nodesCloneFuncs.c
source/libs/nodes/src/nodesCloneFuncs.c
+2
-1
source/libs/nodes/src/nodesCodeFuncs.c
source/libs/nodes/src/nodesCodeFuncs.c
+8
-0
source/libs/nodes/src/nodesUtilFuncs.c
source/libs/nodes/src/nodesUtilFuncs.c
+4
-0
source/libs/planner/src/planLogicCreater.c
source/libs/planner/src/planLogicCreater.c
+1
-0
source/libs/planner/src/planPhysiCreater.c
source/libs/planner/src/planPhysiCreater.c
+14
-3
source/libs/planner/src/planSpliter.c
source/libs/planner/src/planSpliter.c
+87
-32
source/libs/planner/test/planOtherTest.cpp
source/libs/planner/test/planOtherTest.cpp
+6
-0
source/libs/sync/src/syncMain.c
source/libs/sync/src/syncMain.c
+4
-4
source/util/src/terror.c
source/util/src/terror.c
+1
-1
source/util/src/tworker.c
source/util/src/tworker.c
+2
-2
tests/script/tsim/bnode/basic1.sim
tests/script/tsim/bnode/basic1.sim
+2
-2
tests/script/tsim/db/alter_option.sim
tests/script/tsim/db/alter_option.sim
+15
-15
tests/script/tsim/db/alter_replica_13.sim
tests/script/tsim/db/alter_replica_13.sim
+29
-12
tests/script/tsim/dnode/basic1.sim
tests/script/tsim/dnode/basic1.sim
+2
-2
tests/script/tsim/mnode/basic1.sim
tests/script/tsim/mnode/basic1.sim
+6
-6
tests/script/tsim/mnode/basic2.sim
tests/script/tsim/mnode/basic2.sim
+3
-3
tests/script/tsim/mnode/basic3.sim
tests/script/tsim/mnode/basic3.sim
+4
-4
tests/script/tsim/mnode/basic4.sim
tests/script/tsim/mnode/basic4.sim
+22
-22
tests/script/tsim/qnode/basic1.sim
tests/script/tsim/qnode/basic1.sim
+2
-2
tests/script/tsim/query/explain.sim
tests/script/tsim/query/explain.sim
+1
-1
tests/script/tsim/query/scalarNull.sim
tests/script/tsim/query/scalarNull.sim
+1
-1
tests/script/tsim/query/udf.sim
tests/script/tsim/query/udf.sim
+1
-1
tests/script/tsim/snode/basic1.sim
tests/script/tsim/snode/basic1.sim
+2
-2
tests/script/tsim/sync/3Replica1VgElect.sim
tests/script/tsim/sync/3Replica1VgElect.sim
+27
-27
tests/script/tsim/sync/3Replica5VgElect.sim
tests/script/tsim/sync/3Replica5VgElect.sim
+135
-135
tests/script/tsim/sync/oneReplica1VgElect.sim
tests/script/tsim/sync/oneReplica1VgElect.sim
+12
-12
tests/script/tsim/sync/oneReplica1VgElectWithInsert.sim
tests/script/tsim/sync/oneReplica1VgElectWithInsert.sim
+12
-12
tests/script/tsim/sync/oneReplica5VgElect.sim
tests/script/tsim/sync/oneReplica5VgElect.sim
+30
-30
tests/script/tsim/sync/threeReplica1VgElect.sim
tests/script/tsim/sync/threeReplica1VgElect.sim
+21
-21
tests/script/tsim/sync/threeReplica1VgElectWihtInsert.sim
tests/script/tsim/sync/threeReplica1VgElectWihtInsert.sim
+39
-39
tests/script/tsim/trans/create_db.sim
tests/script/tsim/trans/create_db.sim
+1
-1
tests/system-test/0-others/taosdMonitor.py
tests/system-test/0-others/taosdMonitor.py
+1
-1
未找到文件。
include/common/tdataformat.h
浏览文件 @
74513630
...
...
@@ -46,6 +46,7 @@ void tTSchemaDestroy(STSchema *pTSchema);
#define COL_VAL_NULL(CID) ((SColVal){.cid = (CID), .isNull = 1})
#define COL_VAL_VALUE(CID, V) ((SColVal){.cid = (CID), .value = (V)})
int32_t
tTSRowNew
(
STSRowBuilder
*
pBuilder
,
SArray
*
pArray
,
STSchema
*
pTSchema
,
STSRow2
**
ppRow
);
int32_t
tTSRowClone
(
const
STSRow2
*
pRow
,
STSRow2
**
ppRow
);
void
tTSRowFree
(
STSRow2
*
pRow
);
void
tTSRowGet
(
STSRow2
*
pRow
,
STSchema
*
pTSchema
,
int32_t
iCol
,
SColVal
*
pColVal
);
...
...
@@ -54,24 +55,24 @@ int32_t tPutTSRow(uint8_t *p, STSRow2 *pRow);
int32_t
tGetTSRow
(
uint8_t
*
p
,
STSRow2
*
pRow
);
// STSRowBuilder
#
if 0
int32_t tTSRowBuilderInit(STSRowBuilder *pBuilder, int32_t sver, int32_t nCols, SSchema *pSchema);
void tTSRowBuilderClear(STSRowBuilder *pBuilder);
void tTSRowBuilderReset(STSRowBuilder *pBuilder);
int32_t tTSRowBuilderPut(STSRowBuilder *pBuilder, int32_t cid, uint8_t *pData, uint32_t nData);
int32_t tTSRowBuilderGetRow(STSRowBuilder *pBuilder, const STSRow2 **ppRow);
#endif
#
define tsRowBuilderInit() ((STSRowBuilder){0})
#define tsRowBuilderClear(B) \
do { \
if ((B)->pBuf) { \
taosMemoryFree((B)->pBuf); \
} \
} while (0)
// STag
int32_t
tTagNew
(
SArray
*
pArray
,
int32_t
version
,
int8_t
isJson
,
STag
**
ppTag
);
void
tTagFree
(
STag
*
pTag
);
bool
tTagGet
(
const
STag
*
pTag
,
STagVal
*
pTagVal
);
char
*
tTagValToData
(
const
STagVal
*
pTagVal
,
bool
isJson
);
char
*
tTagValToData
(
const
STagVal
*
pTagVal
,
bool
isJson
);
int32_t
tEncodeTag
(
SEncoder
*
pEncoder
,
const
STag
*
pTag
);
int32_t
tDecodeTag
(
SDecoder
*
pDecoder
,
STag
**
ppTag
);
int32_t
tTagToValArray
(
const
STag
*
pTag
,
SArray
**
ppArray
);
void
debugPrintSTag
(
STag
*
pTag
,
const
char
*
tag
,
int32_t
ln
);
// TODO: remove
void
debugCheckTags
(
STag
*
pTag
);
// TODO: remove
void
debugPrintSTag
(
STag
*
pTag
,
const
char
*
tag
,
int32_t
ln
);
// TODO: remove
void
debugCheckTags
(
STag
*
pTag
);
// TODO: remove
// STRUCT =================
struct
STColumn
{
...
...
@@ -106,17 +107,9 @@ struct STSRow2 {
};
struct
STSRowBuilder
{
STSchema
*
pTSchema
;
int32_t
szBitMap1
;
int32_t
szBitMap2
;
int32_t
szKVBuf
;
uint8_t
*
pKVBuf
;
int32_t
szTPBuf
;
uint8_t
*
pTPBuf
;
int32_t
iCol
;
int32_t
vlenKV
;
int32_t
vlenTP
;
STSRow2
row
;
STSRow2
tsRow
;
int32_t
szBuf
;
uint8_t
*
pBuf
;
};
struct
SValue
{
...
...
@@ -154,7 +147,7 @@ struct STagVal {
};
int8_t
type
;
union
{
int64_t
i64
;
int64_t
i64
;
struct
{
uint32_t
nData
;
uint8_t
*
pData
;
...
...
@@ -162,7 +155,7 @@ struct STagVal {
};
};
#define TD_TAG_JSON ((int8_t)0x40)
// distinguish JSON string and JSON value with the highest bit
#define TD_TAG_JSON ((int8_t)0x40) // distinguish JSON string and JSON value with the highest bit
#define TD_TAG_LARGE ((int8_t)0x20)
struct
STag
{
int8_t
flags
;
...
...
@@ -422,4 +415,3 @@ int32_t tdMergeDataCols(SDataCols *target, SDataCols *source, int32_t rowsToM
#endif
#endif
/*_TD_COMMON_DATA_FORMAT_H_*/
include/libs/nodes/nodes.h
浏览文件 @
74513630
...
...
@@ -212,6 +212,7 @@ typedef enum ENodeType {
QUERY_NODE_PHYSICAL_PLAN_INTERVAL
,
QUERY_NODE_PHYSICAL_PLAN_STREAM_INTERVAL
,
QUERY_NODE_PHYSICAL_PLAN_STREAM_FINAL_INTERVAL
,
QUERY_NODE_PHYSICAL_PLAN_STREAM_SEMI_INTERVAL
,
QUERY_NODE_PHYSICAL_PLAN_FILL
,
QUERY_NODE_PHYSICAL_PLAN_SESSION_WINDOW
,
QUERY_NODE_PHYSICAL_PLAN_STREAM_SESSION_WINDOW
,
...
...
include/libs/nodes/plannodes.h
浏览文件 @
74513630
...
...
@@ -106,21 +106,28 @@ typedef struct SMergeLogicNode {
typedef
enum
EWindowType
{
WINDOW_TYPE_INTERVAL
=
1
,
WINDOW_TYPE_SESSION
,
WINDOW_TYPE_STATE
}
EWindowType
;
typedef
enum
EStreamIntervalAlgorithm
{
STREAM_INTERVAL_ALGO_FINAL
=
1
,
STREAM_INTERVAL_ALGO_SEMI
,
STREAM_INTERVAL_ALGO_SINGLE
}
EStreamIntervalAlgorithm
;
typedef
struct
SWindowLogicNode
{
SLogicNode
node
;
EWindowType
winType
;
SNodeList
*
pFuncs
;
int64_t
interval
;
int64_t
offset
;
int64_t
sliding
;
int8_t
intervalUnit
;
int8_t
slidingUnit
;
int64_t
sessionGap
;
SNode
*
pTspk
;
SNode
*
pStateExpr
;
int8_t
triggerType
;
int64_t
watermark
;
double
filesFactor
;
SLogicNode
node
;
EWindowType
winType
;
SNodeList
*
pFuncs
;
int64_t
interval
;
int64_t
offset
;
int64_t
sliding
;
int8_t
intervalUnit
;
int8_t
slidingUnit
;
int64_t
sessionGap
;
SNode
*
pTspk
;
SNode
*
pStateExpr
;
int8_t
triggerType
;
int64_t
watermark
;
double
filesFactor
;
EStreamIntervalAlgorithm
stmInterAlgo
;
}
SWindowLogicNode
;
typedef
struct
SFillLogicNode
{
...
...
@@ -301,6 +308,8 @@ typedef struct SIntervalPhysiNode {
}
SIntervalPhysiNode
;
typedef
SIntervalPhysiNode
SStreamIntervalPhysiNode
;
typedef
SIntervalPhysiNode
SStreamFinalIntervalPhysiNode
;
typedef
SIntervalPhysiNode
SStreamSemiIntervalPhysiNode
;
typedef
struct
SFillPhysiNode
{
SPhysiNode
node
;
...
...
include/libs/planner/planner.h
浏览文件 @
74513630
...
...
@@ -36,7 +36,7 @@ typedef struct SPlanContext {
int64_t
watermark
;
char
*
pMsg
;
int32_t
msgLen
;
double
filesFactor
;
double
filesFactor
;
}
SPlanContext
;
// Create the physical plan for the query, according to the AST.
...
...
source/client/src/clientSml.c
浏览文件 @
74513630
...
...
@@ -960,10 +960,10 @@ static int32_t smlParseInfluxString(const char* sql, SSmlLineInfo *elements, SSm
return
TSDB_CODE_SML_INVALID_DATA
;
}
elements
->
colsLen
=
sql
-
elements
->
cols
;
//
if(elements->colsLen == 0) {
//
smlBuildInvalidDataMsg(msg, "cols is empty", NULL);
//
return TSDB_CODE_SML_INVALID_DATA;
//
}
if
(
elements
->
colsLen
==
0
)
{
smlBuildInvalidDataMsg
(
msg
,
"cols is empty"
,
NULL
);
return
TSDB_CODE_SML_INVALID_DATA
;
}
// parse timestamp
JUMP_SPACE
(
sql
)
...
...
source/client/test/smlTest.cpp
浏览文件 @
74513630
...
...
@@ -1281,3 +1281,25 @@ TEST(testCase, sml_params_Test) {
ASSERT_EQ
(
taos_errno
(
res
),
TSDB_CODE_SML_INVALID_DB_CONF
);
taos_free_result
(
pRes
);
}
TEST
(
testCase
,
sml_oom_Test
)
{
TAOS
*
taos
=
taos_connect
(
"localhost"
,
"root"
,
"taosdata"
,
NULL
,
0
);
ASSERT_NE
(
taos
,
nullptr
);
TAOS_RES
*
pRes
=
taos_query
(
taos
,
"create database if not exists oom schemaless 1"
);
taos_free_result
(
pRes
);
const
char
*
sql
[]
=
{
//"test_ms,t0=t c0=f 1626006833641",
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
pgxbrbga
\"
,t8=L
\"
ncharTagValue
\"
c0=f,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
gviggpmi
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
cexkarjn
\"
,t8=L
\"
ncharTagValue
\"
c0=true,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
rzwwuoxu
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
xphrlkey
\"
,t8=L
\"
ncharTagValue
\"
c0=f,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
llsawebj
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
jwpkipff
\"
,t8=L
\"
ncharTagValue
\"
c0=false,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
euzzhcvu
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
jumhnsvw
\"
,t8=L
\"
ncharTagValue
\"
c0=true,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
fnetgdhj
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
vrmmpgqe
\"
,t8=L
\"
ncharTagValue
\"
c0=T,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
lnpfjapr
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
gvbhmsfr
\"
,t8=L
\"
ncharTagValue
\"
c0=t,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
kydxrxwc
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
pfyarryq
\"
,t8=L
\"
ncharTagValue
\"
c0=T,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
uxptotap
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
prolhudh
\"
,t8=L
\"
ncharTagValue
\"
c0=True,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
ttxaxnac
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
dfgvmjmz
\"
,t8=L
\"
ncharTagValue
\"
c0=F,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
bloextkn
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
dvjxwzsi
\"
,t8=L
\"
ncharTagValue
\"
c0=True,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
aigjomaf
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
refbidtf
\"
,t8=L
\"
ncharTagValue
\"
c0=t,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
vuanlfpz
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
nbpajxkx
\"
,t8=L
\"
ncharTagValue
\"
c0=F,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
ktzzauxh
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
prcwdjct
\"
,t8=L
\"
ncharTagValue
\"
c0=F,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
vmbhvjtp
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
liuddtuz
\"
,t8=L
\"
ncharTagValue
\"
c0=T,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
pddsktow
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
algldlvl
\"
,t8=L
\"
ncharTagValue
\"
c0=False,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
mlmnjgdl
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
oiynpcog
\"
,t8=L
\"
ncharTagValue
\"
c0=F,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
wmynbagb
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
asvyulrm
\"
,t8=L
\"
ncharTagValue
\"
c0=f,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
ohaacrkp
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
ytyejhiq
\"
,t8=L
\"
ncharTagValue
\"
c0=true,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
bbznuerb
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
lpebcibw
\"
,t8=L
\"
ncharTagValue
\"
c0=False,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
xmqrbafv
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
lnmwpdne
\"
,t8=L
\"
ncharTagValue
\"
c0=true,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
jpcsjqun
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
mmxqmavz
\"
,t8=L
\"
ncharTagValue
\"
c0=true,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
hhsbgaow
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
uwogyuud
\"
,t8=L
\"
ncharTagValue
\"
c0=t,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
ytxpaxnk
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
wouwdvtt
\"
,t8=L
\"
ncharTagValue
\"
c0=True,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
iitwikkh
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
lgyzuyaq
\"
,t8=L
\"
ncharTagValue
\"
c0=F,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
bdtiigxi
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
qpnsvdhw
\"
,t8=L
\"
ncharTagValue
\"
c0=false,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
pjxihgvu
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
ksxkfetn
\"
,t8=L
\"
ncharTagValue
\"
c0=F,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
ocukufqs
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
qzerxmpe
\"
,t8=L
\"
ncharTagValue
\"
c0=False,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
qwcfdyxs
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
jldrpmmd
\"
,t8=L
\"
ncharTagValue
\"
c0=True,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
lucxlfzc
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
rcewrvya
\"
,t8=L
\"
ncharTagValue
\"
c0=true,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
dknvaphs
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
nxtxgzdr
\"
,t8=L
\"
ncharTagValue
\"
c0=T,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
mbvuugwz
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
uikakffu
\"
,t8=L
\"
ncharTagValue
\"
c0=true,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
mwmtqsma
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
bfcxrrpa
\"
,t8=L
\"
ncharTagValue
\"
c0=False,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
ksajygdj
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
vmhhszyv
\"
,t8=L
\"
ncharTagValue
\"
c0=false,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
urwjgvut
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
jrvytcxy
\"
,t8=L
\"
ncharTagValue
\"
c0=False,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
evqkzygh
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
zitdznhg
\"
,t8=L
\"
ncharTagValue
\"
c0=true,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
tpqekrxa
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
yrrbgjtk
\"
,t8=L
\"
ncharTagValue
\"
c0=false,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
bnphiuyq
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
huknehjn
\"
,t8=L
\"
ncharTagValue
\"
c0=True,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
iudbxfke
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
fjmolwbn
\"
,t8=L
\"
ncharTagValue
\"
c0=False,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
gukzgcjs
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
bjvdtlgq
\"
,t8=L
\"
ncharTagValue
\"
c0=false,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
phxnesxh
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
qgpgckvc
\"
,t8=L
\"
ncharTagValue
\"
c0=False,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
yechqtfa
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
pbouxywy
\"
,t8=L
\"
ncharTagValue
\"
c0=T,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
kxtuojyo
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
txaniwlj
\"
,t8=L
\"
ncharTagValue
\"
c0=F,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
fixgufrj
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
okzvalwq
\"
,t8=L
\"
ncharTagValue
\"
c0=f,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
iitawgbn
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
gayvmird
\"
,t8=L
\"
ncharTagValue
\"
c0=t,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
dprkfjph
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
kmuccshq
\"
,t8=L
\"
ncharTagValue
\"
c0=false,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
vkslsdsd
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
dukccdqk
\"
,t8=L
\"
ncharTagValue
\"
c0=False,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
leztxmqf
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
kltixbwz
\"
,t8=L
\"
ncharTagValue
\"
c0=false,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
xqhkweef
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
idxsimvz
\"
,t8=L
\"
ncharTagValue
\"
c0=F,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
vbruvcpk
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
uxandqkd
\"
,t8=L
\"
ncharTagValue
\"
c0=True,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
dsiosysh
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
kxuyanpp
\"
,t8=L
\"
ncharTagValue
\"
c0=false,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
wkrktags
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
yvizzpiv
\"
,t8=L
\"
ncharTagValue
\"
c0=False,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
ddnefben
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
novmfmbc
\"
,t8=L
\"
ncharTagValue
\"
c0=True,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
fnusxsfu
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
ouerfjap
\"
,t8=L
\"
ncharTagValue
\"
c0=f,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
sigognkf
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
slvzhede
\"
,t8=L
\"
ncharTagValue
\"
c0=T,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
bknerect
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
tmhcdfjb
\"
,t8=L
\"
ncharTagValue
\"
c0=F,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
hpnoanpp
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
okmhelnc
\"
,t8=L
\"
ncharTagValue
\"
c0=f,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
xcernjin
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
jdmiismg
\"
,t8=L
\"
ncharTagValue
\"
c0=f,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
tmnqozrf
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
zgwrftkx
\"
,t8=L
\"
ncharTagValue
\"
c0=f,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
zyamlwwh
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
nuedqcro
\"
,t8=L
\"
ncharTagValue
\"
c0=True,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
lpsvyqaa
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
mneitsul
\"
,t8=L
\"
ncharTagValue
\"
c0=T,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
vpleinwb
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
njxuaedy
\"
,t8=L
\"
ncharTagValue
\"
c0=False,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
sdgxpqmu
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
yjirrebp
\"
,t8=L
\"
ncharTagValue
\"
c0=False,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
ikqndzfj
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
ghnfdxhr
\"
,t8=L
\"
ncharTagValue
\"
c0=f,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
hrwczpvo
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
nattumpb
\"
,t8=L
\"
ncharTagValue
\"
c0=false,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
zoyfzazn
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
rdwemofy
\"
,t8=L
\"
ncharTagValue
\"
c0=true,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
phkgsjeg
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
pyhvvjrt
\"
,t8=L
\"
ncharTagValue
\"
c0=T,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
zfslyton
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
bxwjzeri
\"
,t8=L
\"
ncharTagValue
\"
c0=False,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
uovzzgjv
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
cfjmacvr
\"
,t8=L
\"
ncharTagValue
\"
c0=True,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
jefqgzqx
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
njrksxmr
\"
,t8=L
\"
ncharTagValue
\"
c0=false,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
mhvabvgn
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
kfekjltr
\"
,t8=L
\"
ncharTagValue
\"
c0=T,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
lexfaaby
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
zbblsmwq
\"
,t8=L
\"
ncharTagValue
\"
c0=false,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
oqcombkx
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
rcdmhzyw
\"
,t8=L
\"
ncharTagValue
\"
c0=false,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
otksuean
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
itbdvowq
\"
,t8=L
\"
ncharTagValue
\"
c0=False,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
tswtmhex
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
xoukkzid
\"
,t8=L
\"
ncharTagValue
\"
c0=True,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
guangmpq
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
rayxzuky
\"
,t8=L
\"
ncharTagValue
\"
c0=false,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
lspwucrv
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
pdprzzkf
\"
,t8=L
\"
ncharTagValue
\"
c0=True,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
sddqrtza
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
kabndgkx
\"
,t8=L
\"
ncharTagValue
\"
c0=true,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
aglnqqxs
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
fiwpzmdr
\"
,t8=L
\"
ncharTagValue
\"
c0=True,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
hxctooen
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
pckjpwyh
\"
,t8=L
\"
ncharTagValue
\"
c0=false,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
ivmvsbai
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
eljdclst
\"
,t8=L
\"
ncharTagValue
\"
c0=F,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
rwgdctie
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
zlnthxoz
\"
,t8=L
\"
ncharTagValue
\"
c0=F,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
ljtxelle
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
llfggdpy
\"
,t8=L
\"
ncharTagValue
\"
c0=t,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
tvnridze
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
hxjpgube
\"
,t8=L
\"
ncharTagValue
\"
c0=F,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
zmldmquq
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
bggqwcoj
\"
,t8=L
\"
ncharTagValue
\"
c0=False,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
drksfofm
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
jcsixens
\"
,t8=L
\"
ncharTagValue
\"
c0=False,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
cdwnwhaf
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
nngpumuq
\"
,t8=L
\"
ncharTagValue
\"
c0=F,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
hylgooci
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
cozeyjys
\"
,t8=L
\"
ncharTagValue
\"
c0=True,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
lcgpfcsa
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
qdtzhtyd
\"
,t8=L
\"
ncharTagValue
\"
c0=False,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
txpubynb
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
gbslzbtu
\"
,t8=L
\"
ncharTagValue
\"
c0=T,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
buihcpcl
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
ayqezaiq
\"
,t8=L
\"
ncharTagValue
\"
c0=True,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
zgkgtilj
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
bcjopqif
\"
,t8=L
\"
ncharTagValue
\"
c0=F,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
mfzxiaqt
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
xmnlqxoj
\"
,t8=L
\"
ncharTagValue
\"
c0=T,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
reyiklyf
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
xssuomhk
\"
,t8=L
\"
ncharTagValue
\"
c0=False,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
liazkjll
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
nigjlblo
\"
,t8=L
\"
ncharTagValue
\"
c0=true,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
vmojyznk
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
dotkbvrz
\"
,t8=L
\"
ncharTagValue
\"
c0=f,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
kuwdyydw
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
slsfqydw
\"
,t8=L
\"
ncharTagValue
\"
c0=t,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
zyironhd
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
pktwfhzi
\"
,t8=L
\"
ncharTagValue
\"
c0=T,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
xybavsvh
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
pyrxemvx
\"
,t8=L
\"
ncharTagValue
\"
c0=True,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
tlfihwjs
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
"ogirwqci,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
neumakmg
\"
,t8=L
\"
ncharTagValue
\"
c0=F,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
wxqingoa
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639000000"
,
};
pRes
=
taos_query
(
taos
,
"use oom"
);
taos_free_result
(
pRes
);
TAOS_RES
*
res
=
taos_schemaless_insert
(
taos
,
(
char
**
)
sql
,
100
,
TSDB_SML_LINE_PROTOCOL
,
0
);
ASSERT_EQ
(
taos_errno
(
res
),
0
);
taos_free_result
(
pRes
);
}
source/common/src/tdataformat.c
浏览文件 @
74513630
...
...
@@ -142,202 +142,314 @@ static FORCE_INLINE int32_t tGetValue(uint8_t *p, SValue *pValue, int8_t type) {
}
// STSRow2 ========================================================================
static
void
tTupleTSRowNew
(
SArray
*
pArray
,
STSchema
*
pTSchema
,
STSRow2
*
pRow
)
{
int32_t
nColVal
=
taosArrayGetSize
(
pArray
);
static
void
setBitMap
(
uint8_t
*
pb
,
uint8_t
v
,
int32_t
idx
,
uint8_t
flags
)
{
if
(
pb
)
{
switch
(
flags
&
0xf
)
{
case
TSROW_HAS_NULL
|
TSROW_HAS_NONE
:
case
TSROW_HAS_VAL
|
TSROW_HAS_NONE
:
if
(
v
)
{
SET_BIT1
(
pb
,
idx
,
(
uint8_t
)
1
);
}
else
{
SET_BIT1
(
pb
,
idx
,
(
uint8_t
)
0
);
}
break
;
case
TSROW_HAS_VAL
|
TSROW_HAS_NULL
:
v
=
v
-
1
;
SET_BIT1
(
pb
,
idx
,
v
);
break
;
case
TSROW_HAS_VAL
|
TSROW_HAS_NULL
|
TSROW_HAS_NONE
:
SET_BIT2
(
pb
,
idx
,
v
);
break
;
default:
ASSERT
(
0
);
}
}
}
#define SET_IDX(p, i, n, f) \
do { \
if ((f)&TSROW_KV_SMALL) { \
((uint8_t *)(p))[i] = (n); \
} else if ((f)&TSROW_KV_MID) { \
((uint16_t *)(p))[i] = (n); \
} else { \
((uint32_t *)(p))[i] = (n); \
} \
} while (0)
int32_t
tTSRowNew
(
STSRowBuilder
*
pBuilder
,
SArray
*
pArray
,
STSchema
*
pTSchema
,
STSRow2
**
ppRow
)
{
int32_t
code
=
0
;
STColumn
*
pTColumn
;
SColVal
*
pColVal
;
int32_t
nColVal
=
taosArrayGetSize
(
pArray
);
int32_t
iColVal
;
ASSERT
(
nColVal
>
0
);
pRow
->
sver
=
pTSchema
->
version
;
// ts
pTColumn
=
&
pTSchema
->
columns
[
0
];
pColVal
=
(
SColVal
*
)
taosArrayGet
(
pArray
,
0
);
ASSERT
(
pTColumn
->
colId
==
0
&&
pColVal
->
cid
==
0
);
ASSERT
(
pTColumn
->
type
==
TSDB_DATA_TYPE_TIMESTAMP
);
pRow
->
ts
=
pColVal
->
value
.
ts
;
// other fields
int32_t
iColVal
=
1
;
int32_t
bidx
;
uint32_t
nv
=
0
;
uint8_t
*
pb
=
NULL
;
uint8_t
*
pf
=
NULL
;
uint8_t
*
pv
=
NULL
;
// try
uint8_t
flags
=
0
;
for
(
int32_t
iColumn
=
1
;
iColumn
<
pTSchema
->
numOfCols
;
iColumn
++
)
{
bidx
=
iColumn
-
1
;
pTColumn
=
&
pTSchema
->
columns
[
iColumn
];
uint32_t
ntv
=
0
;
uint32_t
nkv
=
0
;
int16_t
nTag
=
0
;
uint32_t
maxIdx
=
0
;
iColVal
=
0
;
for
(
int32_t
iColumn
=
0
;
iColumn
<
pTSchema
->
numOfCols
;
iColumn
++
)
{
pTColumn
=
&
pTSchema
->
columns
[
iColumn
];
if
(
iColVal
<
nColVal
)
{
pColVal
=
(
SColVal
*
)
taosArrayGet
(
pArray
,
iColVal
);
}
else
{
pColVal
=
NULL
;
}
if
(
pColVal
)
{
if
(
pColVal
->
cid
==
pTColumn
->
colId
)
{
iColVal
++
;
if
(
pColVal
->
isNone
)
{
goto
_set_none
;
}
else
if
(
pColVal
->
isNull
)
{
goto
_set_null
;
if
(
iColumn
==
0
)
{
ASSERT
(
pColVal
->
cid
==
pTColumn
->
colId
);
ASSERT
(
pTColumn
->
type
==
TSDB_DATA_TYPE_TIMESTAMP
);
ASSERT
(
pTColumn
->
colId
==
0
);
iColVal
++
;
}
else
{
if
(
pColVal
)
{
if
(
pColVal
->
cid
==
pTColumn
->
colId
)
{
iColVal
++
;
if
(
pColVal
->
isNone
)
{
flags
|=
TSROW_HAS_NONE
;
}
else
if
(
pColVal
->
isNull
)
{
flags
|=
TSROW_HAS_NULL
;
maxIdx
=
nkv
;
nTag
++
;
nkv
+=
tPutI16v
(
NULL
,
-
pTColumn
->
colId
);
}
else
{
flags
|=
TSROW_HAS_VAL
;
maxIdx
=
nkv
;
nTag
++
;
nkv
+=
tPutI16v
(
NULL
,
pTColumn
->
colId
);
nkv
+=
tPutValue
(
NULL
,
&
pColVal
->
value
,
pTColumn
->
type
);
if
(
IS_VAR_DATA_TYPE
(
pTColumn
->
type
))
{
ntv
+=
tPutValue
(
NULL
,
&
pColVal
->
value
,
pTColumn
->
type
);
}
}
}
else
if
(
pColVal
->
cid
>
pTColumn
->
colId
)
{
flags
|=
TSROW_HAS_NONE
;
}
else
{
goto
_set_value
;
ASSERT
(
0
)
;
}
}
else
if
(
pColVal
->
cid
>
pTColumn
->
colId
)
{
goto
_set_none
;
}
else
{
ASSERT
(
0
)
;
flags
|=
TSROW_HAS_NONE
;
}
}
else
{
goto
_set_none
;
}
}
_set_none:
flags
|=
TSROW_HAS_NONE
;
// SET_BIT2(pb, bidx, 0); (todo)
continue
;
ASSERT
(
flags
);
_set_null:
flags
!=
TSROW_HAS_NULL
;
// SET_BIT2(pb, bidx, 1); (todo)
continue
;
// decide
uint32_t
nData
=
0
;
uint32_t
nDataT
=
0
;
uint32_t
nDataK
=
0
;
if
(
flags
==
TSROW_HAS_NONE
||
flags
==
TSROW_HAS_NULL
)
{
nData
=
0
;
}
else
{
switch
(
flags
)
{
case
TSROW_HAS_VAL
:
nDataT
=
pTSchema
->
flen
+
ntv
;
break
;
case
TSROW_HAS_NULL
|
TSROW_HAS_NONE
:
nDataT
=
BIT1_SIZE
(
pTSchema
->
numOfCols
-
1
);
break
;
case
TSROW_HAS_VAL
|
TSROW_HAS_NONE
:
case
TSROW_HAS_VAL
|
TSROW_HAS_NULL
:
nDataT
=
BIT1_SIZE
(
pTSchema
->
numOfCols
-
1
)
+
pTSchema
->
flen
+
ntv
;
break
;
case
TSROW_HAS_VAL
|
TSROW_HAS_NULL
|
TSROW_HAS_NONE
:
nDataT
=
BIT2_SIZE
(
pTSchema
->
numOfCols
-
1
)
+
pTSchema
->
flen
+
ntv
;
break
;
default:
ASSERT
(
0
);
}
_set_value:
flags
!=
TSROW_HAS_VAL
;
// SET_BIT2(pb, bidx, 2); (todo)
if
(
IS_VAR_DATA_TYPE
(
pTColumn
->
type
))
{
// nv += tPutColVal(pv ? pv + nv : pv, pColVal, pTColumn->type, 1);
uint8_t
tflags
=
0
;
if
(
maxIdx
<=
UINT8_MAX
)
{
nDataK
=
sizeof
(
STSKVRow
)
+
sizeof
(
uint8_t
)
*
nTag
+
nkv
;
tflags
|=
TSROW_KV_SMALL
;
}
else
if
(
maxIdx
<=
UINT16_MAX
)
{
nDataK
=
sizeof
(
STSKVRow
)
+
sizeof
(
uint16_t
)
*
nTag
+
nkv
;
tflags
|=
TSROW_KV_MID
;
}
else
{
// tPutColVal(pf ? pf + pTColumn->offset : pf, pColVal, pTColumn->type, 1);
nDataK
=
sizeof
(
STSKVRow
)
+
sizeof
(
uint32_t
)
*
nTag
+
nkv
;
tflags
|=
TSROW_KV_BIG
;
}
continue
;
}
ASSERT
(
flags
);
switch
(
flags
&
0xf
)
{
case
TSROW_HAS_NONE
:
case
TSROW_HAS_NULL
:
pRow
->
nData
=
0
;
break
;
case
TSROW_HAS_VAL
:
pRow
->
nData
=
pTSchema
->
flen
+
nv
;
break
;
case
TSROW_HAS_NULL
|
TSROW_HAS_NONE
:
pRow
->
nData
=
BIT1_SIZE
(
pTSchema
->
numOfCols
-
1
);
break
;
case
TSROW_HAS_VAL
|
TSROW_HAS_NONE
:
case
TSROW_HAS_VAL
|
TSROW_HAS_NULL
:
pRow
->
nData
=
BIT1_SIZE
(
pTSchema
->
numOfCols
-
1
)
+
pTSchema
->
flen
+
nv
;
break
;
case
TSROW_HAS_VAL
|
TSROW_HAS_NULL
|
TSROW_HAS_NONE
:
pRow
->
nData
=
BIT2_SIZE
(
pTSchema
->
numOfCols
-
1
)
+
pTSchema
->
flen
+
nv
;
break
;
default:
break
;
if
(
nDataT
<
nDataK
)
{
nData
=
nDataT
;
}
else
{
nData
=
nDataK
;
flags
|=
tflags
;
}
}
}
static
void
tMapTSRowNew
(
SArray
*
pArray
,
STSchema
*
pTSchema
,
STSRow2
*
pRow
)
{
int32_t
nColVal
=
taosArrayGetSize
(
pArray
);
STColumn
*
pTColumn
;
SColVal
*
pColVal
;
ASSERT
(
nColVal
>
0
);
pRow
->
sver
=
pTSchema
->
version
;
// ts
pTColumn
=
&
pTSchema
->
columns
[
0
];
pColVal
=
(
SColVal
*
)
taosArrayGet
(
pArray
,
0
);
// alloc
if
(
pBuilder
)
{
// create from a builder
if
(
nData
==
0
)
{
pBuilder
->
tsRow
.
nData
=
0
;
pBuilder
->
tsRow
.
pData
=
NULL
;
}
else
{
if
(
pBuilder
->
szBuf
<
nData
)
{
uint8_t
*
p
=
taosMemoryRealloc
(
pBuilder
->
pBuf
,
nData
);
if
(
p
==
NULL
)
{
code
=
TSDB_CODE_OUT_OF_MEMORY
;
goto
_exit
;
}
pBuilder
->
pBuf
=
p
;
pBuilder
->
szBuf
=
nData
;
}
ASSERT
(
pTColumn
->
colId
==
0
&&
pColVal
->
cid
==
0
);
ASSERT
(
pTColumn
->
type
==
TSDB_DATA_TYPE_TIMESTAMP
);
pBuilder
->
tsRow
.
nData
=
nData
;
pBuilder
->
tsRow
.
pData
=
pBuilder
->
pBuf
;
}
pRow
->
ts
=
pColVal
->
value
.
ts
;
*
ppRow
=
&
pBuilder
->
tsRow
;
}
else
{
// create a new one
*
ppRow
=
(
STSRow2
*
)
taosMemoryMalloc
(
sizeof
(
STSRow2
));
if
(
*
ppRow
==
NULL
)
{
code
=
TSDB_CODE_OUT_OF_MEMORY
;
goto
_exit
;
}
if
(
nData
==
0
)
{
(
*
ppRow
)
->
nData
=
0
;
(
*
ppRow
)
->
pData
=
NULL
;
}
else
{
(
*
ppRow
)
->
nData
=
nData
;
(
*
ppRow
)
->
pData
=
taosMemoryMalloc
(
nData
);
if
((
*
ppRow
)
->
pData
==
NULL
)
{
taosMemoryFree
(
*
ppRow
);
code
=
TSDB_CODE_OUT_OF_MEMORY
;
goto
_exit
;
}
}
}
// other fields
int32_t
iColVal
=
1
;
uint32_t
nv
=
0
;
uint8_t
*
pv
=
NULL
;
uint8_t
*
pidx
=
NULL
;
uint8_t
flags
=
0
;
int16_t
nCol
=
0
;
for
(
int32_t
iColumn
=
1
;
iColumn
<
pTSchema
->
numOfCols
;
iColumn
++
)
{
pTColumn
=
&
pTSchema
->
columns
[
iColumn
];
// build
(
*
ppRow
)
->
flags
=
flags
;
(
*
ppRow
)
->
sver
=
pTSchema
->
version
;
if
(
iColVal
<
nColVal
)
{
pColVal
=
(
SColVal
*
)
taosArrayGet
(
pArray
,
iColVal
);
pColVal
=
(
SColVal
*
)
taosArrayGet
(
pArray
,
0
);
(
*
ppRow
)
->
ts
=
pColVal
->
value
.
ts
;
if
((
*
ppRow
)
->
pData
)
{
STSKVRow
*
pTSKVRow
=
NULL
;
uint8_t
*
pidx
=
NULL
;
uint8_t
*
pkv
=
NULL
;
uint8_t
*
pb
=
NULL
;
uint8_t
*
pf
=
NULL
;
uint8_t
*
ptv
=
NULL
;
nkv
=
0
;
ntv
=
0
;
iColVal
=
1
;
if
(
flags
&
0xf0
==
0
)
{
switch
(
flags
&
0xf
)
{
case
TSROW_HAS_VAL
:
pf
=
(
*
ppRow
)
->
pData
;
ptv
=
pf
+
pTSchema
->
flen
;
break
;
case
TSROW_HAS_NULL
|
TSROW_HAS_NONE
:
pb
=
(
*
ppRow
)
->
pData
;
break
;
case
TSROW_HAS_VAL
|
TSROW_HAS_NONE
:
case
TSROW_HAS_VAL
|
TSROW_HAS_NULL
:
pb
=
(
*
ppRow
)
->
pData
;
pf
=
pb
+
BIT1_SIZE
(
pTSchema
->
numOfCols
-
1
);
ptv
=
pf
+
pTSchema
->
flen
;
break
;
case
TSROW_HAS_VAL
|
TSROW_HAS_NULL
|
TSROW_HAS_NONE
:
pb
=
(
*
ppRow
)
->
pData
;
pf
=
pb
+
BIT2_SIZE
(
pTSchema
->
numOfCols
-
1
);
ptv
=
pf
+
pTSchema
->
flen
;
break
;
default:
ASSERT
(
0
);
}
}
else
{
pColVal
=
NULL
;
pTSKVRow
=
(
STSKVRow
*
)(
*
ppRow
)
->
pData
;
pTSKVRow
->
nCols
=
0
;
pidx
=
pTSKVRow
->
idx
;
if
(
flags
&
TSROW_KV_SMALL
)
{
pkv
=
pidx
+
sizeof
(
uint8_t
)
*
nTag
;
}
else
if
(
flags
&
TSROW_KV_MID
)
{
pkv
=
pidx
+
sizeof
(
uint16_t
)
*
nTag
;
}
else
{
pkv
=
pidx
+
sizeof
(
uint32_t
)
*
nTag
;
}
}
if
(
pColVal
)
{
if
(
pColVal
->
cid
==
pTColumn
->
colId
)
{
iColVal
++
;
if
(
pColVal
->
isNone
)
{
for
(
int32_t
iColumn
=
1
;
iColumn
<
pTSchema
->
numOfCols
;
iColumn
++
)
{
pTColumn
=
&
pTSchema
->
columns
[
iColumn
];
if
(
iColVal
<
nColVal
)
{
pColVal
=
(
SColVal
*
)
taosArrayGet
(
pArray
,
iColVal
);
}
else
{
pColVal
=
NULL
;
}
if
(
pColVal
)
{
if
(
pColVal
->
cid
==
pTColumn
->
colId
)
{
iColVal
++
;
if
(
pColVal
->
isNone
)
{
goto
_set_none
;
}
else
if
(
pColVal
->
isNull
)
{
goto
_set_null
;
}
else
{
goto
_set_value
;
}
}
else
if
(
pColVal
->
cid
>
pTColumn
->
colId
)
{
goto
_set_none
;
}
else
if
(
pColVal
->
isNull
)
{
goto
_set_null
;
}
else
{
goto
_set_value
;
ASSERT
(
0
)
;
}
}
else
if
(
pColVal
->
cid
>
pTColumn
->
colId
)
{
goto
_set_none
;
}
else
{
ASSERT
(
0
)
;
goto
_set_none
;
}
}
else
{
goto
_set_none
;
}
_set_none:
flags
|=
TSROW_HAS_NONE
;
continue
;
_set_null:
flags
!=
TSROW_HAS_NULL
;
pidx
[
nCol
++
]
=
nv
;
// nv += tPutColVal(pv ? pv + nv : pv, pColVal, pTColumn->type, 0);
continue
;
_set_value:
flags
!=
TSROW_HAS_VAL
;
pidx
[
nCol
++
]
=
nv
;
// nv += tPutColVal(pv ? pv + nv : pv, pColVal, pTColumn->type, 0);
continue
;
}
if
(
nv
<=
UINT8_MAX
)
{
// small
}
else
if
(
nv
<=
UINT16_MAX
)
{
// mid
}
else
{
// large
}
}
_set_none:
if
(
flags
&
0xf0
==
0
)
{
setBitMap
(
pb
,
0
,
iColumn
-
1
,
flags
);
}
continue
;
// try-decide-build
int32_t
tTSRowNew
(
SArray
*
pArray
,
STSchema
*
pTSchema
,
STSRow2
**
ppRow
)
{
int32_t
code
=
0
;
STSRow2
rowT
=
{
0
};
STSRow2
rowM
=
{
0
};
_set_null:
if
(
flags
&
0xf0
==
0
)
{
setBitMap
(
pb
,
1
,
iColumn
-
1
,
flags
);
}
else
{
SET_IDX
(
pidx
,
pTSKVRow
->
nCols
,
nkv
,
flags
);
pTSKVRow
->
nCols
++
;
nkv
+=
tPutI16v
(
pkv
+
nkv
,
-
pTColumn
->
colId
);
}
continue
;
// try
tTupleTSRowNew
(
pArray
,
pTSchema
,
&
rowT
);
tMapTSRowNew
(
pArray
,
pTSchema
,
&
rowM
);
_set_value:
if
(
flags
&
0xf0
==
0
)
{
setBitMap
(
pb
,
2
,
iColumn
-
1
,
flags
);
// decide & build
if
(
rowT
.
nData
<=
rowM
.
nData
)
{
tTupleTSRowNew
(
pArray
,
pTSchema
,
&
rowT
);
}
else
{
tMapTSRowNew
(
pArray
,
pTSchema
,
&
rowM
);
if
(
IS_VAR_DATA_TYPE
(
pTColumn
->
type
))
{
*
(
VarDataOffsetT
*
)(
pf
+
pTColumn
->
offset
)
=
ntv
;
ntv
+=
tPutValue
(
ptv
+
ntv
,
&
pColVal
->
value
,
pTColumn
->
type
);
}
else
{
tPutValue
(
pf
+
pTColumn
->
offset
,
&
pColVal
->
value
,
pTColumn
->
type
);
}
}
else
{
SET_IDX
(
pidx
,
pTSKVRow
->
nCols
,
nkv
,
flags
);
pTSKVRow
->
nCols
++
;
nkv
+=
tPutI16v
(
pkv
+
nkv
,
pColVal
->
cid
);
nkv
+=
tPutValue
(
pkv
+
nkv
,
&
pColVal
->
value
,
pTColumn
->
type
);
}
continue
;
}
}
_exit:
return
code
;
}
...
...
@@ -626,266 +738,8 @@ void tTSchemaDestroy(STSchema *pTSchema) {
}
// STSRowBuilder
#if 0
int32_t tTSRowBuilderInit(STSRowBuilder *pBuilder, int32_t sver, int32_t nCols, SSchema *pSchema) {
if (tTSchemaCreate(sver, pSchema, nCols, &pBuilder->pTSchema) < 0) return -1;
pBuilder->szBitMap1 = BIT1_SIZE(nCols - 1);
pBuilder->szBitMap2 = BIT2_SIZE(nCols - 1);
pBuilder->szKVBuf =
sizeof(STSKVRow) + sizeof(SKVIdx) * (nCols - 1) + pBuilder->pTSchema->flen + pBuilder->pTSchema->vlen;
pBuilder->szTPBuf = pBuilder->szBitMap2 + pBuilder->pTSchema->flen + pBuilder->pTSchema->vlen;
pBuilder->pKVBuf = taosMemoryMalloc(pBuilder->szKVBuf);
if (pBuilder->pKVBuf == NULL) {
terrno = TSDB_CODE_OUT_OF_MEMORY;
tTSchemaDestroy(pBuilder->pTSchema);
return -1;
}
pBuilder->pTPBuf = taosMemoryMalloc(pBuilder->szTPBuf);
if (pBuilder->pTPBuf == NULL) {
terrno = TSDB_CODE_OUT_OF_MEMORY;
taosMemoryFree(pBuilder->pKVBuf);
tTSchemaDestroy(pBuilder->pTSchema);
return -1;
}
return 0;
}
void tTSRowBuilderClear(STSRowBuilder *pBuilder) {
if (pBuilder->pTPBuf) {
taosMemoryFree(pBuilder->pTPBuf);
pBuilder->pTPBuf = NULL;
}
if (pBuilder->pKVBuf) {
taosMemoryFree(pBuilder->pKVBuf);
pBuilder->pKVBuf = NULL;
}
tTSchemaDestroy(pBuilder->pTSchema);
pBuilder->pTSchema = NULL;
}
void tTSRowBuilderReset(STSRowBuilder *pBuilder) {
for (int32_t iCol = pBuilder->pTSchema->numOfCols - 1; iCol >= 0; iCol--) {
STColumn *pTColumn = &pBuilder->pTSchema->columns[iCol];
COL_CLR_SET(pTColumn->flags);
}
pBuilder->iCol = 0;
((STSKVRow *)pBuilder->pKVBuf)->nCols = 0;
pBuilder->vlenKV = 0;
pBuilder->vlenTP = 0;
pBuilder->row.flags = 0;
}
int32_t tTSRowBuilderPut(STSRowBuilder *pBuilder, int32_t cid, uint8_t *pData, uint32_t nData) {
STColumn *pTColumn = &pBuilder->pTSchema->columns[pBuilder->iCol];
uint8_t *p;
int32_t iCol;
STSKVRow *pTSKVRow = (STSKVRow *)pBuilder->pKVBuf;
// use interp search
if (pTColumn->colId < cid) { // right search
for (iCol = pBuilder->iCol + 1; iCol < pBuilder->pTSchema->numOfCols; iCol++) {
pTColumn = &pBuilder->pTSchema->columns[iCol];
if (pTColumn->colId >= cid) break;
}
} else if (pTColumn->colId > cid) { // left search
for (iCol = pBuilder->iCol - 1; iCol >= 0; iCol--) {
pTColumn = &pBuilder->pTSchema->columns[iCol];
if (pTColumn->colId <= cid) break;
}
}
if (pTColumn->colId != cid || COL_IS_SET(pTColumn->flags)) {
return -1;
}
pBuilder->iCol = iCol;
// set value
if (cid == 0) {
ASSERT(pData && nData == sizeof(TSKEY) && iCol == 0);
pBuilder->row.ts = *(TSKEY *)pData;
pTColumn->flags |= COL_SET_VAL;
} else {
if (pData) {
// set VAL
pBuilder->row.flags |= TSROW_HAS_VAL;
pTColumn->flags |= COL_SET_VAL;
/* KV */
if (1) { // avoid KV at some threshold (todo)
pTSKVRow->idx[pTSKVRow->nCols].cid = cid;
pTSKVRow->idx[pTSKVRow->nCols].offset = pBuilder->vlenKV;
p = pBuilder->pKVBuf + sizeof(STSKVRow) + sizeof(SKVIdx) * (pBuilder->pTSchema->numOfCols - 1) +
pBuilder->vlenKV;
if (IS_VAR_DATA_TYPE(pTColumn->type)) {
ASSERT(nData <= pTColumn->bytes);
pBuilder->vlenKV += tPutBinary(p, pData, nData);
} else {
ASSERT(nData == pTColumn->bytes);
memcpy(p, pData, nData);
pBuilder->vlenKV += nData;
}
}
/* TUPLE */
p = pBuilder->pTPBuf + pBuilder->szBitMap2 + pTColumn->offset;
if (IS_VAR_DATA_TYPE(pTColumn->type)) {
ASSERT(nData <= pTColumn->bytes);
*(int32_t *)p = pBuilder->vlenTP;
p = pBuilder->pTPBuf + pBuilder->szBitMap2 + pBuilder->pTSchema->flen + pBuilder->vlenTP;
pBuilder->vlenTP += tPutBinary(p, pData, nData);
} else {
ASSERT(nData == pTColumn->bytes);
memcpy(p, pData, nData);
}
} else {
// set NULL
pBuilder->row.flags |= TSROW_HAS_NULL;
pTColumn->flags |= COL_SET_NULL;
pTSKVRow->idx[pTSKVRow->nCols].cid = cid;
pTSKVRow->idx[pTSKVRow->nCols].offset = -1;
}
pTSKVRow->nCols++;
}
return 0;
}
static FORCE_INLINE int tSKVIdxCmprFn(const void *p1, const void *p2) {
SKVIdx *pKVIdx1 = (SKVIdx *)p1;
SKVIdx *pKVIdx2 = (SKVIdx *)p2;
if (pKVIdx1->cid > pKVIdx2->cid) {
return 1;
} else if (pKVIdx1->cid < pKVIdx2->cid) {
return -1;
}
return 0;
}
static void setBitMap(uint8_t *p, STSchema *pTSchema, uint8_t flags) {
int32_t bidx;
STColumn *pTColumn;
for (int32_t iCol = 1; iCol < pTSchema->numOfCols; iCol++) {
pTColumn = &pTSchema->columns[iCol];
bidx = iCol - 1;
switch (flags) {
case TSROW_HAS_NULL | TSROW_HAS_NONE:
if (pTColumn->flags & COL_SET_NULL) {
SET_BIT1(p, bidx, (uint8_t)1);
} else {
SET_BIT1(p, bidx, (uint8_t)0);
}
break;
case TSROW_HAS_VAL | TSROW_HAS_NULL | TSROW_HAS_NONE:
if (pTColumn->flags & COL_SET_NULL) {
SET_BIT2(p, bidx, (uint8_t)1);
} else if (pTColumn->flags & COL_SET_VAL) {
SET_BIT2(p, bidx, (uint8_t)2);
} else {
SET_BIT2(p, bidx, (uint8_t)0);
}
break;
default:
if (pTColumn->flags & COL_SET_VAL) {
SET_BIT1(p, bidx, (uint8_t)1);
} else {
SET_BIT1(p, bidx, (uint8_t)0);
}
break;
}
}
}
int32_t tTSRowBuilderGetRow(STSRowBuilder *pBuilder, const STSRow2 **ppRow) {
int32_t nDataTP, nDataKV;
STSKVRow *pTSKVRow = (STSKVRow *)pBuilder->pKVBuf;
int32_t nCols = pBuilder->pTSchema->numOfCols;
// error not set ts
if (!COL_IS_SET(pBuilder->pTSchema->columns->flags)) {
return -1;
}
ASSERT(pTSKVRow->nCols < nCols);
if (pTSKVRow->nCols < nCols - 1) {
pBuilder->row.flags |= TSROW_HAS_NONE;
}
ASSERT((pBuilder->row.flags & 0xf) != 0);
*(ppRow) = &pBuilder->row;
switch (pBuilder->row.flags & 0xf) {
case TSROW_HAS_NONE:
case TSROW_HAS_NULL:
pBuilder->row.nData = 0;
pBuilder->row.pData = NULL;
return 0;
case TSROW_HAS_NULL | TSROW_HAS_NONE:
nDataTP = pBuilder->szBitMap1;
break;
case TSROW_HAS_VAL:
nDataTP = pBuilder->pTSchema->flen + pBuilder->vlenTP;
break;
case TSROW_HAS_VAL | TSROW_HAS_NONE:
case TSROW_HAS_VAL | TSROW_HAS_NULL:
nDataTP = pBuilder->szBitMap1 + pBuilder->pTSchema->flen + pBuilder->vlenTP;
break;
case TSROW_HAS_VAL | TSROW_HAS_NULL | TSROW_HAS_NONE:
nDataTP = pBuilder->szBitMap2 + pBuilder->pTSchema->flen + pBuilder->vlenTP;
break;
default:
ASSERT(0);
}
nDataKV = sizeof(STSKVRow) + sizeof(SKVIdx) * pTSKVRow->nCols + pBuilder->vlenKV;
pBuilder->row.sver = pBuilder->pTSchema->version;
if (nDataKV < nDataTP) {
// generate KV row
ASSERT((pBuilder->row.flags & 0xf) != TSROW_HAS_VAL);
pBuilder->row.flags |= TSROW_KV_ROW;
pBuilder->row.nData = nDataKV;
pBuilder->row.pData = pBuilder->pKVBuf;
qsort(pTSKVRow->idx, pTSKVRow->nCols, sizeof(SKVIdx), tSKVIdxCmprFn);
if (pTSKVRow->nCols < nCols - 1) {
memmove(&pTSKVRow->idx[pTSKVRow->nCols], &pTSKVRow->idx[nCols - 1], pBuilder->vlenKV);
}
} else {
// generate TUPLE row
pBuilder->row.nData = nDataTP;
uint8_t *p;
uint8_t flags = (pBuilder->row.flags & 0xf);
if (flags == TSROW_HAS_VAL) {
pBuilder->row.pData = pBuilder->pTPBuf + pBuilder->szBitMap2;
} else {
if (flags == (TSROW_HAS_VAL | TSROW_HAS_NULL | TSROW_HAS_NONE)) {
pBuilder->row.pData = pBuilder->pTPBuf;
} else {
pBuilder->row.pData = pBuilder->pTPBuf + pBuilder->szBitMap2 - pBuilder->szBitMap1;
}
setBitMap(pBuilder->row.pData, pBuilder->pTSchema, flags);
}
}
return 0;
}
#endif
// STag
static
int
tTagValCmprFn
(
const
void
*
p1
,
const
void
*
p2
)
{
if
(((
STagVal
*
)
p1
)
->
cid
<
((
STagVal
*
)
p2
)
->
cid
)
{
return
-
1
;
...
...
@@ -953,25 +807,6 @@ static void debugPrintTagVal(int8_t type, const void *val, int32_t vlen, const c
}
}
// if (isLarge) {
// p = (uint8_t *)&((int16_t *)pTag->idx)[pTag->nTag];
// } else {
// p = (uint8_t *)&pTag->idx[pTag->nTag];
// }
// (*ppArray) = taosArrayInit(pTag->nTag + 1, sizeof(STagVal));
// if (*ppArray == NULL) {
// code = TSDB_CODE_OUT_OF_MEMORY;
// goto _err;
// }
// for (int16_t iTag = 0; iTag < pTag->nTag; iTag++) {
// if (isLarge) {
// offset = ((int16_t *)pTag->idx)[iTag];
// } else {
// offset = pTag->idx[iTag];
// }
void
debugPrintSTag
(
STag
*
pTag
,
const
char
*
tag
,
int32_t
ln
)
{
int8_t
isJson
=
pTag
->
flags
&
TD_TAG_JSON
;
int8_t
isLarge
=
pTag
->
flags
&
TD_TAG_LARGE
;
...
...
@@ -1020,7 +855,7 @@ void debugCheckTags(STag *pTag) {
}
ASSERT
(
pTag
->
nTag
<=
128
&&
pTag
->
nTag
>=
0
);
ASSERT
(
pTag
->
ver
<=
512
&&
pTag
->
ver
>=
0
);
// temp condition for pTag->ver
ASSERT
(
pTag
->
ver
<=
512
&&
pTag
->
ver
>=
0
);
// temp condition for pTag->ver
}
static
int32_t
tPutTagVal
(
uint8_t
*
p
,
STagVal
*
pTagVal
,
int8_t
isJson
)
{
...
...
@@ -1133,7 +968,7 @@ int32_t tTagNew(SArray *pArray, int32_t version, int8_t isJson, STag **ppTag) {
debugPrintSTag
(
*
ppTag
,
__func__
,
__LINE__
);
#endif
debugCheckTags
(
*
ppTag
);
// TODO: remove this line after debug
debugCheckTags
(
*
ppTag
);
// TODO: remove this line after debug
return
code
;
_err:
...
...
@@ -1215,9 +1050,7 @@ int32_t tEncodeTag(SEncoder *pEncoder, const STag *pTag) {
return
tEncodeBinary
(
pEncoder
,
(
const
uint8_t
*
)
pTag
,
pTag
->
len
);
}
int32_t
tDecodeTag
(
SDecoder
*
pDecoder
,
STag
**
ppTag
)
{
return
tDecodeBinary
(
pDecoder
,
(
uint8_t
**
)
ppTag
,
NULL
);
}
int32_t
tDecodeTag
(
SDecoder
*
pDecoder
,
STag
**
ppTag
)
{
return
tDecodeBinary
(
pDecoder
,
(
uint8_t
**
)
ppTag
,
NULL
);
}
int32_t
tTagToValArray
(
const
STag
*
pTag
,
SArray
**
ppArray
)
{
int32_t
code
=
0
;
...
...
source/dnode/mgmt/exe/dmMain.c
浏览文件 @
74513630
...
...
@@ -216,7 +216,7 @@ int main(int argc, char const *argv[]) {
return
-
1
;
}
dInfo
(
"start to
ru
n dnode"
);
dInfo
(
"start to
ope
n dnode"
);
dmSetSignalHandle
();
int32_t
code
=
dmRun
();
dInfo
(
"shutting down the service"
);
...
...
source/dnode/mgmt/mgmt_vnode/src/vmHandle.c
浏览文件 @
74513630
...
...
@@ -277,6 +277,8 @@ _OVER:
if
(
code
!=
0
)
{
vnodeClose
(
pImpl
);
vnodeDestroy
(
path
,
pMgmt
->
pTfs
);
}
else
{
dInfo
(
"vgId:%d, vnode is created"
,
createReq
.
vgId
);
}
tFreeSCreateVnodeReq
(
&
createReq
);
...
...
source/dnode/mgmt/mgmt_vnode/src/vmWorker.c
浏览文件 @
74513630
...
...
@@ -91,51 +91,52 @@ static void vmProcessFetchQueue(SQueueInfo *pInfo, SRpcMsg *pMsg) {
}
static
void
vmProcessWriteQueue
(
SQueueInfo
*
pInfo
,
STaosQall
*
qall
,
int32_t
numOfMsgs
)
{
int32_t
code
=
0
;
SRpcMsg
*
pMsg
=
NULL
;
SVnodeObj
*
pVnode
=
pInfo
->
ahandle
;
SArray
*
pArray
=
taosArrayInit
(
numOfMsgs
,
sizeof
(
SRpcMsg
*
));
if
(
pArray
==
NULL
)
{
dError
(
"failed to process %d msgs in write-queue since %s"
,
numOfMsgs
,
terrstr
());
return
;
}
int64_t
sync
=
vnodeGetSyncHandle
(
pVnode
->
pImpl
);
SArray
*
pArray
=
taosArrayInit
(
numOfMsgs
,
sizeof
(
SRpcMsg
**
));
for
(
int32_t
i
=
0
;
i
<
numOfMsgs
;
++
i
)
{
SRpcMsg
*
pMsg
=
NULL
;
for
(
int32_t
m
=
0
;
m
<
numOfMsgs
;
m
++
)
{
if
(
taosGetQitem
(
qall
,
(
void
**
)
&
pMsg
)
==
0
)
continue
;
dTrace
(
"vgId:%d, get msg:%p from vnode-write queue, type:%s"
,
pVnode
->
vgId
,
pMsg
,
TMSG_INFO
(
pMsg
->
msgType
));
dTrace
(
"msg:%p, get from vnode-write queue"
,
pMsg
);
if
(
taosArrayPush
(
pArray
,
&
pMsg
)
==
NULL
)
{
d
Trace
(
"msg:%p, failed to push to array since %s"
,
pMsg
,
terrstr
()
);
d
Error
(
"vgId:%d, failed to push msg:%p to vnode-write array"
,
pVnode
->
vgId
,
pMsg
);
vmSendRsp
(
pMsg
,
TSDB_CODE_OUT_OF_MEMORY
);
}
}
for
(
int
i
=
0
;
i
<
taosArrayGetSize
(
pArray
);
i
++
)
{
SRpcMsg
*
pMsg
=
*
(
SRpcMsg
**
)
taosArrayGet
(
pArray
,
i
);
SRpcMsg
rsp
=
{.
info
=
pMsg
->
info
}
;
for
(
int
32_t
m
=
0
;
m
<
taosArrayGetSize
(
pArray
);
m
++
)
{
pMsg
=
*
(
SRpcMsg
**
)
taosArrayGet
(
pArray
,
m
);
code
=
vnodePreprocessReq
(
pVnode
->
pImpl
,
pMsg
)
;
vnodePreprocessReq
(
pVnode
->
pImpl
,
pMsg
);
if
(
code
==
TSDB_CODE_ACTION_IN_PROGRESS
)
continue
;
if
(
code
!=
0
)
{
dError
(
"vgId:%d, msg:%p failed to process since %s"
,
pVnode
->
vgId
,
pMsg
,
tstrerror
(
code
));
vmSendRsp
(
pMsg
,
code
);
continue
;
}
int32_t
ret
=
syncPropose
(
vnodeGetSyncHandle
(
pVnode
->
pImpl
),
pMsg
,
false
);
if
(
ret
==
TAOS_SYNC_PROPOSE_NOT_LEADER
)
{
dTrace
(
"msg:%p, is redirect since not leader, vgId:%d "
,
pMsg
,
pVnode
->
vgId
);
rsp
.
code
=
TSDB_CODE_RPC_REDIRECT
;
SEpSet
newEpSet
;
syncGetEpSet
(
vnodeGetSyncHandle
(
pVnode
->
pImpl
),
&
newEpSet
);
code
=
syncPropose
(
sync
,
pMsg
,
false
);
if
(
code
==
TAOS_SYNC_PROPOSE_SUCCESS
)
{
continue
;
}
else
if
(
code
==
TAOS_SYNC_PROPOSE_NOT_LEADER
)
{
dTrace
(
"vgId:%d, msg:%p is redirect since not leader"
,
pVnode
->
vgId
,
pMsg
);
SEpSet
newEpSet
=
{
0
};
syncGetEpSet
(
sync
,
&
newEpSet
);
newEpSet
.
inUse
=
(
newEpSet
.
inUse
+
1
)
%
newEpSet
.
numOfEps
;
SRpcMsg
rsp
=
{.
code
=
TSDB_CODE_RPC_REDIRECT
,
.
info
=
pMsg
->
info
};
tmsgSendRedirectRsp
(
&
rsp
,
&
newEpSet
);
}
else
if
(
ret
==
TAOS_SYNC_PROPOSE_OTHER_ERROR
)
{
rsp
.
code
=
TSDB_CODE_SYN_INTERNAL_ERROR
;
tmsgSendRsp
(
&
rsp
);
}
else
if
(
ret
==
TAOS_SYNC_PROPOSE_SUCCESS
)
{
// send response in applyQ
}
else
{
assert
(
0
);
dError
(
"vgId:%d, msg:%p failed to process since %s"
,
pVnode
->
vgId
,
pMsg
,
tstrerror
(
code
));
vmSendRsp
(
pMsg
,
code
);
}
}
for
(
int32_t
i
=
0
;
i
<
numOfMsgs
;
i
++
)
{
SRpcMsg
*
pMsg
=
*
(
SRpcMsg
**
)
taosArrayGet
(
pArray
,
i
);
dTrace
(
"
msg:%p, is freed"
,
pMsg
);
pMsg
=
*
(
SRpcMsg
**
)
taosArrayGet
(
pArray
,
i
);
dTrace
(
"
vgId:%d, msg:%p, is freed"
,
pVnode
->
vgId
,
pMsg
);
rpcFreeCont
(
pMsg
->
pCont
);
taosFreeQitem
(
pMsg
);
}
...
...
source/dnode/mgmt/node_mgmt/src/dmEnv.c
浏览文件 @
74513630
...
...
@@ -50,26 +50,26 @@ static int32_t dmInitMonitor() {
}
int32_t
dmInit
(
int8_t
rtype
)
{
dInfo
(
"start to init env"
);
dInfo
(
"start to init
dnode
env"
);
if
(
dmCheckRepeatInit
(
dmInstance
())
!=
0
)
return
-
1
;
if
(
dmInitSystem
()
!=
0
)
return
-
1
;
if
(
dmInitMonitor
()
!=
0
)
return
-
1
;
if
(
dmInitDnode
(
dmInstance
(),
rtype
)
!=
0
)
return
-
1
;
dInfo
(
"env is initialized"
);
dInfo
(
"
dnode
env is initialized"
);
return
0
;
}
static
int32_t
dmCheckRepeatCleanup
(
SDnode
*
pDnode
)
{
if
(
atomic_val_compare_exchange_8
(
&
pDnode
->
once
,
DND_ENV_READY
,
DND_ENV_CLEANUP
)
!=
DND_ENV_READY
)
{
dError
(
"env is already cleaned up"
);
dError
(
"
dnode
env is already cleaned up"
);
return
-
1
;
}
return
0
;
}
void
dmCleanup
()
{
dDebug
(
"start to cleanup env"
);
dDebug
(
"start to cleanup
dnode
env"
);
SDnode
*
pDnode
=
dmInstance
();
if
(
dmCheckRepeatCleanup
(
pDnode
)
!=
0
)
return
;
dmCleanupDnode
(
pDnode
);
...
...
@@ -79,7 +79,7 @@ void dmCleanup() {
udfcClose
();
udfStopUdfd
();
taosStopCacheRefreshWorker
();
dInfo
(
"env is cleaned up"
);
dInfo
(
"
dnode
env is cleaned up"
);
taosCloseLog
();
taosCleanupCfg
();
...
...
source/dnode/mgmt/node_util/src/dmEps.c
浏览文件 @
74513630
...
...
@@ -148,7 +148,6 @@ int32_t dmReadEps(SDnodeData *pData) {
code
=
0
;
dDebug
(
"succcessed to read file %s"
,
file
);
dmPrintEps
(
pData
);
_OVER:
if
(
content
!=
NULL
)
taosMemoryFree
(
content
);
...
...
@@ -162,6 +161,7 @@ _OVER:
taosArrayPush
(
pData
->
dnodeEps
,
&
dnodeEp
);
}
dDebug
(
"reset dnode list on startup"
);
dmResetEps
(
pData
,
pData
->
dnodeEps
);
if
(
dmIsEpChanged
(
pData
,
pData
->
dnodeId
,
tsLocalEp
))
{
...
...
@@ -236,11 +236,13 @@ void dmUpdateEps(SDnodeData *pData, SArray *eps) {
int32_t
numOfEpsOld
=
(
int32_t
)
taosArrayGetSize
(
pData
->
dnodeEps
);
if
(
numOfEps
!=
numOfEpsOld
)
{
dDebug
(
"new dnode list get from mnode"
);
dmResetEps
(
pData
,
eps
);
dmWriteEps
(
pData
);
}
else
{
int32_t
size
=
numOfEps
*
sizeof
(
SDnodeEp
);
if
(
memcmp
(
pData
->
dnodeEps
->
pData
,
eps
->
pData
,
size
)
!=
0
)
{
dDebug
(
"new dnode list get from mnode"
);
dmResetEps
(
pData
,
eps
);
dmWriteEps
(
pData
);
}
...
...
@@ -282,7 +284,7 @@ static void dmResetEps(SDnodeData *pData, SArray *dnodeEps) {
static
void
dmPrintEps
(
SDnodeData
*
pData
)
{
int32_t
numOfEps
=
(
int32_t
)
taosArrayGetSize
(
pData
->
dnodeEps
);
dDebug
(
"print dnode
ep
list, num:%d"
,
numOfEps
);
dDebug
(
"print dnode list, num:%d"
,
numOfEps
);
for
(
int32_t
i
=
0
;
i
<
numOfEps
;
i
++
)
{
SDnodeEp
*
pEp
=
taosArrayGet
(
pData
->
dnodeEps
,
i
);
dDebug
(
"dnode:%d, fqdn:%s port:%u is_mnode:%d"
,
pEp
->
id
,
pEp
->
ep
.
fqdn
,
pEp
->
ep
.
port
,
pEp
->
isMnode
);
...
...
source/dnode/mgmt/node_util/src/dmFile.c
浏览文件 @
74513630
...
...
@@ -135,7 +135,7 @@ TdFilePtr dmCheckRunning(const char *dataDir) {
return
NULL
;
}
dDebug
(
"
file:%s is locked
"
,
filepath
);
dDebug
(
"
lock file:%s to prevent repeated starts
"
,
filepath
);
return
pFile
;
}
...
...
source/dnode/mnode/impl/src/mndMnode.c
浏览文件 @
74513630
...
...
@@ -655,7 +655,7 @@ static int32_t mndRetrieveMnodes(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pB
pColInfo
=
taosArrayGet
(
pBlock
->
pDataBlock
,
cols
++
);
colDataAppend
(
pColInfo
,
numOfRows
,
b1
,
false
);
const
char
*
roles
=
"
OFFLINE
"
;
const
char
*
roles
=
"
offline
"
;
if
(
pObj
->
id
==
pMnode
->
selfDnodeId
)
{
roles
=
syncStr
(
TAOS_SYNC_STATE_LEADER
);
}
...
...
@@ -667,9 +667,9 @@ static int32_t mndRetrieveMnodes(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pB
pColInfo
=
taosArrayGet
(
pBlock
->
pDataBlock
,
cols
++
);
colDataAppend
(
pColInfo
,
numOfRows
,
(
const
char
*
)
b2
,
false
);
const
char
*
status
=
"
READY
"
;
if
(
objStatus
==
SDB_STATUS_CREATING
)
status
=
"
CREATING
"
;
if
(
objStatus
==
SDB_STATUS_DROPPING
)
status
=
"
DROPPING
"
;
const
char
*
status
=
"
ready
"
;
if
(
objStatus
==
SDB_STATUS_CREATING
)
status
=
"
creating
"
;
if
(
objStatus
==
SDB_STATUS_DROPPING
)
status
=
"
dropping
"
;
char
b3
[
9
+
VARSTR_HEADER_SIZE
]
=
{
0
};
STR_WITH_MAXSIZE_TO_VARSTR
(
b3
,
status
,
pShow
->
pMeta
->
pSchemas
[
cols
].
bytes
);
pColInfo
=
taosArrayGet
(
pBlock
->
pDataBlock
,
cols
++
);
...
...
source/dnode/mnode/impl/src/mndSubscribe.c
浏览文件 @
74513630
...
...
@@ -390,7 +390,7 @@ static int32_t mndDoRebalance(SMnode *pMnode, const SMqRebInputObj *pInput, SMqR
mInfo
(
"rebalance calculation completed, rebalanced vg:"
);
for
(
int32_t
i
=
0
;
i
<
taosArrayGetSize
(
pOutput
->
rebVgs
);
i
++
)
{
SMqRebOutputVg
*
pOutputRebVg
=
taosArrayGet
(
pOutput
->
rebVgs
,
i
);
mInfo
(
"vgId:%d moved from consumer %"
PRId64
" to consumer %"
PRId64
,
pOutputRebVg
->
pVgEp
->
vgId
,
mInfo
(
"vgId:%d
,
moved from consumer %"
PRId64
" to consumer %"
PRId64
,
pOutputRebVg
->
pVgEp
->
vgId
,
pOutputRebVg
->
oldConsumerId
,
pOutputRebVg
->
newConsumerId
);
}
...
...
source/dnode/mnode/impl/src/mndVgroup.c
浏览文件 @
74513630
...
...
@@ -705,7 +705,7 @@ static int32_t mndRetrieveVgroups(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *p
}
char
buf1
[
20
]
=
{
0
};
const
char
*
role
=
online
?
syncStr
(
pVgroup
->
vnodeGid
[
i
].
role
)
:
"
OFFLINE
"
;
const
char
*
role
=
online
?
syncStr
(
pVgroup
->
vnodeGid
[
i
].
role
)
:
"
offline
"
;
STR_WITH_MAXSIZE_TO_VARSTR
(
buf1
,
role
,
pShow
->
pMeta
->
pSchemas
[
cols
].
bytes
);
pColInfo
=
taosArrayGet
(
pBlock
->
pDataBlock
,
cols
++
);
...
...
source/dnode/vnode/CMakeLists.txt
浏览文件 @
74513630
...
...
@@ -36,7 +36,6 @@ target_sources(
# tsdb
"src/tsdb/tsdbCommit.c"
"src/tsdb/tsdbCommit2.c"
"src/tsdb/tsdbFile.c"
"src/tsdb/tsdbFS.c"
"src/tsdb/tsdbOpen.c"
...
...
source/dnode/vnode/src/inc/meta.h
浏览文件 @
74513630
...
...
@@ -28,12 +28,12 @@ typedef struct SMetaDB SMetaDB;
// metaDebug ==================
// clang-format off
#define metaFatal(...) do { if (metaDebugFlag & DEBUG_FATAL) { taosPrintLog("M
E
TA FATAL ", DEBUG_FATAL, 255, __VA_ARGS__); }} while(0)
#define metaError(...) do { if (metaDebugFlag & DEBUG_ERROR) { taosPrintLog("M
E
TA ERROR ", DEBUG_ERROR, 255, __VA_ARGS__); }} while(0)
#define metaWarn(...) do { if (metaDebugFlag & DEBUG_WARN) { taosPrintLog("M
E
TA WARN ", DEBUG_WARN, 255, __VA_ARGS__); }} while(0)
#define metaInfo(...) do { if (metaDebugFlag & DEBUG_INFO) { taosPrintLog("M
E
TA ", DEBUG_INFO, 255, __VA_ARGS__); }} while(0)
#define metaDebug(...) do { if (metaDebugFlag & DEBUG_DEBUG) { taosPrintLog("M
E
TA ", DEBUG_DEBUG, metaDebugFlag, __VA_ARGS__); }} while(0)
#define metaTrace(...) do { if (metaDebugFlag & DEBUG_TRACE) { taosPrintLog("M
E
TA ", DEBUG_TRACE, metaDebugFlag, __VA_ARGS__); }} while(0)
#define metaFatal(...) do { if (metaDebugFlag & DEBUG_FATAL) { taosPrintLog("MTA FATAL ", DEBUG_FATAL, 255, __VA_ARGS__); }} while(0)
#define metaError(...) do { if (metaDebugFlag & DEBUG_ERROR) { taosPrintLog("MTA ERROR ", DEBUG_ERROR, 255, __VA_ARGS__); }} while(0)
#define metaWarn(...) do { if (metaDebugFlag & DEBUG_WARN) { taosPrintLog("MTA WARN ", DEBUG_WARN, 255, __VA_ARGS__); }} while(0)
#define metaInfo(...) do { if (metaDebugFlag & DEBUG_INFO) { taosPrintLog("MTA ", DEBUG_INFO, 255, __VA_ARGS__); }} while(0)
#define metaDebug(...) do { if (metaDebugFlag & DEBUG_DEBUG) { taosPrintLog("MTA ", DEBUG_DEBUG, metaDebugFlag, __VA_ARGS__); }} while(0)
#define metaTrace(...) do { if (metaDebugFlag & DEBUG_TRACE) { taosPrintLog("MTA ", DEBUG_TRACE, metaDebugFlag, __VA_ARGS__); }} while(0)
// clang-format on
// metaOpen ==================
...
...
source/dnode/vnode/src/inc/vnd.h
浏览文件 @
74513630
...
...
@@ -84,7 +84,7 @@ int32_t vnodeAsyncCommit(SVnode* pVnode);
int32_t
vnodeSyncOpen
(
SVnode
*
pVnode
,
char
*
path
);
void
vnodeSyncStart
(
SVnode
*
pVnode
);
void
vnodeSyncClose
(
SVnode
*
pVnode
);
void
vnodeSyncAlter
(
SVnode
*
pVnode
,
SRpcMsg
*
pMsg
);
int32_t
vnodeSyncAlter
(
SVnode
*
pVnode
,
SRpcMsg
*
pMsg
);
#ifdef __cplusplus
}
...
...
source/dnode/vnode/src/meta/metaOpen.c
浏览文件 @
74513630
...
...
@@ -53,42 +53,42 @@ int metaOpen(SVnode *pVnode, SMeta **ppMeta) {
// open env
ret
=
tdbOpen
(
pMeta
->
path
,
pVnode
->
config
.
szPage
,
pVnode
->
config
.
szCache
,
&
pMeta
->
pEnv
);
if
(
ret
<
0
)
{
metaError
(
"vgId:%d failed to open meta env since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
metaError
(
"vgId:%d
,
failed to open meta env since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
goto
_err
;
}
// open pTbDb
ret
=
tdbTbOpen
(
"table.db"
,
sizeof
(
STbDbKey
),
-
1
,
tbDbKeyCmpr
,
pMeta
->
pEnv
,
&
pMeta
->
pTbDb
);
if
(
ret
<
0
)
{
metaError
(
"vgId:%d failed to open meta table db since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
metaError
(
"vgId:%d
,
failed to open meta table db since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
goto
_err
;
}
// open pSkmDb
ret
=
tdbTbOpen
(
"schema.db"
,
sizeof
(
SSkmDbKey
),
-
1
,
skmDbKeyCmpr
,
pMeta
->
pEnv
,
&
pMeta
->
pSkmDb
);
if
(
ret
<
0
)
{
metaError
(
"vgId:%d failed to open meta schema db since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
metaError
(
"vgId:%d
,
failed to open meta schema db since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
goto
_err
;
}
// open pUidIdx
ret
=
tdbTbOpen
(
"uid.idx"
,
sizeof
(
tb_uid_t
),
sizeof
(
int64_t
),
uidIdxKeyCmpr
,
pMeta
->
pEnv
,
&
pMeta
->
pUidIdx
);
if
(
ret
<
0
)
{
metaError
(
"vgId:%d failed to open meta uid idx since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
metaError
(
"vgId:%d
,
failed to open meta uid idx since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
goto
_err
;
}
// open pNameIdx
ret
=
tdbTbOpen
(
"name.idx"
,
-
1
,
sizeof
(
tb_uid_t
),
NULL
,
pMeta
->
pEnv
,
&
pMeta
->
pNameIdx
);
if
(
ret
<
0
)
{
metaError
(
"vgId:%d failed to open meta name index since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
metaError
(
"vgId:%d
,
failed to open meta name index since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
goto
_err
;
}
// open pCtbIdx
ret
=
tdbTbOpen
(
"ctb.idx"
,
sizeof
(
SCtbIdxKey
),
0
,
ctbIdxKeyCmpr
,
pMeta
->
pEnv
,
&
pMeta
->
pCtbIdx
);
if
(
ret
<
0
)
{
metaError
(
"vgId:%d failed to open meta child table index since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
metaError
(
"vgId:%d
,
failed to open meta child table index since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
goto
_err
;
}
...
...
@@ -100,14 +100,14 @@ int metaOpen(SVnode *pVnode, SMeta **ppMeta) {
taosMkDir
(
indexFullPath
);
ret
=
indexOpen
(
indexOptsCreate
(),
indexFullPath
,
(
SIndex
**
)
&
pMeta
->
pTagIvtIdx
);
if
(
ret
<
0
)
{
metaError
(
"vgId:%d failed to open meta tag index since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
metaError
(
"vgId:%d
,
failed to open meta tag index since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
goto
_err
;
}
#else
ret
=
tdbTbOpen
(
"tag.idx"
,
-
1
,
0
,
tagIdxKeyCmpr
,
pMeta
->
pEnv
,
&
pMeta
->
pTagIdx
);
if
(
ret
<
0
)
{
metaError
(
"vgId:%d failed to open meta tag index since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
metaError
(
"vgId:%d
,
failed to open meta tag index since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
goto
_err
;
}
#endif
...
...
@@ -115,24 +115,24 @@ int metaOpen(SVnode *pVnode, SMeta **ppMeta) {
// open pTtlIdx
ret
=
tdbTbOpen
(
"ttl.idx"
,
sizeof
(
STtlIdxKey
),
0
,
ttlIdxKeyCmpr
,
pMeta
->
pEnv
,
&
pMeta
->
pTtlIdx
);
if
(
ret
<
0
)
{
metaError
(
"vgId:%d failed to open meta ttl index since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
metaError
(
"vgId:%d
,
failed to open meta ttl index since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
goto
_err
;
}
// open pSmaIdx
ret
=
tdbTbOpen
(
"sma.idx"
,
sizeof
(
SSmaIdxKey
),
0
,
smaIdxKeyCmpr
,
pMeta
->
pEnv
,
&
pMeta
->
pSmaIdx
);
if
(
ret
<
0
)
{
metaError
(
"vgId:%d failed to open meta sma index since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
metaError
(
"vgId:%d
,
failed to open meta sma index since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
goto
_err
;
}
// open index
if
(
metaOpenIdx
(
pMeta
)
<
0
)
{
metaError
(
"vgId:%d failed to open meta index since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
metaError
(
"vgId:%d
,
failed to open meta index since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
goto
_err
;
}
metaDebug
(
"vgId:%d meta is opened"
,
TD_VID
(
pVnode
));
metaDebug
(
"vgId:%d
,
meta is opened"
,
TD_VID
(
pVnode
));
*
ppMeta
=
pMeta
;
return
0
;
...
...
source/dnode/vnode/src/meta/metaQuery.c
浏览文件 @
74513630
...
...
@@ -425,7 +425,7 @@ STSmaWrapper *metaGetSmaInfoByTable(SMeta *pMeta, tb_uid_t uid, bool deepCopy) {
for
(
int
i
=
0
;
i
<
pSW
->
number
;
++
i
)
{
smaId
=
*
(
tb_uid_t
*
)
taosArrayGet
(
pSmaIds
,
i
);
if
(
metaGetTableEntryByUid
(
&
mr
,
smaId
)
<
0
)
{
metaWarn
(
"vgId:%d no entry for tbId: %"
PRIi64
", smaId: %"
PRIi64
,
TD_VID
(
pMeta
->
pVnode
),
uid
,
smaId
);
metaWarn
(
"vgId:%d
,
no entry for tbId: %"
PRIi64
", smaId: %"
PRIi64
,
TD_VID
(
pMeta
->
pVnode
),
uid
,
smaId
);
continue
;
}
pTSma
=
pSW
->
tSma
+
smaIdx
;
...
...
@@ -473,7 +473,7 @@ STSma *metaGetSmaInfoByIndex(SMeta *pMeta, int64_t indexUid) {
SMetaReader
mr
=
{
0
};
metaReaderInit
(
&
mr
,
pMeta
,
0
);
if
(
metaGetTableEntryByUid
(
&
mr
,
indexUid
)
<
0
)
{
metaWarn
(
"vgId:%d failed to get table entry for smaId: %"
PRIi64
,
TD_VID
(
pMeta
->
pVnode
),
indexUid
);
metaWarn
(
"vgId:%d
,
failed to get table entry for smaId: %"
PRIi64
,
TD_VID
(
pMeta
->
pVnode
),
indexUid
);
metaReaderClear
(
&
mr
);
return
NULL
;
}
...
...
source/dnode/vnode/src/meta/metaSma.c
浏览文件 @
74513630
...
...
@@ -57,12 +57,12 @@ int32_t metaCreateTSma(SMeta *pMeta, int64_t version, SSmaCfg *pCfg) {
if
(
metaHandleSmaEntry
(
pMeta
,
&
me
)
<
0
)
goto
_err
;
metaDebug
(
"vgId:%d tsma is created, name:%s uid: %"
PRId64
,
TD_VID
(
pMeta
->
pVnode
),
pCfg
->
indexName
,
pCfg
->
indexUid
);
metaDebug
(
"vgId:%d
,
tsma is created, name:%s uid: %"
PRId64
,
TD_VID
(
pMeta
->
pVnode
),
pCfg
->
indexName
,
pCfg
->
indexUid
);
return
0
;
_err:
metaError
(
"vgId:%d failed to create tsma: %s uid: %"
PRId64
" since %s"
,
TD_VID
(
pMeta
->
pVnode
),
pCfg
->
indexName
,
metaError
(
"vgId:%d
,
failed to create tsma: %s uid: %"
PRId64
" since %s"
,
TD_VID
(
pMeta
->
pVnode
),
pCfg
->
indexName
,
pCfg
->
indexUid
,
tstrerror
(
terrno
));
return
-
1
;
}
...
...
source/dnode/vnode/src/meta/metaTable.c
浏览文件 @
74513630
...
...
@@ -79,12 +79,12 @@ int metaCreateSTable(SMeta *pMeta, int64_t version, SVCreateStbReq *pReq) {
if
(
metaHandleEntry
(
pMeta
,
&
me
)
<
0
)
goto
_err
;
metaDebug
(
"vgId:%d super table is created, name:%s uid: %"
PRId64
,
TD_VID
(
pMeta
->
pVnode
),
pReq
->
name
,
pReq
->
suid
);
metaDebug
(
"vgId:%d
,
super table is created, name:%s uid: %"
PRId64
,
TD_VID
(
pMeta
->
pVnode
),
pReq
->
name
,
pReq
->
suid
);
return
0
;
_err:
metaError
(
"vgId:%d failed to create super table: %s uid: %"
PRId64
" since %s"
,
TD_VID
(
pMeta
->
pVnode
),
pReq
->
name
,
metaError
(
"vgId:%d
,
failed to create super table: %s uid: %"
PRId64
" since %s"
,
TD_VID
(
pMeta
->
pVnode
),
pReq
->
name
,
pReq
->
suid
,
tstrerror
(
terrno
));
return
-
1
;
}
...
...
@@ -153,7 +153,7 @@ _drop_super_table:
_exit:
tdbFree
(
pKey
);
tdbFree
(
pData
);
metaDebug
(
"vgId:%d super table %s uid:%"
PRId64
" is dropped"
,
TD_VID
(
pMeta
->
pVnode
),
pReq
->
name
,
pReq
->
suid
);
metaDebug
(
"vgId:%d
,
super table %s uid:%"
PRId64
" is dropped"
,
TD_VID
(
pMeta
->
pVnode
),
pReq
->
name
,
pReq
->
suid
);
return
0
;
}
...
...
@@ -269,12 +269,12 @@ int metaCreateTable(SMeta *pMeta, int64_t version, SVCreateTbReq *pReq) {
if
(
metaHandleEntry
(
pMeta
,
&
me
)
<
0
)
goto
_err
;
metaDebug
(
"vgId:%d table %s uid %"
PRId64
" is created, type:%"
PRId8
,
TD_VID
(
pMeta
->
pVnode
),
pReq
->
name
,
pReq
->
uid
,
metaDebug
(
"vgId:%d
,
table %s uid %"
PRId64
" is created, type:%"
PRId8
,
TD_VID
(
pMeta
->
pVnode
),
pReq
->
name
,
pReq
->
uid
,
pReq
->
type
);
return
0
;
_err:
metaError
(
"vgId:%d failed to create table:%s type:%s since %s"
,
TD_VID
(
pMeta
->
pVnode
),
pReq
->
name
,
metaError
(
"vgId:%d
,
failed to create table:%s type:%s since %s"
,
TD_VID
(
pMeta
->
pVnode
),
pReq
->
name
,
pReq
->
type
==
TSDB_CHILD_TABLE
?
"child table"
:
"normal table"
,
tstrerror
(
terrno
));
return
-
1
;
}
...
...
source/dnode/vnode/src/sma/sma.c
浏览文件 @
74513630
...
...
@@ -20,7 +20,7 @@ int32_t tdProcessTSmaInsert(SSma* pSma, int64_t indexUid, const char* msg) {
int32_t
code
=
TSDB_CODE_SUCCESS
;
if
((
code
=
tdProcessTSmaInsertImpl
(
pSma
,
indexUid
,
msg
))
<
0
)
{
smaWarn
(
"vgId:%d insert tsma data failed since %s"
,
SMA_VID
(
pSma
),
tstrerror
(
terrno
));
smaWarn
(
"vgId:%d
,
insert tsma data failed since %s"
,
SMA_VID
(
pSma
),
tstrerror
(
terrno
));
}
// TODO: destroy SSDataBlocks(msg)
return
code
;
...
...
@@ -30,7 +30,7 @@ int32_t tdProcessTSmaCreate(SSma* pSma, int64_t version, const char* msg) {
int32_t
code
=
TSDB_CODE_SUCCESS
;
if
((
code
=
tdProcessTSmaCreateImpl
(
pSma
,
version
,
msg
))
<
0
)
{
smaWarn
(
"vgId:%d create tsma failed since %s"
,
SMA_VID
(
pSma
),
tstrerror
(
terrno
));
smaWarn
(
"vgId:%d
,
create tsma failed since %s"
,
SMA_VID
(
pSma
),
tstrerror
(
terrno
));
}
// TODO: destroy SSDataBlocks(msg)
return
code
;
...
...
@@ -39,7 +39,7 @@ int32_t tdProcessTSmaCreate(SSma* pSma, int64_t version, const char* msg) {
int32_t
tdUpdateExpireWindow
(
SSma
*
pSma
,
const
SSubmitReq
*
pMsg
,
int64_t
version
)
{
int32_t
code
=
TSDB_CODE_SUCCESS
;
if
((
code
=
tdUpdateExpiredWindowImpl
(
pSma
,
pMsg
,
version
))
<
0
)
{
smaWarn
(
"vgId:%d update expired sma window failed since %s"
,
SMA_VID
(
pSma
),
tstrerror
(
terrno
));
smaWarn
(
"vgId:%d
,
update expired sma window failed since %s"
,
SMA_VID
(
pSma
),
tstrerror
(
terrno
));
}
return
code
;
}
...
...
@@ -47,7 +47,7 @@ int32_t tdUpdateExpireWindow(SSma* pSma, const SSubmitReq* pMsg, int64_t version
int32_t
tdGetTSmaData
(
SSma
*
pSma
,
char
*
pData
,
int64_t
indexUid
,
TSKEY
querySKey
,
int32_t
nMaxResult
)
{
int32_t
code
=
TSDB_CODE_SUCCESS
;
if
((
code
=
tdGetTSmaDataImpl
(
pSma
,
pData
,
indexUid
,
querySKey
,
nMaxResult
))
<
0
)
{
smaWarn
(
"vgId:%d get tSma data failed since %s"
,
SMA_VID
(
pSma
),
tstrerror
(
terrno
));
smaWarn
(
"vgId:%d
,
get tSma data failed since %s"
,
SMA_VID
(
pSma
),
tstrerror
(
terrno
));
}
return
code
;
}
...
...
source/dnode/vnode/src/sma/smaEnv.c
浏览文件 @
74513630
...
...
@@ -222,7 +222,7 @@ int32_t tdRefSmaStat(SSma *pSma, SSmaStat *pStat) {
if
(
!
pStat
)
return
0
;
int
ref
=
T_REF_INC
(
pStat
);
smaDebug
(
"vgId:%d ref sma stat:%p, val:%d"
,
SMA_VID
(
pSma
),
pStat
,
ref
);
smaDebug
(
"vgId:%d
,
ref sma stat:%p, val:%d"
,
SMA_VID
(
pSma
),
pStat
,
ref
);
return
0
;
}
...
...
@@ -230,7 +230,7 @@ int32_t tdUnRefSmaStat(SSma *pSma, SSmaStat *pStat) {
if
(
!
pStat
)
return
0
;
int
ref
=
T_REF_DEC
(
pStat
);
smaDebug
(
"vgId:%d unref sma stat:%p, val:%d"
,
SMA_VID
(
pSma
),
pStat
,
ref
);
smaDebug
(
"vgId:%d
,
unref sma stat:%p, val:%d"
,
SMA_VID
(
pSma
),
pStat
,
ref
);
return
0
;
}
...
...
@@ -321,7 +321,7 @@ int32_t tdDestroySmaState(SSmaStat *pSmaStat, int8_t smaType) {
int32_t
tdLockSma
(
SSma
*
pSma
)
{
int
code
=
taosThreadMutexLock
(
&
pSma
->
mutex
);
if
(
code
!=
0
)
{
smaError
(
"vgId:%d failed to lock td since %s"
,
SMA_VID
(
pSma
),
strerror
(
errno
));
smaError
(
"vgId:%d
,
failed to lock td since %s"
,
SMA_VID
(
pSma
),
strerror
(
errno
));
terrno
=
TAOS_SYSTEM_ERROR
(
code
);
return
-
1
;
}
...
...
@@ -334,7 +334,7 @@ int32_t tdUnLockSma(SSma *pSma) {
pSma
->
locked
=
false
;
int
code
=
taosThreadMutexUnlock
(
&
pSma
->
mutex
);
if
(
code
!=
0
)
{
smaError
(
"vgId:%d failed to unlock td since %s"
,
SMA_VID
(
pSma
),
strerror
(
errno
));
smaError
(
"vgId:%d
,
failed to unlock td since %s"
,
SMA_VID
(
pSma
),
strerror
(
errno
));
terrno
=
TAOS_SYSTEM_ERROR
(
code
);
return
-
1
;
}
...
...
@@ -376,7 +376,7 @@ int32_t tdCheckAndInitSmaEnv(SSma *pSma, int8_t smaType) {
if
(
did
.
level
<
0
||
did
.
id
<
0
)
{
tdUnLockSma
(
pSma
);
smaError
(
"vgId:%d init sma env failed since invalid did(%d,%d)"
,
SMA_VID
(
pSma
),
did
.
level
,
did
.
id
);
smaError
(
"vgId:%d
,
init sma env failed since invalid did(%d,%d)"
,
SMA_VID
(
pSma
),
did
.
level
,
did
.
id
);
return
TSDB_CODE_FAILED
;
}
...
...
source/dnode/vnode/src/sma/smaRollup.c
浏览文件 @
74513630
...
...
@@ -58,30 +58,30 @@ static FORCE_INLINE int32_t tdUpdateTbUidListImpl(SSma *pSma, tb_uid_t *suid, SA
if
(
!
suid
||
!
tbUids
)
{
terrno
=
TSDB_CODE_INVALID_PTR
;
smaError
(
"vgId:%d failed to get rsma info for uid:%"
PRIi64
" since %s"
,
SMA_VID
(
pSma
),
*
suid
,
terrstr
(
terrno
));
smaError
(
"vgId:%d
,
failed to get rsma info for uid:%"
PRIi64
" since %s"
,
SMA_VID
(
pSma
),
*
suid
,
terrstr
(
terrno
));
return
TSDB_CODE_FAILED
;
}
pRSmaInfo
=
taosHashGet
(
SMA_STAT_INFO_HASH
(
pStat
),
suid
,
sizeof
(
tb_uid_t
));
if
(
!
pRSmaInfo
||
!
(
pRSmaInfo
=
*
(
SRSmaInfo
**
)
pRSmaInfo
))
{
smaError
(
"vgId:%d failed to get rsma info for uid:%"
PRIi64
,
SMA_VID
(
pSma
),
*
suid
);
smaError
(
"vgId:%d
,
failed to get rsma info for uid:%"
PRIi64
,
SMA_VID
(
pSma
),
*
suid
);
terrno
=
TSDB_CODE_TDB_INVALID_SMA_STAT
;
return
TSDB_CODE_FAILED
;
}
if
(
pRSmaInfo
->
taskInfo
[
0
]
&&
(
qUpdateQualifiedTableId
(
pRSmaInfo
->
taskInfo
[
0
],
tbUids
,
true
)
!=
0
))
{
smaError
(
"vgId:%d update tbUidList failed for uid:%"
PRIi64
" since %s"
,
SMA_VID
(
pSma
),
*
suid
,
terrstr
(
terrno
));
smaError
(
"vgId:%d
,
update tbUidList failed for uid:%"
PRIi64
" since %s"
,
SMA_VID
(
pSma
),
*
suid
,
terrstr
(
terrno
));
return
TSDB_CODE_FAILED
;
}
else
{
smaDebug
(
"vgId:%d update tbUidList succeed for qTaskInfo:%p with suid:%"
PRIi64
", uid:%"
PRIi64
,
SMA_VID
(
pSma
),
smaDebug
(
"vgId:%d
,
update tbUidList succeed for qTaskInfo:%p with suid:%"
PRIi64
", uid:%"
PRIi64
,
SMA_VID
(
pSma
),
pRSmaInfo
->
taskInfo
[
0
],
*
suid
,
*
(
int64_t
*
)
taosArrayGet
(
tbUids
,
0
));
}
if
(
pRSmaInfo
->
taskInfo
[
1
]
&&
(
qUpdateQualifiedTableId
(
pRSmaInfo
->
taskInfo
[
1
],
tbUids
,
true
)
!=
0
))
{
smaError
(
"vgId:%d update tbUidList failed for uid:%"
PRIi64
" since %s"
,
SMA_VID
(
pSma
),
*
suid
,
terrstr
(
terrno
));
smaError
(
"vgId:%d
,
update tbUidList failed for uid:%"
PRIi64
" since %s"
,
SMA_VID
(
pSma
),
*
suid
,
terrstr
(
terrno
));
return
TSDB_CODE_FAILED
;
}
else
{
smaDebug
(
"vgId:%d update tbUidList succeed for qTaskInfo:%p with suid:%"
PRIi64
", uid:%"
PRIi64
,
SMA_VID
(
pSma
),
smaDebug
(
"vgId:%d
,
update tbUidList succeed for qTaskInfo:%p with suid:%"
PRIi64
", uid:%"
PRIi64
,
SMA_VID
(
pSma
),
pRSmaInfo
->
taskInfo
[
1
],
*
suid
,
*
(
int64_t
*
)
taosArrayGet
(
tbUids
,
0
));
}
...
...
@@ -170,14 +170,14 @@ int32_t tdProcessRSmaCreate(SVnode *pVnode, SVCreateStbReq *pReq) {
SMeta
*
pMeta
=
pVnode
->
pMeta
;
SMsgCb
*
pMsgCb
=
&
pVnode
->
msgCb
;
if
(
!
pReq
->
rollup
)
{
smaTrace
(
"vgId:%d return directly since no rollup for stable %s %"
PRIi64
,
SMA_VID
(
pSma
),
pReq
->
name
,
pReq
->
suid
);
smaTrace
(
"vgId:%d
,
return directly since no rollup for stable %s %"
PRIi64
,
SMA_VID
(
pSma
),
pReq
->
name
,
pReq
->
suid
);
return
TSDB_CODE_SUCCESS
;
}
SRSmaParam
*
param
=
&
pReq
->
pRSmaParam
;
if
((
param
->
qmsg1Len
==
0
)
&&
(
param
->
qmsg2Len
==
0
))
{
smaWarn
(
"vgId:%d no qmsg1/qmsg2 for rollup stable %s %"
PRIi64
,
SMA_VID
(
pSma
),
pReq
->
name
,
pReq
->
suid
);
smaWarn
(
"vgId:%d
,
no qmsg1/qmsg2 for rollup stable %s %"
PRIi64
,
SMA_VID
(
pSma
),
pReq
->
name
,
pReq
->
suid
);
return
TSDB_CODE_SUCCESS
;
}
...
...
@@ -192,7 +192,7 @@ int32_t tdProcessRSmaCreate(SVnode *pVnode, SVCreateStbReq *pReq) {
pRSmaInfo
=
taosHashGet
(
SMA_STAT_INFO_HASH
(
pStat
),
&
pReq
->
suid
,
sizeof
(
tb_uid_t
));
if
(
pRSmaInfo
)
{
smaWarn
(
"vgId:%d rsma info already exists for stb: %s, %"
PRIi64
,
SMA_VID
(
pSma
),
pReq
->
name
,
pReq
->
suid
);
smaWarn
(
"vgId:%d
,
rsma info already exists for stb: %s, %"
PRIi64
,
SMA_VID
(
pSma
),
pReq
->
name
,
pReq
->
suid
);
return
TSDB_CODE_SUCCESS
;
}
...
...
@@ -238,7 +238,7 @@ int32_t tdProcessRSmaCreate(SVnode *pVnode, SVCreateStbReq *pReq) {
TSDB_CODE_SUCCESS
)
{
return
TSDB_CODE_FAILED
;
}
else
{
smaDebug
(
"vgId:%d register rsma info succeed for suid:%"
PRIi64
,
SMA_VID
(
pSma
),
pReq
->
suid
);
smaDebug
(
"vgId:%d
,
register rsma info succeed for suid:%"
PRIi64
,
SMA_VID
(
pSma
),
pReq
->
suid
);
}
return
TSDB_CODE_SUCCESS
;
...
...
@@ -372,11 +372,11 @@ static FORCE_INLINE int32_t tdExecuteRSmaImpl(SSma *pSma, const void *pMsg, int3
SArray
*
pResult
=
NULL
;
if
(
!
taskInfo
)
{
smaDebug
(
"vgId:%d no qTaskInfo to execute rsma %"
PRIi8
" task for suid:%"
PRIu64
,
SMA_VID
(
pSma
),
level
,
suid
);
smaDebug
(
"vgId:%d
,
no qTaskInfo to execute rsma %"
PRIi8
" task for suid:%"
PRIu64
,
SMA_VID
(
pSma
),
level
,
suid
);
return
TSDB_CODE_SUCCESS
;
}
smaDebug
(
"vgId:%d execute rsma %"
PRIi8
" task for qTaskInfo:%p suid:%"
PRIu64
,
SMA_VID
(
pSma
),
level
,
taskInfo
,
suid
);
smaDebug
(
"vgId:%d
,
execute rsma %"
PRIi8
" task for qTaskInfo:%p suid:%"
PRIu64
,
SMA_VID
(
pSma
),
level
,
taskInfo
,
suid
);
qSetStreamInput
(
taskInfo
,
pMsg
,
inputType
,
true
);
while
(
1
)
{
...
...
@@ -414,7 +414,7 @@ static FORCE_INLINE int32_t tdExecuteRSmaImpl(SSma *pSma, const void *pMsg, int3
}
taosMemoryFreeClear
(
pReq
);
}
else
{
smaDebug
(
"vgId:%d no rsma % "
PRIi8
" data generated since %s"
,
SMA_VID
(
pSma
),
level
,
tstrerror
(
terrno
));
smaDebug
(
"vgId:%d
,
no rsma % "
PRIi8
" data generated since %s"
,
SMA_VID
(
pSma
),
level
,
tstrerror
(
terrno
));
}
taosArrayDestroy
(
pResult
);
...
...
@@ -435,11 +435,11 @@ static int32_t tdExecuteRSma(SSma *pSma, const void *pMsg, int32_t inputType, tb
pRSmaInfo
=
taosHashGet
(
SMA_STAT_INFO_HASH
(
pStat
),
&
suid
,
sizeof
(
tb_uid_t
));
if
(
!
pRSmaInfo
||
!
(
pRSmaInfo
=
*
(
SRSmaInfo
**
)
pRSmaInfo
))
{
smaDebug
(
"vgId:%d no rsma info for suid:%"
PRIu64
,
SMA_VID
(
pSma
),
suid
);
smaDebug
(
"vgId:%d
,
no rsma info for suid:%"
PRIu64
,
SMA_VID
(
pSma
),
suid
);
return
TSDB_CODE_SUCCESS
;
}
if
(
!
pRSmaInfo
->
taskInfo
[
0
])
{
smaDebug
(
"vgId:%d no rsma qTaskInfo for suid:%"
PRIu64
,
SMA_VID
(
pSma
),
suid
);
smaDebug
(
"vgId:%d
,
no rsma qTaskInfo for suid:%"
PRIu64
,
SMA_VID
(
pSma
),
suid
);
return
TSDB_CODE_SUCCESS
;
}
...
...
source/dnode/vnode/src/sma/smaTimeRange.c
浏览文件 @
74513630
...
...
@@ -326,13 +326,13 @@ int32_t tdProcessTSmaInsertImpl(SSma *pSma, int64_t indexUid, const char *msg) {
if
(
!
pDataBlocks
)
{
terrno
=
TSDB_CODE_INVALID_PTR
;
smaWarn
(
"vgId:%d insert tSma data failed since pDataBlocks is NULL"
,
SMA_VID
(
pSma
));
smaWarn
(
"vgId:%d
,
insert tSma data failed since pDataBlocks is NULL"
,
SMA_VID
(
pSma
));
return
terrno
;
}
if
(
taosArrayGetSize
(
pDataBlocks
)
<=
0
)
{
terrno
=
TSDB_CODE_INVALID_PARA
;
smaWarn
(
"vgId:%d insert tSma data failed since pDataBlocks is empty"
,
SMA_VID
(
pSma
));
smaWarn
(
"vgId:%d
,
insert tSma data failed since pDataBlocks is empty"
,
SMA_VID
(
pSma
));
return
TSDB_CODE_FAILED
;
}
...
...
@@ -487,11 +487,11 @@ int32_t tdProcessTSmaInsertImpl(SSma *pSma, int64_t indexUid, const char *msg) {
smaCloseDBF
(
&
tSmaH
.
dFile
);
}
tdSetTSmaDataFile
(
&
tSmaH
,
indexUid
,
fid
);
smaDebug
(
"
@@@ vgId:%d
write to DBF %s, days:%d, interval:%"
PRIi64
", storageLevel:%"
PRIi32
smaDebug
(
"
vgId:%d,
write to DBF %s, days:%d, interval:%"
PRIi64
", storageLevel:%"
PRIi32
" queryKey:%"
PRIi64
,
SMA_VID
(
pSma
),
tSmaH
.
dFile
.
path
,
minutePerFile
,
tSmaH
.
interval
,
storageLevel
,
testSkey
);
if
(
smaOpenDBF
(
pEnv
->
dbEnv
,
&
tSmaH
.
dFile
)
!=
0
)
{
smaWarn
(
"vgId:%d open DB file %s failed since %s"
,
SMA_VID
(
pSma
),
smaWarn
(
"vgId:%d
,
open DB file %s failed since %s"
,
SMA_VID
(
pSma
),
tSmaH
.
dFile
.
path
?
tSmaH
.
dFile
.
path
:
"path is NULL"
,
tstrerror
(
terrno
));
tdDestroyTSmaWriteH
(
&
tSmaH
);
tdUnRefSmaStat
(
pSma
,
pStat
);
...
...
@@ -501,7 +501,7 @@ int32_t tdProcessTSmaInsertImpl(SSma *pSma, int64_t indexUid, const char *msg) {
}
if
(
tdInsertTSmaBlocks
(
&
tSmaH
,
&
smaKey
,
SMA_KEY_LEN
,
dataBuf
,
tlen
,
&
pEnv
->
txn
)
!=
0
)
{
smaWarn
(
"vgId:%d insert tsma data blocks fail for index %"
PRIi64
", skey %"
PRIi64
", groupId %"
PRIi64
smaWarn
(
"vgId:%d
,
insert tsma data blocks fail for index %"
PRIi64
", skey %"
PRIi64
", groupId %"
PRIi64
" since %s"
,
SMA_VID
(
pSma
),
indexUid
,
skey
,
groupId
,
tstrerror
(
terrno
));
tdSmaEndCommit
(
pEnv
);
...
...
@@ -510,14 +510,14 @@ int32_t tdProcessTSmaInsertImpl(SSma *pSma, int64_t indexUid, const char *msg) {
return
TSDB_CODE_FAILED
;
}
smaDebug
(
"vgId:%d insert tsma data blocks success for index %"
PRIi64
", skey %"
PRIi64
", groupId %"
PRIi64
,
smaDebug
(
"vgId:%d
,
insert tsma data blocks success for index %"
PRIi64
", skey %"
PRIi64
", groupId %"
PRIi64
,
SMA_VID
(
pSma
),
indexUid
,
skey
,
groupId
);
// TODO:tsdbEndTSmaCommit();
// Step 3: reset the SSmaStat
tdResetExpiredWindow
(
pSma
,
pStat
,
indexUid
,
skey
);
}
else
{
smaWarn
(
"vgId:%d invalid data skey:%"
PRIi64
", tlen %"
PRIi32
" during insert tSma data for %"
PRIi64
,
smaWarn
(
"vgId:%d
,
invalid data skey:%"
PRIi64
", tlen %"
PRIi32
" during insert tSma data for %"
PRIi64
,
SMA_VID
(
pSma
),
skey
,
tlen
,
indexUid
);
}
}
...
...
@@ -532,7 +532,7 @@ int32_t tdProcessTSmaInsertImpl(SSma *pSma, int64_t indexUid, const char *msg) {
int32_t
tdDropTSmaData
(
SSma
*
pSma
,
int64_t
indexUid
)
{
int32_t
code
=
TSDB_CODE_SUCCESS
;
if
((
code
=
tdDropTSmaDataImpl
(
pSma
,
indexUid
))
<
0
)
{
smaWarn
(
"vgId:%d drop tSma data failed since %s"
,
SMA_VID
(
pSma
),
tstrerror
(
terrno
));
smaWarn
(
"vgId:%d
,
drop tSma data failed since %s"
,
SMA_VID
(
pSma
),
tstrerror
(
terrno
));
}
return
code
;
}
...
...
@@ -553,11 +553,11 @@ static int32_t tdInsertTSmaBlocks(STSmaWriteH *pSmaH, void *smaKey, int32_t keyL
// TODO: insert tsma data blocks into B+Tree(TTB)
if
(
smaSaveSmaToDB
(
pDBFile
,
smaKey
,
keyLen
,
pData
,
dataLen
,
txn
)
!=
0
)
{
smaWarn
(
"vgId:%d insert tsma data blocks into %s: smaKey %"
PRIx64
"-%"
PRIx64
", dataLen %"
PRIu32
" fail"
,
smaWarn
(
"vgId:%d
,
insert tsma data blocks into %s: smaKey %"
PRIx64
"-%"
PRIx64
", dataLen %"
PRIu32
" fail"
,
SMA_VID
(
pSmaH
->
pSma
),
pDBFile
->
path
,
*
(
int64_t
*
)
smaKey
,
*
(
int64_t
*
)
POINTER_SHIFT
(
smaKey
,
8
),
dataLen
);
return
TSDB_CODE_FAILED
;
}
smaDebug
(
"vgId:%d insert tsma data blocks into %s: smaKey %"
PRIx64
"-%"
PRIx64
", dataLen %"
PRIu32
" succeed"
,
smaDebug
(
"vgId:%d
,
insert tsma data blocks into %s: smaKey %"
PRIx64
"-%"
PRIx64
", dataLen %"
PRIu32
" succeed"
,
SMA_VID
(
pSmaH
->
pSma
),
pDBFile
->
path
,
*
(
int64_t
*
)
smaKey
,
*
(
int64_t
*
)
POINTER_SHIFT
(
smaKey
,
8
),
dataLen
);
#ifdef _TEST_SMA_PRINT_DEBUG_LOG_
...
...
@@ -565,7 +565,7 @@ static int32_t tdInsertTSmaBlocks(STSmaWriteH *pSmaH, void *smaKey, int32_t keyL
void
*
data
=
tdGetSmaDataByKey
(
pDBFile
,
smaKey
,
keyLen
,
&
valueSize
);
ASSERT
(
data
!=
NULL
);
for
(
uint32_t
v
=
0
;
v
<
valueSize
;
v
+=
8
)
{
smaWarn
(
"vgId:%d insert sma data val[%d] %"
PRIi64
,
REPO_ID
(
pSmaH
->
pTsdb
),
v
,
*
(
int64_t
*
)
POINTER_SHIFT
(
data
,
v
));
smaWarn
(
"vgId:%d
,
insert sma data val[%d] %"
PRIi64
,
REPO_ID
(
pSmaH
->
pTsdb
),
v
,
*
(
int64_t
*
)
POINTER_SHIFT
(
data
,
v
));
}
#endif
return
TSDB_CODE_SUCCESS
;
...
...
@@ -594,11 +594,11 @@ static int32_t tdResetExpiredWindow(SSma *pSma, SSmaStat *pStat, int64_t indexUi
if
(
taosHashRemove
(
pItem
->
expiredWindows
,
&
skey
,
sizeof
(
TSKEY
))
!=
0
)
{
// error handling
tdUnRefSmaStat
(
pSma
,
pStat
);
smaWarn
(
"vgId:%d remove skey %"
PRIi64
" from expired window for sma index %"
PRIi64
" fail"
,
SMA_VID
(
pSma
),
skey
,
smaWarn
(
"vgId:%d
,
remove skey %"
PRIi64
" from expired window for sma index %"
PRIi64
" fail"
,
SMA_VID
(
pSma
),
skey
,
indexUid
);
return
TSDB_CODE_FAILED
;
}
smaDebug
(
"vgId:%d remove skey %"
PRIi64
" from expired window for sma index %"
PRIi64
" succeed"
,
SMA_VID
(
pSma
),
smaDebug
(
"vgId:%d
,
remove skey %"
PRIi64
" from expired window for sma index %"
PRIi64
" succeed"
,
SMA_VID
(
pSma
),
skey
,
indexUid
);
// TODO: use a standalone interface to received state upate notification from stream computing module.
/**
...
...
@@ -612,7 +612,7 @@ static int32_t tdResetExpiredWindow(SSma *pSma, SSmaStat *pStat, int64_t indexUi
}
else
{
// error handling
tdUnRefSmaStat
(
pSma
,
pStat
);
smaWarn
(
"vgId:%d expired window %"
PRIi64
" not exists for sma index %"
PRIi64
,
SMA_VID
(
pSma
),
skey
,
indexUid
);
smaWarn
(
"vgId:%d
,
expired window %"
PRIi64
" not exists for sma index %"
PRIi64
,
SMA_VID
(
pSma
),
skey
,
indexUid
);
return
TSDB_CODE_FAILED
;
}
...
...
@@ -632,19 +632,19 @@ static int32_t tdDropTSmaDataImpl(SSma *pSma, int64_t indexUid) {
// clear local cache
if
(
pEnv
)
{
smaDebug
(
"vgId:%d drop tSma local cache for %"
PRIi64
,
SMA_VID
(
pSma
),
indexUid
);
smaDebug
(
"vgId:%d
,
drop tSma local cache for %"
PRIi64
,
SMA_VID
(
pSma
),
indexUid
);
SSmaStatItem
*
pItem
=
taosHashGet
(
SMA_ENV_STAT_ITEMS
(
pEnv
),
&
indexUid
,
sizeof
(
indexUid
));
if
((
pItem
)
||
((
pItem
=
*
(
SSmaStatItem
**
)
pItem
)))
{
if
(
tdSmaStatIsDropped
(
pItem
))
{
smaDebug
(
"vgId:%d tSma stat is already dropped for %"
PRIi64
,
SMA_VID
(
pSma
),
indexUid
);
smaDebug
(
"vgId:%d
,
tSma stat is already dropped for %"
PRIi64
,
SMA_VID
(
pSma
),
indexUid
);
return
TSDB_CODE_TDB_INVALID_ACTION
;
// TODO: duplicate drop msg would be intercepted by mnode
}
tdWLockSmaEnv
(
pEnv
);
if
(
tdSmaStatIsDropped
(
pItem
))
{
tdUnLockSmaEnv
(
pEnv
);
smaDebug
(
"vgId:%d tSma stat is already dropped for %"
PRIi64
,
SMA_VID
(
pSma
),
indexUid
);
smaDebug
(
"vgId:%d
,
tSma stat is already dropped for %"
PRIi64
,
SMA_VID
(
pSma
),
indexUid
);
return
TSDB_CODE_TDB_INVALID_ACTION
;
// TODO: duplicate drop msg would be intercepted by mnode
}
tdSmaStatSetDropped
(
pItem
);
...
...
@@ -654,19 +654,19 @@ static int32_t tdDropTSmaDataImpl(SSma *pSma, int64_t indexUid) {
int32_t
refVal
=
INT32_MAX
;
while
(
true
)
{
if
((
refVal
=
T_REF_VAL_GET
(
SMA_ENV_STAT
(
pEnv
)))
<=
0
)
{
smaDebug
(
"vgId:%d drop index %"
PRIi64
" since refVal=%d"
,
SMA_VID
(
pSma
),
indexUid
,
refVal
);
smaDebug
(
"vgId:%d
,
drop index %"
PRIi64
" since refVal=%d"
,
SMA_VID
(
pSma
),
indexUid
,
refVal
);
break
;
}
smaDebug
(
"vgId:%d wait 1s to drop index %"
PRIi64
" since refVal=%d"
,
SMA_VID
(
pSma
),
indexUid
,
refVal
);
smaDebug
(
"vgId:%d
,
wait 1s to drop index %"
PRIi64
" since refVal=%d"
,
SMA_VID
(
pSma
),
indexUid
,
refVal
);
taosSsleep
(
1
);
if
(
++
nSleep
>
SMA_DROP_EXPIRED_TIME
)
{
smaDebug
(
"vgId:%d drop index %"
PRIi64
" after wait %d (refVal=%d)"
,
SMA_VID
(
pSma
),
indexUid
,
nSleep
,
refVal
);
smaDebug
(
"vgId:%d
,
drop index %"
PRIi64
" after wait %d (refVal=%d)"
,
SMA_VID
(
pSma
),
indexUid
,
nSleep
,
refVal
);
break
;
};
}
tdFreeSmaStatItem
(
pItem
);
smaDebug
(
"vgId:%d getTSmaDataImpl failed since no index %"
PRIi64
" in local cache"
,
SMA_VID
(
pSma
),
indexUid
);
smaDebug
(
"vgId:%d
,
getTSmaDataImpl failed since no index %"
PRIi64
" in local cache"
,
SMA_VID
(
pSma
),
indexUid
);
}
}
// clear sma data files
...
...
@@ -690,7 +690,7 @@ int32_t tdGetTSmaDataImpl(SSma *pSma, char *pData, int64_t indexUid, TSKEY query
if
(
!
pEnv
)
{
terrno
=
TSDB_CODE_INVALID_PTR
;
smaWarn
(
"vgId:%d getTSmaDataImpl failed since pTSmaEnv is NULL"
,
SMA_VID
(
pSma
));
smaWarn
(
"vgId:%d
,
getTSmaDataImpl failed since pTSmaEnv is NULL"
,
SMA_VID
(
pSma
));
return
TSDB_CODE_FAILED
;
}
...
...
@@ -703,7 +703,7 @@ int32_t tdGetTSmaDataImpl(SSma *pSma, char *pData, int64_t indexUid, TSKEY query
// it's NULL.
tdUnRefSmaStat
(
pSma
,
pStat
);
terrno
=
TSDB_CODE_TDB_INVALID_ACTION
;
smaDebug
(
"vgId:%d getTSmaDataImpl failed since no index %"
PRIi64
,
SMA_VID
(
pSma
),
indexUid
);
smaDebug
(
"vgId:%d
,
getTSmaDataImpl failed since no index %"
PRIi64
,
SMA_VID
(
pSma
),
indexUid
);
return
TSDB_CODE_FAILED
;
}
...
...
@@ -722,17 +722,17 @@ int32_t tdGetTSmaDataImpl(SSma *pSma, char *pData, int64_t indexUid, TSKEY query
if
(
!
tdSmaStatIsOK
(
pItem
,
&
smaStat
))
{
// TODO: multiple check for large scale sma query
tdUnRefSmaStat
(
pSma
,
pStat
);
terrno
=
TSDB_CODE_TDB_INVALID_SMA_STAT
;
smaWarn
(
"vgId:%d getTSmaDataImpl failed from index %"
PRIi64
" since %s %"
PRIi8
,
SMA_VID
(
pSma
),
indexUid
,
smaWarn
(
"vgId:%d
,
getTSmaDataImpl failed from index %"
PRIi64
" since %s %"
PRIi8
,
SMA_VID
(
pSma
),
indexUid
,
tstrerror
(
terrno
),
smaStat
);
return
TSDB_CODE_FAILED
;
}
if
(
taosHashGet
(
pItem
->
expiredWindows
,
&
querySKey
,
sizeof
(
TSKEY
)))
{
// TODO: mark this window as expired.
smaDebug
(
"vgId:%d skey %"
PRIi64
" of window exists in expired window for index %"
PRIi64
,
SMA_VID
(
pSma
),
querySKey
,
smaDebug
(
"vgId:%d
,
skey %"
PRIi64
" of window exists in expired window for index %"
PRIi64
,
SMA_VID
(
pSma
),
querySKey
,
indexUid
);
}
else
{
smaDebug
(
"vgId:%d skey %"
PRIi64
" of window not in expired window for index %"
PRIi64
,
SMA_VID
(
pSma
),
querySKey
,
smaDebug
(
"vgId:%d
,
skey %"
PRIi64
" of window not in expired window for index %"
PRIi64
,
SMA_VID
(
pSma
),
querySKey
,
indexUid
);
}
...
...
@@ -750,7 +750,7 @@ int32_t tdGetTSmaDataImpl(SSma *pSma, char *pData, int64_t indexUid, TSKEY query
smaDebug
(
"### vgId:%d read from DBF %s days:%d, interval:%"
PRIi64
", storageLevel:%"
PRIi8
" queryKey:%"
PRIi64
,
SMA_VID
(
pSma
),
tReadH
.
dFile
.
path
,
tReadH
.
days
,
tReadH
.
interval
,
tReadH
.
storageLevel
,
querySKey
);
if
(
smaOpenDBF
(
pEnv
->
dbEnv
,
&
tReadH
.
dFile
)
!=
0
)
{
smaWarn
(
"vgId:%d open DBF %s failed since %s"
,
SMA_VID
(
pSma
),
tReadH
.
dFile
.
path
,
tstrerror
(
terrno
));
smaWarn
(
"vgId:%d
,
open DBF %s failed since %s"
,
SMA_VID
(
pSma
),
tReadH
.
dFile
.
path
,
tstrerror
(
terrno
));
return
TSDB_CODE_FAILED
;
}
...
...
@@ -759,13 +759,13 @@ int32_t tdGetTSmaDataImpl(SSma *pSma, char *pData, int64_t indexUid, TSKEY query
int64_t
queryGroupId
=
0
;
tdEncodeTSmaKey
(
queryGroupId
,
querySKey
,
(
void
**
)
&
pSmaKey
);
smaDebug
(
"vgId:%d get sma data from %s: smaKey %"
PRIx64
"-%"
PRIx64
", keyLen %d"
,
SMA_VID
(
pSma
),
tReadH
.
dFile
.
path
,
smaDebug
(
"vgId:%d
,
get sma data from %s: smaKey %"
PRIx64
"-%"
PRIx64
", keyLen %d"
,
SMA_VID
(
pSma
),
tReadH
.
dFile
.
path
,
*
(
int64_t
*
)
smaKey
,
*
(
int64_t
*
)
POINTER_SHIFT
(
smaKey
,
8
),
SMA_KEY_LEN
);
void
*
result
=
NULL
;
int32_t
valueSize
=
0
;
if
(
!
(
result
=
smaGetSmaDataByKey
(
&
tReadH
.
dFile
,
smaKey
,
SMA_KEY_LEN
,
&
valueSize
)))
{
smaWarn
(
"vgId:%d get sma data failed from smaIndex %"
PRIi64
", smaKey %"
PRIx64
"-%"
PRIx64
" since %s"
,
smaWarn
(
"vgId:%d
,
get sma data failed from smaIndex %"
PRIi64
", smaKey %"
PRIx64
"-%"
PRIx64
" since %s"
,
SMA_VID
(
pSma
),
indexUid
,
*
(
int64_t
*
)
smaKey
,
*
(
int64_t
*
)
POINTER_SHIFT
(
smaKey
,
8
),
tstrerror
(
terrno
));
smaCloseDBF
(
&
tReadH
.
dFile
);
return
TSDB_CODE_FAILED
;
...
...
@@ -774,7 +774,7 @@ int32_t tdGetTSmaDataImpl(SSma *pSma, char *pData, int64_t indexUid, TSKEY query
#ifdef _TEST_SMA_PRINT_DEBUG_LOG_
for
(
uint32_t
v
=
0
;
v
<
valueSize
;
v
+=
8
)
{
smaWarn
(
"vgId:%d get sma data v[%d]=%"
PRIi64
,
SMA_VID
(
pSma
),
v
,
*
(
int64_t
*
)
POINTER_SHIFT
(
result
,
v
));
smaWarn
(
"vgId:%d
,
get sma data v[%d]=%"
PRIi64
,
SMA_VID
(
pSma
),
v
,
*
(
int64_t
*
)
POINTER_SHIFT
(
result
,
v
));
}
#endif
taosMemoryFreeClear
(
result
);
// TODO: fill the result to output
...
...
@@ -888,7 +888,7 @@ static int32_t tdSetExpiredWindow(SSma *pSma, SHashObj *pItemsHash, int64_t inde
terrno
=
TSDB_CODE_TDB_NO_SMA_INDEX_IN_META
;
taosHashCleanup
(
pItem
->
expiredWindows
);
taosMemoryFree
(
pItem
);
smaWarn
(
"vgId:%d set expire window, get tsma meta failed for smaIndex %"
PRIi64
" since %s"
,
SMA_VID
(
pSma
),
smaWarn
(
"vgId:%d
,
set expire window, get tsma meta failed for smaIndex %"
PRIi64
" since %s"
,
SMA_VID
(
pSma
),
indexUid
,
tstrerror
(
terrno
));
return
TSDB_CODE_FAILED
;
}
...
...
@@ -915,12 +915,12 @@ static int32_t tdSetExpiredWindow(SSma *pSma, SHashObj *pItemsHash, int64_t inde
taosHashCleanup
(
pItem
->
expiredWindows
);
taosMemoryFreeClear
(
pItem
->
pTSma
);
taosHashRemove
(
pItemsHash
,
&
indexUid
,
sizeof
(
indexUid
));
smaWarn
(
"vgId:%d smaIndex %"
PRIi64
", put skey %"
PRIi64
" to expire window fail"
,
SMA_VID
(
pSma
),
indexUid
,
smaWarn
(
"vgId:%d
,
smaIndex %"
PRIi64
", put skey %"
PRIi64
" to expire window fail"
,
SMA_VID
(
pSma
),
indexUid
,
winSKey
);
return
TSDB_CODE_FAILED
;
}
smaDebug
(
"vgId:%d smaIndex %"
PRIi64
", put skey %"
PRIi64
" to expire window succeed"
,
SMA_VID
(
pSma
),
indexUid
,
smaDebug
(
"vgId:%d
,
smaIndex %"
PRIi64
", put skey %"
PRIi64
" to expire window succeed"
,
SMA_VID
(
pSma
),
indexUid
,
winSKey
);
return
TSDB_CODE_SUCCESS
;
}
...
...
@@ -935,18 +935,18 @@ static int32_t tdSetExpiredWindow(SSma *pSma, SHashObj *pItemsHash, int64_t inde
int32_t
tdUpdateExpiredWindowImpl
(
SSma
*
pSma
,
const
SSubmitReq
*
pMsg
,
int64_t
version
)
{
// no time-range-sma, just return success
if
(
atomic_load_16
(
&
SMA_TSMA_NUM
(
pSma
))
<=
0
)
{
smaTrace
(
"vgId:%d not update expire window since no tSma"
,
SMA_VID
(
pSma
));
smaTrace
(
"vgId:%d
,
not update expire window since no tSma"
,
SMA_VID
(
pSma
));
return
TSDB_CODE_SUCCESS
;
}
if
(
!
SMA_META
(
pSma
))
{
terrno
=
TSDB_CODE_INVALID_PTR
;
smaError
(
"vgId:%d update expire window failed since no meta ptr"
,
SMA_VID
(
pSma
));
smaError
(
"vgId:%d
,
update expire window failed since no meta ptr"
,
SMA_VID
(
pSma
));
return
TSDB_CODE_FAILED
;
}
if
(
tdCheckAndInitSmaEnv
(
pSma
,
TSDB_SMA_TYPE_TIME_RANGE
)
<
0
)
{
smaError
(
"vgId:%d init sma env failed since %s"
,
SMA_VID
(
pSma
),
terrstr
(
terrno
));
smaError
(
"vgId:%d
,
init sma env failed since %s"
,
SMA_VID
(
pSma
),
terrstr
(
terrno
));
terrno
=
TSDB_CODE_TDB_INIT_FAILED
;
return
TSDB_CODE_FAILED
;
}
...
...
@@ -1025,7 +1025,7 @@ int32_t tdUpdateExpiredWindowImpl(SSma *pSma, const SSubmitReq *pMsg, int64_t ve
return
TSDB_CODE_FAILED
;
}
}
else
{
smaDebug
(
"vgId:%d smaIndex %"
PRIi64
", put skey %"
PRIi64
" to expire window ignore as duplicated"
,
smaDebug
(
"vgId:%d
,
smaIndex %"
PRIi64
", put skey %"
PRIi64
" to expire window ignore as duplicated"
,
SMA_VID
(
pSma
),
pTSma
->
indexUid
,
winSKey
);
}
}
...
...
source/dnode/vnode/src/tsdb/tsdbCommit.c
浏览文件 @
74513630
...
...
@@ -88,6 +88,18 @@ static void tsdbLoadAndMergeFromCache(STsdb *pTsdb, SDataCols *pDataCols, int *i
SDataCols
*
pTarget
,
TSKEY
maxKey
,
int
maxRows
,
int8_t
update
);
int
tsdbWriteBlockIdx
(
SDFile
*
pHeadf
,
SArray
*
pIdxA
,
void
**
ppBuf
);
int
tsdbBegin
(
STsdb
*
pTsdb
)
{
if
(
!
pTsdb
)
return
0
;
STsdbMemTable
*
pMem
;
if
(
tsdbMemTableCreate
(
pTsdb
,
&
pTsdb
->
mem
)
<
0
)
{
return
-
1
;
}
return
0
;
}
int
tsdbApplyRtnOnFSet
(
STsdb
*
pRepo
,
SDFileSet
*
pSet
,
SRtn
*
pRtn
)
{
SDiskID
did
;
SDFileSet
nSet
=
{
0
};
...
...
@@ -108,7 +120,7 @@ int tsdbApplyRtnOnFSet(STsdb *pRepo, SDFileSet *pSet, SRtn *pRtn) {
tsdbInitDFileSet
(
pRepo
,
&
nSet
,
did
,
pSet
->
fid
,
FS_TXN_VERSION
(
pfs
));
if
(
tsdbCopyDFileSet
(
pSet
,
&
nSet
)
<
0
)
{
tsdbError
(
"vgId:%d failed to copy FSET %d from level %d to level %d since %s"
,
REPO_ID
(
pRepo
),
pSet
->
fid
,
tsdbError
(
"vgId:%d
,
failed to copy FSET %d from level %d to level %d since %s"
,
REPO_ID
(
pRepo
),
pSet
->
fid
,
TSDB_FSET_LEVEL
(
pSet
),
did
.
level
,
tstrerror
(
terrno
));
return
-
1
;
}
...
...
@@ -117,7 +129,7 @@ int tsdbApplyRtnOnFSet(STsdb *pRepo, SDFileSet *pSet, SRtn *pRtn) {
return
-
1
;
}
tsdbInfo
(
"vgId:%d FSET %d is copied from level %d disk id %d to level %d disk id %d"
,
REPO_ID
(
pRepo
),
pSet
->
fid
,
tsdbInfo
(
"vgId:%d
,
FSET %d is copied from level %d disk id %d to level %d disk id %d"
,
REPO_ID
(
pRepo
),
pSet
->
fid
,
TSDB_FSET_LEVEL
(
pSet
),
TSDB_FSET_ID
(
pSet
),
did
.
level
,
did
.
id
);
}
else
{
// On a correct level
...
...
@@ -158,7 +170,7 @@ int tsdbCommit(STsdb *pRepo) {
tsdbSeekCommitIter
(
&
commith
,
commith
.
rtn
.
minKey
);
while
((
pSet
=
tsdbFSIterNext
(
&
(
commith
.
fsIter
))))
{
if
(
pSet
->
fid
<
commith
.
rtn
.
minFid
)
{
tsdbInfo
(
"vgId:%d FSET %d on level %d disk id %d expires, remove it"
,
REPO_ID
(
pRepo
),
pSet
->
fid
,
tsdbInfo
(
"vgId:%d
,
FSET %d on level %d disk id %d expires, remove it"
,
REPO_ID
(
pRepo
),
pSet
->
fid
,
TSDB_FSET_LEVEL
(
pSet
),
TSDB_FSET_ID
(
pSet
));
}
else
{
break
;
...
...
@@ -224,14 +236,14 @@ void tsdbGetRtnSnap(STsdb *pRepo, SRtn *pRtn) {
pRtn
->
minFid
=
(
int
)(
TSDB_KEY_FID
(
minKey
,
pCfg
->
days
,
pCfg
->
precision
));
pRtn
->
midFid
=
(
int
)(
TSDB_KEY_FID
(
midKey
,
pCfg
->
days
,
pCfg
->
precision
));
pRtn
->
maxFid
=
(
int
)(
TSDB_KEY_FID
(
maxKey
,
pCfg
->
days
,
pCfg
->
precision
));
tsdbDebug
(
"vgId:%d now:%"
PRId64
" minKey:%"
PRId64
" minFid:%d, midFid:%d, maxFid:%d"
,
REPO_ID
(
pRepo
),
now
,
minKey
,
tsdbDebug
(
"vgId:%d
,
now:%"
PRId64
" minKey:%"
PRId64
" minFid:%d, midFid:%d, maxFid:%d"
,
REPO_ID
(
pRepo
),
now
,
minKey
,
pRtn
->
minFid
,
pRtn
->
midFid
,
pRtn
->
maxFid
);
}
static
void
tsdbStartCommit
(
STsdb
*
pRepo
)
{
STsdbMemTable
*
pMem
=
pRepo
->
imem
;
tsdbInfo
(
"vgId:%d start to commit"
,
REPO_ID
(
pRepo
));
tsdbInfo
(
"vgId:%d
,
start to commit"
,
REPO_ID
(
pRepo
));
tsdbStartFSTxn
(
pRepo
,
0
,
0
);
}
...
...
@@ -240,7 +252,7 @@ static void tsdbEndCommit(STsdb *pTsdb, int eno) {
tsdbEndFSTxn
(
pTsdb
);
tsdbMemTableDestroy
(
pTsdb
->
imem
);
pTsdb
->
imem
=
NULL
;
tsdbInfo
(
"vgId:%d commit over, %s"
,
REPO_ID
(
pTsdb
),
(
eno
==
TSDB_CODE_SUCCESS
)
?
"succeed"
:
"failed"
);
tsdbInfo
(
"vgId:%d
,
commit over, %s"
,
REPO_ID
(
pTsdb
),
(
eno
==
TSDB_CODE_SUCCESS
)
?
"succeed"
:
"failed"
);
}
static
int
tsdbInitCommitH
(
SCommitH
*
pCommith
,
STsdb
*
pRepo
)
{
...
...
@@ -413,7 +425,7 @@ static int tsdbCommitToFile(SCommitH *pCommith, SDFileSet *pSet, int fid) {
if
(
tsdbWriteBlockIdx
(
TSDB_COMMIT_HEAD_FILE
(
pCommith
),
pCommith
->
aBlkIdx
,
(
void
**
)(
&
(
TSDB_COMMIT_BUF
(
pCommith
))))
<
0
)
{
tsdbError
(
"vgId:%d failed to write SBlockIdx part to FSET %d since %s"
,
REPO_ID
(
pRepo
),
fid
,
tstrerror
(
terrno
));
tsdbError
(
"vgId:%d
,
failed to write SBlockIdx part to FSET %d since %s"
,
REPO_ID
(
pRepo
),
fid
,
tstrerror
(
terrno
));
tsdbCloseCommitFile
(
pCommith
,
true
);
// revert the file change
tsdbApplyDFileSetChange
(
TSDB_COMMIT_WRITE_FSET
(
pCommith
),
pSet
);
...
...
@@ -421,7 +433,7 @@ static int tsdbCommitToFile(SCommitH *pCommith, SDFileSet *pSet, int fid) {
}
if
(
tsdbUpdateDFileSetHeader
(
&
(
pCommith
->
wSet
))
<
0
)
{
tsdbError
(
"vgId:%d failed to update FSET %d header since %s"
,
REPO_ID
(
pRepo
),
fid
,
tstrerror
(
terrno
));
tsdbError
(
"vgId:%d
,
failed to update FSET %d header since %s"
,
REPO_ID
(
pRepo
),
fid
,
tstrerror
(
terrno
));
tsdbCloseCommitFile
(
pCommith
,
true
);
// revert the file change
tsdbApplyDFileSetChange
(
TSDB_COMMIT_WRITE_FSET
(
pCommith
),
pSet
);
...
...
@@ -531,7 +543,7 @@ static int tsdbSetAndOpenCommitFile(SCommitH *pCommith, SDFileSet *pSet, int fid
return
-
1
;
}
tsdbDebug
(
"vgId:%d FSET %d at level %d disk id %d is opened to read to commit"
,
REPO_ID
(
pRepo
),
TSDB_FSET_FID
(
pSet
),
tsdbDebug
(
"vgId:%d
,
FSET %d at level %d disk id %d is opened to read to commit"
,
REPO_ID
(
pRepo
),
TSDB_FSET_FID
(
pSet
),
TSDB_FSET_LEVEL
(
pSet
),
TSDB_FSET_ID
(
pSet
));
}
else
{
pCommith
->
isRFileSet
=
false
;
...
...
@@ -543,7 +555,7 @@ static int tsdbSetAndOpenCommitFile(SCommitH *pCommith, SDFileSet *pSet, int fid
tsdbInitDFileSet
(
pRepo
,
pWSet
,
did
,
fid
,
FS_TXN_VERSION
(
REPO_FS
(
pRepo
)));
if
(
tsdbCreateDFileSet
(
pRepo
,
pWSet
,
true
)
<
0
)
{
tsdbError
(
"vgId:%d failed to create FSET %d at level %d disk id %d since %s"
,
REPO_ID
(
pRepo
),
tsdbError
(
"vgId:%d
,
failed to create FSET %d at level %d disk id %d since %s"
,
REPO_ID
(
pRepo
),
TSDB_FSET_FID
(
pWSet
),
TSDB_FSET_LEVEL
(
pWSet
),
TSDB_FSET_ID
(
pWSet
),
tstrerror
(
terrno
));
if
(
pCommith
->
isRFileSet
)
{
tsdbCloseAndUnsetFSet
(
&
(
pCommith
->
readh
));
...
...
@@ -554,7 +566,7 @@ static int tsdbSetAndOpenCommitFile(SCommitH *pCommith, SDFileSet *pSet, int fid
pCommith
->
isDFileSame
=
false
;
pCommith
->
isLFileSame
=
false
;
tsdbDebug
(
"vgId:%d FSET %d at level %d disk id %d is created to commit"
,
REPO_ID
(
pRepo
),
TSDB_FSET_FID
(
pWSet
),
tsdbDebug
(
"vgId:%d
,
FSET %d at level %d disk id %d is created to commit"
,
REPO_ID
(
pRepo
),
TSDB_FSET_FID
(
pWSet
),
TSDB_FSET_LEVEL
(
pWSet
),
TSDB_FSET_ID
(
pWSet
));
}
else
{
did
.
level
=
TSDB_FSET_LEVEL
(
pSet
);
...
...
@@ -567,7 +579,7 @@ static int tsdbSetAndOpenCommitFile(SCommitH *pCommith, SDFileSet *pSet, int fid
SDFile
*
pWHeadf
=
TSDB_COMMIT_HEAD_FILE
(
pCommith
);
tsdbInitDFile
(
pRepo
,
pWHeadf
,
did
,
fid
,
FS_TXN_VERSION
(
REPO_FS
(
pRepo
)),
TSDB_FILE_HEAD
);
if
(
tsdbCreateDFile
(
pRepo
,
pWHeadf
,
true
,
TSDB_FILE_HEAD
)
<
0
)
{
tsdbError
(
"vgId:%d failed to create file %s to commit since %s"
,
REPO_ID
(
pRepo
),
TSDB_FILE_FULL_NAME
(
pWHeadf
),
tsdbError
(
"vgId:%d
,
failed to create file %s to commit since %s"
,
REPO_ID
(
pRepo
),
TSDB_FILE_FULL_NAME
(
pWHeadf
),
tstrerror
(
terrno
));
if
(
pCommith
->
isRFileSet
)
{
...
...
@@ -582,7 +594,7 @@ static int tsdbSetAndOpenCommitFile(SCommitH *pCommith, SDFileSet *pSet, int fid
tsdbInitDFileEx
(
pWDataf
,
pRDataf
);
// if (tsdbOpenDFile(pWDataf, O_WRONLY) < 0) {
if
(
tsdbOpenDFile
(
pWDataf
,
TD_FILE_WRITE
)
<
0
)
{
tsdbError
(
"vgId:%d failed to open file %s to commit since %s"
,
REPO_ID
(
pRepo
),
TSDB_FILE_FULL_NAME
(
pWDataf
),
tsdbError
(
"vgId:%d
,
failed to open file %s to commit since %s"
,
REPO_ID
(
pRepo
),
TSDB_FILE_FULL_NAME
(
pWDataf
),
tstrerror
(
terrno
));
tsdbCloseDFileSet
(
pWSet
);
...
...
@@ -603,7 +615,7 @@ static int tsdbSetAndOpenCommitFile(SCommitH *pCommith, SDFileSet *pSet, int fid
// if (tsdbOpenDFile(pWLastf, O_WRONLY) < 0) {
if
(
tsdbOpenDFile
(
pWLastf
,
TD_FILE_WRITE
)
<
0
)
{
tsdbError
(
"vgId:%d failed to open file %s to commit since %s"
,
REPO_ID
(
pRepo
),
TSDB_FILE_FULL_NAME
(
pWLastf
),
tsdbError
(
"vgId:%d
,
failed to open file %s to commit since %s"
,
REPO_ID
(
pRepo
),
TSDB_FILE_FULL_NAME
(
pWLastf
),
tstrerror
(
terrno
));
tsdbCloseDFileSet
(
pWSet
);
...
...
@@ -618,7 +630,7 @@ static int tsdbSetAndOpenCommitFile(SCommitH *pCommith, SDFileSet *pSet, int fid
pCommith
->
isLFileSame
=
false
;
if
(
tsdbCreateDFile
(
pRepo
,
pWLastf
,
true
,
TSDB_FILE_LAST
)
<
0
)
{
tsdbError
(
"vgId:%d failed to create file %s to commit since %s"
,
REPO_ID
(
pRepo
),
TSDB_FILE_FULL_NAME
(
pWLastf
),
tsdbError
(
"vgId:%d
,
failed to create file %s to commit since %s"
,
REPO_ID
(
pRepo
),
TSDB_FILE_FULL_NAME
(
pWLastf
),
tstrerror
(
terrno
));
tsdbCloseDFileSet
(
pWSet
);
...
...
@@ -635,11 +647,11 @@ static int tsdbSetAndOpenCommitFile(SCommitH *pCommith, SDFileSet *pSet, int fid
SDFile
*
pWSmadF
=
TSDB_COMMIT_SMAD_FILE
(
pCommith
);
if
(
!
taosCheckExistFile
(
TSDB_FILE_FULL_NAME
(
pRSmadF
)))
{
tsdbDebug
(
"vgId:%d create data file %s as not exist"
,
REPO_ID
(
pRepo
),
TSDB_FILE_FULL_NAME
(
pRSmadF
));
tsdbDebug
(
"vgId:%d
,
create data file %s as not exist"
,
REPO_ID
(
pRepo
),
TSDB_FILE_FULL_NAME
(
pRSmadF
));
tsdbInitDFile
(
pRepo
,
pWSmadF
,
did
,
fid
,
FS_TXN_VERSION
(
REPO_FS
(
pRepo
)),
TSDB_FILE_SMAD
);
if
(
tsdbCreateDFile
(
pRepo
,
pWSmadF
,
true
,
TSDB_FILE_SMAD
)
<
0
)
{
tsdbError
(
"vgId:%d failed to create file %s to commit since %s"
,
REPO_ID
(
pRepo
),
TSDB_FILE_FULL_NAME
(
pWSmadF
),
tsdbError
(
"vgId:%d
,
failed to create file %s to commit since %s"
,
REPO_ID
(
pRepo
),
TSDB_FILE_FULL_NAME
(
pWSmadF
),
tstrerror
(
terrno
));
tsdbCloseDFileSet
(
pWSet
);
...
...
@@ -652,7 +664,7 @@ static int tsdbSetAndOpenCommitFile(SCommitH *pCommith, SDFileSet *pSet, int fid
}
else
{
tsdbInitDFileEx
(
pWSmadF
,
pRSmadF
);
if
(
tsdbOpenDFile
(
pWSmadF
,
O_RDWR
)
<
0
)
{
tsdbError
(
"vgId:%d failed to open file %s to commit since %s"
,
REPO_ID
(
pRepo
),
TSDB_FILE_FULL_NAME
(
pWSmadF
),
tsdbError
(
"vgId:%d
,
failed to open file %s to commit since %s"
,
REPO_ID
(
pRepo
),
TSDB_FILE_FULL_NAME
(
pWSmadF
),
tstrerror
(
terrno
));
tsdbCloseDFileSet
(
pWSet
);
...
...
@@ -671,7 +683,7 @@ static int tsdbSetAndOpenCommitFile(SCommitH *pCommith, SDFileSet *pSet, int fid
if
((
pCommith
->
isLFileSame
)
&&
taosCheckExistFile
(
TSDB_FILE_FULL_NAME
(
pRSmalF
)))
{
tsdbInitDFileEx
(
pWSmalF
,
pRSmalF
);
if
(
tsdbOpenDFile
(
pWSmalF
,
O_RDWR
)
<
0
)
{
tsdbError
(
"vgId:%d failed to open file %s to commit since %s"
,
REPO_ID
(
pRepo
),
TSDB_FILE_FULL_NAME
(
pWSmalF
),
tsdbError
(
"vgId:%d
,
failed to open file %s to commit since %s"
,
REPO_ID
(
pRepo
),
TSDB_FILE_FULL_NAME
(
pWSmalF
),
tstrerror
(
terrno
));
tsdbCloseDFileSet
(
pWSet
);
...
...
@@ -682,11 +694,11 @@ static int tsdbSetAndOpenCommitFile(SCommitH *pCommith, SDFileSet *pSet, int fid
}
}
}
else
{
tsdbDebug
(
"vgId:%d create data file %s as not exist"
,
REPO_ID
(
pRepo
),
TSDB_FILE_FULL_NAME
(
pRSmalF
));
tsdbDebug
(
"vgId:%d
,
create data file %s as not exist"
,
REPO_ID
(
pRepo
),
TSDB_FILE_FULL_NAME
(
pRSmalF
));
tsdbInitDFile
(
pRepo
,
pWSmalF
,
did
,
fid
,
FS_TXN_VERSION
(
REPO_FS
(
pRepo
)),
TSDB_FILE_SMAL
);
if
(
tsdbCreateDFile
(
pRepo
,
pWSmalF
,
true
,
TSDB_FILE_SMAL
)
<
0
)
{
tsdbError
(
"vgId:%d failed to create file %s to commit since %s"
,
REPO_ID
(
pRepo
),
TSDB_FILE_FULL_NAME
(
pWSmalF
),
tsdbError
(
"vgId:%d
,
failed to create file %s to commit since %s"
,
REPO_ID
(
pRepo
),
TSDB_FILE_FULL_NAME
(
pWSmalF
),
tstrerror
(
terrno
));
tsdbCloseDFileSet
(
pWSet
);
...
...
@@ -887,7 +899,7 @@ static int tsdbCommitToTable(SCommitH *pCommith, int tid) {
}
if
(
tsdbWriteBlockInfo
(
pCommith
)
<
0
)
{
tsdbError
(
"vgId:%d failed to write SBlockInfo part into file %s since %s"
,
TSDB_COMMIT_REPO_ID
(
pCommith
),
tsdbError
(
"vgId:%d
,
failed to write SBlockInfo part into file %s since %s"
,
TSDB_COMMIT_REPO_ID
(
pCommith
),
TSDB_FILE_FULL_NAME
(
TSDB_COMMIT_HEAD_FILE
(
pCommith
)),
tstrerror
(
terrno
));
return
-
1
;
}
...
...
@@ -929,7 +941,7 @@ static int tsdbMoveBlkIdx(SCommitH *pCommith, SBlockIdx *pIdx) {
}
if
(
tsdbMoveBlock
(
pCommith
,
bidx
)
<
0
)
{
tsdbError
(
"vgId:%d failed to move block into file %s since %s"
,
TSDB_COMMIT_REPO_ID
(
pCommith
),
tsdbError
(
"vgId:%d
,
failed to move block into file %s since %s"
,
TSDB_COMMIT_REPO_ID
(
pCommith
),
TSDB_FILE_FULL_NAME
(
TSDB_COMMIT_HEAD_FILE
(
pCommith
)),
tstrerror
(
terrno
));
taosMemoryFreeClear
(
pTSchema
);
return
-
1
;
...
...
@@ -939,7 +951,7 @@ static int tsdbMoveBlkIdx(SCommitH *pCommith, SBlockIdx *pIdx) {
}
if
(
tsdbWriteBlockInfo
(
pCommith
)
<
0
)
{
tsdbError
(
"vgId:%d failed to write SBlockInfo part into file %s since %s"
,
TSDB_COMMIT_REPO_ID
(
pCommith
),
tsdbError
(
"vgId:%d
,
failed to write SBlockInfo part into file %s since %s"
,
TSDB_COMMIT_REPO_ID
(
pCommith
),
TSDB_FILE_FULL_NAME
(
TSDB_COMMIT_HEAD_FILE
(
pCommith
)),
tstrerror
(
terrno
));
taosMemoryFreeClear
(
pTSchema
);
return
-
1
;
...
...
@@ -1209,7 +1221,7 @@ int tsdbWriteBlockImpl(STsdb *pRepo, STable *pTable, SDFile *pDFile, SDFile *pDF
pBlock
->
blkVer
=
SBlockVerLatest
;
pBlock
->
aggrOffset
=
(
uint64_t
)
offsetAggr
;
tsdbDebug
(
"vgId:%d uid:%"
PRId64
" a block of data is written to file %s, offset %"
PRId64
tsdbDebug
(
"vgId:%d
,
uid:%"
PRId64
" a block of data is written to file %s, offset %"
PRId64
" numOfRows %d len %d numOfCols %"
PRId16
" keyFirst %"
PRId64
" keyLast %"
PRId64
,
REPO_ID
(
pRepo
),
TABLE_UID
(
pTable
),
TSDB_FILE_FULL_NAME
(
pDFile
),
offset
,
rowsToWrite
,
pBlock
->
len
,
pBlock
->
numOfCols
,
pBlock
->
keyFirst
,
pBlock
->
keyLast
);
...
...
source/dnode/vnode/src/tsdb/tsdbCommit2.c
已删除
100644 → 0
浏览文件 @
a7d2042e
/*
* 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 "tsdb.h"
int
tsdbBegin
(
STsdb
*
pTsdb
)
{
if
(
!
pTsdb
)
return
0
;
STsdbMemTable
*
pMem
;
if
(
tsdbMemTableCreate
(
pTsdb
,
&
pTsdb
->
mem
)
<
0
)
{
return
-
1
;
}
return
0
;
}
source/dnode/vnode/src/tsdb/tsdbFS.c
浏览文件 @
74513630
...
...
@@ -260,7 +260,7 @@ int tsdbOpenFS(STsdb *pRepo) {
tsdbGetRtnSnap
(
pRepo
,
&
pRepo
->
rtn
);
if
(
taosCheckExistFile
(
current
))
{
if
(
tsdbOpenFSFromCurrent
(
pRepo
)
<
0
)
{
tsdbError
(
"vgId:%d failed to open FS since %s"
,
REPO_ID
(
pRepo
),
tstrerror
(
terrno
));
tsdbError
(
"vgId:%d
,
failed to open FS since %s"
,
REPO_ID
(
pRepo
),
tstrerror
(
terrno
));
return
-
1
;
}
...
...
@@ -271,19 +271,19 @@ int tsdbOpenFS(STsdb *pRepo) {
}
else
{
// should skip expired fileset inside of the function
if
(
tsdbRestoreCurrent
(
pRepo
)
<
0
)
{
tsdbError
(
"vgId:%d failed to restore current file since %s"
,
REPO_ID
(
pRepo
),
tstrerror
(
terrno
));
tsdbError
(
"vgId:%d
,
failed to restore current file since %s"
,
REPO_ID
(
pRepo
),
tstrerror
(
terrno
));
return
-
1
;
}
}
if
(
tsdbScanAndTryFixFS
(
pRepo
)
<
0
)
{
tsdbError
(
"vgId:%d failed to scan and fix FS since %s"
,
REPO_ID
(
pRepo
),
tstrerror
(
terrno
));
tsdbError
(
"vgId:%d
,
failed to scan and fix FS since %s"
,
REPO_ID
(
pRepo
),
tstrerror
(
terrno
));
return
-
1
;
}
// // Load meta cache if has meta file
// if ((!(pRepo->state & TSDB_STATE_BAD_META)) && tsdbLoadMetaCache(pRepo, true) < 0) {
// tsdbError("vgId:%d failed to open FS while loading meta cache since %s", REPO_ID(pRepo), tstrerror(terrno));
// tsdbError("vgId:%d
,
failed to open FS while loading meta cache since %s", REPO_ID(pRepo), tstrerror(terrno));
// return -1;
// }
...
...
@@ -607,7 +607,7 @@ static int tsdbOpenFSFromCurrent(STsdb *pRepo) {
// current file exists, try to recover
pFile
=
taosOpenFile
(
current
,
TD_FILE_READ
);
if
(
pFile
==
NULL
)
{
tsdbError
(
"vgId:%d failed to open file %s since %s"
,
REPO_ID
(
pRepo
),
current
,
strerror
(
errno
));
tsdbError
(
"vgId:%d
,
failed to open file %s since %s"
,
REPO_ID
(
pRepo
),
current
,
strerror
(
errno
));
terrno
=
TAOS_SYSTEM_ERROR
(
errno
);
goto
_err
;
}
...
...
@@ -618,20 +618,20 @@ static int tsdbOpenFSFromCurrent(STsdb *pRepo) {
int
nread
=
(
int
)
taosReadFile
(
pFile
,
buffer
,
TSDB_FILE_HEAD_SIZE
);
if
(
nread
<
0
)
{
tsdbError
(
"vgId:%d failed to read %d bytes from file %s since %s"
,
REPO_ID
(
pRepo
),
TSDB_FILENAME_LEN
,
current
,
tsdbError
(
"vgId:%d
,
failed to read %d bytes from file %s since %s"
,
REPO_ID
(
pRepo
),
TSDB_FILENAME_LEN
,
current
,
strerror
(
errno
));
terrno
=
TAOS_SYSTEM_ERROR
(
errno
);
goto
_err
;
}
if
(
nread
<
TSDB_FILE_HEAD_SIZE
)
{
tsdbError
(
"vgId:%d failed to read header of file %s, read bytes:%d"
,
REPO_ID
(
pRepo
),
current
,
nread
);
tsdbError
(
"vgId:%d
,
failed to read header of file %s, read bytes:%d"
,
REPO_ID
(
pRepo
),
current
,
nread
);
terrno
=
TSDB_CODE_TDB_FILE_CORRUPTED
;
goto
_err
;
}
if
(
!
taosCheckChecksumWhole
((
uint8_t
*
)
buffer
,
TSDB_FILE_HEAD_SIZE
))
{
tsdbError
(
"vgId:%d header of file %s failed checksum check"
,
REPO_ID
(
pRepo
),
current
);
tsdbError
(
"vgId:%d
,
header of file %s failed checksum check"
,
REPO_ID
(
pRepo
),
current
);
terrno
=
TSDB_CODE_TDB_FILE_CORRUPTED
;
goto
_err
;
}
...
...
@@ -652,19 +652,19 @@ static int tsdbOpenFSFromCurrent(STsdb *pRepo) {
nread
=
(
int
)
taosReadFile
(
pFile
,
buffer
,
fsheader
.
len
);
if
(
nread
<
0
)
{
tsdbError
(
"vgId:%d failed to read file %s since %s"
,
REPO_ID
(
pRepo
),
current
,
strerror
(
errno
));
tsdbError
(
"vgId:%d
,
failed to read file %s since %s"
,
REPO_ID
(
pRepo
),
current
,
strerror
(
errno
));
terrno
=
TAOS_SYSTEM_ERROR
(
errno
);
goto
_err
;
}
if
(
nread
<
fsheader
.
len
)
{
tsdbError
(
"vgId:%d failed to read %d bytes from file %s"
,
REPO_ID
(
pRepo
),
fsheader
.
len
,
current
);
tsdbError
(
"vgId:%d
,
failed to read %d bytes from file %s"
,
REPO_ID
(
pRepo
),
fsheader
.
len
,
current
);
terrno
=
TSDB_CODE_TDB_FILE_CORRUPTED
;
goto
_err
;
}
if
(
!
taosCheckChecksumWhole
((
uint8_t
*
)
buffer
,
fsheader
.
len
))
{
tsdbError
(
"vgId:%d file %s is corrupted since wrong checksum"
,
REPO_ID
(
pRepo
),
current
);
tsdbError
(
"vgId:%d
,
file %s is corrupted since wrong checksum"
,
REPO_ID
(
pRepo
),
current
);
terrno
=
TSDB_CODE_TDB_FILE_CORRUPTED
;
goto
_err
;
}
...
...
@@ -694,7 +694,7 @@ static int tsdbScanAndTryFixFS(STsdb *pRepo) {
SFSStatus
*
pStatus
=
pfs
->
cstatus
;
// if (tsdbScanAndTryFixMFile(pRepo) < 0) {
// tsdbError("vgId:%d failed to fix MFile since %s", REPO_ID(pRepo), tstrerror(terrno));
// tsdbError("vgId:%d
,
failed to fix MFile since %s", REPO_ID(pRepo), tstrerror(terrno));
// return -1;
// }
...
...
@@ -704,7 +704,7 @@ static int tsdbScanAndTryFixFS(STsdb *pRepo) {
SDFileSet
*
pSet
=
(
SDFileSet
*
)
taosArrayGet
(
pStatus
->
df
,
i
);
if
(
tsdbScanAndTryFixDFileSet
(
pRepo
,
pSet
)
<
0
)
{
tsdbError
(
"vgId:%d failed to fix MFile since %s"
,
REPO_ID
(
pRepo
),
tstrerror
(
terrno
));
tsdbError
(
"vgId:%d
,
failed to fix MFile since %s"
,
REPO_ID
(
pRepo
),
tstrerror
(
terrno
));
return
-
1
;
}
}
...
...
@@ -724,7 +724,7 @@ static int tsdbScanRootDir(STsdb *pRepo) {
tsdbGetRootDir
(
REPO_ID
(
pRepo
),
pRepo
->
dir
,
rootDir
);
STfsDir
*
tdir
=
tfsOpendir
(
REPO_TFS
(
pRepo
),
rootDir
);
if
(
tdir
==
NULL
)
{
tsdbError
(
"vgId:%d failed to open directory %s since %s"
,
REPO_ID
(
pRepo
),
rootDir
,
tstrerror
(
terrno
));
tsdbError
(
"vgId:%d
,
failed to open directory %s since %s"
,
REPO_ID
(
pRepo
),
rootDir
,
tstrerror
(
terrno
));
return
-
1
;
}
...
...
@@ -741,7 +741,7 @@ static int tsdbScanRootDir(STsdb *pRepo) {
// }
(
void
)
tfsRemoveFile
(
pf
);
tsdbDebug
(
"vgId:%d invalid file %s is removed"
,
REPO_ID
(
pRepo
),
pf
->
aname
);
tsdbDebug
(
"vgId:%d
,
invalid file %s is removed"
,
REPO_ID
(
pRepo
),
pf
->
aname
);
}
tfsClosedir
(
tdir
);
...
...
@@ -758,7 +758,7 @@ static int tsdbScanDataDir(STsdb *pRepo) {
tsdbGetDataDir
(
REPO_ID
(
pRepo
),
pRepo
->
dir
,
dataDir
);
STfsDir
*
tdir
=
tfsOpendir
(
REPO_TFS
(
pRepo
),
dataDir
);
if
(
tdir
==
NULL
)
{
tsdbError
(
"vgId:%d failed to open directory %s since %s"
,
REPO_ID
(
pRepo
),
dataDir
,
tstrerror
(
terrno
));
tsdbError
(
"vgId:%d
,
failed to open directory %s since %s"
,
REPO_ID
(
pRepo
),
dataDir
,
tstrerror
(
terrno
));
return
-
1
;
}
...
...
@@ -767,7 +767,7 @@ static int tsdbScanDataDir(STsdb *pRepo) {
if
(
!
tsdbIsTFileInFS
(
pfs
,
pf
))
{
(
void
)
tfsRemoveFile
(
pf
);
tsdbDebug
(
"vgId:%d invalid file %s is removed"
,
REPO_ID
(
pRepo
),
pf
->
aname
);
tsdbDebug
(
"vgId:%d
,
invalid file %s is removed"
,
REPO_ID
(
pRepo
),
pf
->
aname
);
}
}
...
...
@@ -811,7 +811,7 @@ static int tsdbRestoreDFileSet(STsdb *pRepo) {
fArray
=
taosArrayInit
(
1024
,
sizeof
(
STfsFile
));
if
(
fArray
==
NULL
)
{
terrno
=
TSDB_CODE_TDB_OUT_OF_MEMORY
;
tsdbError
(
"vgId:%d failed to restore DFileSet while open directory %s since %s"
,
REPO_ID
(
pRepo
),
dataDir
,
tsdbError
(
"vgId:%d
,
failed to restore DFileSet while open directory %s since %s"
,
REPO_ID
(
pRepo
),
dataDir
,
tstrerror
(
terrno
));
regfree
(
&
regex
);
return
-
1
;
...
...
@@ -819,7 +819,7 @@ static int tsdbRestoreDFileSet(STsdb *pRepo) {
tdir
=
tfsOpendir
(
REPO_TFS
(
pRepo
),
dataDir
);
if
(
tdir
==
NULL
)
{
tsdbError
(
"vgId:%d failed to restore DFileSet while open directory %s since %s"
,
REPO_ID
(
pRepo
),
dataDir
,
tsdbError
(
"vgId:%d
,
failed to restore DFileSet while open directory %s since %s"
,
REPO_ID
(
pRepo
),
dataDir
,
tstrerror
(
terrno
));
taosArrayDestroy
(
fArray
);
regfree
(
&
regex
);
...
...
@@ -840,12 +840,12 @@ static int tsdbRestoreDFileSet(STsdb *pRepo) {
}
}
else
if
(
code
==
REG_NOMATCH
)
{
// Not match
tsdbInfo
(
"vgId:%d invalid file %s exists, remove it"
,
REPO_ID
(
pRepo
),
pf
->
aname
);
tsdbInfo
(
"vgId:%d
,
invalid file %s exists, remove it"
,
REPO_ID
(
pRepo
),
pf
->
aname
);
(
void
)
tfsRemoveFile
(
pf
);
continue
;
}
else
{
// Has other error
tsdbError
(
"vgId:%d failed to restore DFileSet Array while run regexec since %s"
,
REPO_ID
(
pRepo
),
strerror
(
code
));
tsdbError
(
"vgId:%d
,
failed to restore DFileSet Array while run regexec since %s"
,
REPO_ID
(
pRepo
),
strerror
(
code
));
terrno
=
TAOS_SYSTEM_ERROR
(
code
);
tfsClosedir
(
tdir
);
taosArrayDestroy
(
fArray
);
...
...
@@ -876,7 +876,7 @@ static int tsdbRestoreDFileSet(STsdb *pRepo) {
SDFile
*
pDFile
=
TSDB_DFILE_IN_SET
(
&
fset
,
ftype
);
if
(
index
>=
taosArrayGetSize
(
fArray
))
{
tsdbError
(
"vgId:%d incomplete DFileSet, fid:%d"
,
REPO_ID
(
pRepo
),
fset
.
fid
);
tsdbError
(
"vgId:%d
,
incomplete DFileSet, fid:%d"
,
REPO_ID
(
pRepo
),
fset
.
fid
);
taosArrayDestroy
(
fArray
);
return
-
1
;
}
...
...
@@ -902,14 +902,14 @@ static int tsdbRestoreDFileSet(STsdb *pRepo) {
fset
.
fid
=
tfid
;
}
else
{
if
(
tfid
!=
fset
.
fid
)
{
tsdbError
(
"vgId:%d incomplete dFileSet, fid:%d"
,
REPO_ID
(
pRepo
),
fset
.
fid
);
tsdbError
(
"vgId:%d
,
incomplete dFileSet, fid:%d"
,
REPO_ID
(
pRepo
),
fset
.
fid
);
taosArrayDestroy
(
fArray
);
return
-
1
;
}
}
if
(
ttype
!=
ftype
)
{
tsdbError
(
"vgId:%d incomplete dFileSet, fid:%d"
,
REPO_ID
(
pRepo
),
fset
.
fid
);
tsdbError
(
"vgId:%d
,
incomplete dFileSet, fid:%d"
,
REPO_ID
(
pRepo
),
fset
.
fid
);
taosArrayDestroy
(
fArray
);
return
-
1
;
}
...
...
@@ -918,14 +918,14 @@ static int tsdbRestoreDFileSet(STsdb *pRepo) {
// if (tsdbOpenDFile(pDFile, O_RDONLY) < 0) {
if
(
tsdbOpenDFile
(
pDFile
,
TD_FILE_READ
)
<
0
)
{
tsdbError
(
"vgId:%d failed to open DFile %s since %s"
,
REPO_ID
(
pRepo
),
TSDB_FILE_FULL_NAME
(
pDFile
),
tsdbError
(
"vgId:%d
,
failed to open DFile %s since %s"
,
REPO_ID
(
pRepo
),
TSDB_FILE_FULL_NAME
(
pDFile
),
tstrerror
(
terrno
));
taosArrayDestroy
(
fArray
);
return
-
1
;
}
if
(
tsdbLoadDFileHeader
(
pDFile
,
&
(
pDFile
->
info
))
<
0
)
{
tsdbError
(
"vgId:%d failed to load DFile %s header since %s"
,
REPO_ID
(
pRepo
),
TSDB_FILE_FULL_NAME
(
pDFile
),
tsdbError
(
"vgId:%d
,
failed to load DFile %s header since %s"
,
REPO_ID
(
pRepo
),
TSDB_FILE_FULL_NAME
(
pDFile
),
tstrerror
(
terrno
));
taosArrayDestroy
(
fArray
);
return
-
1
;
...
...
@@ -943,7 +943,7 @@ static int tsdbRestoreDFileSet(STsdb *pRepo) {
if
(
pDFile
->
info
.
size
!=
file_size
)
{
int64_t
tfsize
=
pDFile
->
info
.
size
;
pDFile
->
info
.
size
=
file_size
;
tsdbInfo
(
"vgId:%d file %s header size is changed from %"
PRId64
" to %"
PRId64
,
REPO_ID
(
pRepo
),
tsdbInfo
(
"vgId:%d
,
file %s header size is changed from %"
PRId64
" to %"
PRId64
,
REPO_ID
(
pRepo
),
TSDB_FILE_FULL_NAME
(
pDFile
),
tfsize
,
pDFile
->
info
.
size
);
}
}
...
...
@@ -952,7 +952,7 @@ static int tsdbRestoreDFileSet(STsdb *pRepo) {
index
++
;
}
tsdbInfo
(
"vgId:%d FSET %d is restored"
,
REPO_ID
(
pRepo
),
fset
.
fid
);
tsdbInfo
(
"vgId:%d
,
FSET %d is restored"
,
REPO_ID
(
pRepo
),
fset
.
fid
);
taosArrayPush
(
pfs
->
cstatus
->
df
,
&
fset
);
}
...
...
@@ -965,18 +965,18 @@ static int tsdbRestoreDFileSet(STsdb *pRepo) {
static
int
tsdbRestoreCurrent
(
STsdb
*
pRepo
)
{
// // Loop to recover mfile
// if (tsdbRestoreMeta(pRepo) < 0) {
// tsdbError("vgId:%d failed to restore current since %s", REPO_ID(pRepo), tstrerror(terrno));
// tsdbError("vgId:%d
,
failed to restore current since %s", REPO_ID(pRepo), tstrerror(terrno));
// return -1;
// }
// Loop to recover dfile set
if
(
tsdbRestoreDFileSet
(
pRepo
)
<
0
)
{
tsdbError
(
"vgId:%d failed to restore DFileSet since %s"
,
REPO_ID
(
pRepo
),
tstrerror
(
terrno
));
tsdbError
(
"vgId:%d
,
failed to restore DFileSet since %s"
,
REPO_ID
(
pRepo
),
tstrerror
(
terrno
));
return
-
1
;
}
if
(
tsdbSaveFSStatus
(
pRepo
,
pRepo
->
fs
->
cstatus
)
<
0
)
{
tsdbError
(
"vgId:%d failed to restore current since %s"
,
REPO_ID
(
pRepo
),
tstrerror
(
terrno
));
tsdbError
(
"vgId:%d
,
failed to restore current since %s"
,
REPO_ID
(
pRepo
),
tstrerror
(
terrno
));
return
-
1
;
}
...
...
@@ -1024,11 +1024,11 @@ static void tsdbScanAndTryFixDFilesHeader(STsdb *pRepo, int32_t *nExpired) {
if
(
fset
.
fid
<
pRepo
->
rtn
.
minFid
)
{
++*
nExpired
;
}
tsdbDebug
(
"vgId:%d scan DFileSet %d header"
,
REPO_ID
(
pRepo
),
fset
.
fid
);
tsdbDebug
(
"vgId:%d
,
scan DFileSet %d header"
,
REPO_ID
(
pRepo
),
fset
.
fid
);
// if (tsdbOpenDFileSet(&fset, O_RDWR) < 0) {
if
(
tsdbOpenDFileSet
(
&
fset
,
TD_FILE_WRITE
|
TD_FILE_READ
)
<
0
)
{
tsdbError
(
"vgId:%d failed to open DFileSet %d since %s, continue"
,
REPO_ID
(
pRepo
),
fset
.
fid
,
tstrerror
(
terrno
));
tsdbError
(
"vgId:%d
,
failed to open DFileSet %d since %s, continue"
,
REPO_ID
(
pRepo
),
fset
.
fid
,
tstrerror
(
terrno
));
continue
;
}
...
...
@@ -1038,14 +1038,14 @@ static void tsdbScanAndTryFixDFilesHeader(STsdb *pRepo, int32_t *nExpired) {
if
((
tsdbLoadDFileHeader
(
pDFile
,
&
info
)
<
0
)
||
pDFile
->
info
.
size
!=
info
.
size
||
pDFile
->
info
.
magic
!=
info
.
magic
)
{
if
(
tsdbUpdateDFileHeader
(
pDFile
)
<
0
)
{
tsdbError
(
"vgId:%d failed to update DFile header of %s since %s, continue"
,
REPO_ID
(
pRepo
),
tsdbError
(
"vgId:%d
,
failed to update DFile header of %s since %s, continue"
,
REPO_ID
(
pRepo
),
TSDB_FILE_FULL_NAME
(
pDFile
),
tstrerror
(
terrno
));
}
else
{
tsdbInfo
(
"vgId:%d DFile header of %s is updated"
,
REPO_ID
(
pRepo
),
TSDB_FILE_FULL_NAME
(
pDFile
));
tsdbInfo
(
"vgId:%d
,
DFile header of %s is updated"
,
REPO_ID
(
pRepo
),
TSDB_FILE_FULL_NAME
(
pDFile
));
TSDB_FILE_FSYNC
(
pDFile
);
}
}
else
{
tsdbDebug
(
"vgId:%d DFile header of %s is correct"
,
REPO_ID
(
pRepo
),
TSDB_FILE_FULL_NAME
(
pDFile
));
tsdbDebug
(
"vgId:%d
,
DFile header of %s is correct"
,
REPO_ID
(
pRepo
),
TSDB_FILE_FULL_NAME
(
pDFile
));
}
}
...
...
source/dnode/vnode/src/tsdb/tsdbFile.c
浏览文件 @
74513630
...
...
@@ -181,7 +181,7 @@ static int tsdbScanAndTryFixDFile(STsdb *pRepo, SDFile *pDFile) {
tsdbInitDFileEx
(
&
df
,
pDFile
);
if
(
!
taosCheckExistFile
(
TSDB_FILE_FULL_NAME
(
pDFile
)))
{
tsdbError
(
"vgId:%d data file %s not exit, report to upper layer to fix it"
,
REPO_ID
(
pRepo
),
tsdbError
(
"vgId:%d
,
data file %s not exit, report to upper layer to fix it"
,
REPO_ID
(
pRepo
),
TSDB_FILE_FULL_NAME
(
pDFile
));
// pRepo->state |= TSDB_STATE_BAD_DATA;
TSDB_FILE_SET_STATE
(
pDFile
,
TSDB_FILE_STATE_BAD
);
...
...
@@ -211,17 +211,17 @@ static int tsdbScanAndTryFixDFile(STsdb *pRepo, SDFile *pDFile) {
}
tsdbCloseDFile
(
&
df
);
tsdbInfo
(
"vgId:%d file %s is truncated from %"
PRId64
" to %"
PRId64
,
REPO_ID
(
pRepo
),
TSDB_FILE_FULL_NAME
(
pDFile
),
tsdbInfo
(
"vgId:%d
,
file %s is truncated from %"
PRId64
" to %"
PRId64
,
REPO_ID
(
pRepo
),
TSDB_FILE_FULL_NAME
(
pDFile
),
file_size
,
pDFile
->
info
.
size
);
}
else
if
(
pDFile
->
info
.
size
>
file_size
)
{
tsdbError
(
"vgId:%d data file %s has wrong size %"
PRId64
" expected %"
PRId64
", report to upper layer to fix it"
,
tsdbError
(
"vgId:%d
,
data file %s has wrong size %"
PRId64
" expected %"
PRId64
", report to upper layer to fix it"
,
REPO_ID
(
pRepo
),
TSDB_FILE_FULL_NAME
(
pDFile
),
file_size
,
pDFile
->
info
.
size
);
// pRepo->state |= TSDB_STATE_BAD_DATA;
TSDB_FILE_SET_STATE
(
pDFile
,
TSDB_FILE_STATE_BAD
);
terrno
=
TSDB_CODE_TDB_FILE_CORRUPTED
;
return
0
;
}
else
{
tsdbDebug
(
"vgId:%d file %s passes the scan"
,
REPO_ID
(
pRepo
),
TSDB_FILE_FULL_NAME
(
pDFile
));
tsdbDebug
(
"vgId:%d
,
file %s passes the scan"
,
REPO_ID
(
pRepo
),
TSDB_FILE_FULL_NAME
(
pDFile
));
}
return
0
;
...
...
source/dnode/vnode/src/tsdb/tsdbMemTable2.c
浏览文件 @
74513630
...
...
@@ -52,20 +52,21 @@ struct SMemTable {
SArray
*
pArray
;
// SArray<SMemData>
};
#define SL_MAX_LEVEL 5
#define SL_NODE_SIZE(l) (sizeof(SMemSkipListNode) + sizeof(SMemSkipListNode *) * (l)*2)
#define SL_NODE_HALF_SIZE(l) (sizeof(SMemSkipListNode) + sizeof(SMemSkipListNode *) * (l))
#define SL_NODE_FORWARD(n, l) ((n)->forwards[l])
#define SL_NODE_BACKWARD(n, l) ((n)->forwards[(n)->level + (l)])
#define SL_NODE_DATA(n) (&SL_NODE_BACKWARD(n, (n)->level))
#define SL_HEAD_FORWARD(sl, l) SL_NODE_FORWARD((sl)->pHead, l)
#define SL_TAIL_BACKWARD(sl, l) SL_NODE_FORWARD((sl)->pTail, l)
static
int32_t
tsdbGetOrCreateMemData
(
SMemTable
*
pMemTable
,
tb_uid_t
suid
,
tb_uid_t
uid
,
SMemData
**
ppMemData
);
static
int
memDataPCmprFn
(
const
void
*
p1
,
const
void
*
p2
);
static
int32_t
tPutTSDBRow
(
uint8_t
*
p
,
TSDBROW
*
pRow
);
static
int32_t
tGetTSDBRow
(
uint8_t
*
p
,
TSDBROW
*
pRow
);
static
int8_t
tsdbMemSkipListRandLevel
(
SMemSkipList
*
pSl
);
static
void
memDataMovePos
(
SMemData
*
pMemData
,
TSDBROW
*
pRow
,
int8_t
isForward
,
SMemSkipListNode
**
pos
);
static
int32_t
memDataPutRow
(
SVBufPool
*
pPool
,
SMemData
*
pMemData
,
TSDBROW
*
pRow
,
int8_t
isForward
,
SMemSkipListNode
**
pos
);
// SMemTable ==============================================
int32_t
tsdbMemTableCreate2
(
STsdb
*
pTsdb
,
SMemTable
**
ppMemTable
)
{
...
...
@@ -109,6 +110,7 @@ int32_t tsdbInsertTableData2(STsdb *pTsdb, int64_t version, SVSubmitBlk *pSubmit
TSDBROW
row
=
{.
version
=
version
};
ASSERT
(
pMemTable
);
ASSERT
(
pSubmitBlk
->
nData
>
0
);
{
// check if table exists (todo)
...
...
@@ -116,44 +118,35 @@ int32_t tsdbInsertTableData2(STsdb *pTsdb, int64_t version, SVSubmitBlk *pSubmit
code
=
tsdbGetOrCreateMemData
(
pMemTable
,
pSubmitBlk
->
suid
,
pSubmitBlk
->
uid
,
&
pMemData
);
if
(
code
)
{
tsdbError
(
"vgId:%d failed to create/get table data since %s"
,
TD_VID
(
pTsdb
->
pVnode
),
tstrerror
(
code
));
tsdbError
(
"vgId:%d
,
failed to create/get table data since %s"
,
TD_VID
(
pTsdb
->
pVnode
),
tstrerror
(
code
));
goto
_err
;
}
// do insert
int32_t
nt
;
uint8_t
*
pt
;
int32_t
n
=
0
;
uint8_t
*
p
=
pSubmitBlk
->
pData
;
SVBufPool
*
pPool
=
pTsdb
->
pVnode
->
inUse
;
int8_t
level
;
SMemSkipListNode
*
pNode
;
int32_t
nRow
=
0
;
SMemSkipListNode
*
pos
[
SL_MAX_LEVEL
]
=
{
0
};
for
(
int8_t
iLevel
=
0
;
iLevel
<
SL_MAX_LEVEL
;
iLevel
++
)
{
pos
[
iLevel
]
=
pMemData
->
sl
.
pTail
;
}
while
(
n
<
pSubmitBlk
->
nData
)
{
nt
=
tGetTSRow
(
p
+
n
,
&
row
.
tsRow
);
n
+=
nt
;
ASSERT
(
n
<=
pSubmitBlk
->
nData
);
// build the node
level
=
tsdbMemSkipListRandLevel
(
&
pMemData
->
sl
);
pNode
=
(
SMemSkipListNode
*
)
vnodeBufPoolMalloc
(
pPool
,
SL_NODE_SIZE
(
level
)
+
nt
+
sizeof
(
version
));
if
(
pNode
==
NULL
)
{
code
=
TSDB_CODE_OUT_OF_MEMORY
;
memDataMovePos
(
pMemData
,
&
row
,
nRow
?
1
:
0
,
pos
);
code
=
memDataPutRow
(
pTsdb
->
pVnode
->
inUse
,
pMemData
,
&
row
,
nRow
?
1
:
0
,
pos
);
if
(
code
)
{
goto
_err
;
}
pNode
->
level
=
level
;
tPutTSDBRow
((
uint8_t
*
)
SL_NODE_DATA
(
pNode
),
&
row
);
// put the node (todo)
// set info
if
(
tsdbKeyCmprFn
(
&
row
,
&
pMemData
->
minKey
)
<
0
)
pMemData
->
minKey
=
*
(
TSDBKEY
*
)
&
row
;
if
(
tsdbKeyCmprFn
(
&
row
,
&
pMemData
->
maxKey
)
>
0
)
pMemData
->
maxKey
=
*
(
TSDBKEY
*
)
&
row
;
nRow
++
;
}
if
(
tsdbKeyCmprFn
(
&
pMemTable
->
minKey
,
&
pMemData
->
minKey
)
<
0
)
pMemTable
->
minKey
=
pMemData
->
minKey
;
if
(
tsdbKeyCmprFn
(
&
pMemTable
->
maxKey
,
&
pMemData
->
maxKey
)
>
0
)
pMemTable
->
maxKey
=
pMemData
->
maxKey
;
return
code
;
_err:
...
...
@@ -199,13 +192,13 @@ int32_t tsdbDeleteTableData2(STsdb *pTsdb, int64_t version, tb_uid_t suid, tb_ui
// update the state of pMemTable, pMemData, last and lastrow (todo)
}
tsdbDebug
(
"vgId:%d delete data from table suid:%"
PRId64
" uid:%"
PRId64
" sKey:%"
PRId64
" eKey:%"
PRId64
tsdbDebug
(
"vgId:%d
,
delete data from table suid:%"
PRId64
" uid:%"
PRId64
" sKey:%"
PRId64
" eKey:%"
PRId64
" since %s"
,
TD_VID
(
pTsdb
->
pVnode
),
suid
,
uid
,
sKey
,
eKey
,
tstrerror
(
code
));
return
code
;
_err:
tsdbError
(
"vgId:%d failed to delete data from table suid:%"
PRId64
" uid:%"
PRId64
" sKey:%"
PRId64
" eKey:%"
PRId64
tsdbError
(
"vgId:%d
,
failed to delete data from table suid:%"
PRId64
" uid:%"
PRId64
" sKey:%"
PRId64
" eKey:%"
PRId64
" since %s"
,
TD_VID
(
pTsdb
->
pVnode
),
suid
,
uid
,
sKey
,
eKey
,
tstrerror
(
code
));
return
code
;
...
...
@@ -227,7 +220,7 @@ static int32_t tsdbGetOrCreateMemData(SMemTable *pMemTable, tb_uid_t suid, tb_ui
}
// create
pMemData
=
vnodeBufPoolMalloc
(
pPool
,
sizeof
(
*
pMemData
)
+
SL_NODE_
HALF_
SIZE
(
maxLevel
)
*
2
);
pMemData
=
vnodeBufPoolMalloc
(
pPool
,
sizeof
(
*
pMemData
)
+
SL_NODE_SIZE
(
maxLevel
)
*
2
);
if
(
pMemData
==
NULL
)
{
code
=
TSDB_CODE_OUT_OF_MEMORY
;
goto
_err
;
...
...
@@ -242,11 +235,15 @@ static int32_t tsdbGetOrCreateMemData(SMemTable *pMemTable, tb_uid_t suid, tb_ui
pMemData
->
sl
.
maxLevel
=
maxLevel
;
pMemData
->
sl
.
level
=
0
;
pMemData
->
sl
.
pHead
=
(
SMemSkipListNode
*
)
&
pMemData
[
1
];
pMemData
->
sl
.
pTail
=
(
SMemSkipListNode
*
)
POINTER_SHIFT
(
pMemData
->
sl
.
pHead
,
SL_NODE_HALF_SIZE
(
maxLevel
));
pMemData
->
sl
.
pTail
=
(
SMemSkipListNode
*
)
POINTER_SHIFT
(
pMemData
->
sl
.
pHead
,
SL_NODE_SIZE
(
maxLevel
));
pMemData
->
sl
.
pHead
->
level
=
maxLevel
;
pMemData
->
sl
.
pTail
->
level
=
maxLevel
;
for
(
int8_t
iLevel
=
0
;
iLevel
<
pMemData
->
sl
.
maxLevel
;
iLevel
++
)
{
SL_HEAD_FORWARD
(
&
pMemData
->
sl
,
iLevel
)
=
pMemData
->
sl
.
pTail
;
SL_TAIL_BACKWARD
(
&
pMemData
->
sl
,
iLevel
)
=
pMemData
->
sl
.
pHead
;
SL_NODE_FORWARD
(
pMemData
->
sl
.
pHead
,
iLevel
)
=
pMemData
->
sl
.
pTail
;
SL_NODE_BACKWARD
(
pMemData
->
sl
.
pHead
,
iLevel
)
=
NULL
;
SL_NODE_BACKWARD
(
pMemData
->
sl
.
pTail
,
iLevel
)
=
pMemData
->
sl
.
pHead
;
SL_NODE_FORWARD
(
pMemData
->
sl
.
pTail
,
iLevel
)
=
NULL
;
}
if
(
idx
<
0
)
idx
=
0
;
...
...
@@ -313,264 +310,87 @@ static FORCE_INLINE int8_t tsdbMemSkipListRandLevel(SMemSkipList *pSl) {
return
level
;
}
#if 0 //====================================================================================
#define SL_MAX_LEVEL 5
struct SMemSkipListCurosr {
SMemSkipList *pSl;
SMemSkipListNode *pNodes[SL_MAX_LEVEL];
};
typedef struct {
int64_t version;
uint32_t szRow;
const STSRow *pRow;
} STsdbRow;
static
void
memDataMovePos
(
SMemData
*
pMemData
,
TSDBROW
*
pRow
,
int8_t
isForward
,
SMemSkipListNode
**
pos
)
{
TSDBKEY
*
pKey
;
int
c
;
#define HASH_BUCKET(SUID, UID, NBUCKET) (TABS((SUID) + (UID)) % (NBUCKET))
#define SL_HEAD_NODE(sl) ((sl)->pHead)
#define SL_TAIL_NODE(sl) ((SMemSkipListNode *)&SL_NODE_FORWARD(SL_HEAD_NODE(sl), (sl)->maxLevel))
#define SL_HEAD_NODE_FORWARD(n, l) SL_NODE_FORWARD(n, l)
#define SL_TAIL_NODE_BACKWARD(n, l) SL_NODE_FORWARD(n, l)
static int8_t tsdbMemSkipListRandLevel(SMemSkipList *pSl);
static int32_t tsdbEncodeRow(SEncoder *pEncoder, const STsdbRow *pRow);
static int32_t tsdbDecodeRow(SDecoder *pDecoder, STsdbRow *pRow);
static int32_t tsdbMemSkipListCursorCreate(int8_t maxLevel, SMemSkipListCurosr **ppSlc);
static void tsdbMemSkipListCursorDestroy(SMemSkipListCurosr *pSlc);
static void tsdbMemSkipListCursorInit(SMemSkipListCurosr *pSlc, SMemSkipList *pSl);
static void tsdbMemSkipListCursorPut(SMemSkipListCurosr *pSlc, SMemSkipListNode *pNode);
static int32_t tsdbMemSkipListCursorMoveTo(SMemSkipListCurosr *pSlc, int64_t version, TSKEY ts, int32_t flags);
static void tsdbMemSkipListCursorMoveToFirst(SMemSkipListCurosr *pSlc);
static void tsdbMemSkipListCursorMoveToLast(SMemSkipListCurosr *pSlc);
static int32_t tsdbMemSkipListCursorMoveToNext(SMemSkipListCurosr *pSlc);
static int32_t tsdbMemSkipListCursorMoveToPrev(SMemSkipListCurosr *pSlc);
static SMemSkipListNode *tsdbMemSkipListNodeCreate(SVBufPool *pPool, SMemSkipList *pSl, const STsdbRow *pTRow);
// SMemTable ========================
int32_t tsdbInsertData2(SMemTable *pMemTb, int64_t version, const SVSubmitBlk *pSubmitBlk) {
SMemData *pMemData;
STsdb *pTsdb = pMemTb->pTsdb;
SVnode *pVnode = pTsdb->pVnode;
SVBufPool *pPool = pVnode->inUse;
tb_uid_t suid = pSubmitBlk->suid;
tb_uid_t uid = pSubmitBlk->uid;
int32_t iBucket;
// search SMemData by hash
iBucket = HASH_BUCKET(suid, uid, pMemTb->nBucket);
for (pMemData = pMemTb->pBuckets[iBucket]; pMemData; pMemData = pMemData->pHashNext) {
if (pMemData->suid == suid && pMemData->uid == uid) break;
}
// create pMemData if need
if (pMemData == NULL) {
int8_t maxLevel = pVnode->config.tsdbCfg.slLevel;
int32_t tsize = sizeof(*pMemData) + SL_NODE_HALF_SIZE(maxLevel) * 2;
SMemSkipListNode *pHead, *pTail;
pMemData = vnodeBufPoolMalloc(pPool, tsize);
if (pMemData == NULL) {
terrno = TSDB_CODE_OUT_OF_MEMORY;
return -1;
}
pMemData->pHashNext = NULL;
pMemData->suid = suid;
pMemData->uid = uid;
pMemData->minKey = TSKEY_MAX;
pMemData->maxKey = TSKEY_MIN;
pMemData->minVer = -1;
pMemData->maxVer = -1;
pMemData->nRows = 0;
pMemData->sl.seed = taosRand();
pMemData->sl.maxLevel = maxLevel;
pMemData->sl.level = 0;
pMemData->sl.size = 0;
pHead = SL_HEAD_NODE(&pMemData->sl);
pTail = SL_TAIL_NODE(&pMemData->sl);
pHead->level = maxLevel;
pTail->level = maxLevel;
for (int iLevel = 0; iLevel < maxLevel; iLevel++) {
SL_HEAD_NODE_FORWARD(pHead, iLevel) = pTail;
SL_TAIL_NODE_BACKWARD(pTail, iLevel) = pHead;
}
// add to hash
if (pMemTb->nHash >= pMemTb->nBucket) {
// rehash (todo)
}
iBucket = HASH_BUCKET(suid, uid, pMemTb->nBucket);
pMemData->pHashNext = pMemTb->pBuckets[iBucket];
pMemTb->pBuckets[iBucket] = pMemData;
pMemTb->nHash++;
// sort organize (todo)
}
// do insert data to SMemData
SMemSkipListNode *forwards[SL_MAX_LEVEL];
SMemSkipListNode *pNode;
int32_t iRow;
STsdbRow tRow = {.version = version};
SEncoder ec = {0};
SDecoder dc = {0};
tDecoderInit(&dc, pSubmitBlk->pData, pSubmitBlk->nData);
tsdbMemSkipListCursorInit(pMemTb->pSlc, &pMemData->sl);
for (iRow = 0;; iRow++) {
if (tDecodeIsEnd(&dc)) break;
// decode row
if (tDecodeBinary(&dc, (uint8_t **)&tRow.pRow, &tRow.szRow) < 0) {
terrno = TSDB_CODE_INVALID_MSG;
return -1;
}
// move cursor
tsdbMemSkipListCursorMoveTo(pMemTb->pSlc, version, tRow.pRow->ts, 0);
// encode row
pNode = tsdbMemSkipListNodeCreate(pPool, &pMemData->sl, &tRow);
if (pNode == NULL) {
terrno = TSDB_CODE_OUT_OF_MEMORY;
return -1;
if
(
isForward
)
{
// TODO
}
else
{
SMemSkipListNode
*
px
=
pMemData
->
sl
.
pTail
;
for
(
int8_t
iLevel
=
pMemData
->
sl
.
maxLevel
-
1
;
iLevel
>=
0
;
iLevel
--
)
{
if
(
iLevel
<
pMemData
->
sl
.
level
)
{
SMemSkipListNode
*
p
=
SL_NODE_BACKWARD
(
px
,
iLevel
);
while
(
p
!=
pMemData
->
sl
.
pHead
)
{
pKey
=
(
TSDBKEY
*
)
SL_NODE_DATA
(
p
);
c
=
tsdbKeyCmprFn
(
pKey
,
pRow
);
if
(
c
<=
0
)
{
break
;
}
else
{
px
=
p
;
p
=
SL_NODE_BACKWARD
(
px
,
iLevel
);
}
}
pos
[
iLevel
]
=
px
;
}
}
// put the node
tsdbMemSkipListCursorPut(pMemTb->pSlc, pNode);
// update status
if (tRow.pRow->ts < pMemData->minKey) pMemData->minKey = tRow.pRow->ts;
if (tRow.pRow->ts > pMemData->maxKey) pMemData->maxKey = tRow.pRow->ts;
}
tDecoderClear(&dc);
// update status
if (pMemData->minVer == -1) pMemData->minVer = version;
if (pMemData->maxVer == -1 || pMemData->maxVer < version) pMemData->maxVer = version;
if (pMemTb->minKey < pMemData->minKey) pMemTb->minKey = pMemData->minKey;
if (pMemTb->maxKey < pMemData->maxKey) pMemTb->maxKey = pMemData->maxKey;
if (pMemTb->minVer == -1) pMemTb->minVer = version;
if (pMemTb->maxVer == -1 || pMemTb->maxVer < version) pMemTb->maxVer = version;
return 0;
}
static FORCE_INLINE int32_t tsdbEncodeRow(SEncoder *pEncoder, const STsdbRow *pRow) {
if (tEncodeI64(pEncoder, pRow->version) < 0) return -1;
if (tEncodeBinary(pEncoder, (const uint8_t *)pRow->pRow, pRow->szRow) < 0) return -1;
return 0;
}
static
void
memMovePosFrom
(
SMemData
*
pMemData
,
SMemSkipListNode
*
pNode
,
TSDBROW
*
pRow
,
int8_t
isForward
,
SMemSkipListNode
**
pos
)
{
SMemSkipListNode
*
px
=
pNode
;
TSDBKEY
*
pKey
;
SMemSkipListNode
*
p
;
int
c
;
static FORCE_INLINE int32_t tsdbDecodeRow(SDecoder *pDecoder, STsdbRow *pRow) {
if (tDecodeI64(pDecoder, &pRow->version) < 0) return -1;
if (tDecodeBinary(pDecoder, (uint8_t **)&pRow->pRow, &pRow->szRow) < 0) return -1;
return 0;
}
static int32_t tsdbMemSkipListCursorCreate(int8_t maxLevel, SMemSkipListCurosr **ppSlc) {
*ppSlc = (SMemSkipListCurosr *)taosMemoryCalloc(1, sizeof(**ppSlc) + sizeof(SMemSkipListNode *) * maxLevel);
if (*ppSlc == NULL) {
return -1;
}
return 0;
}
static void tsdbMemSkipListCursorDestroy(SMemSkipListCurosr *pSlc) { taosMemoryFree(pSlc); }
static void tsdbMemSkipListCursorInit(SMemSkipListCurosr *pSlc, SMemSkipList *pSl) {
SMemSkipListNode *pHead = SL_HEAD_NODE(pSl);
pSlc->pSl = pSl;
// for (int8_t iLevel = 0; iLevel < pSl->maxLevel; iLevel++) {
// pSlc->forwards[iLevel] = pHead;
// }
}
static void tsdbMemSkipListCursorPut(SMemSkipListCurosr *pSlc, SMemSkipListNode *pNode) {
SMemSkipList *pSl = pSlc->pSl;
SMemSkipListNode *pNodeNext;
for (int8_t iLevel = 0; iLevel < pNode->level; iLevel++) {
// todo
ASSERT(0);
}
if (pSl->level < pNode->level) {
pSl->level = pNode->level;
}
pSl->size += 1;
}
static int32_t tsdbMemSkipListCursorMoveTo(SMemSkipListCurosr *pSlc, int64_t version, TSKEY ts, int32_t flags) {
SMemSkipListNode **pForwards = NULL;
SMemSkipList *pSl = pSlc->pSl;
int8_t maxLevel = pSl->maxLevel;
SMemSkipListNode *pHead = SL_HEAD_NODE(pSl);
SMemSkipListNode *pTail = SL_TAIL_NODE(pSl);
if (pSl->size == 0) {
for (int8_t iLevel = 0; iLevel < pSl->maxLevel; iLevel++) {
pForwards[iLevel] = pHead;
if
(
isForward
)
{
}
else
{
ASSERT
(
pNode
!=
pMemData
->
sl
.
pHead
);
for
(
int8_t
iLevel
=
pMemData
->
sl
.
maxLevel
-
1
;
iLevel
>=
0
;
iLevel
--
)
{
p
=
SL_NODE_BACKWARD
(
px
,
iLevel
);
while
(
p
!=
pMemData
->
sl
.
pHead
)
{
pKey
=
(
TSDBKEY
*
)
SL_NODE_DATA
(
p
);
c
=
tsdbKeyCmprFn
(
pKey
,
pRow
);
if
(
c
<=
0
)
{
break
;
}
else
{
px
=
p
;
p
=
SL_NODE_BACKWARD
(
px
,
iLevel
);
}
}
pos
[
iLevel
]
=
px
;
}
}
return 0;
}
static void tsdbMemSkipListCursorMoveToFirst(SMemSkipListCurosr *pSlc) {
SMemSkipList *pSl = pSlc->pSl;
SMemSkipListNode *pHead = SL_HEAD_NODE(pSl);
for (int8_t iLevel = 0; iLevel < pSl->maxLevel; iLevel++) {
pSlc->pNodes[iLevel] = pHead;
}
tsdbMemSkipListCursorMoveToNext(pSlc);
}
static void tsdbMemSkipListCursorMoveToLast(SMemSkipListCurosr *pSlc) {
SMemSkipList *pSl = pSlc->pSl;
SMemSkipListNode *pTail = SL_TAIL_NODE(pSl);
static
int32_t
memDataPutRow
(
SVBufPool
*
pPool
,
SMemData
*
pMemData
,
TSDBROW
*
pRow
,
int8_t
isForward
,
SMemSkipListNode
**
pos
)
{
int32_t
code
=
0
;
int8_t
level
;
SMemSkipListNode
*
pNode
;
for (int8_t iLevel = 0; iLevel < pSl->maxLevel; iLevel++) {
pSlc->pNodes[iLevel] = pTail;
level
=
tsdbMemSkipListRandLevel
(
&
pMemData
->
sl
);
pNode
=
(
SMemSkipListNode
*
)
vnodeBufPoolMalloc
(
pPool
,
SL_NODE_SIZE
(
level
)
+
tPutTSDBRow
(
NULL
,
pRow
));
if
(
pNode
==
NULL
)
{
code
=
TSDB_CODE_OUT_OF_MEMORY
;
goto
_exit
;
}
tsdbMemSkipListCursorMoveToPrev(pSlc);
}
static int32_t tsdbMemSkipListCursorMoveToNext(SMemSkipListCurosr *pSlc) {
// TODO
return 0;
}
static int32_t tsdbMemSkipListCursorMoveToPrev(SMemSkipListCurosr *pSlc) {
// TODO
return 0;
}
static SMemSkipListNode *tsdbMemSkipListNodeCreate(SVBufPool *pPool, SMemSkipList *pSl, const STsdbRow *pTRow) {
int32_t tsize;
int32_t ret;
int8_t level = tsdbMemSkipListRandLevel(pSl);
SMemSkipListNode *pNode = NULL;
SEncoder ec = {0};
tEncodeSize(tsdbEncodeRow, pTRow, tsize, ret);
pNode = vnodeBufPoolMalloc(pPool, tsize + SL_NODE_SIZE(level));
if (pNode) {
pNode->level = level;
tEncoderInit(&ec, (uint8_t *)SL_NODE_DATA(pNode), tsize);
tsdbEncodeRow(&ec, pTRow);
tEncoderClear(&ec);
// do the read put
if
(
isForward
)
{
// TODO
}
else
{
// TODO
}
return pNode;
}
#endif
\ No newline at end of file
_exit:
return
code
;
}
\ No newline at end of file
source/dnode/vnode/src/tsdb/tsdbOpen.c
浏览文件 @
74513630
...
...
@@ -74,7 +74,7 @@ int tsdbOpen(SVnode *pVnode, STsdb **ppTsdb, const char *dir, STsdbKeepCfg *pKee
goto
_err
;
}
tsdbDebug
(
"vgId:%d tsdb is opened for %s, days:%d, keep:%d,%d,%d"
,
TD_VID
(
pVnode
),
pTsdb
->
path
,
pTsdb
->
keepCfg
.
days
,
tsdbDebug
(
"vgId:%d
,
tsdb is opened for %s, days:%d, keep:%d,%d,%d"
,
TD_VID
(
pVnode
),
pTsdb
->
path
,
pTsdb
->
keepCfg
.
days
,
pTsdb
->
keepCfg
.
keep0
,
pTsdb
->
keepCfg
.
keep1
,
pTsdb
->
keepCfg
.
keep2
);
*
ppTsdb
=
pTsdb
;
...
...
@@ -99,7 +99,7 @@ int tsdbClose(STsdb **pTsdb) {
int
tsdbLockRepo
(
STsdb
*
pTsdb
)
{
int
code
=
taosThreadMutexLock
(
&
pTsdb
->
mutex
);
if
(
code
!=
0
)
{
tsdbError
(
"vgId:%d failed to lock tsdb since %s"
,
REPO_ID
(
pTsdb
),
strerror
(
errno
));
tsdbError
(
"vgId:%d
,
failed to lock tsdb since %s"
,
REPO_ID
(
pTsdb
),
strerror
(
errno
));
terrno
=
TAOS_SYSTEM_ERROR
(
code
);
return
-
1
;
}
...
...
@@ -112,7 +112,7 @@ int tsdbUnlockRepo(STsdb *pTsdb) {
pTsdb
->
repoLocked
=
false
;
int
code
=
taosThreadMutexUnlock
(
&
pTsdb
->
mutex
);
if
(
code
!=
0
)
{
tsdbError
(
"vgId:%d failed to unlock tsdb since %s"
,
REPO_ID
(
pTsdb
),
strerror
(
errno
));
tsdbError
(
"vgId:%d
,
failed to unlock tsdb since %s"
,
REPO_ID
(
pTsdb
),
strerror
(
errno
));
terrno
=
TAOS_SYSTEM_ERROR
(
code
);
return
-
1
;
}
...
...
source/dnode/vnode/src/tsdb/tsdbRead.c
浏览文件 @
74513630
...
...
@@ -352,15 +352,15 @@ static STsdb* getTsdbByRetentions(SVnode* pVnode, STsdbReadHandle* pReadHandle,
}
if
(
level
==
TSDB_RETENTION_L0
)
{
tsdbDebug
(
"vgId:%d read handle %p rsma level %d is selected to query"
,
TD_VID
(
pVnode
),
pReadHandle
,
tsdbDebug
(
"vgId:%d
,
read handle %p rsma level %d is selected to query"
,
TD_VID
(
pVnode
),
pReadHandle
,
TSDB_RETENTION_L0
);
return
VND_RSMA0
(
pVnode
);
}
else
if
(
level
==
TSDB_RETENTION_L1
)
{
tsdbDebug
(
"vgId:%d read handle %p rsma level %d is selected to query"
,
TD_VID
(
pVnode
),
pReadHandle
,
tsdbDebug
(
"vgId:%d
,
read handle %p rsma level %d is selected to query"
,
TD_VID
(
pVnode
),
pReadHandle
,
TSDB_RETENTION_L1
);
return
VND_RSMA1
(
pVnode
);
}
else
{
tsdbDebug
(
"vgId:%d read handle %p rsma level %d is selected to query"
,
TD_VID
(
pVnode
),
pReadHandle
,
tsdbDebug
(
"vgId:%d
,
read handle %p rsma level %d is selected to query"
,
TD_VID
(
pVnode
),
pReadHandle
,
TSDB_RETENTION_L2
);
return
VND_RSMA2
(
pVnode
);
}
...
...
@@ -3555,7 +3555,7 @@ int32_t tsdbRetrieveDataBlockStatisInfo(tsdbReaderT* pTsdbReadHandle, SColumnDat
return
TSDB_CODE_SUCCESS
;
}
tsdbDebug
(
"vgId:%d succeed to load block statis part for uid %"
PRIu64
,
REPO_ID
(
pHandle
->
pTsdb
),
tsdbDebug
(
"vgId:%d
,
succeed to load block statis part for uid %"
PRIu64
,
REPO_ID
(
pHandle
->
pTsdb
),
TSDB_READ_TABLE_UID
(
&
pHandle
->
rhelper
));
int16_t
*
colIds
=
pHandle
->
suppInfo
.
defaultLoadColumn
->
pData
;
...
...
source/dnode/vnode/src/tsdb/tsdbReadImpl.c
浏览文件 @
74513630
...
...
@@ -87,7 +87,7 @@ int tsdbSetAndOpenReadFSet(SReadH *pReadh, SDFileSet *pSet) {
TSDB_FSET_SET_CLOSED
(
TSDB_READ_FSET
(
pReadh
));
// if (tsdbOpenDFileSet(TSDB_READ_FSET(pReadh), O_RDONLY) < 0) {
if
(
tsdbOpenDFileSet
(
TSDB_READ_FSET
(
pReadh
),
TD_FILE_READ
)
<
0
)
{
tsdbError
(
"vgId:%d failed to open file set %d since %s"
,
TSDB_READ_REPO_ID
(
pReadh
),
TSDB_FSET_FID
(
pSet
),
tsdbError
(
"vgId:%d
,
failed to open file set %d since %s"
,
TSDB_READ_REPO_ID
(
pReadh
),
TSDB_FSET_FID
(
pSet
),
tstrerror
(
terrno
));
return
-
1
;
}
...
...
@@ -107,7 +107,7 @@ int tsdbLoadBlockIdx(SReadH *pReadh) {
if
(
pHeadf
->
info
.
offset
<=
0
)
return
0
;
if
(
tsdbSeekDFile
(
pHeadf
,
pHeadf
->
info
.
offset
,
SEEK_SET
)
<
0
)
{
tsdbError
(
"vgId:%d failed to load SBlockIdx part while seek file %s since %s, offset:%u len :%u"
,
tsdbError
(
"vgId:%d
,
failed to load SBlockIdx part while seek file %s since %s, offset:%u len :%u"
,
TSDB_READ_REPO_ID
(
pReadh
),
TSDB_FILE_FULL_NAME
(
pHeadf
),
tstrerror
(
terrno
),
pHeadf
->
info
.
offset
,
pHeadf
->
info
.
len
);
return
-
1
;
...
...
@@ -117,7 +117,7 @@ int tsdbLoadBlockIdx(SReadH *pReadh) {
int64_t
nread
=
tsdbReadDFile
(
pHeadf
,
TSDB_READ_BUF
(
pReadh
),
pHeadf
->
info
.
len
);
if
(
nread
<
0
)
{
tsdbError
(
"vgId:%d failed to load SBlockIdx part while read file %s since %s, offset:%u len :%u"
,
tsdbError
(
"vgId:%d
,
failed to load SBlockIdx part while read file %s since %s, offset:%u len :%u"
,
TSDB_READ_REPO_ID
(
pReadh
),
TSDB_FILE_FULL_NAME
(
pHeadf
),
tstrerror
(
terrno
),
pHeadf
->
info
.
offset
,
pHeadf
->
info
.
len
);
return
-
1
;
...
...
@@ -125,14 +125,14 @@ int tsdbLoadBlockIdx(SReadH *pReadh) {
if
(
nread
<
pHeadf
->
info
.
len
)
{
terrno
=
TSDB_CODE_TDB_FILE_CORRUPTED
;
tsdbError
(
"vgId:%d SBlockIdx part in file %s is corrupted, offset:%u expected bytes:%u read bytes: %"
PRId64
,
tsdbError
(
"vgId:%d
,
SBlockIdx part in file %s is corrupted, offset:%u expected bytes:%u read bytes: %"
PRId64
,
TSDB_READ_REPO_ID
(
pReadh
),
TSDB_FILE_FULL_NAME
(
pHeadf
),
pHeadf
->
info
.
offset
,
pHeadf
->
info
.
len
,
nread
);
return
-
1
;
}
if
(
!
taosCheckChecksumWhole
((
uint8_t
*
)
TSDB_READ_BUF
(
pReadh
),
pHeadf
->
info
.
len
))
{
terrno
=
TSDB_CODE_TDB_FILE_CORRUPTED
;
tsdbError
(
"vgId:%d SBlockIdx part in file %s is corrupted since wrong checksum, offset:%u len :%u"
,
tsdbError
(
"vgId:%d
,
SBlockIdx part in file %s is corrupted since wrong checksum, offset:%u len :%u"
,
TSDB_READ_REPO_ID
(
pReadh
),
TSDB_FILE_FULL_NAME
(
pHeadf
),
pHeadf
->
info
.
offset
,
pHeadf
->
info
.
len
);
return
-
1
;
}
...
...
@@ -209,7 +209,7 @@ int tsdbLoadBlockInfo(SReadH *pReadh, void *pTarget) {
SBlockIdx
*
pBlkIdx
=
pReadh
->
pBlkIdx
;
if
(
tsdbSeekDFile
(
pHeadf
,
pBlkIdx
->
offset
,
SEEK_SET
)
<
0
)
{
tsdbError
(
"vgId:%d failed to load SBlockInfo part while seek file %s since %s, offset:%u len:%u"
,
tsdbError
(
"vgId:%d
,
failed to load SBlockInfo part while seek file %s since %s, offset:%u len:%u"
,
TSDB_READ_REPO_ID
(
pReadh
),
TSDB_FILE_FULL_NAME
(
pHeadf
),
tstrerror
(
terrno
),
pBlkIdx
->
offset
,
pBlkIdx
->
len
);
return
-
1
;
}
...
...
@@ -218,21 +218,21 @@ int tsdbLoadBlockInfo(SReadH *pReadh, void *pTarget) {
int64_t
nread
=
tsdbReadDFile
(
pHeadf
,
(
void
*
)(
pReadh
->
pBlkInfo
),
pBlkIdx
->
len
);
if
(
nread
<
0
)
{
tsdbError
(
"vgId:%d failed to load SBlockInfo part while read file %s since %s, offset:%u len :%u"
,
tsdbError
(
"vgId:%d
,
failed to load SBlockInfo part while read file %s since %s, offset:%u len :%u"
,
TSDB_READ_REPO_ID
(
pReadh
),
TSDB_FILE_FULL_NAME
(
pHeadf
),
tstrerror
(
terrno
),
pBlkIdx
->
offset
,
pBlkIdx
->
len
);
return
-
1
;
}
if
(
nread
<
pBlkIdx
->
len
)
{
terrno
=
TSDB_CODE_TDB_FILE_CORRUPTED
;
tsdbError
(
"vgId:%d SBlockInfo part in file %s is corrupted, offset:%u expected bytes:%u read bytes:%"
PRId64
,
tsdbError
(
"vgId:%d
,
SBlockInfo part in file %s is corrupted, offset:%u expected bytes:%u read bytes:%"
PRId64
,
TSDB_READ_REPO_ID
(
pReadh
),
TSDB_FILE_FULL_NAME
(
pHeadf
),
pBlkIdx
->
offset
,
pBlkIdx
->
len
,
nread
);
return
-
1
;
}
if
(
!
taosCheckChecksumWhole
((
uint8_t
*
)(
pReadh
->
pBlkInfo
),
pBlkIdx
->
len
))
{
terrno
=
TSDB_CODE_TDB_FILE_CORRUPTED
;
tsdbError
(
"vgId:%d SBlockInfo part in file %s is corrupted since wrong checksum, offset:%u len :%u"
,
tsdbError
(
"vgId:%d
,
SBlockInfo part in file %s is corrupted since wrong checksum, offset:%u len :%u"
,
TSDB_READ_REPO_ID
(
pReadh
),
TSDB_FILE_FULL_NAME
(
pHeadf
),
pBlkIdx
->
offset
,
pBlkIdx
->
len
);
return
-
1
;
}
...
...
@@ -467,7 +467,7 @@ int tsdbLoadBlockStatis(SReadH *pReadh, SBlock *pBlock) {
ASSERT
(
pBlock
->
numOfSubBlocks
<=
1
);
if
(
!
pBlock
->
aggrStat
)
{
tsdbDebug
(
"vgId:%d no need to load block statis part for uid %"
PRIu64
" since not exist"
,
REPO_ID
(
pReadh
->
pRepo
),
tsdbDebug
(
"vgId:%d
,
no need to load block statis part for uid %"
PRIu64
" since not exist"
,
REPO_ID
(
pReadh
->
pRepo
),
TSDB_READ_TABLE_UID
(
pReadh
));
return
TSDB_STATIS_NONE
;
}
...
...
@@ -475,7 +475,7 @@ int tsdbLoadBlockStatis(SReadH *pReadh, SBlock *pBlock) {
SDFile
*
pDFileAggr
=
pBlock
->
last
?
TSDB_READ_SMAL_FILE
(
pReadh
)
:
TSDB_READ_SMAD_FILE
(
pReadh
);
if
(
tsdbSeekDFile
(
pDFileAggr
,
pBlock
->
aggrOffset
,
SEEK_SET
)
<
0
)
{
tsdbError
(
"vgId:%d failed to load block statis part for uid %"
PRIu64
" while seek file %s to offset %"
PRIu64
tsdbError
(
"vgId:%d
,
failed to load block statis part for uid %"
PRIu64
" while seek file %s to offset %"
PRIu64
" since %s"
,
TSDB_READ_REPO_ID
(
pReadh
),
TSDB_READ_TABLE_UID
(
pReadh
),
TSDB_FILE_FULL_NAME
(
pDFileAggr
),
(
uint64_t
)
pBlock
->
aggrOffset
,
tstrerror
(
terrno
));
...
...
@@ -487,7 +487,7 @@ int tsdbLoadBlockStatis(SReadH *pReadh, SBlock *pBlock) {
int64_t
nreadAggr
=
tsdbReadDFile
(
pDFileAggr
,
(
void
*
)(
pReadh
->
pAggrBlkData
),
sizeAggr
);
if
(
nreadAggr
<
0
)
{
tsdbError
(
"vgId:%d failed to load block statis part for uid %"
PRIu64
tsdbError
(
"vgId:%d
,
failed to load block statis part for uid %"
PRIu64
" while read file %s since %s, offset:%"
PRIu64
" len :%"
PRIzu
,
TSDB_READ_REPO_ID
(
pReadh
),
TSDB_READ_TABLE_UID
(
pReadh
),
TSDB_FILE_FULL_NAME
(
pDFileAggr
),
tstrerror
(
terrno
),
(
uint64_t
)
pBlock
->
aggrOffset
,
sizeAggr
);
...
...
@@ -496,7 +496,7 @@ int tsdbLoadBlockStatis(SReadH *pReadh, SBlock *pBlock) {
if
(
nreadAggr
<
sizeAggr
)
{
terrno
=
TSDB_CODE_TDB_FILE_CORRUPTED
;
tsdbError
(
"vgId:%d block statis part for uid %"
PRIu64
" in file %s is corrupted, offset:%"
PRIu64
tsdbError
(
"vgId:%d
,
block statis part for uid %"
PRIu64
" in file %s is corrupted, offset:%"
PRIu64
" expected bytes:%"
PRIzu
" read bytes: %"
PRId64
,
TSDB_READ_REPO_ID
(
pReadh
),
TSDB_READ_TABLE_UID
(
pReadh
),
TSDB_FILE_FULL_NAME
(
pDFileAggr
),
(
uint64_t
)
pBlock
->
aggrOffset
,
sizeAggr
,
nreadAggr
);
...
...
@@ -505,7 +505,7 @@ int tsdbLoadBlockStatis(SReadH *pReadh, SBlock *pBlock) {
if
(
!
taosCheckChecksumWhole
((
uint8_t
*
)(
pReadh
->
pAggrBlkData
),
(
uint32_t
)
sizeAggr
))
{
terrno
=
TSDB_CODE_TDB_FILE_CORRUPTED
;
tsdbError
(
"vgId:%d block statis part for uid %"
PRIu64
tsdbError
(
"vgId:%d
,
block statis part for uid %"
PRIu64
"in file %s is corrupted since wrong checksum, offset:%"
PRIu64
" len :%"
PRIzu
,
TSDB_READ_REPO_ID
(
pReadh
),
TSDB_READ_TABLE_UID
(
pReadh
),
TSDB_FILE_FULL_NAME
(
pDFileAggr
),
(
uint64_t
)
pBlock
->
aggrOffset
,
sizeAggr
);
...
...
@@ -518,7 +518,7 @@ static int tsdbLoadBlockOffset(SReadH *pReadh, SBlock *pBlock) {
ASSERT
(
pBlock
->
numOfSubBlocks
<=
1
);
SDFile
*
pDFile
=
(
pBlock
->
last
)
?
TSDB_READ_LAST_FILE
(
pReadh
)
:
TSDB_READ_DATA_FILE
(
pReadh
);
if
(
tsdbSeekDFile
(
pDFile
,
pBlock
->
offset
,
SEEK_SET
)
<
0
)
{
tsdbError
(
"vgId:%d failed to load block head part while seek file %s to offset %"
PRId64
" since %s"
,
tsdbError
(
"vgId:%d
,
failed to load block head part while seek file %s to offset %"
PRId64
" since %s"
,
TSDB_READ_REPO_ID
(
pReadh
),
TSDB_FILE_FULL_NAME
(
pDFile
),
(
int64_t
)
pBlock
->
offset
,
tstrerror
(
terrno
));
return
-
1
;
}
...
...
@@ -528,14 +528,14 @@ static int tsdbLoadBlockOffset(SReadH *pReadh, SBlock *pBlock) {
int64_t
nread
=
tsdbReadDFile
(
pDFile
,
(
void
*
)(
pReadh
->
pBlkData
),
size
);
if
(
nread
<
0
)
{
tsdbError
(
"vgId:%d failed to load block head part while read file %s since %s, offset:%"
PRId64
" len :%"
PRIzu
,
tsdbError
(
"vgId:%d
,
failed to load block head part while read file %s since %s, offset:%"
PRId64
" len :%"
PRIzu
,
TSDB_READ_REPO_ID
(
pReadh
),
TSDB_FILE_FULL_NAME
(
pDFile
),
tstrerror
(
terrno
),
(
int64_t
)
pBlock
->
offset
,
size
);
return
-
1
;
}
if
(
nread
<
size
)
{
terrno
=
TSDB_CODE_TDB_FILE_CORRUPTED
;
tsdbError
(
"vgId:%d block head part in file %s is corrupted, offset:%"
PRId64
" expected bytes:%"
PRIzu
tsdbError
(
"vgId:%d
,
block head part in file %s is corrupted, offset:%"
PRId64
" expected bytes:%"
PRIzu
" read bytes: %"
PRId64
,
TSDB_READ_REPO_ID
(
pReadh
),
TSDB_FILE_FULL_NAME
(
pDFile
),
(
int64_t
)
pBlock
->
offset
,
size
,
nread
);
return
-
1
;
...
...
@@ -543,7 +543,7 @@ static int tsdbLoadBlockOffset(SReadH *pReadh, SBlock *pBlock) {
if
(
!
taosCheckChecksumWhole
((
uint8_t
*
)(
pReadh
->
pBlkData
),
(
uint32_t
)
size
))
{
terrno
=
TSDB_CODE_TDB_FILE_CORRUPTED
;
tsdbError
(
"vgId:%d block head part in file %s is corrupted since wrong checksum, offset:%"
PRId64
" len :%"
PRIzu
,
tsdbError
(
"vgId:%d
,
block head part in file %s is corrupted since wrong checksum, offset:%"
PRId64
" len :%"
PRIzu
,
TSDB_READ_REPO_ID
(
pReadh
),
TSDB_FILE_FULL_NAME
(
pDFile
),
(
int64_t
)
pBlock
->
offset
,
size
);
return
-
1
;
}
...
...
@@ -671,14 +671,14 @@ static int tsdbLoadBlockDataImpl(SReadH *pReadh, SBlock *pBlock, SDataCols *pDat
SBlockData
*
pBlockData
=
(
SBlockData
*
)
TSDB_READ_BUF
(
pReadh
);
if
(
tsdbSeekDFile
(
pDFile
,
pBlock
->
offset
,
SEEK_SET
)
<
0
)
{
tsdbError
(
"vgId:%d failed to load block data part while seek file %s to offset %"
PRId64
" since %s"
,
tsdbError
(
"vgId:%d
,
failed to load block data part while seek file %s to offset %"
PRId64
" since %s"
,
TSDB_READ_REPO_ID
(
pReadh
),
TSDB_FILE_FULL_NAME
(
pDFile
),
(
int64_t
)
pBlock
->
offset
,
tstrerror
(
terrno
));
return
-
1
;
}
int64_t
nread
=
tsdbReadDFile
(
pDFile
,
TSDB_READ_BUF
(
pReadh
),
pBlock
->
len
);
if
(
nread
<
0
)
{
tsdbError
(
"vgId:%d failed to load block data part while read file %s since %s, offset:%"
PRId64
" len :%d"
,
tsdbError
(
"vgId:%d
,
failed to load block data part while read file %s since %s, offset:%"
PRId64
" len :%d"
,
TSDB_READ_REPO_ID
(
pReadh
),
TSDB_FILE_FULL_NAME
(
pDFile
),
tstrerror
(
terrno
),
(
int64_t
)
pBlock
->
offset
,
pBlock
->
len
);
return
-
1
;
...
...
@@ -686,7 +686,7 @@ static int tsdbLoadBlockDataImpl(SReadH *pReadh, SBlock *pBlock, SDataCols *pDat
if
(
nread
<
pBlock
->
len
)
{
terrno
=
TSDB_CODE_TDB_FILE_CORRUPTED
;
tsdbError
(
"vgId:%d block data part in file %s is corrupted, offset:%"
PRId64
tsdbError
(
"vgId:%d
,
block data part in file %s is corrupted, offset:%"
PRId64
" expected bytes:%d read bytes: %"
PRId64
,
TSDB_READ_REPO_ID
(
pReadh
),
TSDB_FILE_FULL_NAME
(
pDFile
),
(
int64_t
)
pBlock
->
offset
,
pBlock
->
len
,
nread
);
return
-
1
;
...
...
@@ -695,7 +695,7 @@ static int tsdbLoadBlockDataImpl(SReadH *pReadh, SBlock *pBlock, SDataCols *pDat
int32_t
tsize
=
(
int32_t
)
tsdbBlockStatisSize
(
pBlock
->
numOfCols
,
(
uint32_t
)
pBlock
->
blkVer
);
if
(
!
taosCheckChecksumWhole
((
uint8_t
*
)
TSDB_READ_BUF
(
pReadh
),
tsize
))
{
terrno
=
TSDB_CODE_TDB_FILE_CORRUPTED
;
tsdbError
(
"vgId:%d block head part in file %s is corrupted since wrong checksum, offset:%"
PRId64
" len :%d"
,
tsdbError
(
"vgId:%d
,
block head part in file %s is corrupted since wrong checksum, offset:%"
PRId64
" len :%d"
,
TSDB_READ_REPO_ID
(
pReadh
),
TSDB_FILE_FULL_NAME
(
pDFile
),
(
int64_t
)
pBlock
->
offset
,
tsize
);
return
-
1
;
}
...
...
@@ -750,7 +750,7 @@ static int tsdbLoadBlockDataImpl(SReadH *pReadh, SBlock *pBlock, SDataCols *pDat
pBlockCol
?
pBlockCol
->
blen
:
0
,
pBlock
->
algorithm
,
pBlock
->
numOfRows
,
tLenBitmap
,
pDataCols
->
maxPoints
,
TSDB_READ_COMP_BUF
(
pReadh
),
(
int
)
taosTSizeof
(
TSDB_READ_COMP_BUF
(
pReadh
)))
<
0
)
{
tsdbError
(
"vgId:%d file %s is broken at column %d block offset %"
PRId64
" column offset %u"
,
tsdbError
(
"vgId:%d
,
file %s is broken at column %d block offset %"
PRId64
" column offset %u"
,
TSDB_READ_REPO_ID
(
pReadh
),
TSDB_FILE_FULL_NAME
(
pDFile
),
tcolId
,
(
int64_t
)
pBlock
->
offset
,
toffset
);
return
-
1
;
}
...
...
@@ -945,21 +945,21 @@ static int tsdbLoadColData(SReadH *pReadh, SDFile *pDFile, SBlock *pBlock, SBloc
int64_t
offset
=
pBlock
->
offset
+
tsdbBlockStatisSize
(
pBlock
->
numOfCols
,
(
uint32_t
)
pBlock
->
blkVer
)
+
tsdbGetBlockColOffset
(
pBlockCol
);
if
(
tsdbSeekDFile
(
pDFile
,
offset
,
SEEK_SET
)
<
0
)
{
tsdbError
(
"vgId:%d failed to load block column data while seek file %s to offset %"
PRId64
" since %s"
,
tsdbError
(
"vgId:%d
,
failed to load block column data while seek file %s to offset %"
PRId64
" since %s"
,
TSDB_READ_REPO_ID
(
pReadh
),
TSDB_FILE_FULL_NAME
(
pDFile
),
offset
,
tstrerror
(
terrno
));
return
-
1
;
}
int64_t
nread
=
tsdbReadDFile
(
pDFile
,
TSDB_READ_BUF
(
pReadh
),
pBlockCol
->
len
);
if
(
nread
<
0
)
{
tsdbError
(
"vgId:%d failed to load block column data while read file %s since %s, offset:%"
PRId64
" len :%d"
,
tsdbError
(
"vgId:%d
,
failed to load block column data while read file %s since %s, offset:%"
PRId64
" len :%d"
,
TSDB_READ_REPO_ID
(
pReadh
),
TSDB_FILE_FULL_NAME
(
pDFile
),
tstrerror
(
terrno
),
offset
,
pBlockCol
->
len
);
return
-
1
;
}
if
(
nread
<
pBlockCol
->
len
)
{
terrno
=
TSDB_CODE_TDB_FILE_CORRUPTED
;
tsdbError
(
"vgId:%d block column data in file %s is corrupted, offset:%"
PRId64
" expected bytes:%d"
PRIzu
tsdbError
(
"vgId:%d
,
block column data in file %s is corrupted, offset:%"
PRId64
" expected bytes:%d"
PRIzu
" read bytes: %"
PRId64
,
TSDB_READ_REPO_ID
(
pReadh
),
TSDB_FILE_FULL_NAME
(
pDFile
),
offset
,
pBlockCol
->
len
,
nread
);
return
-
1
;
...
...
@@ -968,7 +968,7 @@ static int tsdbLoadColData(SReadH *pReadh, SDFile *pDFile, SBlock *pBlock, SBloc
if
(
tsdbCheckAndDecodeColumnData
(
pDataCol
,
pReadh
->
pBuf
,
pBlockCol
->
len
,
pBlockCol
->
blen
,
pBlock
->
algorithm
,
pBlock
->
numOfRows
,
tLenBitmap
,
pCfg
->
maxRows
,
pReadh
->
pCBuf
,
(
int32_t
)
taosTSizeof
(
pReadh
->
pCBuf
))
<
0
)
{
tsdbError
(
"vgId:%d file %s is broken at column %d offset %"
PRId64
,
REPO_ID
(
pRepo
),
TSDB_FILE_FULL_NAME
(
pDFile
),
tsdbError
(
"vgId:%d
,
file %s is broken at column %d offset %"
PRId64
,
REPO_ID
(
pRepo
),
TSDB_FILE_FULL_NAME
(
pDFile
),
pBlockCol
->
colId
,
offset
);
return
-
1
;
}
...
...
source/dnode/vnode/src/tsdb/tsdbWrite.c
浏览文件 @
74513630
...
...
@@ -28,7 +28,7 @@ int tsdbInsertData(STsdb *pTsdb, int64_t version, SSubmitReq *pMsg, SSubmitRsp *
// scan and convert
if
(
tsdbScanAndConvertSubmitMsg
(
pTsdb
,
pMsg
)
<
0
)
{
if
(
terrno
!=
TSDB_CODE_TDB_TABLE_RECONFIGURE
)
{
tsdbError
(
"vgId:%d failed to insert data since %s"
,
REPO_ID
(
pTsdb
),
tstrerror
(
terrno
));
tsdbError
(
"vgId:%d
,
failed to insert data since %s"
,
REPO_ID
(
pTsdb
),
tstrerror
(
terrno
));
}
return
-
1
;
}
...
...
@@ -59,7 +59,7 @@ static FORCE_INLINE int tsdbCheckRowRange(STsdb *pTsdb, STable *pTable, STSRow *
TSKEY now) {
TSKEY rowKey = TD_ROW_KEY(row);
if (rowKey < minKey || rowKey > maxKey) {
tsdbError("vgId:%d table %s tid %d uid %" PRIu64 " timestamp is out of range! now %" PRId64 " minKey %" PRId64
tsdbError("vgId:%d
,
table %s tid %d uid %" PRIu64 " timestamp is out of range! now %" PRId64 " minKey %" PRId64
" maxKey %" PRId64 " row key %" PRId64,
REPO_ID(pTsdb), TABLE_CHAR_NAME(pTable), TABLE_TID(pTable), TABLE_UID(pTable), now, minKey, maxKey,
rowKey);
...
...
@@ -75,7 +75,7 @@ static FORCE_INLINE int tsdbCheckRowRange(STsdb *pTsdb, tb_uid_t uid, STSRow *ro
TSKEY
now
)
{
TSKEY
rowKey
=
TD_ROW_KEY
(
row
);
if
(
rowKey
<
minKey
||
rowKey
>
maxKey
)
{
tsdbError
(
"vgId:%d table uid %"
PRIu64
" timestamp is out of range! now %"
PRId64
" minKey %"
PRId64
tsdbError
(
"vgId:%d
,
table uid %"
PRIu64
" timestamp is out of range! now %"
PRId64
" minKey %"
PRId64
" maxKey %"
PRId64
" row key %"
PRId64
,
REPO_ID
(
pTsdb
),
uid
,
now
,
minKey
,
maxKey
,
rowKey
);
terrno
=
TSDB_CODE_TDB_TIMESTAMP_OUT_OF_RANGE
;
...
...
@@ -115,7 +115,7 @@ int tsdbScanAndConvertSubmitMsg(STsdb *pTsdb, SSubmitReq *pMsg) {
#if 0
if (pBlock->tid <= 0 || pBlock->tid >= pMeta->maxTables) {
tsdbError("vgId:%d failed to get table to insert data, uid %" PRIu64 " tid %d", REPO_ID(pTsdb), pBlock->uid,
tsdbError("vgId:%d
,
failed to get table to insert data, uid %" PRIu64 " tid %d", REPO_ID(pTsdb), pBlock->uid,
pBlock->tid);
terrno = TSDB_CODE_TDB_INVALID_TABLE_ID;
return -1;
...
...
@@ -123,14 +123,14 @@ int tsdbScanAndConvertSubmitMsg(STsdb *pTsdb, SSubmitReq *pMsg) {
STable *pTable = pMeta->tables[pBlock->tid];
if (pTable == NULL || TABLE_UID(pTable) != pBlock->uid) {
tsdbError("vgId:%d failed to get table to insert data, uid %" PRIu64 " tid %d", REPO_ID(pTsdb), pBlock->uid,
tsdbError("vgId:%d
,
failed to get table to insert data, uid %" PRIu64 " tid %d", REPO_ID(pTsdb), pBlock->uid,
pBlock->tid);
terrno = TSDB_CODE_TDB_INVALID_TABLE_ID;
return -1;
}
if (TABLE_TYPE(pTable) == TSDB_SUPER_TABLE) {
tsdbError("vgId:%d invalid action trying to insert a super table %s", REPO_ID(pTsdb), TABLE_CHAR_NAME(pTable));
tsdbError("vgId:%d
,
invalid action trying to insert a super table %s", REPO_ID(pTsdb), TABLE_CHAR_NAME(pTable));
terrno = TSDB_CODE_TDB_INVALID_ACTION;
return -1;
}
...
...
source/dnode/vnode/src/vnd/vnodeBufPool.c
浏览文件 @
74513630
...
...
@@ -30,7 +30,7 @@ int vnodeOpenBufPool(SVnode *pVnode, int64_t size) {
// create pool
ret
=
vnodeBufPoolCreate
(
size
,
&
pPool
);
if
(
ret
<
0
)
{
vError
(
"vgId:%d failed to open vnode buffer pool since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
vError
(
"vgId:%d
,
failed to open vnode buffer pool since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
vnodeCloseBufPool
(
pVnode
);
return
-
1
;
}
...
...
@@ -40,7 +40,7 @@ int vnodeOpenBufPool(SVnode *pVnode, int64_t size) {
pVnode
->
pPool
=
pPool
;
}
vDebug
(
"vgId:%d vnode buffer pool is opened, pool size: %"
PRId64
,
TD_VID
(
pVnode
),
size
);
vDebug
(
"vgId:%d
,
vnode buffer pool is opened, pool size: %"
PRId64
,
TD_VID
(
pVnode
),
size
);
return
0
;
}
...
...
@@ -53,7 +53,7 @@ int vnodeCloseBufPool(SVnode *pVnode) {
vnodeBufPoolDestroy
(
pPool
);
}
vDebug
(
"vgId:%d vnode buffer pool is closed"
,
TD_VID
(
pVnode
));
vDebug
(
"vgId:%d
,
vnode buffer pool is closed"
,
TD_VID
(
pVnode
));
return
0
;
}
...
...
source/dnode/vnode/src/vnd/vnodeCommit.c
浏览文件 @
74513630
...
...
@@ -42,29 +42,29 @@ int vnodeBegin(SVnode *pVnode) {
// begin meta
if
(
metaBegin
(
pVnode
->
pMeta
)
<
0
)
{
vError
(
"vgId:%d failed to begin meta since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
vError
(
"vgId:%d
,
failed to begin meta since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
return
-
1
;
}
// begin tsdb
if
(
pVnode
->
pSma
)
{
if
(
tsdbBegin
(
VND_RSMA0
(
pVnode
))
<
0
)
{
vError
(
"vgId:%d failed to begin rsma0 since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
vError
(
"vgId:%d
,
failed to begin rsma0 since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
return
-
1
;
}
if
(
tsdbBegin
(
VND_RSMA1
(
pVnode
))
<
0
)
{
vError
(
"vgId:%d failed to begin rsma1 since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
vError
(
"vgId:%d
,
failed to begin rsma1 since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
return
-
1
;
}
if
(
tsdbBegin
(
VND_RSMA2
(
pVnode
))
<
0
)
{
vError
(
"vgId:%d failed to begin rsma2 since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
vError
(
"vgId:%d
,
failed to begin rsma2 since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
return
-
1
;
}
}
else
{
if
(
tsdbBegin
(
pVnode
->
pTsdb
)
<
0
)
{
vError
(
"vgId:%d failed to begin tsdb since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
vError
(
"vgId:%d
,
failed to begin tsdb since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
return
-
1
;
}
}
...
...
@@ -110,7 +110,7 @@ int vnodeSaveInfo(const char *dir, const SVnodeInfo *pInfo) {
// free info binary
taosMemoryFree
(
data
);
vInfo
(
"vgId:%d vnode info is saved, fname: %s"
,
pInfo
->
config
.
vgId
,
fname
);
vInfo
(
"vgId:%d
,
vnode info is saved, fname: %s"
,
pInfo
->
config
.
vgId
,
fname
);
return
0
;
...
...
@@ -132,7 +132,7 @@ int vnodeCommitInfo(const char *dir, const SVnodeInfo *pInfo) {
return
-
1
;
}
vInfo
(
"vgId:%d vnode info is committed"
,
pInfo
->
config
.
vgId
);
vInfo
(
"vgId:%d
,
vnode info is committed"
,
pInfo
->
config
.
vgId
);
return
0
;
}
...
...
@@ -210,7 +210,7 @@ int vnodeCommit(SVnode *pVnode) {
SVnodeInfo
info
=
{
0
};
char
dir
[
TSDB_FILENAME_LEN
];
vInfo
(
"vgId:%d start to commit, version: %"
PRId64
,
TD_VID
(
pVnode
),
pVnode
->
state
.
applied
);
vInfo
(
"vgId:%d
,
start to commit, version: %"
PRId64
,
TD_VID
(
pVnode
),
pVnode
->
state
.
applied
);
pVnode
->
onCommit
=
pVnode
->
inUse
;
pVnode
->
inUse
=
NULL
;
...
...
@@ -268,7 +268,7 @@ int vnodeCommit(SVnode *pVnode) {
pVnode
->
pPool
=
pVnode
->
onCommit
;
pVnode
->
onCommit
=
NULL
;
vInfo
(
"vgId:%d commit over"
,
TD_VID
(
pVnode
));
vInfo
(
"vgId:%d
,
commit over"
,
TD_VID
(
pVnode
));
return
0
;
}
...
...
source/dnode/vnode/src/vnd/vnodeOpen.c
浏览文件 @
74513630
...
...
@@ -23,13 +23,13 @@ int vnodeCreate(const char *path, SVnodeCfg *pCfg, STfs *pTfs) {
// check config
if
(
vnodeCheckCfg
(
pCfg
)
<
0
)
{
vError
(
"vgId:%d failed to create vnode since: %s"
,
pCfg
->
vgId
,
tstrerror
(
terrno
));
vError
(
"vgId:%d
,
failed to create vnode since: %s"
,
pCfg
->
vgId
,
tstrerror
(
terrno
));
return
-
1
;
}
// create vnode env
if
(
tfsMkdir
(
pTfs
,
path
)
<
0
)
{
vError
(
"vgId:%d failed to create vnode since: %s"
,
pCfg
->
vgId
,
tstrerror
(
terrno
));
vError
(
"vgId:%d
,
failed to create vnode since: %s"
,
pCfg
->
vgId
,
tstrerror
(
terrno
));
return
-
1
;
}
...
...
@@ -39,11 +39,11 @@ int vnodeCreate(const char *path, SVnodeCfg *pCfg, STfs *pTfs) {
info
.
state
.
applied
=
-
1
;
if
(
vnodeSaveInfo
(
dir
,
&
info
)
<
0
||
vnodeCommitInfo
(
dir
,
&
info
)
<
0
)
{
vError
(
"vgId:%d failed to save vnode config since %s"
,
pCfg
->
vgId
,
tstrerror
(
terrno
));
vError
(
"vgId:%d
,
failed to save vnode config since %s"
,
pCfg
->
vgId
,
tstrerror
(
terrno
));
return
-
1
;
}
vInfo
(
"vgId:%d vnode is created"
,
pCfg
->
vgId
);
vInfo
(
"vgId:%d
,
vnode is created"
,
pCfg
->
vgId
);
return
0
;
}
...
...
@@ -70,7 +70,7 @@ SVnode *vnodeOpen(const char *path, STfs *pTfs, SMsgCb msgCb) {
pVnode
=
(
SVnode
*
)
taosMemoryCalloc
(
1
,
sizeof
(
*
pVnode
)
+
strlen
(
path
)
+
1
);
if
(
pVnode
==
NULL
)
{
terrno
=
TSDB_CODE_OUT_OF_MEMORY
;
vError
(
"vgId:%d failed to open vnode since %s"
,
info
.
config
.
vgId
,
tstrerror
(
terrno
));
vError
(
"vgId:%d
,
failed to open vnode since %s"
,
info
.
config
.
vgId
,
tstrerror
(
terrno
));
return
NULL
;
}
...
...
@@ -86,25 +86,25 @@ SVnode *vnodeOpen(const char *path, STfs *pTfs, SMsgCb msgCb) {
// open buffer pool
if
(
vnodeOpenBufPool
(
pVnode
,
pVnode
->
config
.
isHeap
?
0
:
pVnode
->
config
.
szBuf
/
3
)
<
0
)
{
vError
(
"vgId:%d failed to open vnode buffer pool since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
vError
(
"vgId:%d
,
failed to open vnode buffer pool since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
goto
_err
;
}
// open meta
if
(
metaOpen
(
pVnode
,
&
pVnode
->
pMeta
)
<
0
)
{
vError
(
"vgId:%d failed to open vnode meta since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
vError
(
"vgId:%d
,
failed to open vnode meta since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
goto
_err
;
}
// open tsdb
if
(
!
VND_IS_RSMA
(
pVnode
)
&&
tsdbOpen
(
pVnode
,
&
VND_TSDB
(
pVnode
),
VNODE_TSDB_DIR
,
NULL
)
<
0
)
{
vError
(
"vgId:%d failed to open vnode tsdb since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
vError
(
"vgId:%d
,
failed to open vnode tsdb since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
goto
_err
;
}
// open sma
if
(
smaOpen
(
pVnode
))
{
vError
(
"vgId:%d failed to open vnode sma since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
vError
(
"vgId:%d
,
failed to open vnode sma since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
goto
_err
;
}
...
...
@@ -113,7 +113,7 @@ SVnode *vnodeOpen(const char *path, STfs *pTfs, SMsgCb msgCb) {
taosRealPath
(
tdir
,
NULL
,
sizeof
(
tdir
));
pVnode
->
pWal
=
walOpen
(
tdir
,
&
(
pVnode
->
config
.
walCfg
));
if
(
pVnode
->
pWal
==
NULL
)
{
vError
(
"vgId:%d failed to open vnode wal since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
vError
(
"vgId:%d
,
failed to open vnode wal since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
goto
_err
;
}
...
...
@@ -122,27 +122,27 @@ SVnode *vnodeOpen(const char *path, STfs *pTfs, SMsgCb msgCb) {
taosRealPath
(
tdir
,
NULL
,
sizeof
(
tdir
));
pVnode
->
pTq
=
tqOpen
(
tdir
,
pVnode
,
pVnode
->
pWal
);
if
(
pVnode
->
pTq
==
NULL
)
{
vError
(
"vgId:%d failed to open vnode tq since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
vError
(
"vgId:%d
,
failed to open vnode tq since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
goto
_err
;
}
// open query
if
(
vnodeQueryOpen
(
pVnode
))
{
vError
(
"vgId:%d failed to open vnode query since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
vError
(
"vgId:%d
,
failed to open vnode query since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
terrno
=
TSDB_CODE_OUT_OF_MEMORY
;
goto
_err
;
}
// vnode begin
if
(
vnodeBegin
(
pVnode
)
<
0
)
{
vError
(
"vgId:%d failed to begin since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
vError
(
"vgId:%d
,
failed to begin since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
terrno
=
TSDB_CODE_OUT_OF_MEMORY
;
goto
_err
;
}
// open sync
if
(
vnodeSyncOpen
(
pVnode
,
dir
))
{
vError
(
"vgId:%d failed to open sync since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
vError
(
"vgId:%d
,
failed to open sync since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
terrno
=
TSDB_CODE_OUT_OF_MEMORY
;
goto
_err
;
}
...
...
source/dnode/vnode/src/vnd/vnodeSvr.c
浏览文件 @
74513630
...
...
@@ -25,6 +25,7 @@ static int vnodeProcessSubmitReq(SVnode *pVnode, int64_t version, void *pReq, in
static
int
vnodeProcessCreateTSmaReq
(
SVnode
*
pVnode
,
int64_t
version
,
void
*
pReq
,
int32_t
len
,
SRpcMsg
*
pRsp
);
int32_t
vnodePreprocessReq
(
SVnode
*
pVnode
,
SRpcMsg
*
pMsg
)
{
int32_t
code
=
0
;
SDecoder
dc
=
{
0
};
switch
(
pMsg
->
msgType
)
{
...
...
@@ -89,13 +90,13 @@ int32_t vnodePreprocessReq(SVnode *pVnode, SRpcMsg *pMsg) {
}
break
;
case
TDMT_VND_ALTER_REPLICA
:
{
vnodeSyncAlter
(
pVnode
,
pMsg
);
code
=
vnodeSyncAlter
(
pVnode
,
pMsg
);
}
break
;
default:
break
;
}
return
0
;
return
code
;
}
int
vnodeProcessWriteReq
(
SVnode
*
pVnode
,
SRpcMsg
*
pMsg
,
int64_t
version
,
SRpcMsg
*
pRsp
)
{
...
...
@@ -104,7 +105,7 @@ int vnodeProcessWriteReq(SVnode *pVnode, SRpcMsg *pMsg, int64_t version, SRpcMsg
int
len
;
int
ret
;
vTrace
(
"vgId:%d start to process write request %s, version %"
PRId64
,
TD_VID
(
pVnode
),
TMSG_INFO
(
pMsg
->
msgType
),
vTrace
(
"vgId:%d
,
start to process write request %s, version %"
PRId64
,
TD_VID
(
pVnode
),
TMSG_INFO
(
pMsg
->
msgType
),
version
);
pVnode
->
state
.
applied
=
version
;
...
...
@@ -164,16 +165,16 @@ int vnodeProcessWriteReq(SVnode *pVnode, SRpcMsg *pMsg, int64_t version, SRpcMsg
break
;
}
v
Debug
(
"vgId:%d
process %s request success, version: %"
PRId64
,
TD_VID
(
pVnode
),
TMSG_INFO
(
pMsg
->
msgType
),
version
);
v
Trace
(
"vgId:%d,
process %s request success, version: %"
PRId64
,
TD_VID
(
pVnode
),
TMSG_INFO
(
pMsg
->
msgType
),
version
);
if
(
tqPushMsg
(
pVnode
->
pTq
,
pMsg
->
pCont
,
pMsg
->
contLen
,
pMsg
->
msgType
,
version
)
<
0
)
{
vError
(
"vgId:%d failed to push msg to TQ since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
vError
(
"vgId:%d
,
failed to push msg to TQ since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
return
-
1
;
}
// commit if need
if
(
vnodeShouldCommit
(
pVnode
))
{
vInfo
(
"vgId:%d commit at version %"
PRId64
,
TD_VID
(
pVnode
),
version
);
vInfo
(
"vgId:%d
,
commit at version %"
PRId64
,
TD_VID
(
pVnode
),
version
);
// commit current change
vnodeCommit
(
pVnode
);
...
...
@@ -184,7 +185,7 @@ int vnodeProcessWriteReq(SVnode *pVnode, SRpcMsg *pMsg, int64_t version, SRpcMsg
return
0
;
_err:
v
Debug
(
"vgId:%d
process %s request failed since %s, version: %"
PRId64
,
TD_VID
(
pVnode
),
TMSG_INFO
(
pMsg
->
msgType
),
v
Error
(
"vgId:%d,
process %s request failed since %s, version: %"
PRId64
,
TD_VID
(
pVnode
),
TMSG_INFO
(
pMsg
->
msgType
),
tstrerror
(
terrno
),
version
);
return
-
1
;
}
...
...
@@ -828,13 +829,13 @@ static int vnodeProcessCreateTSmaReq(SVnode *pVnode, int64_t version, void *pReq
}
tDecoderClear
(
&
coder
);
vDebug
(
"vgId:%d success to create tsma %s:%"
PRIi64
" version %"
PRIi64
" for table %"
PRIi64
,
TD_VID
(
pVnode
),
vDebug
(
"vgId:%d
,
success to create tsma %s:%"
PRIi64
" version %"
PRIi64
" for table %"
PRIi64
,
TD_VID
(
pVnode
),
req
.
indexName
,
req
.
indexUid
,
version
,
req
.
tableUid
);
return
0
;
_err:
tDecoderClear
(
&
coder
);
vError
(
"vgId:%d failed to create tsma %s:%"
PRIi64
" version %"
PRIi64
"for table %"
PRIi64
" since %s"
,
vError
(
"vgId:%d
,
failed to create tsma %s:%"
PRIi64
" version %"
PRIi64
"for table %"
PRIi64
" since %s"
,
TD_VID
(
pVnode
),
req
.
indexName
,
req
.
indexUid
,
version
,
req
.
tableUid
,
terrstr
(
terrno
));
return
-
1
;
}
...
...
source/dnode/vnode/src/vnd/vnodeSync.c
浏览文件 @
74513630
...
...
@@ -50,13 +50,11 @@ int32_t vnodeSyncOpen(SVnode *pVnode, char *path) {
return
0
;
}
void
vnodeSyncAlter
(
SVnode
*
pVnode
,
SRpcMsg
*
pMsg
)
{
int32_t
vnodeSyncAlter
(
SVnode
*
pVnode
,
SRpcMsg
*
pMsg
)
{
SAlterVnodeReq
req
=
{
0
};
if
(
tDeserializeSAlterVnodeReq
((
char
*
)
pMsg
->
pCont
+
sizeof
(
SMsgHead
),
pMsg
->
contLen
-
sizeof
(
SMsgHead
),
&
req
)
!=
0
)
{
terrno
=
TSDB_CODE_INVALID_MSG
;
vError
(
"vgId:%d, failed to alter replica since %s"
,
TD_VID
(
pVnode
),
terrstr
());
SRpcMsg
rsp
=
{.
info
=
pMsg
->
info
,
.
code
=
terrno
};
tmsgSendRsp
(
&
rsp
);
return
TSDB_CODE_INVALID_MSG
;
}
vInfo
(
"vgId:%d, start to alter vnode replica to %d"
,
TD_VID
(
pVnode
),
req
.
replica
);
...
...
@@ -68,11 +66,15 @@ void vnodeSyncAlter(SVnode *pVnode, SRpcMsg *pMsg) {
vInfo
(
"vgId:%d, replica:%d %s:%u"
,
TD_VID
(
pVnode
),
r
,
pNode
->
nodeFqdn
,
pNode
->
nodePort
);
}
if
(
syncReconfig
(
pVnode
->
sync
,
&
cfg
)
!=
0
)
{
vError
(
"vgId:%d, failed to propose sync reconfig since %s"
,
TD_VID
(
pVnode
),
terrstr
());
int32_t
code
=
syncReconfig
(
pVnode
->
sync
,
&
cfg
);
if
(
code
==
TAOS_SYNC_PROPOSE_SUCCESS
)
{
// todo refactor
SRpcMsg
rsp
=
{.
info
=
pMsg
->
info
,
.
code
=
terrno
};
tmsgSendRsp
(
&
rsp
);
return
TSDB_CODE_ACTION_IN_PROGRESS
;
}
return
code
;
}
void
vnodeSyncStart
(
SVnode
*
pVnode
)
{
...
...
source/libs/function/src/builtins.c
浏览文件 @
74513630
...
...
@@ -463,12 +463,9 @@ static bool validateStateOper(const SValueNode* pVal) {
if
(
TSDB_DATA_TYPE_BINARY
!=
pVal
->
node
.
resType
.
type
)
{
return
false
;
}
return
(
0
==
strcasecmp
(
varDataVal
(
pVal
->
datum
.
p
),
"GT"
)
||
0
==
strcasecmp
(
varDataVal
(
pVal
->
datum
.
p
),
"GE"
)
||
0
==
strcasecmp
(
varDataVal
(
pVal
->
datum
.
p
),
"LT"
)
||
0
==
strcasecmp
(
varDataVal
(
pVal
->
datum
.
p
),
"LE"
)
||
0
==
strcasecmp
(
varDataVal
(
pVal
->
datum
.
p
),
"EQ"
)
||
0
==
strcasecmp
(
varDataVal
(
pVal
->
datum
.
p
),
"NE"
));
return
(
0
==
strcasecmp
(
varDataVal
(
pVal
->
datum
.
p
),
"GT"
)
||
0
==
strcasecmp
(
varDataVal
(
pVal
->
datum
.
p
),
"GE"
)
||
0
==
strcasecmp
(
varDataVal
(
pVal
->
datum
.
p
),
"LT"
)
||
0
==
strcasecmp
(
varDataVal
(
pVal
->
datum
.
p
),
"LE"
)
||
0
==
strcasecmp
(
varDataVal
(
pVal
->
datum
.
p
),
"EQ"
)
||
0
==
strcasecmp
(
varDataVal
(
pVal
->
datum
.
p
),
"NE"
));
}
static
int32_t
translateStateCount
(
SFunctionNode
*
pFunc
,
char
*
pErrBuf
,
int32_t
len
)
{
...
...
@@ -552,7 +549,6 @@ static int32_t translateStateDuration(SFunctionNode* pFunc, char* pErrBuf, int32
"STATEDURATION function time unit parameter should be greater than db precision"
);
}
pValue
->
notReserved
=
true
;
}
...
...
@@ -837,7 +833,7 @@ static int32_t translateConcatImpl(SFunctionNode* pFunc, char* pErrBuf, int32_t
int32_t
resultBytes
=
0
;
int32_t
sepBytes
=
0
;
//concat_ws separator should be constant string
//
concat_ws separator should be constant string
if
(
hasSep
)
{
SNode
*
pPara
=
nodesListGetNode
(
pFunc
->
pParameterList
,
0
);
if
(
nodeType
(
pPara
)
!=
QUERY_NODE_VALUE
)
{
...
...
@@ -963,7 +959,7 @@ static bool validateTimezoneFormat(const SValueNode* pVal) {
return
false
;
}
char
*
tz
=
varDataVal
(
pVal
->
datum
.
p
);
char
*
tz
=
varDataVal
(
pVal
->
datum
.
p
);
int32_t
len
=
varDataLen
(
pVal
->
datum
.
p
);
if
(
len
==
0
)
{
...
...
@@ -1007,20 +1003,20 @@ static bool validateTimezoneFormat(const SValueNode* pVal) {
}
void
static
addTimezoneParam
(
SNodeList
*
pList
)
{
char
buf
[
6
]
=
{
0
};
time_t
t
=
taosTime
(
NULL
);
struct
tm
*
tmInfo
=
taosLocalTime
(
&
t
,
NULL
);
char
buf
[
6
]
=
{
0
};
time_t
t
=
taosTime
(
NULL
);
struct
tm
*
tmInfo
=
taosLocalTime
(
&
t
,
NULL
);
strftime
(
buf
,
sizeof
(
buf
),
"%z"
,
tmInfo
);
int32_t
len
=
(
int32_t
)
strlen
(
buf
);
SValueNode
*
pVal
=
(
SValueNode
*
)
nodesMakeNode
(
QUERY_NODE_VALUE
);
pVal
->
literal
=
strndup
(
buf
,
len
);
pVal
->
isDuration
=
false
;
pVal
->
isDuration
=
false
;
pVal
->
translate
=
true
;
pVal
->
node
.
resType
.
type
=
TSDB_DATA_TYPE_BINARY
;
pVal
->
node
.
resType
.
bytes
=
len
+
VARSTR_HEADER_SIZE
;
pVal
->
node
.
resType
.
precision
=
TSDB_TIME_PRECISION_MILLI
;
pVal
->
datum
.
p
=
taosMemoryCalloc
(
1
,
len
+
VARSTR_HEADER_SIZE
+
1
);
pVal
->
datum
.
p
=
taosMemoryCalloc
(
1
,
len
+
VARSTR_HEADER_SIZE
+
1
);
varDataSetLen
(
pVal
->
datum
.
p
,
len
);
strncpy
(
varDataVal
(
pVal
->
datum
.
p
),
pVal
->
literal
,
len
);
...
...
@@ -1033,25 +1029,24 @@ static int32_t translateToIso8601(SFunctionNode* pFunc, char* pErrBuf, int32_t l
return
invaildFuncParaNumErrMsg
(
pErrBuf
,
len
,
pFunc
->
functionName
);
}
//param0
//
param0
uint8_t
paraType
=
((
SExprNode
*
)
nodesListGetNode
(
pFunc
->
pParameterList
,
0
))
->
resType
.
type
;
if
(
!
IS_INTEGER_TYPE
(
paraType
)
&&
TSDB_DATA_TYPE_TIMESTAMP
!=
paraType
)
{
return
invaildFuncParaTypeErrMsg
(
pErrBuf
,
len
,
pFunc
->
functionName
);
}
//param1
//
param1
if
(
numOfParams
==
2
)
{
SValueNode
*
pValue
=
(
SValueNode
*
)
nodesListGetNode
(
pFunc
->
pParameterList
,
1
);
if
(
!
validateTimezoneFormat
(
pValue
))
{
return
buildFuncErrMsg
(
pErrBuf
,
len
,
TSDB_CODE_FUNC_FUNTION_ERROR
,
"Invalid timzone format"
);
return
buildFuncErrMsg
(
pErrBuf
,
len
,
TSDB_CODE_FUNC_FUNTION_ERROR
,
"Invalid timzone format"
);
}
}
else
{
//
add default client timezone
}
else
{
//
add default client timezone
addTimezoneParam
(
pFunc
->
pParameterList
);
}
//set result type
//
set result type
pFunc
->
node
.
resType
=
(
SDataType
){.
bytes
=
64
,
.
type
=
TSDB_DATA_TYPE_BINARY
};
return
TSDB_CODE_SUCCESS
;
}
...
...
source/libs/function/src/tudf.c
浏览文件 @
74513630
...
...
@@ -66,7 +66,7 @@ void udfUdfdExit(uv_process_t *process, int64_t exitStatus, int termSignal) {
}
static
int32_t
udfSpawnUdfd
(
SUdfdData
*
pData
)
{
fnInfo
(
"
dnode start spawning
udfd"
);
fnInfo
(
"
start to init
udfd"
);
uv_process_options_t
options
=
{
0
};
char
path
[
PATH_MAX
]
=
{
0
};
...
...
@@ -140,6 +140,8 @@ static int32_t udfSpawnUdfd(SUdfdData* pData) {
if
(
err
!=
0
)
{
fnError
(
"can not spawn udfd. path: %s, error: %s"
,
path
,
uv_strerror
(
err
));
}
else
{
fnInfo
(
"udfd is initialized"
);
}
return
err
;
}
...
...
source/libs/nodes/src/nodesCloneFuncs.c
浏览文件 @
74513630
...
...
@@ -142,7 +142,7 @@ static SNode* valueNodeCopy(const SValueNode* pSrc, SValueNode* pDst) {
break
;
case
TSDB_DATA_TYPE_NCHAR
:
case
TSDB_DATA_TYPE_VARCHAR
:
case
TSDB_DATA_TYPE_VARBINARY
:{
case
TSDB_DATA_TYPE_VARBINARY
:
{
int32_t
len
=
varDataTLen
(
pSrc
->
datum
.
p
)
+
1
;
pDst
->
datum
.
p
=
taosMemoryCalloc
(
1
,
len
);
if
(
NULL
==
pDst
->
datum
.
p
)
{
...
...
@@ -399,6 +399,7 @@ static SNode* logicWindowCopy(const SWindowLogicNode* pSrc, SWindowLogicNode* pD
COPY_SCALAR_FIELD
(
triggerType
);
COPY_SCALAR_FIELD
(
watermark
);
COPY_SCALAR_FIELD
(
filesFactor
);
COPY_SCALAR_FIELD
(
stmInterAlgo
);
return
(
SNode
*
)
pDst
;
}
...
...
source/libs/nodes/src/nodesCodeFuncs.c
浏览文件 @
74513630
...
...
@@ -230,6 +230,10 @@ const char* nodesNodeName(ENodeType type) {
return
"PhysiInterval"
;
case
QUERY_NODE_PHYSICAL_PLAN_STREAM_INTERVAL
:
return
"PhysiStreamInterval"
;
case
QUERY_NODE_PHYSICAL_PLAN_STREAM_FINAL_INTERVAL
:
return
"PhysiStreamFinalInterval"
;
case
QUERY_NODE_PHYSICAL_PLAN_STREAM_SEMI_INTERVAL
:
return
"PhysiStreamSemiInterval"
;
case
QUERY_NODE_PHYSICAL_PLAN_FILL
:
return
"PhysiFill"
;
case
QUERY_NODE_PHYSICAL_PLAN_SESSION_WINDOW
:
...
...
@@ -3611,6 +3615,8 @@ static int32_t specificNodeToJson(const void* pObj, SJson* pJson) {
return
physiSortNodeToJson
(
pObj
,
pJson
);
case
QUERY_NODE_PHYSICAL_PLAN_INTERVAL
:
case
QUERY_NODE_PHYSICAL_PLAN_STREAM_INTERVAL
:
case
QUERY_NODE_PHYSICAL_PLAN_STREAM_FINAL_INTERVAL
:
case
QUERY_NODE_PHYSICAL_PLAN_STREAM_SEMI_INTERVAL
:
return
physiIntervalNodeToJson
(
pObj
,
pJson
);
case
QUERY_NODE_PHYSICAL_PLAN_FILL
:
return
physiFillNodeToJson
(
pObj
,
pJson
);
...
...
@@ -3728,6 +3734,8 @@ static int32_t jsonToSpecificNode(const SJson* pJson, void* pObj) {
return
jsonToPhysiSortNode
(
pJson
,
pObj
);
case
QUERY_NODE_PHYSICAL_PLAN_INTERVAL
:
case
QUERY_NODE_PHYSICAL_PLAN_STREAM_INTERVAL
:
case
QUERY_NODE_PHYSICAL_PLAN_STREAM_FINAL_INTERVAL
:
case
QUERY_NODE_PHYSICAL_PLAN_STREAM_SEMI_INTERVAL
:
return
jsonToPhysiIntervalNode
(
pJson
,
pObj
);
case
QUERY_NODE_PHYSICAL_PLAN_FILL
:
return
jsonToPhysiFillNode
(
pJson
,
pObj
);
...
...
source/libs/nodes/src/nodesUtilFuncs.c
浏览文件 @
74513630
...
...
@@ -260,6 +260,10 @@ SNodeptr nodesMakeNode(ENodeType type) {
return
makeNode
(
type
,
sizeof
(
SIntervalPhysiNode
));
case
QUERY_NODE_PHYSICAL_PLAN_STREAM_INTERVAL
:
return
makeNode
(
type
,
sizeof
(
SStreamIntervalPhysiNode
));
case
QUERY_NODE_PHYSICAL_PLAN_STREAM_FINAL_INTERVAL
:
return
makeNode
(
type
,
sizeof
(
SStreamFinalIntervalPhysiNode
));
case
QUERY_NODE_PHYSICAL_PLAN_STREAM_SEMI_INTERVAL
:
return
makeNode
(
type
,
sizeof
(
SStreamSemiIntervalPhysiNode
));
case
QUERY_NODE_PHYSICAL_PLAN_FILL
:
return
makeNode
(
type
,
sizeof
(
SFillPhysiNode
));
case
QUERY_NODE_PHYSICAL_PLAN_SESSION_WINDOW
:
...
...
source/libs/planner/src/planLogicCreater.c
浏览文件 @
74513630
...
...
@@ -562,6 +562,7 @@ static int32_t createWindowLogicNodeByInterval(SLogicPlanContext* pCxt, SInterva
pWindow
->
sliding
=
(
NULL
!=
pInterval
->
pSliding
?
((
SValueNode
*
)
pInterval
->
pSliding
)
->
datum
.
i
:
pWindow
->
interval
);
pWindow
->
slidingUnit
=
(
NULL
!=
pInterval
->
pSliding
?
((
SValueNode
*
)
pInterval
->
pSliding
)
->
unit
:
pWindow
->
intervalUnit
);
pWindow
->
stmInterAlgo
=
STREAM_INTERVAL_ALGO_SINGLE
;
pWindow
->
pTspk
=
nodesCloneNode
(
pInterval
->
pCol
);
if
(
NULL
==
pWindow
->
pTspk
)
{
...
...
source/libs/planner/src/planPhysiCreater.c
浏览文件 @
74513630
...
...
@@ -526,10 +526,10 @@ static int32_t createSystemTableScanPhysiNode(SPhysiPlanContext* pCxt, SSubplan*
pScan
->
accountId
=
pCxt
->
pPlanCxt
->
acctId
;
if
(
0
==
strcmp
(
pScanLogicNode
->
tableName
.
tname
,
TSDB_INS_TABLE_USER_TABLES
))
{
vgroupInfoToNodeAddr
(
pScanLogicNode
->
pVgroupList
->
vgroups
,
&
pSubplan
->
execNode
);
SQueryNodeLoad
node
=
{
.
addr
=
pSubplan
->
execNode
,
.
load
=
0
};
SQueryNodeLoad
node
=
{.
addr
=
pSubplan
->
execNode
,
.
load
=
0
};
taosArrayPush
(
pCxt
->
pExecNodeList
,
&
pSubplan
->
execNode
);
}
else
{
SQueryNodeLoad
node
=
{
.
addr
=
{.
nodeId
=
MNODE_HANDLE
,
.
epSet
=
pCxt
->
pPlanCxt
->
mgmtEpSet
},
.
load
=
0
};
SQueryNodeLoad
node
=
{.
addr
=
{.
nodeId
=
MNODE_HANDLE
,
.
epSet
=
pCxt
->
pPlanCxt
->
mgmtEpSet
},
.
load
=
0
};
taosArrayPush
(
pCxt
->
pExecNodeList
,
&
node
);
}
pScan
->
mgmtEpSet
=
pCxt
->
pPlanCxt
->
mgmtEpSet
;
...
...
@@ -933,11 +933,22 @@ static int32_t createWindowPhysiNodeFinalize(SPhysiPlanContext* pCxt, SNodeList*
return
code
;
}
static
ENodeType
getIntervalOperatorType
(
bool
streamQuery
,
EStreamIntervalAlgorithm
stmAlgo
)
{
if
(
streamQuery
)
{
return
STREAM_INTERVAL_ALGO_FINAL
==
stmAlgo
?
QUERY_NODE_PHYSICAL_PLAN_STREAM_FINAL_INTERVAL
:
(
STREAM_INTERVAL_ALGO_SEMI
==
stmAlgo
?
QUERY_NODE_PHYSICAL_PLAN_STREAM_SEMI_INTERVAL
:
QUERY_NODE_PHYSICAL_PLAN_STREAM_INTERVAL
);
}
else
{
return
QUERY_NODE_PHYSICAL_PLAN_INTERVAL
;
}
}
static
int32_t
createIntervalPhysiNode
(
SPhysiPlanContext
*
pCxt
,
SNodeList
*
pChildren
,
SWindowLogicNode
*
pWindowLogicNode
,
SPhysiNode
**
pPhyNode
)
{
SIntervalPhysiNode
*
pInterval
=
(
SIntervalPhysiNode
*
)
makePhysiNode
(
pCxt
,
getPrecision
(
pChildren
),
(
SLogicNode
*
)
pWindowLogicNode
,
(
pCxt
->
pPlanCxt
->
streamQuery
?
QUERY_NODE_PHYSICAL_PLAN_STREAM_INTERVAL
:
QUERY_NODE_PHYSICAL_PLAN_INTERVAL
));
getIntervalOperatorType
(
pCxt
->
pPlanCxt
->
streamQuery
,
pWindowLogicNode
->
stmInterAlgo
));
if
(
NULL
==
pInterval
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
...
...
source/libs/planner/src/planSpliter.c
浏览文件 @
74513630
...
...
@@ -24,9 +24,10 @@
#define SPLIT_FLAG_TEST_MASK(val, mask) (((val) & (mask)) != 0)
typedef
struct
SSplitContext
{
uint64_t
queryId
;
int32_t
groupId
;
bool
split
;
SPlanContext
*
pPlanCxt
;
uint64_t
queryId
;
int32_t
groupId
;
bool
split
;
}
SSplitContext
;
typedef
int32_t
(
*
FSplit
)(
SSplitContext
*
pCxt
,
SLogicSubplan
*
pSubplan
);
...
...
@@ -36,7 +37,7 @@ typedef struct SSplitRule {
FSplit
splitFunc
;
}
SSplitRule
;
typedef
bool
(
*
FSplFindSplitNode
)(
SLogicSubplan
*
pSubplan
,
void
*
pInfo
);
typedef
bool
(
*
FSplFindSplitNode
)(
S
SplitContext
*
pCxt
,
S
LogicSubplan
*
pSubplan
,
void
*
pInfo
);
static
void
splSetSubplanVgroups
(
SLogicSubplan
*
pSubplan
,
SLogicNode
*
pNode
)
{
if
(
QUERY_NODE_LOGIC_PLAN_SCAN
==
nodeType
(
pNode
))
{
...
...
@@ -63,19 +64,29 @@ static SLogicSubplan* splCreateScanSubplan(SSplitContext* pCxt, SLogicNode* pNod
return
pSubplan
;
}
static
int32_t
splCreateExchangeNode
(
SSplitContext
*
pCxt
,
SLogicSubplan
*
pSubplan
,
SLogicNode
*
pSplitNode
,
ESubplanType
subplanType
)
{
static
int32_t
splCreateExchangeNode
(
SSplitContext
*
pCxt
,
SLogicNode
*
pChild
,
SExchangeLogicNode
**
pOutput
)
{
SExchangeLogicNode
*
pExchange
=
nodesMakeNode
(
QUERY_NODE_LOGIC_PLAN_EXCHANGE
);
if
(
NULL
==
pExchange
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
pExchange
->
srcGroupId
=
pCxt
->
groupId
;
pExchange
->
node
.
precision
=
p
SplitNode
->
precision
;
pExchange
->
node
.
pTargets
=
nodesCloneList
(
p
SplitNode
->
pTargets
);
pExchange
->
node
.
precision
=
p
Child
->
precision
;
pExchange
->
node
.
pTargets
=
nodesCloneList
(
p
Child
->
pTargets
);
if
(
NULL
==
pExchange
->
node
.
pTargets
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
*
pOutput
=
pExchange
;
return
TSDB_CODE_SUCCESS
;
}
static
int32_t
splCreateExchangeNodeForSubplan
(
SSplitContext
*
pCxt
,
SLogicSubplan
*
pSubplan
,
SLogicNode
*
pSplitNode
,
ESubplanType
subplanType
)
{
SExchangeLogicNode
*
pExchange
=
NULL
;
if
(
TSDB_CODE_SUCCESS
!=
splCreateExchangeNode
(
pCxt
,
pSplitNode
,
&
pExchange
))
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
pSubplan
->
subplanType
=
subplanType
;
if
(
NULL
==
pSplitNode
->
pParent
)
{
...
...
@@ -97,7 +108,7 @@ static int32_t splCreateExchangeNode(SSplitContext* pCxt, SLogicSubplan* pSubpla
static
bool
splMatch
(
SSplitContext
*
pCxt
,
SLogicSubplan
*
pSubplan
,
int32_t
flag
,
FSplFindSplitNode
func
,
void
*
pInfo
)
{
if
(
!
SPLIT_FLAG_TEST_MASK
(
pSubplan
->
splitFlag
,
flag
))
{
if
(
func
(
pSubplan
,
pInfo
))
{
if
(
func
(
p
Cxt
,
p
Subplan
,
pInfo
))
{
return
true
;
}
}
...
...
@@ -125,41 +136,47 @@ static bool stbSplHasGatherExecFunc(const SNodeList* pFuncs) {
return
false
;
}
static
bool
stbSplIsMultiTbScan
(
SScanLogicNode
*
pScan
)
{
return
(
NULL
!=
pScan
->
pVgroupList
&&
pScan
->
pVgroupList
->
numOfVgroups
>
1
);
static
bool
stbSplIsMultiTbScan
(
bool
streamQuery
,
SScanLogicNode
*
pScan
)
{
return
(
NULL
!=
pScan
->
pVgroupList
&&
pScan
->
pVgroupList
->
numOfVgroups
>
1
)
||
(
streamQuery
&&
TSDB_SUPER_TABLE
==
pScan
->
pMeta
->
tableType
);
}
static
bool
stbSplHasMultiTbScan
(
SLogicNode
*
pNode
)
{
static
bool
stbSplHasMultiTbScan
(
bool
streamQuery
,
SLogicNode
*
pNode
)
{
if
(
1
!=
LIST_LENGTH
(
pNode
->
pChildren
))
{
return
false
;
}
SNode
*
pChild
=
nodesListGetNode
(
pNode
->
pChildren
,
0
);
return
(
QUERY_NODE_LOGIC_PLAN_SCAN
==
nodeType
(
pChild
)
&&
stbSplIsMultiTbScan
((
SScanLogicNode
*
)
pChild
));
return
(
QUERY_NODE_LOGIC_PLAN_SCAN
==
nodeType
(
pChild
)
&&
stbSplIsMultiTbScan
(
streamQuery
,
(
SScanLogicNode
*
)
pChild
));
}
static
bool
stbSplNeedSplit
(
SLogicNode
*
pNode
)
{
static
bool
stbSplNeedSplit
(
bool
streamQuery
,
SLogicNode
*
pNode
)
{
switch
(
nodeType
(
pNode
))
{
// case QUERY_NODE_LOGIC_PLAN_AGG:
// return !stbSplHasGatherExecFunc(((SAggLogicNode*)pNode)->pAggFuncs) && stbSplHasMultiTbScan(pNode);
case
QUERY_NODE_LOGIC_PLAN_WINDOW
:
return
!
stbSplHasGatherExecFunc
(((
SAggLogicNode
*
)
pNode
)
->
pAggFuncs
)
&&
stbSplHasMultiTbScan
(
pNode
);
case
QUERY_NODE_LOGIC_PLAN_WINDOW
:
{
SWindowLogicNode
*
pWindow
=
(
SWindowLogicNode
*
)
pNode
;
if
(
WINDOW_TYPE_INTERVAL
!=
pWindow
->
winType
)
{
return
false
;
}
return
!
stbSplHasGatherExecFunc
(
pWindow
->
pFuncs
)
&&
stbSplHasMultiTbScan
(
streamQuery
,
pNode
);
}
// case QUERY_NODE_LOGIC_PLAN_SORT:
// return stbSplHasMultiTbScan(pNode);
case
QUERY_NODE_LOGIC_PLAN_SCAN
:
return
stbSplIsMultiTbScan
((
SScanLogicNode
*
)
pNode
);
return
stbSplIsMultiTbScan
(
streamQuery
,
(
SScanLogicNode
*
)
pNode
);
default:
break
;
}
return
false
;
}
static
SLogicNode
*
stbSplMatchByNode
(
SLogicNode
*
pNode
)
{
if
(
stbSplNeedSplit
(
pNode
))
{
static
SLogicNode
*
stbSplMatchByNode
(
bool
streamQuery
,
SLogicNode
*
pNode
)
{
if
(
stbSplNeedSplit
(
streamQuery
,
pNode
))
{
return
pNode
;
}
SNode
*
pChild
;
FOREACH
(
pChild
,
pNode
->
pChildren
)
{
SLogicNode
*
pSplitNode
=
stbSplMatchByNode
((
SLogicNode
*
)
pChild
);
SLogicNode
*
pSplitNode
=
stbSplMatchByNode
(
streamQuery
,
(
SLogicNode
*
)
pChild
);
if
(
NULL
!=
pSplitNode
)
{
return
pSplitNode
;
}
...
...
@@ -167,8 +184,8 @@ static SLogicNode* stbSplMatchByNode(SLogicNode* pNode) {
return
NULL
;
}
static
bool
stbSplFindSplitNode
(
SLogicSubplan
*
pSubplan
,
SStableSplitInfo
*
pInfo
)
{
SLogicNode
*
pSplitNode
=
stbSplMatchByNode
(
pSubplan
->
pNode
);
static
bool
stbSplFindSplitNode
(
S
SplitContext
*
pCxt
,
S
LogicSubplan
*
pSubplan
,
SStableSplitInfo
*
pInfo
)
{
SLogicNode
*
pSplitNode
=
stbSplMatchByNode
(
p
Cxt
->
pPlanCxt
->
streamQuery
,
p
Subplan
->
pNode
);
if
(
NULL
!=
pSplitNode
)
{
pInfo
->
pSplitNode
=
pSplitNode
;
pInfo
->
pSubplan
=
pSubplan
;
...
...
@@ -301,7 +318,7 @@ static int32_t stbSplCreateMergeNode(SSplitContext* pCxt, SLogicNode* pParent, S
return
code
;
}
static
int32_t
stbSplSplitWindowNode
(
SSplitContext
*
pCxt
,
SStableSplitInfo
*
pInfo
)
{
static
int32_t
stbSplSplitWindowNode
ForBatch
(
SSplitContext
*
pCxt
,
SStableSplitInfo
*
pInfo
)
{
SLogicNode
*
pPartWindow
=
NULL
;
int32_t
code
=
stbSplCreatePartWindowNode
((
SWindowLogicNode
*
)
pInfo
->
pSplitNode
,
&
pPartWindow
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
...
...
@@ -315,8 +332,41 @@ static int32_t stbSplSplitWindowNode(SSplitContext* pCxt, SStableSplitInfo* pInf
return
code
;
}
static
int32_t
stbSplCreateExchangeNode
(
SSplitContext
*
pCxt
,
SLogicNode
*
pParent
,
SLogicNode
*
pPartChild
)
{
SExchangeLogicNode
*
pExchange
=
NULL
;
int32_t
code
=
splCreateExchangeNode
(
pCxt
,
pPartChild
,
&
pExchange
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
nodesListMakeAppend
(
&
pParent
->
pChildren
,
pExchange
);
}
return
code
;
}
static
int32_t
stbSplSplitWindowNodeForStream
(
SSplitContext
*
pCxt
,
SStableSplitInfo
*
pInfo
)
{
SLogicNode
*
pPartWindow
=
NULL
;
int32_t
code
=
stbSplCreatePartWindowNode
((
SWindowLogicNode
*
)
pInfo
->
pSplitNode
,
&
pPartWindow
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
((
SWindowLogicNode
*
)
pPartWindow
)
->
stmInterAlgo
=
STREAM_INTERVAL_ALGO_SEMI
;
((
SWindowLogicNode
*
)
pInfo
->
pSplitNode
)
->
stmInterAlgo
=
STREAM_INTERVAL_ALGO_FINAL
;
code
=
stbSplCreateExchangeNode
(
pCxt
,
pInfo
->
pSplitNode
,
pPartWindow
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
nodesListMakeStrictAppend
(
&
pInfo
->
pSubplan
->
pChildren
,
splCreateScanSubplan
(
pCxt
,
pPartWindow
,
SPLIT_FLAG_STABLE_SPLIT
));
}
pInfo
->
pSubplan
->
subplanType
=
SUBPLAN_TYPE_MERGE
;
return
code
;
}
static
int32_t
stbSplSplitWindowNode
(
SSplitContext
*
pCxt
,
SStableSplitInfo
*
pInfo
)
{
if
(
pCxt
->
pPlanCxt
->
streamQuery
)
{
return
stbSplSplitWindowNodeForStream
(
pCxt
,
pInfo
);
}
else
{
return
stbSplSplitWindowNodeForBatch
(
pCxt
,
pInfo
);
}
}
static
int32_t
stbSplSplitScanNode
(
SSplitContext
*
pCxt
,
SStableSplitInfo
*
pInfo
)
{
int32_t
code
=
splCreateExchangeNode
(
pCxt
,
pInfo
->
pSubplan
,
pInfo
->
pSplitNode
,
SUBPLAN_TYPE_MERGE
);
int32_t
code
=
splCreateExchangeNode
ForSubplan
(
pCxt
,
pInfo
->
pSubplan
,
pInfo
->
pSplitNode
,
SUBPLAN_TYPE_MERGE
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
nodesListMakeStrictAppend
(
&
pInfo
->
pSubplan
->
pChildren
,
splCreateScanSubplan
(
pCxt
,
pInfo
->
pSplitNode
,
SPLIT_FLAG_STABLE_SPLIT
));
...
...
@@ -325,6 +375,10 @@ static int32_t stbSplSplitScanNode(SSplitContext* pCxt, SStableSplitInfo* pInfo)
}
static
int32_t
stableSplit
(
SSplitContext
*
pCxt
,
SLogicSubplan
*
pSubplan
)
{
if
(
pCxt
->
pPlanCxt
->
rSmaQuery
)
{
return
TSDB_CODE_SUCCESS
;
}
SStableSplitInfo
info
=
{
0
};
if
(
!
splMatch
(
pCxt
,
pSubplan
,
SPLIT_FLAG_STABLE_SPLIT
,
(
FSplFindSplitNode
)
stbSplFindSplitNode
,
&
info
))
{
return
TSDB_CODE_SUCCESS
;
...
...
@@ -375,7 +429,7 @@ static SJoinLogicNode* sigTbJoinSplMatchByNode(SLogicNode* pNode) {
return
NULL
;
}
static
bool
sigTbJoinSplFindSplitNode
(
SLogicSubplan
*
pSubplan
,
SSigTbJoinSplitInfo
*
pInfo
)
{
static
bool
sigTbJoinSplFindSplitNode
(
S
SplitContext
*
pCxt
,
S
LogicSubplan
*
pSubplan
,
SSigTbJoinSplitInfo
*
pInfo
)
{
SJoinLogicNode
*
pJoin
=
sigTbJoinSplMatchByNode
(
pSubplan
->
pNode
);
if
(
NULL
!=
pJoin
)
{
pInfo
->
pJoin
=
pJoin
;
...
...
@@ -390,7 +444,7 @@ static int32_t singleTableJoinSplit(SSplitContext* pCxt, SLogicSubplan* pSubplan
if
(
!
splMatch
(
pCxt
,
pSubplan
,
0
,
(
FSplFindSplitNode
)
sigTbJoinSplFindSplitNode
,
&
info
))
{
return
TSDB_CODE_SUCCESS
;
}
int32_t
code
=
splCreateExchangeNode
(
pCxt
,
info
.
pSubplan
,
info
.
pSplitNode
,
info
.
pSubplan
->
subplanType
);
int32_t
code
=
splCreateExchangeNode
ForSubplan
(
pCxt
,
info
.
pSubplan
,
info
.
pSplitNode
,
info
.
pSubplan
->
subplanType
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
nodesListMakeStrictAppend
(
&
info
.
pSubplan
->
pChildren
,
splCreateScanSubplan
(
pCxt
,
info
.
pSplitNode
,
0
));
}
...
...
@@ -489,7 +543,7 @@ static SLogicNode* unAllSplMatchByNode(SLogicNode* pNode) {
return
NULL
;
}
static
bool
unAllSplFindSplitNode
(
SLogicSubplan
*
pSubplan
,
SUnionAllSplitInfo
*
pInfo
)
{
static
bool
unAllSplFindSplitNode
(
S
SplitContext
*
pCxt
,
S
LogicSubplan
*
pSubplan
,
SUnionAllSplitInfo
*
pInfo
)
{
SLogicNode
*
pSplitNode
=
unAllSplMatchByNode
(
pSubplan
->
pNode
);
if
(
NULL
!=
pSplitNode
)
{
pInfo
->
pProject
=
(
SProjectLogicNode
*
)
pSplitNode
;
...
...
@@ -581,7 +635,7 @@ static int32_t unDistSplCreateExchangeNode(SSplitContext* pCxt, SLogicSubplan* p
return
nodesListMakeAppend
(
&
pAgg
->
node
.
pChildren
,
pExchange
);
}
static
bool
unDistSplFindSplitNode
(
SLogicSubplan
*
pSubplan
,
SUnionDistinctSplitInfo
*
pInfo
)
{
static
bool
unDistSplFindSplitNode
(
S
SplitContext
*
pCxt
,
S
LogicSubplan
*
pSubplan
,
SUnionDistinctSplitInfo
*
pInfo
)
{
SLogicNode
*
pSplitNode
=
unDistSplMatchByNode
(
pSubplan
->
pNode
);
if
(
NULL
!=
pSplitNode
)
{
pInfo
->
pAgg
=
(
SAggLogicNode
*
)
pSplitNode
;
...
...
@@ -623,9 +677,10 @@ static void dumpLogicSubplan(const char* pRuleName, SLogicSubplan* pSubplan) {
taosMemoryFree
(
pStr
);
}
static
int32_t
applySplitRule
(
SLogicSubplan
*
pSubplan
)
{
SSplitContext
cxt
=
{.
queryId
=
pSubplan
->
id
.
queryId
,
.
groupId
=
pSubplan
->
id
.
groupId
+
1
,
.
split
=
false
};
bool
split
=
false
;
static
int32_t
applySplitRule
(
SPlanContext
*
pCxt
,
SLogicSubplan
*
pSubplan
)
{
SSplitContext
cxt
=
{
.
pPlanCxt
=
pCxt
,
.
queryId
=
pSubplan
->
id
.
queryId
,
.
groupId
=
pSubplan
->
id
.
groupId
+
1
,
.
split
=
false
};
bool
split
=
false
;
do
{
split
=
false
;
for
(
int32_t
i
=
0
;
i
<
splitRuleNum
;
++
i
)
{
...
...
@@ -672,7 +727,7 @@ int32_t splitLogicPlan(SPlanContext* pCxt, SLogicNode* pLogicNode, SLogicSubplan
pSubplan
->
id
.
groupId
=
1
;
setLogicNodeParent
(
pSubplan
->
pNode
);
int32_t
code
=
applySplitRule
(
pSubplan
);
int32_t
code
=
applySplitRule
(
p
Cxt
,
p
Subplan
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
*
pLogicSubplan
=
pSubplan
;
}
else
{
...
...
source/libs/planner/test/planOtherTest.cpp
浏览文件 @
74513630
...
...
@@ -33,6 +33,12 @@ TEST_F(PlanOtherTest, createStream) {
"interval(10s)"
);
}
TEST_F
(
PlanOtherTest
,
createStreamUseSTable
)
{
useDb
(
"root"
,
"test"
);
run
(
"create stream if not exists s1 as select count(*) from st1 interval(10s)"
);
}
TEST_F
(
PlanOtherTest
,
createSmaIndex
)
{
useDb
(
"root"
,
"test"
);
...
...
source/libs/sync/src/syncMain.c
浏览文件 @
74513630
...
...
@@ -1450,12 +1450,12 @@ static void syncFreeNode(void* param) {
const
char
*
syncStr
(
ESyncState
state
)
{
switch
(
state
)
{
case
TAOS_SYNC_STATE_FOLLOWER
:
return
"
FOLLOWER
"
;
return
"
follower
"
;
case
TAOS_SYNC_STATE_CANDIDATE
:
return
"
CANDIDATE
"
;
return
"
candidate
"
;
case
TAOS_SYNC_STATE_LEADER
:
return
"
LEADER
"
;
return
"
leader
"
;
default:
return
"
ERROR
"
;
return
"
error
"
;
}
}
source/util/src/terror.c
浏览文件 @
74513630
...
...
@@ -190,7 +190,7 @@ TAOS_DEFINE_ERROR(TSDB_CODE_MND_BNODE_ALREADY_EXIST, "Bnode already exists"
TAOS_DEFINE_ERROR
(
TSDB_CODE_MND_BNODE_NOT_EXIST
,
"Bnode not there"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_MND_TOO_FEW_MNODES
,
"The replicas of mnode cannot less than 1"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_MND_TOO_MANY_MNODES
,
"The replicas of mnode cannot exceed 3"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_MND_CANT_DROP_MASTER
,
"Can't drop mnode which is
LEADER
"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_MND_CANT_DROP_MASTER
,
"Can't drop mnode which is
leader
"
)
// mnode-acct
TAOS_DEFINE_ERROR
(
TSDB_CODE_MND_ACCT_ALREADY_EXIST
,
"Account already exists"
)
...
...
source/util/src/tworker.c
浏览文件 @
74513630
...
...
@@ -163,7 +163,7 @@ int32_t tWWorkerInit(SWWorkerPool *pool) {
worker
->
pool
=
pool
;
}
u
Info
(
"worker:%s is initialized, max:%d"
,
pool
->
name
,
pool
->
max
);
u
Debug
(
"worker:%s is initialized, max:%d"
,
pool
->
name
,
pool
->
max
);
return
0
;
}
...
...
@@ -190,7 +190,7 @@ void tWWorkerCleanup(SWWorkerPool *pool) {
taosMemoryFreeClear
(
pool
->
workers
);
taosThreadMutexDestroy
(
&
pool
->
mutex
);
u
Info
(
"worker:%s is closed"
,
pool
->
name
);
u
Debug
(
"worker:%s is closed"
,
pool
->
name
);
}
static
void
*
tWWorkerThreadFp
(
SWWorker
*
worker
)
{
...
...
tests/script/tsim/bnode/basic1.sim
浏览文件 @
74513630
...
...
@@ -24,7 +24,7 @@ if $data00 != 1 then
return -1
endi
if $data02 !=
LEADER
then
if $data02 !=
leader
then
return -1
endi
...
...
@@ -71,7 +71,7 @@ if $data00 != 1 then
return -1
endi
if $data02 !=
LEADER
then
if $data02 !=
leader
then
return -1
endi
...
...
tests/script/tsim/db/alter_option.sim
浏览文件 @
74513630
...
...
@@ -131,43 +131,43 @@ endi
sleep 3000
#sql show db.vgroups
#if $data[0][4] ==
LEADER
then
# if $data[0][6] !=
FOLLOWER
then
#if $data[0][4] ==
leader
then
# if $data[0][6] !=
follower
then
# return -1
# endi
# if $data[0][8] !=
FOLLOWER
then
# if $data[0][8] !=
follower
then
# return -1
# endi
#endi
#if $data[0][6] ==
LEADER
then
# if $data[0][4] !=
FOLLOWER
then
#if $data[0][6] ==
leader
then
# if $data[0][4] !=
follower
then
# return -1
# endi
# if $data[0][8] !=
FOLLOWER
then
# if $data[0][8] !=
follower
then
# return -1
# endi
#endi
#if $data[0][8] ==
LEADER
then
# if $data[0][4] !=
FOLLOWER
then
#if $data[0][8] ==
leader
then
# if $data[0][4] !=
follower
then
# return -1
# endi
# if $data[0][6] !=
FOLLOWER
then
# if $data[0][6] !=
follower
then
# return -1
# endi
#endi
#
#if $data[0][4] !=
LEADER
then
# if $data[0][4] !=
FOLLOWER
then
#if $data[0][4] !=
leader
then
# if $data[0][4] !=
follower
then
# return -1
# endi
#endi
#if $data[0][6] !=
LEADER
then
# if $data[0][6] !=
FOLLOWER
then
#if $data[0][6] !=
leader
then
# if $data[0][6] !=
follower
then
# return -1
# endi
#endi
#if $data[0][8] !=
LEADER
then
# if $data[0][8] !=
FOLLOWER
then
#if $data[0][8] !=
leader
then
# if $data[0][8] !=
follower
then
# return -1
# endi
#endi
...
...
tests/script/tsim/db/alter_replica_13.sim
浏览文件 @
74513630
...
...
@@ -12,11 +12,11 @@ sql connect
print =============== step1: create dnodes
sql create dnode $hostname port 7200
$
loop_cnt
= 0
$
x
= 0
step1:
$
loop_cnt = $loop_cnt
+ 1
$
= $x
+ 1
sleep 1000
if $
loop_cnt
== 10 then
if $
x
== 10 then
print ====> dnode not ready!
return -1
endi
...
...
@@ -73,11 +73,11 @@ print =============== step3: create dnodes
sql create dnode $hostname port 7300
sql create dnode $hostname port 7400
$
loop_cnt
= 0
$
x
= 0
step3:
$
loop_cnt = $loop_cnt
+ 1
$
x = $x
+ 1
sleep 1000
if $
loop_cnt
== 10 then
if $
x
== 10 then
print ====> dnode not ready!
return -1
endi
...
...
@@ -103,22 +103,39 @@ if $data(4)[4] != ready then
goto step3
endi
return
print ============= step4: alter database
sql alter database db replica 3
if $rows != 3 then
return -1
$x = 0
step4:
$x = $x + 1
sleep 1000
if $x == 10 then
print ====> dnode not ready!
return -1
endi
sql show db.vgroups
print ===> rows: $rows
print ===> $data00 $data01 $data02 $data03 $data04 $data05
if $data[0][4] != leader then
goto step4
endi
if $data
(db)[4] != 3 then
return -1
if $data
[0][6] != follower then
goto step4
endi
if $data[0][8] != follower then
goto step4
endi
print ============= step5: stop dnode 2
return
sql select * from db.stb
if $rows != 1 then
return -1
endi
system sh/exec.sh -n dnode1 -s stop -x SIGINT
system sh/exec.sh -n dnode2 -s stop -x SIGINT
system sh/exec.sh -n dnode3 -s stop -x SIGINT
system sh/exec.sh -n dnode4 -s stop -x SIGINT
\ No newline at end of file
tests/script/tsim/dnode/basic1.sim
浏览文件 @
74513630
...
...
@@ -27,7 +27,7 @@ if $data00 != 1 then
return -1
endi
if $data02 !=
LEADER
then
if $data02 !=
leader
then
return -1
endi
...
...
@@ -74,7 +74,7 @@ if $data00 != 1 then
return -1
endi
if $data02 !=
LEADER
then
if $data02 !=
leader
then
return -1
endi
...
...
tests/script/tsim/mnode/basic1.sim
浏览文件 @
74513630
...
...
@@ -15,7 +15,7 @@ if $data00 != 1 then
return -1
endi
if $data02 !=
LEADER
then
if $data02 !=
leader
then
return -1
endi
...
...
@@ -59,13 +59,13 @@ endi
if $data(1)[0] != 1 then
return -1
endi
if $data(1)[2] !=
LEADER
then
if $data(1)[2] !=
leader
then
return -1
endi
if $data(2)[0] != 2 then
return -1
endi
if $data(2)[2] !=
FOLLOWER
then
if $data(2)[2] !=
follower
then
goto step2
endi
...
...
@@ -95,7 +95,7 @@ endi
if $data(1)[0] != 1 then
return -1
endi
if $data(1)[2] !=
LEADER
then
if $data(1)[2] !=
leader
then
return -1
endi
if $data(2)[0] != null then
...
...
@@ -131,13 +131,13 @@ endi
if $data(1)[0] != 1 then
return -1
endi
if $data(1)[2] !=
LEADER
then
if $data(1)[2] !=
leader
then
return -1
endi
if $data(2)[0] != 2 then
return -1
endi
if $data(2)[2] !=
FOLLOWER
then
if $data(2)[2] !=
follower
then
goto step3
endi
...
...
tests/script/tsim/mnode/basic2.sim
浏览文件 @
74513630
...
...
@@ -15,7 +15,7 @@ if $data00 != 1 then
return -1
endi
if $data02 !=
LEADER
then
if $data02 !=
leader
then
return -1
endi
...
...
@@ -56,13 +56,13 @@ endi
if $data(1)[0] != 1 then
return -1
endi
if $data(1)[2] !=
LEADER
then
if $data(1)[2] !=
leader
then
return -1
endi
if $data(2)[0] != 2 then
return -1
endi
if $data(2)[2] !=
FOLLOWER
then
if $data(2)[2] !=
follower
then
goto step2
endi
...
...
tests/script/tsim/mnode/basic3.sim
浏览文件 @
74513630
...
...
@@ -49,13 +49,13 @@ step2:
return -1
endi
sql show mnodes -x step2
if $data(1)[2] !=
LEADER
then
if $data(1)[2] !=
leader
then
goto step2
endi
if $data(2)[2] !=
FOLLOWER
then
if $data(2)[2] !=
follower
then
goto step2
endi
if $data(3)[2] !=
FOLLOWER
then
if $data(3)[2] !=
follower
then
goto step2
endi
...
...
@@ -114,7 +114,7 @@ print $data(1)[0] $data(1)[1] $data(1)[2]
print $data(2)[0] $data(2)[1] $data(2)[2]
print $data(3)[0] $data(3)[1] $data(3)[2]
if $data(2)[2] !=
OFFLINE
then
if $data(2)[2] !=
offline
then
goto step5
endi
...
...
tests/script/tsim/mnode/basic4.sim
浏览文件 @
74513630
...
...
@@ -63,22 +63,22 @@ print $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4]
print $data[1][0] $data[1][1] $data[1][2] $data[1][3] $data[1][4]
print $data[2][0] $data[2][1] $data[2][2] $data[2][3] $data[2][4]
if $data(1)[2] !=
LEADER
then
if $data(1)[2] !=
leader
then
goto step3
endi
if $data(2)[2] !=
FOLLOWER
then
if $data(2)[2] !=
follower
then
goto step3
endi
if $data(3)[2] !=
OFFLINE
then
if $data(3)[2] !=
offline
then
goto step3
endi
if $data(1)[3] !=
READY
then
if $data(1)[3] !=
ready
then
goto step3
endi
if $data(2)[3] !=
READY
then
if $data(2)[3] !=
ready
then
goto step3
endi
if $data(3)[3] !=
CREATING
then
if $data(3)[3] !=
creating
then
goto step3
endi
...
...
@@ -97,22 +97,22 @@ print $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4]
print $data[1][0] $data[1][1] $data[1][2] $data[1][3] $data[1][4]
print $data[2][0] $data[2][1] $data[2][2] $data[2][3] $data[2][4]
if $data(1)[2] !=
LEADER
then
if $data(1)[2] !=
leader
then
goto step4
endi
if $data(2)[2] !=
FOLLOWER
then
if $data(2)[2] !=
follower
then
goto step4
endi
if $data(3)[2] !=
FOLLOWER
then
if $data(3)[2] !=
follower
then
goto step4
endi
if $data(1)[3] !=
READY
then
if $data(1)[3] !=
ready
then
goto step4
endi
if $data(2)[3] !=
READY
then
if $data(2)[3] !=
ready
then
goto step4
endi
if $data(3)[3] !=
READY
then
if $data(3)[3] !=
ready
then
goto step4
endi
...
...
@@ -132,22 +132,22 @@ print $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4]
print $data[1][0] $data[1][1] $data[1][2] $data[1][3] $data[1][4]
print $data[2][0] $data[2][1] $data[2][2] $data[2][3] $data[2][4]
if $data(1)[2] !=
LEADER
then
if $data(1)[2] !=
leader
then
goto step5
endi
if $data(2)[2] !=
FOLLOWER
then
if $data(2)[2] !=
follower
then
goto step5
endi
if $data(3)[2] !=
OFFLINE
then
if $data(3)[2] !=
offline
then
goto step5
endi
if $data(1)[3] !=
READY
then
if $data(1)[3] !=
ready
then
goto step5
endi
if $data(2)[3] !=
READY
then
if $data(2)[3] !=
ready
then
goto step5
endi
if $data(3)[3] !=
DROPPING
then
if $data(3)[3] !=
dropping
then
goto step5
endi
...
...
@@ -169,19 +169,19 @@ print $data[2][0] $data[2][1] $data[2][2] $data[2][3] $data[2][4]
if $rows != 2 then
goto step6
endi
if $data(1)[2] !=
LEADER
then
if $data(1)[2] !=
leader
then
goto step6
endi
if $data(2)[2] !=
FOLLOWER
then
if $data(2)[2] !=
follower
then
goto step6
endi
if $data(3)[2] != null then
goto step6
endi
if $data(1)[3] !=
READY
then
if $data(1)[3] !=
ready
then
goto step6
endi
if $data(2)[3] !=
READY
then
if $data(2)[3] !=
ready
then
goto step6
endi
if $data(3)[3] != null then
...
...
tests/script/tsim/qnode/basic1.sim
浏览文件 @
74513630
...
...
@@ -24,7 +24,7 @@ if $data00 != 1 then
return -1
endi
if $data02 !=
LEADER
then
if $data02 !=
leader
then
return -1
endi
...
...
@@ -71,7 +71,7 @@ if $data00 != 1 then
return -1
endi
if $data02 !=
LEADER
then
if $data02 !=
leader
then
return -1
endi
...
...
tests/script/tsim/query/explain.sim
浏览文件 @
74513630
system sh/stop_dnodes.sh
system sh/deploy.sh -n dnode1 -i 1
print ========= start dnode1 as
LEADER
print ========= start dnode1 as
leader
system sh/exec.sh -n dnode1 -s start
sql connect
...
...
tests/script/tsim/query/scalarNull.sim
浏览文件 @
74513630
...
...
@@ -4,7 +4,7 @@ system sh/deploy.sh -n dnode1 -i 1
system sh/cfg.sh -n dnode1 -c wallevel -v 2
system sh/cfg.sh -n dnode1 -c numOfMnodes -v 1
print ========= start dnode1 as
LEADER
print ========= start dnode1 as
leader
system sh/exec.sh -n dnode1 -s start
sleep 2000
sql connect
...
...
tests/script/tsim/query/udf.sim
浏览文件 @
74513630
...
...
@@ -5,7 +5,7 @@ system sh/cfg.sh -n dnode1 -c wallevel -v 2
system sh/cfg.sh -n dnode1 -c numOfMnodes -v 1
system sh/cfg.sh -n dnode1 -c udf -v 1
print ========= start dnode1 as
LEADER
print ========= start dnode1 as
leader
system sh/exec.sh -n dnode1 -s start
sleep 1000
sql connect
...
...
tests/script/tsim/snode/basic1.sim
浏览文件 @
74513630
...
...
@@ -24,7 +24,7 @@ if $data00 != 1 then
return -1
endi
if $data02 !=
LEADER
then
if $data02 !=
leader
then
return -1
endi
...
...
@@ -71,7 +71,7 @@ if $data00 != 1 then
return -1
endi
if $data02 !=
LEADER
then
if $data02 !=
leader
then
return -1
endi
...
...
tests/script/tsim/sync/3Replica1VgElect.sim
浏览文件 @
74513630
...
...
@@ -105,21 +105,21 @@ if $rows != $vgroups then
return -1
endi
if $data[0][4] ==
LEADER
then
if $data[0][6] ==
FOLLOWER
then
if $data[0][8] ==
FOLLOWER
then
if $data[0][4] ==
leader
then
if $data[0][6] ==
follower
then
if $data[0][8] ==
follower
then
print ---- vgroup $data[0][0] leader locate on dnode $data[0][3]
endi
endi
elif $data[0][6] ==
LEADER
then
if $data[0][4] ==
FOLLOWER
then
if $data[0][8] ==
FOLLOWER
then
elif $data[0][6] ==
leader
then
if $data[0][4] ==
follower
then
if $data[0][8] ==
follower
then
print ---- vgroup $data[0][0] leader locate on dnode $data[0][5]
endi
endi
elif $data[0][8] ==
LEADER
then
if $data[0][4] ==
FOLLOWER
then
if $data[0][6] ==
FOLLOWER
then
elif $data[0][8] ==
leader
then
if $data[0][4] ==
follower
then
if $data[0][6] ==
follower
then
print ---- vgroup $data[0][0] leader locate on dnode $data[0][7]
endi
endi
...
...
@@ -239,21 +239,21 @@ if $rows != $vgroups then
return -1
endi
if $data[0][4] ==
LEADER
then
if $data[0][6] ==
FOLLOWER
then
if $data[0][8] ==
FOLLOWER
then
if $data[0][4] ==
leader
then
if $data[0][6] ==
follower
then
if $data[0][8] ==
follower
then
print ---- vgroup $data[0][0] leader locate on dnode $data[0][3]
endi
endi
elif $data[0][6] ==
LEADER
then
if $data[0][4] ==
FOLLOWER
then
if $data[0][8] ==
FOLLOWER
then
elif $data[0][6] ==
leader
then
if $data[0][4] ==
follower
then
if $data[0][8] ==
follower
then
print ---- vgroup $data[0][0] leader locate on dnode $data[0][5]
endi
endi
elif $data[0][8] ==
LEADER
then
if $data[0][4] ==
FOLLOWER
then
if $data[0][6] ==
FOLLOWER
then
elif $data[0][8] ==
leader
then
if $data[0][4] ==
follower
then
if $data[0][6] ==
follower
then
print ---- vgroup $data[0][0] leader locate on dnode $data[0][7]
endi
endi
...
...
@@ -447,21 +447,21 @@ if $rows != $vgroups then
return -1
endi
if $data[0][4] ==
LEADER
then
if $data[0][6] ==
FOLLOWER
then
if $data[0][8] ==
FOLLOWER
then
if $data[0][4] ==
leader
then
if $data[0][6] ==
follower
then
if $data[0][8] ==
follower
then
print ---- vgroup $data[0][0] leader locate on dnode $data[0][3]
endi
endi
elif $data[0][6] ==
LEADER
then
if $data[0][4] ==
FOLLOWER
then
if $data[0][8] ==
FOLLOWER
then
elif $data[0][6] ==
leader
then
if $data[0][4] ==
follower
then
if $data[0][8] ==
follower
then
print ---- vgroup $data[0][0] leader locate on dnode $data[0][5]
endi
endi
elif $data[0][8] ==
LEADER
then
if $data[0][4] ==
FOLLOWER
then
if $data[0][6] ==
FOLLOWER
then
elif $data[0][8] ==
leader
then
if $data[0][4] ==
follower
then
if $data[0][6] ==
follower
then
print ---- vgroup $data[0][0] leader locate on dnode $data[0][7]
endi
endi
...
...
tests/script/tsim/sync/3Replica5VgElect.sim
浏览文件 @
74513630
...
...
@@ -108,21 +108,21 @@ if $rows != $vgroups then
return -1
endi
if $data[0][4] ==
LEADER
then
if $data[0][6] ==
FOLLOWER
then
if $data[0][8] ==
FOLLOWER
then
if $data[0][4] ==
leader
then
if $data[0][6] ==
follower
then
if $data[0][8] ==
follower
then
print ---- vgroup $data[0][0] leader locate on dnode $data[0][3]
endi
endi
elif $data[0][6] ==
LEADER
then
if $data[0][4] ==
FOLLOWER
then
if $data[0][8] ==
FOLLOWER
then
elif $data[0][6] ==
leader
then
if $data[0][4] ==
follower
then
if $data[0][8] ==
follower
then
print ---- vgroup $data[0][0] leader locate on dnode $data[0][5]
endi
endi
elif $data[0][8] ==
LEADER
then
if $data[0][4] ==
FOLLOWER
then
if $data[0][6] ==
FOLLOWER
then
elif $data[0][8] ==
leader
then
if $data[0][4] ==
follower
then
if $data[0][6] ==
follower
then
print ---- vgroup $data[0][0] leader locate on dnode $data[0][7]
endi
endi
...
...
@@ -130,21 +130,21 @@ else
goto check_vg_ready
endi
if $data[1][4] ==
LEADER
then
if $data[1][6] ==
FOLLOWER
then
if $data[1][8] ==
FOLLOWER
then
if $data[1][4] ==
leader
then
if $data[1][6] ==
follower
then
if $data[1][8] ==
follower
then
print ---- vgroup $data[1][0] leader locate on dnode $data[1][3]
endi
endi
elif $data[1][6] ==
LEADER
then
if $data[1][4] ==
FOLLOWER
then
if $data[1][8] ==
FOLLOWER
then
elif $data[1][6] ==
leader
then
if $data[1][4] ==
follower
then
if $data[1][8] ==
follower
then
print ---- vgroup $data[1][0] leader locate on dnode $data[1][5]
endi
endi
elif $data[1][8] ==
LEADER
then
if $data[1][4] ==
FOLLOWER
then
if $data[1][6] ==
FOLLOWER
then
elif $data[1][8] ==
leader
then
if $data[1][4] ==
follower
then
if $data[1][6] ==
follower
then
print ---- vgroup $data[1][0] leader locate on dnode $data[1][7]
endi
endi
...
...
@@ -152,21 +152,21 @@ else
goto check_vg_ready
endi
if $data[2][4] ==
LEADER
then
if $data[2][6] ==
FOLLOWER
then
if $data[2][8] ==
FOLLOWER
then
if $data[2][4] ==
leader
then
if $data[2][6] ==
follower
then
if $data[2][8] ==
follower
then
print ---- vgroup $data[2][0] leader locate on dnode $data[2][3]
endi
endi
elif $data[2][6] ==
LEADER
then
if $data[2][4] ==
FOLLOWER
then
if $data[2][8] ==
FOLLOWER
then
elif $data[2][6] ==
leader
then
if $data[2][4] ==
follower
then
if $data[2][8] ==
follower
then
print ---- vgroup $data[2][0] leader locate on dnode $data[2][5]
endi
endi
elif $data[2][8] ==
LEADER
then
if $data[2][4] ==
FOLLOWER
then
if $data[2][6] ==
FOLLOWER
then
elif $data[2][8] ==
leader
then
if $data[2][4] ==
follower
then
if $data[2][6] ==
follower
then
print ---- vgroup $data[2][0] leader locate on dnode $data[2][7]
endi
endi
...
...
@@ -174,21 +174,21 @@ else
goto check_vg_ready
endi
if $data[3][4] ==
LEADER
then
if $data[3][6] ==
FOLLOWER
then
if $data[3][8] ==
FOLLOWER
then
if $data[3][4] ==
leader
then
if $data[3][6] ==
follower
then
if $data[3][8] ==
follower
then
print ---- vgroup $data[3][0] leader locate on dnode $data[3][3]
endi
endi
elif $data[3][6] ==
LEADER
then
if $data[3][4] ==
FOLLOWER
then
if $data[3][8] ==
FOLLOWER
then
elif $data[3][6] ==
leader
then
if $data[3][4] ==
follower
then
if $data[3][8] ==
follower
then
print ---- vgroup $data[3][0] leader locate on dnode $data[3][5]
endi
endi
elif $data[3][8] ==
LEADER
then
if $data[3][4] ==
FOLLOWER
then
if $data[3][6] ==
FOLLOWER
then
elif $data[3][8] ==
leader
then
if $data[3][4] ==
follower
then
if $data[3][6] ==
follower
then
print ---- vgroup $data[3][0] leader locate on dnode $data[3][7]
endi
endi
...
...
@@ -196,21 +196,21 @@ else
goto check_vg_ready
endi
if $data[4][4] ==
LEADER
then
if $data[4][6] ==
FOLLOWER
then
if $data[4][8] ==
FOLLOWER
then
if $data[4][4] ==
leader
then
if $data[4][6] ==
follower
then
if $data[4][8] ==
follower
then
print ---- vgroup $data[4][0] leader locate on dnode $data[4][3]
endi
endi
elif $data[4][6] ==
LEADER
then
if $data[4][4] ==
FOLLOWER
then
if $data[4][8] ==
FOLLOWER
then
elif $data[4][6] ==
leader
then
if $data[4][4] ==
follower
then
if $data[4][8] ==
follower
then
print ---- vgroup $data[4][0] leader locate on dnode $data[4][5]
endi
endi
elif $data[4][8] ==
LEADER
then
if $data[4][4] ==
FOLLOWER
then
if $data[4][6] ==
FOLLOWER
then
elif $data[4][8] ==
leader
then
if $data[4][4] ==
follower
then
if $data[4][6] ==
follower
then
print ---- vgroup $data[4][0] leader locate on dnode $data[4][7]
endi
endi
...
...
@@ -335,21 +335,21 @@ if $rows != $vgroups then
return -1
endi
if $data[0][4] ==
LEADER
then
if $data[0][6] ==
FOLLOWER
then
if $data[0][8] ==
FOLLOWER
then
if $data[0][4] ==
leader
then
if $data[0][6] ==
follower
then
if $data[0][8] ==
follower
then
print ---- vgroup $data[0][0] leader locate on dnode $data[0][3]
endi
endi
elif $data[0][6] ==
LEADER
then
if $data[0][4] ==
FOLLOWER
then
if $data[0][8] ==
FOLLOWER
then
elif $data[0][6] ==
leader
then
if $data[0][4] ==
follower
then
if $data[0][8] ==
follower
then
print ---- vgroup $data[0][0] leader locate on dnode $data[0][5]
endi
endi
elif $data[0][8] ==
LEADER
then
if $data[0][4] ==
FOLLOWER
then
if $data[0][6] ==
FOLLOWER
then
elif $data[0][8] ==
leader
then
if $data[0][4] ==
follower
then
if $data[0][6] ==
follower
then
print ---- vgroup $data[0][0] leader locate on dnode $data[0][7]
endi
endi
...
...
@@ -357,21 +357,21 @@ else
goto check_vg_ready1
endi
if $data[1][4] ==
LEADER
then
if $data[1][6] ==
FOLLOWER
then
if $data[1][8] ==
FOLLOWER
then
if $data[1][4] ==
leader
then
if $data[1][6] ==
follower
then
if $data[1][8] ==
follower
then
print ---- vgroup $data[1][0] leader locate on dnode $data[1][3]
endi
endi
elif $data[1][6] ==
LEADER
then
if $data[1][4] ==
FOLLOWER
then
if $data[1][8] ==
FOLLOWER
then
elif $data[1][6] ==
leader
then
if $data[1][4] ==
follower
then
if $data[1][8] ==
follower
then
print ---- vgroup $data[1][0] leader locate on dnode $data[1][5]
endi
endi
elif $data[1][8] ==
LEADER
then
if $data[1][4] ==
FOLLOWER
then
if $data[1][6] ==
FOLLOWER
then
elif $data[1][8] ==
leader
then
if $data[1][4] ==
follower
then
if $data[1][6] ==
follower
then
print ---- vgroup $data[1][0] leader locate on dnode $data[1][7]
endi
endi
...
...
@@ -379,21 +379,21 @@ else
goto check_vg_ready1
endi
if $data[2][4] ==
LEADER
then
if $data[2][6] ==
FOLLOWER
then
if $data[2][8] ==
FOLLOWER
then
if $data[2][4] ==
leader
then
if $data[2][6] ==
follower
then
if $data[2][8] ==
follower
then
print ---- vgroup $data[2][0] leader locate on dnode $data[2][3]
endi
endi
elif $data[2][6] ==
LEADER
then
if $data[2][4] ==
FOLLOWER
then
if $data[2][8] ==
FOLLOWER
then
elif $data[2][6] ==
leader
then
if $data[2][4] ==
follower
then
if $data[2][8] ==
follower
then
print ---- vgroup $data[2][0] leader locate on dnode $data[2][5]
endi
endi
elif $data[2][8] ==
LEADER
then
if $data[2][4] ==
FOLLOWER
then
if $data[2][6] ==
FOLLOWER
then
elif $data[2][8] ==
leader
then
if $data[2][4] ==
follower
then
if $data[2][6] ==
follower
then
print ---- vgroup $data[2][0] leader locate on dnode $data[2][7]
endi
endi
...
...
@@ -401,21 +401,21 @@ else
goto check_vg_ready1
endi
if $data[3][4] ==
LEADER
then
if $data[3][6] ==
FOLLOWER
then
if $data[3][8] ==
FOLLOWER
then
if $data[3][4] ==
leader
then
if $data[3][6] ==
follower
then
if $data[3][8] ==
follower
then
print ---- vgroup $data[3][0] leader locate on dnode $data[3][3]
endi
endi
elif $data[3][6] ==
LEADER
then
if $data[3][4] ==
FOLLOWER
then
if $data[3][8] ==
FOLLOWER
then
elif $data[3][6] ==
leader
then
if $data[3][4] ==
follower
then
if $data[3][8] ==
follower
then
print ---- vgroup $data[3][0] leader locate on dnode $data[3][5]
endi
endi
elif $data[3][8] ==
LEADER
then
if $data[3][4] ==
FOLLOWER
then
if $data[3][6] ==
FOLLOWER
then
elif $data[3][8] ==
leader
then
if $data[3][4] ==
follower
then
if $data[3][6] ==
follower
then
print ---- vgroup $data[3][0] leader locate on dnode $data[3][7]
endi
endi
...
...
@@ -423,21 +423,21 @@ else
goto check_vg_ready1
endi
if $data[4][4] ==
LEADER
then
if $data[4][6] ==
FOLLOWER
then
if $data[4][8] ==
FOLLOWER
then
if $data[4][4] ==
leader
then
if $data[4][6] ==
follower
then
if $data[4][8] ==
follower
then
print ---- vgroup $data[4][0] leader locate on dnode $data[4][3]
endi
endi
elif $data[4][6] ==
LEADER
then
if $data[4][4] ==
FOLLOWER
then
if $data[4][8] ==
FOLLOWER
then
elif $data[4][6] ==
leader
then
if $data[4][4] ==
follower
then
if $data[4][8] ==
follower
then
print ---- vgroup $data[4][0] leader locate on dnode $data[4][5]
endi
endi
elif $data[4][8] ==
LEADER
then
if $data[4][4] ==
FOLLOWER
then
if $data[4][6] ==
FOLLOWER
then
elif $data[4][8] ==
leader
then
if $data[4][4] ==
follower
then
if $data[4][6] ==
follower
then
print ---- vgroup $data[4][0] leader locate on dnode $data[4][7]
endi
endi
...
...
@@ -635,21 +635,21 @@ if $rows != $vgroups then
return -1
endi
if $data[0][4] ==
LEADER
then
if $data[0][6] ==
FOLLOWER
then
if $data[0][8] ==
FOLLOWER
then
if $data[0][4] ==
leader
then
if $data[0][6] ==
follower
then
if $data[0][8] ==
follower
then
print ---- vgroup $data[0][0] leader locate on dnode $data[0][3]
endi
endi
elif $data[0][6] ==
LEADER
then
if $data[0][4] ==
FOLLOWER
then
if $data[0][8] ==
FOLLOWER
then
elif $data[0][6] ==
leader
then
if $data[0][4] ==
follower
then
if $data[0][8] ==
follower
then
print ---- vgroup $data[0][0] leader locate on dnode $data[0][5]
endi
endi
elif $data[0][8] ==
LEADER
then
if $data[0][4] ==
FOLLOWER
then
if $data[0][6] ==
FOLLOWER
then
elif $data[0][8] ==
leader
then
if $data[0][4] ==
follower
then
if $data[0][6] ==
follower
then
print ---- vgroup $data[0][0] leader locate on dnode $data[0][7]
endi
endi
...
...
@@ -657,21 +657,21 @@ else
goto check_vg_ready3
endi
if $data[1][4] ==
LEADER
then
if $data[1][6] ==
FOLLOWER
then
if $data[1][8] ==
FOLLOWER
then
if $data[1][4] ==
leader
then
if $data[1][6] ==
follower
then
if $data[1][8] ==
follower
then
print ---- vgroup $data[1][0] leader locate on dnode $data[1][3]
endi
endi
elif $data[1][6] ==
LEADER
then
if $data[1][4] ==
FOLLOWER
then
if $data[1][8] ==
FOLLOWER
then
elif $data[1][6] ==
leader
then
if $data[1][4] ==
follower
then
if $data[1][8] ==
follower
then
print ---- vgroup $data[1][0] leader locate on dnode $data[1][5]
endi
endi
elif $data[1][8] ==
LEADER
then
if $data[1][4] ==
FOLLOWER
then
if $data[1][6] ==
FOLLOWER
then
elif $data[1][8] ==
leader
then
if $data[1][4] ==
follower
then
if $data[1][6] ==
follower
then
print ---- vgroup $data[1][0] leader locate on dnode $data[1][7]
endi
endi
...
...
@@ -679,21 +679,21 @@ else
goto check_vg_ready3
endi
if $data[2][4] ==
LEADER
then
if $data[2][6] ==
FOLLOWER
then
if $data[2][8] ==
FOLLOWER
then
if $data[2][4] ==
leader
then
if $data[2][6] ==
follower
then
if $data[2][8] ==
follower
then
print ---- vgroup $data[2][0] leader locate on dnode $data[2][3]
endi
endi
elif $data[2][6] ==
LEADER
then
if $data[2][4] ==
FOLLOWER
then
if $data[2][8] ==
FOLLOWER
then
elif $data[2][6] ==
leader
then
if $data[2][4] ==
follower
then
if $data[2][8] ==
follower
then
print ---- vgroup $data[2][0] leader locate on dnode $data[2][5]
endi
endi
elif $data[2][8] ==
LEADER
then
if $data[2][4] ==
FOLLOWER
then
if $data[2][6] ==
FOLLOWER
then
elif $data[2][8] ==
leader
then
if $data[2][4] ==
follower
then
if $data[2][6] ==
follower
then
print ---- vgroup $data[2][0] leader locate on dnode $data[2][7]
endi
endi
...
...
@@ -701,21 +701,21 @@ else
goto check_vg_ready3
endi
if $data[3][4] ==
LEADER
then
if $data[3][6] ==
FOLLOWER
then
if $data[3][8] ==
FOLLOWER
then
if $data[3][4] ==
leader
then
if $data[3][6] ==
follower
then
if $data[3][8] ==
follower
then
print ---- vgroup $data[3][0] leader locate on dnode $data[3][3]
endi
endi
elif $data[3][6] ==
LEADER
then
if $data[3][4] ==
FOLLOWER
then
if $data[3][8] ==
FOLLOWER
then
elif $data[3][6] ==
leader
then
if $data[3][4] ==
follower
then
if $data[3][8] ==
follower
then
print ---- vgroup $data[3][0] leader locate on dnode $data[3][5]
endi
endi
elif $data[3][8] ==
LEADER
then
if $data[3][4] ==
FOLLOWER
then
if $data[3][6] ==
FOLLOWER
then
elif $data[3][8] ==
leader
then
if $data[3][4] ==
follower
then
if $data[3][6] ==
follower
then
print ---- vgroup $data[3][0] leader locate on dnode $data[3][7]
endi
endi
...
...
@@ -723,21 +723,21 @@ else
goto check_vg_ready3
endi
if $data[4][4] ==
LEADER
then
if $data[4][6] ==
FOLLOWER
then
if $data[4][8] ==
FOLLOWER
then
if $data[4][4] ==
leader
then
if $data[4][6] ==
follower
then
if $data[4][8] ==
follower
then
print ---- vgroup $data[4][0] leader locate on dnode $data[4][3]
endi
endi
elif $data[4][6] ==
LEADER
then
if $data[4][4] ==
FOLLOWER
then
if $data[4][8] ==
FOLLOWER
then
elif $data[4][6] ==
leader
then
if $data[4][4] ==
follower
then
if $data[4][8] ==
follower
then
print ---- vgroup $data[4][0] leader locate on dnode $data[4][5]
endi
endi
elif $data[4][8] ==
LEADER
then
if $data[4][4] ==
FOLLOWER
then
if $data[4][6] ==
FOLLOWER
then
elif $data[4][8] ==
leader
then
if $data[4][4] ==
follower
then
if $data[4][6] ==
follower
then
print ---- vgroup $data[4][0] leader locate on dnode $data[4][7]
endi
endi
...
...
tests/script/tsim/sync/oneReplica1VgElect.sim
浏览文件 @
74513630
...
...
@@ -103,13 +103,13 @@ print $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $d
if $rows != $vgroups then
return -1
endi
if $data[0][4] ==
LEADER
then
if $data[0][4] ==
leader
then
print ---- vgroup $data[0][0] leader locate on dnode $data[0][3]
goto vg_ready
elif $data[0][6] ==
LEADER
then
elif $data[0][6] ==
leader
then
print ---- vgroup $data[0][0] leader locate on dnode $data[0][5]
goto vg_ready
elif $data[0][8] ==
LEADER
then
elif $data[0][8] ==
leader
then
print ---- vgroup $data[0][0] leader locate on dnode $data[0][7]
goto vg_ready
else
...
...
@@ -154,11 +154,11 @@ switch_leader_to_offine_loop:
print ====> finde vnode of leader, and stop the dnode where the vnode is located, and query stb/ntb count(*)
sql show vgroups
print $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $data[0][6] $data[0][7] $data[0][8] $data[0][9] $data[0][6] $data[0][11] $data[0][12] $data[0][13]
if $data[0][4] ==
LEADER
then
if $data[0][4] ==
leader
then
$dnodeId = $data[0][3]
elif $data[0][6] ==
LEADER
then
elif $data[0][6] ==
leader
then
$dnodeId = $data[0][5]
elif $data[0][8] ==
LEADER
then
elif $data[0][8] ==
leader
then
$dnodeId = $data[0][7]
else
print ====> no leader vnode!!!
...
...
@@ -186,13 +186,13 @@ if $rows != $vgroups then
return -1
endi
if $data[0][4] ==
OFFLINE
then
if $data[0][4] ==
offline
then
print ---- vgroup $dnodeId leader switch to offline
goto vg_offline_1
elif $data[0][6] ==
OFFLINE
then
elif $data[0][6] ==
offline
then
print ---- vgroup $dnodeId leader switch to offline
goto vg_offline_1
elif $data[0][8] ==
OFFLINE
then
elif $data[0][8] ==
offline
then
print ---- vgroup $dnodeId leader switch to offline
goto vg_offline_1
else
...
...
@@ -218,13 +218,13 @@ print $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $d
if $rows != $vgroups then
return -1
endi
if $data[0][4] ==
LEADER
then
if $data[0][4] ==
leader
then
print ---- vgroup $data[0][0] leader locate on dnode $data[0][3]
goto countinu_loop
elif $data[0][6] ==
LEADER
then
elif $data[0][6] ==
leader
then
print ---- vgroup $data[0][0] leader locate on dnode $data[0][5]
goto countinu_loop
elif $data[0][8] ==
LEADER
then
elif $data[0][8] ==
leader
then
print ---- vgroup $data[0][0] leader locate on dnode $data[0][7]
goto countinu_loop
else
...
...
tests/script/tsim/sync/oneReplica1VgElectWithInsert.sim
浏览文件 @
74513630
...
...
@@ -104,7 +104,7 @@ print $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $d
if $rows != $vgroups then
return -1
endi
if $data[0][4] ==
LEADER
then
if $data[0][4] ==
leader
then
if $data[0][6] != NULL then
goto check_vg_ready
endi
...
...
@@ -114,7 +114,7 @@ if $data[0][4] == LEADER then
print ---- vgroup $data[0][0] leader locate on dnode $data[0][3]
goto vg_ready
endi
if $data[0][6] ==
LEADER
then
if $data[0][6] ==
leader
then
if $data[0][4] != NULL then
goto check_vg_ready
endi
...
...
@@ -124,7 +124,7 @@ if $data[0][6] == LEADER then
print ---- vgroup $data[0][0] leader locate on dnode $data[0][5]
goto vg_ready
endi
if $data[0][8] ==
LEADER
then
if $data[0][8] ==
leader
then
if $data[0][4] != NULL then
goto check_vg_ready
endi
...
...
@@ -208,11 +208,11 @@ switch_leader_loop:
print ====> finde vnode of leader, and stop the dnode where the vnode is located, and query stb/ntb count(*)
sql show vgroups
print $data(2)[0] $data(2)[1] $data(2)[2] $data(2)[3] $data(2)[4] $data(2)[5] $data(2)[6] $data(2)[7] $data(2)[8] $data(2)[9] $data(2)[10] $data(2)[11] $data(2)[12] $data(2)[13]
if $data[0][4] ==
LEADER
then
if $data[0][4] ==
leader
then
$dnodeId = $data[0][3]
elif $data[0][6] ==
LEADER
then
elif $data[0][6] ==
leader
then
$dnodeId = $data[0][5]
elif $data[0][8] ==
LEADER
then
elif $data[0][8] ==
leader
then
$dnodeId = $data[0][7]
else
print ====> no leader vnode!!!
...
...
@@ -238,7 +238,7 @@ print $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $d
if $rows != $vgroups then
return -1
endi
if $data[0][4] ==
LEADER
then
if $data[0][4] ==
leader
then
if $data[0][6] != NULL then
goto check_vg_ready_2
endi
...
...
@@ -248,7 +248,7 @@ if $data[0][4] == LEADER then
print ---- vgroup $data[0][0] leader switch to dnode $data[0][3]
goto vg_ready_2
endi
if $data[0][6] ==
LEADER
then
if $data[0][6] ==
leader
then
if $data[0][4] != NULL then
goto check_vg_ready_2
endi
...
...
@@ -258,7 +258,7 @@ if $data[0][6] == LEADER then
print ---- vgroup $data[0][0] leader switch to dnode $data[0][5]
goto vg_ready_2
endi
if $data[0][8] ==
LEADER
then
if $data[0][8] ==
leader
then
if $data[0][4] != NULL then
goto check_vg_ready_2
endi
...
...
@@ -343,7 +343,7 @@ print $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $d
if $rows != $vgroups then
return -1
endi
if $data[0][4] ==
LEADER
then
if $data[0][4] ==
leader
then
if $data[0][6] != NULL then
goto check_vg_ready_1
endi
...
...
@@ -352,7 +352,7 @@ if $data[0][4] == LEADER then
endi
goto vg_ready_1
endi
if $data[0][6] ==
LEADER
then
if $data[0][6] ==
leader
then
if $data[0][4] != NULL then
goto check_vg_ready_1
endi
...
...
@@ -361,7 +361,7 @@ if $data[0][6] == LEADER then
endi
goto vg_ready_1
endi
if $data[0][8] ==
LEADER
then
if $data[0][8] ==
leader
then
if $data[0][4] != NULL then
goto check_vg_ready_1
endi
...
...
tests/script/tsim/sync/oneReplica5VgElect.sim
浏览文件 @
74513630
...
...
@@ -104,51 +104,51 @@ if $rows != $vgroups then
return -1
endi
if $data[0][4] ==
LEADER
then
if $data[0][4] ==
leader
then
print ---- vgroup $data[0][0] leader locate on dnode $data[0][3]
elif $data[0][6] ==
LEADER
then
elif $data[0][6] ==
leader
then
print ---- vgroup $data[0][0] leader locate on dnode $data[0][5]
elif $data[0][8] ==
LEADER
then
elif $data[0][8] ==
leader
then
print ---- vgroup $data[0][0] leader locate on dnode $data[0][7]
else
goto check_vg_ready
endi
if $data[1][4] ==
LEADER
then
if $data[1][4] ==
leader
then
print ---- vgroup $data[1][0] leader locate on dnode $data[0][3]
elif $data[1][6] ==
LEADER
then
elif $data[1][6] ==
leader
then
print ---- vgroup $data[1][0] leader locate on dnode $data[0][5]
elif $data[1][8] ==
LEADER
then
elif $data[1][8] ==
leader
then
print ---- vgroup $data[1][0] leader locate on dnode $data[0][7]
else
goto check_vg_ready
endi
if $data[2][4] ==
LEADER
then
if $data[2][4] ==
leader
then
print ---- vgroup $data[2][0] leader locate on dnode $data[0][3]
elif $data[2][6] ==
LEADER
then
elif $data[2][6] ==
leader
then
print ---- vgroup $data[2][0] leader locate on dnode $data[0][5]
elif $data[2][8] ==
LEADER
then
elif $data[2][8] ==
leader
then
print ---- vgroup $data[2][0] leader locate on dnode $data[0][7]
else
goto check_vg_ready
endi
if $data[3][4] ==
LEADER
then
if $data[3][4] ==
leader
then
print ---- vgroup $data[3][0] leader locate on dnode $data[0][3]
elif $data[3][6] ==
LEADER
then
elif $data[3][6] ==
leader
then
print ---- vgroup $data[3][0] leader locate on dnode $data[0][5]
elif $data[3][8] ==
LEADER
then
elif $data[3][8] ==
leader
then
print ---- vgroup $data[3][0] leader locate on dnode $data[0][7]
else
goto check_vg_ready
endi
if $data[4][4] ==
LEADER
then
if $data[4][4] ==
leader
then
print ---- vgroup $data[4][0] leader locate on dnode $data[0][3]
elif $data[4][6] ==
LEADER
then
elif $data[4][6] ==
leader
then
print ---- vgroup $data[4][0] leader locate on dnode $data[0][5]
elif $data[4][8] ==
LEADER
then
elif $data[4][8] ==
leader
then
print ---- vgroup $data[4][0] leader locate on dnode $data[0][7]
else
goto check_vg_ready
...
...
@@ -272,51 +272,51 @@ if $rows != $vgroups then
return -1
endi
if $data[0][4] ==
LEADER
then
if $data[0][4] ==
leader
then
print ---- vgroup $data[0][0] leader locate on dnode $data[0][3]
elif $data[0][6] ==
LEADER
then
elif $data[0][6] ==
leader
then
print ---- vgroup $data[0][0] leader locate on dnode $data[0][5]
elif $data[0][8] ==
LEADER
then
elif $data[0][8] ==
leader
then
print ---- vgroup $data[0][0] leader locate on dnode $data[0][7]
else
goto check_vg_ready1
endi
if $data[1][4] ==
LEADER
then
if $data[1][4] ==
leader
then
print ---- vgroup $data[1][0] leader locate on dnode $data[1][3]
elif $data[1][6] ==
LEADER
then
elif $data[1][6] ==
leader
then
print ---- vgroup $data[1][0] leader locate on dnode $data[1][5]
elif $data[1][8] ==
LEADER
then
elif $data[1][8] ==
leader
then
print ---- vgroup $data[1][0] leader locate on dnode $data[1][7]
else
goto check_vg_ready1
endi
if $data[2][4] ==
LEADER
then
if $data[2][4] ==
leader
then
print ---- vgroup $data[2][0] leader locate on dnode $data[2][3]
elif $data[2][6] ==
LEADER
then
elif $data[2][6] ==
leader
then
print ---- vgroup $data[2][0] leader locate on dnode $data[2][5]
elif $data[2][8] ==
LEADER
then
elif $data[2][8] ==
leader
then
print ---- vgroup $data[2][0] leader locate on dnode $data[2][7]
else
goto check_vg_ready
endi
if $data[3][4] ==
LEADER
then
if $data[3][4] ==
leader
then
print ---- vgroup $data[3][0] leader locate on dnode $data[3][3]
elif $data[3][6] ==
LEADER
then
elif $data[3][6] ==
leader
then
print ---- vgroup $data[3][0] leader locate on dnode $data[3][5]
elif $data[3][8] ==
LEADER
then
elif $data[3][8] ==
leader
then
print ---- vgroup $data[3][0] leader locate on dnode $data[3][7]
else
goto check_vg_ready1
endi
if $data[4][4] ==
LEADER
then
if $data[4][4] ==
leader
then
print ---- vgroup $data[4][0] leader locate on dnode $data[4][3]
elif $data[4][6] ==
LEADER
then
elif $data[4][6] ==
leader
then
print ---- vgroup $data[4][0] leader locate on dnode $data[4][5]
elif $data[4][8] ==
LEADER
then
elif $data[4][8] ==
leader
then
print ---- vgroup $data[4][0] leader locate on dnode $data[4][7]
else
goto check_vg_ready1
...
...
tests/script/tsim/sync/threeReplica1VgElect.sim
浏览文件 @
74513630
...
...
@@ -104,7 +104,7 @@ print $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $d
if $rows != $vgroups then
return -1
endi
if $data[0][4] ==
LEADER
then
if $data[0][4] ==
leader
then
if $data[0][6] != FLLOWER then
goto check_vg_ready
endi
...
...
@@ -114,7 +114,7 @@ if $data[0][4] == LEADER then
print ---- vgroup $data[0][0] leader locate on dnode $data[0][3]
goto vg_ready
endi
if $data[0][6] ==
LEADER
then
if $data[0][6] ==
leader
then
if $data[0][4] != FLLOWER then
goto check_vg_ready
endi
...
...
@@ -124,7 +124,7 @@ if $data[0][6] == LEADER then
print ---- vgroup $data[0][0] leader locate on dnode $data[0][5]
goto vg_ready
endi
if $data[0][8] ==
LEADER
then
if $data[0][8] ==
leader
then
if $data[0][4] != FLLOWER then
goto check_vg_ready
endi
...
...
@@ -199,11 +199,11 @@ endi
print ====> finde vnode of leader, and stop the dnode where the vnode is located, and query stb/ntb count(*)
sql show vgroups
print $data(2)[0] $data(2)[1] $data(2)[2] $data(2)[3] $data(2)[4] $data(2)[5] $data(2)[6] $data(2)[7] $data(2)[8] $data(2)[9] $data(2)[10] $data(2)[11] $data(2)[12] $data(2)[13]
if $data[0][4] ==
LEADER
then
if $data[0][4] ==
leader
then
$dnodeId = $data[0][3]
elif $data[0][6] ==
LEADER
then
elif $data[0][6] ==
leader
then
$dnodeId = $data[0][5]
elif $data[0][8] ==
LEADER
then
elif $data[0][8] ==
leader
then
$dnodeId = $data[0][7]
else
print ====> no leader vnode!!!
...
...
@@ -216,11 +216,11 @@ system sh/exec.sh -n $dnodeId -s stop -x SIGINT
sql show vgroups
print $data(2)[0] $data(2)[1] $data(2)[2] $data(2)[3] $data(2)[4] $data(2)[5] $data(2)[6] $data(2)[7] $data(2)[8] $data(2)[9] $data(2)[10] $data(2)[11] $data(2)[12] $data(2)[13]
if $data[0][4] ==
LEADER
then
if $data[0][4] ==
leader
then
print ---- vgroup $data[0][0] leader switch to dnode $data[0][3]
elif $data[0][6] ==
LEADER
then
elif $data[0][6] ==
leader
then
print ---- vgroup $data[0][0] leader switch to dnode $data[0][5]
elif $data[0][8] ==
LEADER
then
elif $data[0][8] ==
leader
then
print ---- vgroup $data[0][0] leader switch to dnode $data[0][7]
else
print ====> no leader vnode!!!
...
...
@@ -264,7 +264,7 @@ print $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $d
if $rows != $vgroups then
return -1
endi
if $data[0][4] ==
LEADER
then
if $data[0][4] ==
leader
then
if $data[0][6] != FLLOWER then
goto check_vg_ready_1
endi
...
...
@@ -273,7 +273,7 @@ if $data[0][4] == LEADER then
endi
goto vg_ready_1
endi
if $data[0][6] ==
LEADER
then
if $data[0][6] ==
leader
then
if $data[0][4] != FLLOWER then
goto check_vg_ready_1
endi
...
...
@@ -282,7 +282,7 @@ if $data[0][6] == LEADER then
endi
goto vg_ready_1
endi
if $data[0][8] ==
LEADER
then
if $data[0][8] ==
leader
then
if $data[0][4] != FLLOWER then
goto check_vg_ready_1
endi
...
...
@@ -325,27 +325,27 @@ system sh/exec.sh -n $dnodeId -s stop -x SIGINT
check_vg_ready_3:
sql show vgroups
print $data(2)[0] $data(2)[1] $data(2)[2] $data(2)[3] $data(2)[4] $data(2)[5] $data(2)[6] $data(2)[7] $data(2)[8] $data(2)[9] $data(2)[10] $data(2)[11] $data(2)[12] $data(2)[13]
if $data[0][4] ==
LEADER
then
if $data[0][6] ==
LEADER
then
if $data[0][4] ==
leader
then
if $data[0][6] ==
leader
then
goto check_vg_ready_3
endi
if $data[0][8] ==
LEADER
then
if $data[0][8] ==
leader
then
goto check_vg_ready_3
endi
print ---- vgroup $data[0][0] leader locating dnode $data[0][5]
elif $data[0][6] ==
LEADER
then
if $data[0][4] ==
LEADER
then
elif $data[0][6] ==
leader
then
if $data[0][4] ==
leader
then
goto check_vg_ready_3
endi
if $data[0][8] ==
LEADER
then
if $data[0][8] ==
leader
then
goto check_vg_ready_3
endi
print ---- vgroup $data[0][0] leader locating dnode $data[0][7]
elif $data[0][8] ==
LEADER
then
if $data[0][4] ==
LEADER
then
elif $data[0][8] ==
leader
then
if $data[0][4] ==
leader
then
goto check_vg_ready_3
endi
if $data[0][6] ==
LEADER
then
if $data[0][6] ==
leader
then
goto check_vg_ready_3
endi
print ---- vgroup $data[0][0] leader locating dnode $data[0][9]
...
...
tests/script/tsim/sync/threeReplica1VgElectWihtInsert.sim
浏览文件 @
74513630
...
...
@@ -103,29 +103,29 @@ print $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $d
if $rows != $vgroups then
return -1
endi
if $data[0][4] ==
LEADER
then
if $data[0][6] !=
FOLLOWER
then
if $data[0][4] ==
leader
then
if $data[0][6] !=
follower
then
goto check_vg_ready
endi
if $data[0][8] !=
FOLLOWER
then
if $data[0][8] !=
follower
then
goto check_vg_ready
endi
print ---- vgroup $data[0][0] leader locate on dnode $data[0][3]
goto vg_ready
elif $data[0][6] ==
LEADER
then
if $data[0][4] !=
FOLLOWER
then
elif $data[0][6] ==
leader
then
if $data[0][4] !=
follower
then
goto check_vg_ready
endi
if $data[0][8] !=
FOLLOWER
then
if $data[0][8] !=
follower
then
goto check_vg_ready
endi
print ---- vgroup $data[0][0] leader locate on dnode $data[0][5]
goto vg_ready
elif $data[0][8] ==
LEADER
then
if $data[0][4] !=
FOLLOWER
then
elif $data[0][8] ==
leader
then
if $data[0][4] !=
follower
then
goto check_vg_ready
endi
if $data[0][6] !=
FOLLOWER
then
if $data[0][6] !=
follower
then
goto check_vg_ready
endi
print ---- vgroup $data[0][0] leader locate on dnode $data[0][7]
...
...
@@ -193,11 +193,11 @@ switch_leader_loop:
print ====> finde vnode of leader, and stop the dnode where the vnode is located, and query stb/ntb count(*)
sql show vgroups
print $data(2)[0] $data(2)[1] $data(2)[2] $data(2)[3] $data(2)[4] $data(2)[5] $data(2)[6] $data(2)[7] $data(2)[8] $data(2)[9] $data(2)[10] $data(2)[11] $data(2)[12] $data(2)[13]
if $data[0][4] ==
LEADER
then
if $data[0][4] ==
leader
then
$dnodeId = $data[0][3]
elif $data[0][6] ==
LEADER
then
elif $data[0][6] ==
leader
then
$dnodeId = $data[0][5]
elif $data[0][8] ==
LEADER
then
elif $data[0][8] ==
leader
then
$dnodeId = $data[0][7]
else
print ====> no leader vnode!!!
...
...
@@ -226,29 +226,29 @@ print $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $d
if $rows != $vgroups then
return -1
endi
if $data[0][4] ==
LEADER
then
if $data[0][6] !=
FOLLOWER
then
if $data[0][4] ==
leader
then
if $data[0][6] !=
follower
then
goto check_vg_ready_2
endi
if $data[0][8] !=
FOLLOWER
then
if $data[0][8] !=
follower
then
goto check_vg_ready_2
endi
print ---- vgroup $dnodeId leader switch to dnode $data[0][3]
goto vg_ready_2
elif $data[0][6] ==
LEADER
then
if $data[0][4] !=
FOLLOWER
then
elif $data[0][6] ==
leader
then
if $data[0][4] !=
follower
then
goto check_vg_ready_2
endi
if $data[0][8] !=
FOLLOWER
then
if $data[0][8] !=
follower
then
goto check_vg_ready_2
endi
print ---- vgroup $dnodeId leader switch to dnode $data[0][5]
goto vg_ready_2
elif $data[0][8] ==
LEADER
then
if $data[0][4] !=
FOLLOWER
then
elif $data[0][8] ==
leader
then
if $data[0][4] !=
follower
then
goto check_vg_ready_2
endi
if $data[0][6] !=
FOLLOWER
then
if $data[0][6] !=
follower
then
goto check_vg_ready_2
endi
print ---- vgroup $dnodeId leader switch to dnode $data[0][7]
...
...
@@ -329,29 +329,29 @@ print $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $d
if $rows != $vgroups then
return -1
endi
if $data[0][4] ==
LEADER
then
if $data[0][6] !=
FOLLOWER
then
if $data[0][4] ==
leader
then
if $data[0][6] !=
follower
then
goto check_vg_ready_1
endi
if $data[0][8] !=
FOLLOWER
then
if $data[0][8] !=
follower
then
goto check_vg_ready_1
endi
goto vg_ready_1
endi
if $data[0][6] ==
LEADER
then
if $data[0][4] !=
FOLLOWER
then
if $data[0][6] ==
leader
then
if $data[0][4] !=
follower
then
goto check_vg_ready_1
endi
if $data[0][8] !=
FOLLOWER
then
if $data[0][8] !=
follower
then
goto check_vg_ready_1
endi
goto vg_ready_1
endi
if $data[0][8] ==
LEADER
then
if $data[0][4] !=
FOLLOWER
then
if $data[0][8] ==
leader
then
if $data[0][4] !=
follower
then
goto check_vg_ready_1
endi
if $data[0][6] !=
FOLLOWER
then
if $data[0][6] !=
follower
then
goto check_vg_ready_1
endi
goto vg_ready_1
...
...
@@ -390,27 +390,27 @@ system sh/exec.sh -n $dnodeId -s stop -x SIGINT
check_vg_ready_3:
sql show vgroups
print $data(2)[0] $data(2)[1] $data(2)[2] $data(2)[3] $data(2)[4] $data(2)[5] $data(2)[6] $data(2)[7] $data(2)[8] $data(2)[9] $data(2)[10] $data(2)[11] $data(2)[12] $data(2)[13]
if $data[0][4] ==
LEADER
then
if $data[0][6] ==
LEADER
then
if $data[0][4] ==
leader
then
if $data[0][6] ==
leader
then
goto check_vg_ready_3
endi
if $data[0][8] ==
LEADER
then
if $data[0][8] ==
leader
then
goto check_vg_ready_3
endi
print ---- vgroup $data[0][0] leader locating dnode $data[0][5]
elif $data[0][6] ==
LEADER
then
if $data[0][4] ==
LEADER
then
elif $data[0][6] ==
leader
then
if $data[0][4] ==
leader
then
goto check_vg_ready_3
endi
if $data[0][8] ==
LEADER
then
if $data[0][8] ==
leader
then
goto check_vg_ready_3
endi
print ---- vgroup $data[0][0] leader locating dnode $data[0][7]
elif $data[0][8] ==
LEADER
then
if $data[0][4] ==
LEADER
then
elif $data[0][8] ==
leader
then
if $data[0][4] ==
leader
then
goto check_vg_ready_3
endi
if $data[0][6] ==
LEADER
then
if $data[0][6] ==
leader
then
goto check_vg_ready_3
endi
print ---- vgroup $data[0][0] leader locating dnode $data[0][9]
...
...
tests/script/tsim/trans/create_db.sim
浏览文件 @
74513630
...
...
@@ -26,7 +26,7 @@ if $data00 != 1 then
return -1
endi
if $data02 !=
LEADER
then
if $data02 !=
leader
then
return -1
endi
...
...
tests/system-test/0-others/taosdMonitor.py
浏览文件 @
74513630
...
...
@@ -75,7 +75,7 @@ def telemetryInfoCheck(infoDict=''):
if
k
not
in
infoDict
[
"cluster_info"
][
"dnodes"
][
0
]
or
v
!=
infoDict
[
"cluster_info"
][
"dnodes"
][
0
][
k
]
:
tdLog
.
exit
(
"dnodes info is null!"
)
mnodes_info
=
{
"mnode_id"
:
1
,
"mnode_ep"
:
f
"
{
hostname
}
:
{
serverPort
}
"
,
"role"
:
"
LEADER
"
}
mnodes_info
=
{
"mnode_id"
:
1
,
"mnode_ep"
:
f
"
{
hostname
}
:
{
serverPort
}
"
,
"role"
:
"
leader
"
}
for
k
,
v
in
mnodes_info
.
items
():
if
k
not
in
infoDict
[
"cluster_info"
][
"mnodes"
][
0
]
or
v
!=
infoDict
[
"cluster_info"
][
"mnodes"
][
0
][
k
]
:
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录