Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
42cc609a
TDengine
项目概览
taosdata
/
TDengine
大约 1 年 前同步成功
通知
1183
Star
22014
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
42cc609a
编写于
5月 25, 2022
作者:
C
Cary Xu
浏览文件
操作
浏览文件
下载
差异文件
Merge branch '3.0' into feature/TD-11274-3.0
上级
ec11679e
421a6c89
变更
19
隐藏空白更改
内联
并排
Showing
19 changed file
with
358 addition
and
183 deletion
+358
-183
include/libs/transport/trpc.h
include/libs/transport/trpc.h
+1
-2
source/client/src/clientHb.c
source/client/src/clientHb.c
+7
-0
source/libs/catalog/src/ctgCache.c
source/libs/catalog/src/ctgCache.c
+7
-2
source/libs/scheduler/src/schRemote.c
source/libs/scheduler/src/schRemote.c
+7
-5
source/libs/scheduler/src/schUtil.c
source/libs/scheduler/src/schUtil.c
+2
-4
source/libs/transport/inc/transComm.h
source/libs/transport/inc/transComm.h
+2
-2
source/libs/transport/src/transCli.c
source/libs/transport/src/transCli.c
+15
-1
source/libs/transport/src/transComm.c
source/libs/transport/src/transComm.c
+3
-2
source/libs/transport/test/transportTests.cpp
source/libs/transport/test/transportTests.cpp
+76
-76
source/os/src/osDir.c
source/os/src/osDir.c
+3
-2
source/os/src/osFile.c
source/os/src/osFile.c
+0
-1
source/os/src/osSemaphore.c
source/os/src/osSemaphore.c
+7
-2
source/os/src/osSocket.c
source/os/src/osSocket.c
+6
-8
source/util/src/tlog.c
source/util/src/tlog.c
+1
-1
tests/pytest/fulltest.bat
tests/pytest/fulltest.bat
+2
-0
tests/pytest/test-all.bat
tests/pytest/test-all.bat
+25
-0
tests/pytest/test.py
tests/pytest/test.py
+98
-56
tests/pytest/util/cases.py
tests/pytest/util/cases.py
+7
-3
tests/pytest/util/dnodes.py
tests/pytest/util/dnodes.py
+89
-16
未找到文件。
include/libs/transport/trpc.h
浏览文件 @
42cc609a
...
...
@@ -89,19 +89,18 @@ typedef struct SRpcInit {
typedef
struct
{
void
*
val
;
int32_t
(
*
clone
)(
void
*
src
,
void
**
dst
);
void
(
*
freeFunc
)(
const
void
*
arg
);
}
SRpcCtxVal
;
typedef
struct
{
int32_t
msgType
;
void
*
val
;
int32_t
(
*
clone
)(
void
*
src
,
void
**
dst
);
void
(
*
freeFunc
)(
const
void
*
arg
);
}
SRpcBrokenlinkVal
;
typedef
struct
{
SHashObj
*
args
;
SRpcBrokenlinkVal
brokenVal
;
void
(
*
freeFunc
)(
const
void
*
arg
);
}
SRpcCtx
;
int32_t
rpcInit
();
...
...
source/client/src/clientHb.c
浏览文件 @
42cc609a
...
...
@@ -582,8 +582,15 @@ void hbClearReqInfo(SAppHbMgr *pAppHbMgr) {
}
}
void
hbThreadFuncUnexpectedStopped
(
void
)
{
atomic_store_8
(
&
clientHbMgr
.
threadStop
,
2
);
}
static
void
*
hbThreadFunc
(
void
*
param
)
{
setThreadName
(
"hb"
);
#ifdef WINDOWS
atexit
(
hbThreadFuncUnexpectedStopped
);
#endif
while
(
1
)
{
int8_t
threadStop
=
atomic_val_compare_exchange_8
(
&
clientHbMgr
.
threadStop
,
1
,
2
);
if
(
1
==
threadStop
)
{
...
...
source/libs/catalog/src/ctgCache.c
浏览文件 @
42cc609a
...
...
@@ -1457,10 +1457,15 @@ _return:
CTG_RET
(
code
);
}
void
ctgUpdateThreadFuncUnexpectedStopped
(
void
)
{
if
(
CTG_IS_LOCKED
(
&
gCtgMgmt
.
lock
)
>
0
)
CTG_UNLOCK
(
CTG_READ
,
&
gCtgMgmt
.
lock
);
}
void
*
ctgUpdateThreadFunc
(
void
*
param
)
{
setThreadName
(
"catalog"
);
#ifdef WINDOWS
atexit
(
ctgUpdateThreadFuncUnexpectedStopped
);
#endif
qInfo
(
"catalog update thread started"
);
CTG_LOCK
(
CTG_READ
,
&
gCtgMgmt
.
lock
);
...
...
@@ -1494,7 +1499,7 @@ void* ctgUpdateThreadFunc(void* param) {
ctgdShowClusterCache
(
pCtg
);
}
CTG_UNLOCK
(
CTG_READ
,
&
gCtgMgmt
.
lock
);
if
(
CTG_IS_LOCKED
(
&
gCtgMgmt
.
lock
))
CTG_UNLOCK
(
CTG_READ
,
&
gCtgMgmt
.
lock
);
qInfo
(
"catalog update thread stopped"
);
...
...
source/libs/scheduler/src/schRemote.c
浏览文件 @
42cc609a
...
...
@@ -565,8 +565,9 @@ int32_t schMakeHbCallbackParam(SSchJob *pJob, SSchTask *pTask, void **pParam) {
int32_t
schCloneHbRpcCtx
(
SRpcCtx
*
pSrc
,
SRpcCtx
*
pDst
)
{
int32_t
code
=
0
;
memcpy
(
&
pDst
->
brokenVal
,
&
pSrc
->
brokenVal
,
sizeof
(
pSrc
->
brokenVal
));
memcpy
(
pDst
,
pSrc
,
sizeof
(
SRpcCtx
));
pDst
->
brokenVal
.
val
=
NULL
;
pDst
->
args
=
NULL
;
SCH_ERR_RET
(
schCloneSMsgSendInfo
(
pSrc
->
brokenVal
.
val
,
&
pDst
->
brokenVal
.
val
));
...
...
@@ -589,7 +590,7 @@ int32_t schCloneHbRpcCtx(SRpcCtx *pSrc, SRpcCtx *pDst) {
if
(
taosHashPut
(
pDst
->
args
,
msgType
,
sizeof
(
*
msgType
),
&
dst
,
sizeof
(
dst
)))
{
qError
(
"taosHashPut msg %d to rpcCtx failed"
,
*
msgType
);
(
*
dst
.
freeFunc
)(
dst
.
val
);
(
*
pSrc
->
freeFunc
)(
dst
.
val
);
SCH_ERR_JRET
(
TSDB_CODE_QRY_OUT_OF_MEMORY
);
}
...
...
@@ -643,13 +644,14 @@ int32_t schMakeHbRpcCtx(SSchJob *pJob, SSchTask *pTask, SRpcCtx *pCtx) {
pMsgSendInfo
->
param
=
param
;
pMsgSendInfo
->
fp
=
fp
;
SRpcCtxVal
ctxVal
=
{.
val
=
pMsgSendInfo
,
.
clone
=
schCloneSMsgSendInfo
,
.
freeFunc
=
schFreeRpcCtxVal
};
SRpcCtxVal
ctxVal
=
{.
val
=
pMsgSendInfo
,
.
clone
=
schCloneSMsgSendInfo
};
if
(
taosHashPut
(
pCtx
->
args
,
&
msgType
,
sizeof
(
msgType
),
&
ctxVal
,
sizeof
(
ctxVal
)))
{
SCH_TASK_ELOG
(
"taosHashPut msg %d to rpcCtx failed"
,
msgType
);
SCH_ERR_JRET
(
TSDB_CODE_QRY_OUT_OF_MEMORY
);
}
SCH_ERR_JRET
(
schMakeBrokenLinkVal
(
pJob
,
pTask
,
&
pCtx
->
brokenVal
,
true
));
pCtx
->
freeFunc
=
schFreeRpcCtxVal
;
return
TSDB_CODE_SUCCESS
;
...
...
@@ -911,7 +913,6 @@ int32_t schMakeBrokenLinkVal(SSchJob *pJob, SSchTask *pTask, SRpcBrokenlinkVal *
brokenVal
->
msgType
=
msgType
;
brokenVal
->
val
=
pMsgSendInfo
;
brokenVal
->
clone
=
schCloneSMsgSendInfo
;
brokenVal
->
freeFunc
=
schFreeRpcCtxVal
;
return
TSDB_CODE_SUCCESS
;
...
...
@@ -938,7 +939,7 @@ int32_t schMakeQueryRpcCtx(SSchJob *pJob, SSchTask *pTask, SRpcCtx *pCtx) {
SCH_ERR_JRET
(
schGenerateCallBackInfo
(
pJob
,
pTask
,
TDMT_VND_EXPLAIN
,
&
pExplainMsgSendInfo
));
int32_t
msgType
=
TDMT_VND_RES_READY_RSP
;
SRpcCtxVal
ctxVal
=
{.
val
=
pReadyMsgSendInfo
,
.
clone
=
schCloneSMsgSendInfo
,
.
freeFunc
=
schFreeRpcCtxVal
};
SRpcCtxVal
ctxVal
=
{.
val
=
pReadyMsgSendInfo
,
.
clone
=
schCloneSMsgSendInfo
};
if
(
taosHashPut
(
pCtx
->
args
,
&
msgType
,
sizeof
(
msgType
),
&
ctxVal
,
sizeof
(
ctxVal
)))
{
SCH_TASK_ELOG
(
"taosHashPut msg %d to rpcCtx failed"
,
msgType
);
SCH_ERR_JRET
(
TSDB_CODE_QRY_OUT_OF_MEMORY
);
...
...
@@ -952,6 +953,7 @@ int32_t schMakeQueryRpcCtx(SSchJob *pJob, SSchTask *pTask, SRpcCtx *pCtx) {
}
SCH_ERR_JRET
(
schMakeBrokenLinkVal
(
pJob
,
pTask
,
&
pCtx
->
brokenVal
,
false
));
pCtx
->
freeFunc
=
schFreeRpcCtxVal
;
return
TSDB_CODE_SUCCESS
;
...
...
source/libs/scheduler/src/schUtil.c
浏览文件 @
42cc609a
...
...
@@ -77,16 +77,14 @@ void schFreeRpcCtx(SRpcCtx *pCtx) {
while
(
pIter
)
{
SRpcCtxVal
*
ctxVal
=
(
SRpcCtxVal
*
)
pIter
;
(
*
ctxVal
->
freeFunc
)(
ctxVal
->
val
);
(
*
pCtx
->
freeFunc
)(
ctxVal
->
val
);
pIter
=
taosHashIterate
(
pCtx
->
args
,
pIter
);
}
taosHashCleanup
(
pCtx
->
args
);
if
(
pCtx
->
brokenVal
.
freeFunc
)
{
(
*
pCtx
->
brokenVal
.
freeFunc
)(
pCtx
->
brokenVal
.
val
);
}
(
*
pCtx
->
freeFunc
)(
pCtx
->
brokenVal
.
val
);
}
source/libs/transport/inc/transComm.h
浏览文件 @
42cc609a
...
...
@@ -95,8 +95,8 @@ typedef void* queue[2];
#define QUEUE_DATA(e, type, field) ((type*)((void*)((char*)(e)-offsetof(type, field))))
#define TRANS_RETRY_COUNT_LIMIT 100 // retry count limit
#define TRANS_RETRY_INTERVAL 15 // ms retry interval
#define TRANS_CONN_TIMEOUT 3 // connect timeout
#define TRANS_RETRY_INTERVAL 15
// ms retry interval
#define TRANS_CONN_TIMEOUT 3
// connect timeout
typedef
SRpcMsg
STransMsg
;
typedef
SRpcCtx
STransCtx
;
...
...
source/libs/transport/src/transCli.c
浏览文件 @
42cc609a
...
...
@@ -131,6 +131,19 @@ static void destroyThrdObj(SCliThrdObj* pThrd);
static
void
cliWalkCb
(
uv_handle_t
*
handle
,
void
*
arg
);
static
void
cliReleaseUnfinishedMsg
(
SCliConn
*
conn
)
{
SCliMsg
*
pMsg
=
NULL
;
for
(
int
i
=
0
;
i
<
transQueueSize
(
&
conn
->
cliMsgs
);
i
++
)
{
pMsg
=
transQueueGet
(
&
conn
->
cliMsgs
,
i
);
if
(
pMsg
!=
NULL
&&
pMsg
->
ctx
!=
NULL
)
{
if
(
conn
->
ctx
.
freeFunc
!=
NULL
)
{
conn
->
ctx
.
freeFunc
(
pMsg
->
ctx
->
ahandle
);
}
}
destroyCmsg
(
pMsg
);
}
}
#define CLI_RELEASE_UV(loop) \
do { \
uv_walk(loop, cliWalkCb, NULL); \
...
...
@@ -161,6 +174,7 @@ static void cliWalkCb(uv_handle_t* handle, void* arg);
transUnrefCliHandle(conn); \
} \
destroyCmsg(pMsg); \
cliReleaseUnfinishedMsg(conn); \
addConnToPool(((SCliThrdObj*)conn->hostThrd)->pool, conn); \
return; \
} \
...
...
@@ -465,8 +479,8 @@ static void addConnToPool(void* pool, SCliConn* conn) {
STrans
*
pTransInst
=
((
SCliThrdObj
*
)
conn
->
hostThrd
)
->
pTransInst
;
conn
->
expireTime
=
taosGetTimestampMs
()
+
CONN_PERSIST_TIME
(
pTransInst
->
idleTime
);
transCtxCleanup
(
&
conn
->
ctx
);
transQueueClear
(
&
conn
->
cliMsgs
);
transCtxCleanup
(
&
conn
->
ctx
);
conn
->
status
=
ConnInPool
;
char
key
[
128
]
=
{
0
};
...
...
source/libs/transport/src/transComm.c
浏览文件 @
42cc609a
...
...
@@ -233,7 +233,7 @@ void transCtxCleanup(STransCtx* ctx) {
STransCtxVal
*
iter
=
taosHashIterate
(
ctx
->
args
,
NULL
);
while
(
iter
)
{
iter
->
freeFunc
(
iter
->
val
);
ctx
->
freeFunc
(
iter
->
val
);
iter
=
taosHashIterate
(
ctx
->
args
,
iter
);
}
...
...
@@ -245,6 +245,7 @@ void transCtxMerge(STransCtx* dst, STransCtx* src) {
if
(
dst
->
args
==
NULL
)
{
dst
->
args
=
src
->
args
;
dst
->
brokenVal
=
src
->
brokenVal
;
dst
->
freeFunc
=
src
->
freeFunc
;
src
->
args
=
NULL
;
return
;
}
...
...
@@ -257,7 +258,7 @@ void transCtxMerge(STransCtx* dst, STransCtx* src) {
STransCtxVal
*
dVal
=
taosHashGet
(
dst
->
args
,
key
,
klen
);
if
(
dVal
)
{
d
Val
->
freeFunc
(
dVal
->
val
);
d
st
->
freeFunc
(
dVal
->
val
);
}
taosHashPut
(
dst
->
args
,
key
,
klen
,
sVal
,
sizeof
(
*
sVal
));
iter
=
taosHashIterate
(
src
->
args
,
iter
);
...
...
source/libs/transport/test/transportTests.cpp
浏览文件 @
42cc609a
...
...
@@ -156,80 +156,80 @@ int32_t cloneVal(void *src, void **dst) {
memcpy
(
*
dst
,
src
,
sz
);
return
0
;
}
TEST_F
(
TransCtxEnv
,
mergeTest
)
{
int
key
=
1
;
{
STransCtx
*
src
=
(
STransCtx
*
)
taosMemoryCalloc
(
1
,
sizeof
(
STransCtx
));
transCtxInit
(
src
);
{
STransCtxVal
val1
=
{
NULL
,
NULL
,
(
void
(
*
)(
const
void
*
))
taosMemoryFree
};
val1
.
val
=
taosMemoryMalloc
(
12
);
taosHashPut
(
src
->
args
,
&
key
,
sizeof
(
key
),
&
val1
,
sizeof
(
val1
));
key
++
;
}
{
STransCtxVal
val1
=
{
NULL
,
NULL
,
(
void
(
*
)(
const
void
*
))
taosMemoryFree
};
val1
.
val
=
taosMemoryMalloc
(
12
);
taosHashPut
(
src
->
args
,
&
key
,
sizeof
(
key
),
&
val1
,
sizeof
(
val1
));
key
++
;
}
transCtxMerge
(
ctx
,
src
);
taosMemoryFree
(
src
);
}
EXPECT_EQ
(
2
,
taosHashGetSize
(
ctx
->
args
));
{
STransCtx
*
src
=
(
STransCtx
*
)
taosMemoryCalloc
(
1
,
sizeof
(
STransCtx
));
transCtxInit
(
src
);
{
STransCtxVal
val1
=
{
NULL
,
NULL
,
(
void
(
*
)(
const
void
*
))
taosMemoryFree
};
val1
.
val
=
taosMemoryMalloc
(
12
);
taosHashPut
(
src
->
args
,
&
key
,
sizeof
(
key
),
&
val1
,
sizeof
(
val1
));
key
++
;
}
{
STransCtxVal
val1
=
{
NULL
,
NULL
,
(
void
(
*
)(
const
void
*
))
taosMemoryFree
};
val1
.
val
=
taosMemoryMalloc
(
12
);
taosHashPut
(
src
->
args
,
&
key
,
sizeof
(
key
),
&
val1
,
sizeof
(
val1
));
key
++
;
}
transCtxMerge
(
ctx
,
src
);
taosMemoryFree
(
src
);
}
std
::
string
val
(
"Hello"
);
EXPECT_EQ
(
4
,
taosHashGetSize
(
ctx
->
args
));
{
key
=
1
;
STransCtx
*
src
=
(
STransCtx
*
)
taosMemoryCalloc
(
1
,
sizeof
(
STransCtx
));
transCtxInit
(
src
);
{
STransCtxVal
val1
=
{
NULL
,
NULL
,
(
void
(
*
)(
const
void
*
))
taosMemoryFree
};
val1
.
val
=
taosMemoryCalloc
(
1
,
11
);
val1
.
clone
=
cloneVal
;
memcpy
(
val1
.
val
,
val
.
c_str
(),
val
.
size
());
taosHashPut
(
src
->
args
,
&
key
,
sizeof
(
key
),
&
val1
,
sizeof
(
val1
));
key
++
;
}
{
STransCtxVal
val1
=
{
NULL
,
NULL
,
(
void
(
*
)(
const
void
*
))
taosMemoryFree
};
val1
.
val
=
taosMemoryCalloc
(
1
,
11
);
val1
.
clone
=
cloneVal
;
memcpy
(
val1
.
val
,
val
.
c_str
(),
val
.
size
());
taosHashPut
(
src
->
args
,
&
key
,
sizeof
(
key
),
&
val1
,
sizeof
(
val1
));
key
++
;
}
transCtxMerge
(
ctx
,
src
);
taosMemoryFree
(
src
);
}
EXPECT_EQ
(
4
,
taosHashGetSize
(
ctx
->
args
));
char
*
skey
=
(
char
*
)
transCtxDumpVal
(
ctx
,
1
);
EXPECT_EQ
(
0
,
strcmp
(
skey
,
val
.
c_str
()));
taosMemoryFree
(
skey
);
skey
=
(
char
*
)
transCtxDumpVal
(
ctx
,
2
);
EXPECT_EQ
(
0
,
strcmp
(
skey
,
val
.
c_str
()));
}
//
TEST_F(TransCtxEnv, mergeTest) {
//
int key = 1;
//
{
//
STransCtx *src = (STransCtx *)taosMemoryCalloc(1, sizeof(STransCtx));
//
transCtxInit(src);
//
{
//
STransCtxVal val1 = {NULL, NULL, (void (*)(const void *))taosMemoryFree};
//
val1.val = taosMemoryMalloc(12);
//
//
taosHashPut(src->args, &key, sizeof(key), &val1, sizeof(val1));
//
key++;
//
}
//
{
//
STransCtxVal val1 = {NULL, NULL, (void (*)(const void *))taosMemoryFree};
//
val1.val = taosMemoryMalloc(12);
//
taosHashPut(src->args, &key, sizeof(key), &val1, sizeof(val1));
//
key++;
//
}
//
transCtxMerge(ctx, src);
//
taosMemoryFree(src);
//
}
//
EXPECT_EQ(2, taosHashGetSize(ctx->args));
//
{
//
STransCtx *src = (STransCtx *)taosMemoryCalloc(1, sizeof(STransCtx));
//
transCtxInit(src);
//
{
//
STransCtxVal val1 = {NULL, NULL, (void (*)(const void *))taosMemoryFree};
//
val1.val = taosMemoryMalloc(12);
//
//
taosHashPut(src->args, &key, sizeof(key), &val1, sizeof(val1));
//
key++;
//
}
//
{
//
STransCtxVal val1 = {NULL, NULL, (void (*)(const void *))taosMemoryFree};
//
val1.val = taosMemoryMalloc(12);
//
taosHashPut(src->args, &key, sizeof(key), &val1, sizeof(val1));
//
key++;
//
}
//
transCtxMerge(ctx, src);
//
taosMemoryFree(src);
//
}
//
std::string val("Hello");
//
EXPECT_EQ(4, taosHashGetSize(ctx->args));
//
{
//
key = 1;
//
STransCtx *src = (STransCtx *)taosMemoryCalloc(1, sizeof(STransCtx));
//
transCtxInit(src);
//
{
//
STransCtxVal val1 = {NULL, NULL, (void (*)(const void *))taosMemoryFree};
//
val1.val = taosMemoryCalloc(1, 11);
//
val1.clone = cloneVal;
//
memcpy(val1.val, val.c_str(), val.size());
//
//
taosHashPut(src->args, &key, sizeof(key), &val1, sizeof(val1));
//
key++;
//
}
//
{
//
STransCtxVal val1 = {NULL, NULL, (void (*)(const void *))taosMemoryFree};
//
val1.val = taosMemoryCalloc(1, 11);
//
val1.clone = cloneVal;
//
memcpy(val1.val, val.c_str(), val.size());
//
taosHashPut(src->args, &key, sizeof(key), &val1, sizeof(val1));
//
key++;
//
}
//
transCtxMerge(ctx, src);
//
taosMemoryFree(src);
//
}
//
EXPECT_EQ(4, taosHashGetSize(ctx->args));
//
//
char *skey = (char *)transCtxDumpVal(ctx, 1);
//
EXPECT_EQ(0, strcmp(skey, val.c_str()));
//
taosMemoryFree(skey);
//
//
skey = (char *)transCtxDumpVal(ctx, 2);
//
EXPECT_EQ(0, strcmp(skey, val.c_str()));
//
}
#endif
source/os/src/osDir.c
浏览文件 @
42cc609a
...
...
@@ -107,13 +107,14 @@ int32_t taosMkDir(const char *dirname) {
int32_t
taosMulMkDir
(
const
char
*
dirname
)
{
if
(
dirname
==
NULL
)
return
-
1
;
char
temp
[
1024
];
char
*
pos
=
temp
;
int32_t
code
=
0
;
#ifdef WINDOWS
taosRealPath
(
dirname
,
temp
,
sizeof
(
temp
));
if
(
temp
[
1
]
==
':'
)
pos
+=
3
;
#else
strcpy
(
temp
,
dirname
);
#endif
char
*
pos
=
temp
;
int32_t
code
=
0
;
if
(
taosDirExist
(
temp
))
return
code
;
...
...
source/os/src/osFile.c
浏览文件 @
42cc609a
...
...
@@ -69,7 +69,6 @@ void taosGetTmpfilePath(const char *inputTmpDir, const char *fileNamePrefix, cha
}
strcpy
(
tmpPath
+
len
,
tdengineTmpFileNamePrefix
);
strcat
(
tmpPath
,
tdengineTmpFileNamePrefix
);
if
(
strlen
(
tmpPath
)
+
strlen
(
fileNamePrefix
)
+
strlen
(
"-%d-%s"
)
<
PATH_MAX
)
{
strcat
(
tmpPath
,
fileNamePrefix
);
strcat
(
tmpPath
,
"-%d-%s"
);
...
...
source/os/src/osSemaphore.c
浏览文件 @
42cc609a
...
...
@@ -50,10 +50,15 @@ int32_t taosGetAppName(char* name, int32_t* len) {
if
(
sub
!=
NULL
)
{
*
sub
=
'\0'
;
}
strcpy
(
name
,
filepath
);
char
*
end
=
strrchr
(
filepath
,
TD_DIRSEP
[
0
]);
if
(
end
==
NULL
)
{
end
=
filepath
;
}
strcpy
(
name
,
end
);
if
(
len
!=
NULL
)
{
*
len
=
(
int32_t
)
strlen
(
filepath
);
*
len
=
(
int32_t
)
strlen
(
end
);
}
return
0
;
...
...
source/os/src/osSocket.c
浏览文件 @
42cc609a
...
...
@@ -889,11 +889,11 @@ uint32_t taosGetIpv4FromFqdn(const char *fqdn) {
#ifdef WINDOWS
// Initialize Winsock
WSADATA
wsaData
;
int
iResult
;
int
iResult
;
iResult
=
WSAStartup
(
MAKEWORD
(
2
,
2
),
&
wsaData
);
if
(
iResult
!=
0
)
{
printf
(
"WSAStartup failed: %d
\n
"
,
iResult
);
return
1
;
//
printf("WSAStartup failed: %d\n", iResult);
return
1
;
}
#endif
struct
addrinfo
hints
=
{
0
};
...
...
@@ -928,7 +928,7 @@ int32_t taosGetFqdn(char *fqdn) {
char
hostname
[
1024
];
hostname
[
1023
]
=
'\0'
;
if
(
gethostname
(
hostname
,
1023
)
==
-
1
)
{
printf
(
"failed to get hostname, reason:%s"
,
strerror
(
errno
));
//
printf("failed to get hostname, reason:%s", strerror(errno));
assert
(
0
);
return
-
1
;
}
...
...
@@ -946,7 +946,7 @@ int32_t taosGetFqdn(char *fqdn) {
#endif // __APPLE__
int32_t
ret
=
getaddrinfo
(
hostname
,
NULL
,
&
hints
,
&
result
);
if
(
!
result
)
{
printf
(
"failed to get fqdn, code:%d, reason:%s"
,
ret
,
gai_strerror
(
ret
));
//
printf("failed to get fqdn, code:%d, reason:%s", ret, gai_strerror(ret));
assert
(
0
);
return
-
1
;
}
...
...
@@ -993,9 +993,7 @@ void tinet_ntoa(char *ipstr, uint32_t ip) {
sprintf
(
ipstr
,
"%d.%d.%d.%d"
,
ip
&
0xFF
,
(
ip
>>
8
)
&
0xFF
,
(
ip
>>
16
)
&
0xFF
,
ip
>>
24
);
}
void
taosIgnSIGPIPE
()
{
signal
(
SIGPIPE
,
SIG_IGN
);
}
void
taosIgnSIGPIPE
()
{
signal
(
SIGPIPE
,
SIG_IGN
);
}
void
taosSetMaskSIGPIPE
()
{
#ifdef WINDOWS
...
...
source/util/src/tlog.c
浏览文件 @
42cc609a
...
...
@@ -226,7 +226,7 @@ static void *taosThreadToOpenNewFile(void *param) {
tsLogObj
.
logHandle
->
pFile
=
pFile
;
tsLogObj
.
lines
=
0
;
tsLogObj
.
openInProgress
=
0
;
taosSsleep
(
1
0
);
taosSsleep
(
2
0
);
taosCloseLogByFd
(
pOldFile
);
uInfo
(
" new log file:%d is opened"
,
tsLogObj
.
flag
);
...
...
tests/pytest/fulltest.bat
0 → 100644
浏览文件 @
42cc609a
python
.\test.py
-f
insert
\basic.py
\ No newline at end of file
tests/pytest/test-all.bat
0 → 100644
浏览文件 @
42cc609a
@echo
off
SETLOCAL
EnableDelayedExpansion
for
/F
"tokens=1,2 delims=#"
%%a
in
(
'"prompt #$H#$E# & echo on & for
%%b
in (1) do rem"'
)
do
(
set
"DEL=
%%a
"
)
set
/a
a
=
0
@REM echo Windows Taosd Test
@REM for /F "usebackq tokens=*" %%i in (fulltest.bat) do (
@REM echo Processing %%i
@REM set /a a+=1
@REM call %%i ARG1 -w -m localhost > result_!a!.txt 2>error_!a!.txt
@REM if errorlevel 1 ( call :colorEcho 0c "failed" &echo. && exit 8 ) else ( call :colorEcho 0a "Success" &echo. )
@REM )
echo
Linux
Taosd
Test
for
/F
"usebackq tokens=*"
%%i
in
(
fulltest
.bat
)
do
(
echo
Processing
%%i
set
/a
a
+=
1
call
%%i
ARG1
-w
1
-m
%
1
>
result_
!a!
.txt
2
>
error_
!a!
.txt
if
errorlevel
1
(
call
:colorEcho
0
c
"failed"
&
echo
.
&&
exit
8
)
else
(
call
:colorEcho
0
a
"Success"
&
echo
.
)
)
exit
:colorEcho
echo
off
<
nul
set
/p
".=
%DEL%
"
>
"
%
~2"
findstr
/v /a
:
%
1
/R
"
^$
"
"
%
~2"
nul
del
"
%
~2"
>
nul
2
>&
1
i
\ No newline at end of file
tests/pytest/test.py
浏览文件 @
42cc609a
...
...
@@ -35,8 +35,9 @@ if __name__ == "__main__":
logSql
=
True
stop
=
0
restart
=
False
opts
,
args
=
getopt
.
gnu_getopt
(
sys
.
argv
[
1
:],
'f:p:m:l:scghr'
,
[
'file='
,
'path='
,
'master'
,
'logSql'
,
'stop'
,
'cluster'
,
'valgrind'
,
'help'
])
windows
=
0
opts
,
args
=
getopt
.
gnu_getopt
(
sys
.
argv
[
1
:],
'f:p:m:l:scghrw'
,
[
'file='
,
'path='
,
'master'
,
'logSql'
,
'stop'
,
'cluster'
,
'valgrind'
,
'help'
,
'windows'
])
for
key
,
value
in
opts
:
if
key
in
[
'-h'
,
'--help'
]:
tdLog
.
printNoPrefix
(
...
...
@@ -61,7 +62,10 @@ if __name__ == "__main__":
deployPath
=
value
if
key
in
[
'-m'
,
'--master'
]:
masterIp
=
value
masterIp
=
value
if
key
in
[
'-w'
,
'--windows'
]:
windows
=
1
if
key
in
[
'-l'
,
'--logSql'
]:
if
(
value
.
upper
()
==
"TRUE"
):
...
...
@@ -110,67 +114,105 @@ if __name__ == "__main__":
time
.
sleep
(
2
)
tdLog
.
info
(
'stop All dnodes'
)
tdDnodes
.
init
(
deployPath
)
tdDnodes
.
setTestCluster
(
testCluster
)
tdDnodes
.
setValgrind
(
valgrind
)
tdDnodes
.
stopAll
()
is_test_framework
=
0
key_word
=
'tdCases.addLinux'
try
:
if
key_word
in
open
(
fileName
).
read
():
is_test_framework
=
1
except
:
pass
if
is_test_framework
:
moduleName
=
fileName
.
replace
(
".py"
,
""
).
replace
(
"/"
,
"."
)
uModule
=
importlib
.
import_module
(
moduleName
)
try
:
ucase
=
uModule
.
TDTestCase
()
tdDnodes
.
deploy
(
1
,
ucase
.
updatecfgDict
)
except
:
tdDnodes
.
deploy
(
1
,{})
else
:
tdDnodes
.
deploy
(
1
,{})
tdDnodes
.
start
(
1
)
if
masterIp
==
""
:
host
=
'127.0.0.1'
else
:
host
=
masterIp
tdLog
.
info
(
"Procedures for tdengine deployed in %s"
%
(
host
))
tdCases
.
logSql
(
logSql
)
if
testCluster
:
tdLog
.
info
(
"Procedures for testing cluster"
)
if
fileName
==
"all"
:
tdCases
.
runAllCluster
()
else
:
tdCases
.
runOneCluster
(
fileName
)
else
:
if
(
windows
):
tdCases
.
logSql
(
logSql
)
tdLog
.
info
(
"Procedures for testing self-deployment"
)
if
masterIp
==
""
or
masterIp
==
"localhost"
:
tdDnodes
.
init
(
deployPath
)
tdDnodes
.
setTestCluster
(
testCluster
)
tdDnodes
.
setValgrind
(
valgrind
)
tdDnodes
.
stopAll
()
is_test_framework
=
0
key_word
=
'tdCases.addWindows'
try
:
if
key_word
in
open
(
fileName
).
read
():
is_test_framework
=
1
except
:
pass
if
is_test_framework
:
moduleName
=
fileName
.
replace
(
".py"
,
""
).
replace
(
os
.
sep
,
"."
)
uModule
=
importlib
.
import_module
(
moduleName
)
try
:
ucase
=
uModule
.
TDTestCase
()
tdDnodes
.
deploy
(
1
,
ucase
.
updatecfgDict
)
except
:
tdDnodes
.
deploy
(
1
,{})
else
:
pass
tdDnodes
.
deploy
(
1
,{})
tdDnodes
.
startWin
(
1
)
else
:
remote_conn
=
Connection
(
"root@%s"
%
host
)
with
remote_conn
.
cd
(
'/var/lib/jenkins/workspace/TDinternal/community/tests/pytest'
):
remote_conn
.
run
(
"python3 ./test.py"
)
tdDnodes
.
init
(
deployPath
)
conn
=
taos
.
connect
(
host
,
config
=
tdDnodes
.
getSimCfgPath
())
if
fileName
==
"all"
:
tdCases
.
runAllLinux
(
conn
)
host
=
"%s"
%
(
host
),
config
=
tdDnodes
.
sim
.
getCfgDir
())
tdCases
.
runOneWindows
(
conn
,
fileName
)
tdCases
.
logSql
(
logSql
)
else
:
tdDnodes
.
init
(
deployPath
)
tdDnodes
.
setTestCluster
(
testCluster
)
tdDnodes
.
setValgrind
(
valgrind
)
tdDnodes
.
stopAll
()
is_test_framework
=
0
key_word
=
'tdCases.addLinux'
try
:
if
key_word
in
open
(
fileName
).
read
():
is_test_framework
=
1
except
:
pass
if
is_test_framework
:
moduleName
=
fileName
.
replace
(
".py"
,
""
).
replace
(
"/"
,
"."
)
uModule
=
importlib
.
import_module
(
moduleName
)
try
:
ucase
=
uModule
.
TDTestCase
()
tdDnodes
.
deploy
(
1
,
ucase
.
updatecfgDict
)
except
:
tdDnodes
.
deploy
(
1
,{})
else
:
tdDnodes
.
deploy
(
1
,{})
tdDnodes
.
start
(
1
)
tdLog
.
info
(
"Procedures for tdengine deployed in %s"
%
(
host
))
tdCases
.
logSql
(
logSql
)
if
testCluster
:
tdLog
.
info
(
"Procedures for testing cluster"
)
if
fileName
==
"all"
:
tdCases
.
runAllCluster
()
else
:
tdCases
.
runOneCluster
(
fileName
)
else
:
tdCases
.
runOneLinux
(
conn
,
fileName
)
if
restart
:
if
fileName
==
"all"
:
tdLog
.
info
(
"not need to query "
)
else
:
sp
=
fileName
.
rsplit
(
"."
,
1
)
if
len
(
sp
)
==
2
and
sp
[
1
]
==
"py"
:
tdDnodes
.
stopAll
()
tdDnodes
.
start
(
1
)
time
.
sleep
(
1
)
conn
=
taos
.
connect
(
host
,
config
=
tdDnodes
.
getSimCfgPath
())
tdLog
.
info
(
"Procedures for tdengine deployed in %s"
%
(
host
))
tdLog
.
info
(
"query test after taosd restart"
)
tdCases
.
runOneLinux
(
conn
,
sp
[
0
]
+
"_"
+
"restart.py"
)
tdLog
.
info
(
"Procedures for testing self-deployment"
)
conn
=
taos
.
connect
(
host
,
config
=
tdDnodes
.
getSimCfgPath
())
if
fileName
==
"all"
:
tdCases
.
runAllLinux
(
conn
)
else
:
tdLog
.
info
(
"not need to query"
)
tdCases
.
runOneLinux
(
conn
,
fileName
)
if
restart
:
if
fileName
==
"all"
:
tdLog
.
info
(
"not need to query "
)
else
:
sp
=
fileName
.
rsplit
(
"."
,
1
)
if
len
(
sp
)
==
2
and
sp
[
1
]
==
"py"
:
tdDnodes
.
stopAll
()
tdDnodes
.
start
(
1
)
time
.
sleep
(
1
)
conn
=
taos
.
connect
(
host
,
config
=
tdDnodes
.
getSimCfgPath
())
tdLog
.
info
(
"Procedures for tdengine deployed in %s"
%
(
host
))
tdLog
.
info
(
"query test after taosd restart"
)
tdCases
.
runOneLinux
(
conn
,
sp
[
0
]
+
"_"
+
"restart.py"
)
else
:
tdLog
.
info
(
"not need to query"
)
conn
.
close
()
tests/pytest/util/cases.py
浏览文件 @
42cc609a
...
...
@@ -34,7 +34,7 @@ class TDCases:
self
.
clusterCases
=
[]
def
__dynamicLoadModule
(
self
,
fileName
):
moduleName
=
fileName
.
replace
(
".py"
,
""
).
replace
(
"/"
,
"."
)
moduleName
=
fileName
.
replace
(
".py"
,
""
).
replace
(
os
.
sep
,
"."
)
return
importlib
.
import_module
(
moduleName
,
package
=
'..'
)
def
logSql
(
self
,
logSql
):
...
...
@@ -101,8 +101,12 @@ class TDCases:
for
tmp
in
self
.
windowsCases
:
if
tmp
.
name
.
find
(
fileName
)
!=
-
1
:
case
=
testModule
.
TDTestCase
()
case
.
init
(
conn
)
case
.
run
()
case
.
init
(
conn
,
self
.
_logSql
)
try
:
case
.
run
()
except
Exception
as
e
:
tdLog
.
notice
(
repr
(
e
))
tdLog
.
exit
(
"%s failed"
%
(
fileName
))
case
.
stop
()
runNum
+=
1
continue
...
...
tests/pytest/util/dnodes.py
浏览文件 @
42cc609a
...
...
@@ -67,17 +67,19 @@ class TDSimClient:
if
os
.
system
(
cmd
)
!=
0
:
tdLog
.
exit
(
cmd
)
cmd
=
"mkdir -p "
+
self
.
logDir
if
os
.
system
(
cmd
)
!=
0
:
tdLog
.
exit
(
cmd
)
# cmd = "mkdir -p " + self.logDir
# if os.system(cmd) != 0:
# tdLog.exit(cmd)
os
.
makedirs
(
self
.
logDir
)
cmd
=
"rm -rf "
+
self
.
cfgDir
if
os
.
system
(
cmd
)
!=
0
:
tdLog
.
exit
(
cmd
)
cmd
=
"mkdir -p "
+
self
.
cfgDir
if
os
.
system
(
cmd
)
!=
0
:
tdLog
.
exit
(
cmd
)
# cmd = "mkdir -p " + self.cfgDir
# if os.system(cmd) != 0:
# tdLog.exit(cmd)
os
.
makedirs
(
self
.
cfgDir
)
cmd
=
"touch "
+
self
.
cfgPath
if
os
.
system
(
cmd
)
!=
0
:
...
...
@@ -179,17 +181,20 @@ class TDDnode:
if
os
.
system
(
cmd
)
!=
0
:
tdLog
.
exit
(
cmd
)
cmd
=
"mkdir -p "
+
self
.
dataDir
if
os
.
system
(
cmd
)
!=
0
:
tdLog
.
exit
(
cmd
)
# cmd = "mkdir -p " + self.dataDir
# if os.system(cmd) != 0:
# tdLog.exit(cmd)
os
.
makedirs
(
self
.
dataDir
)
cmd
=
"mkdir -p "
+
self
.
logDir
if
os
.
system
(
cmd
)
!=
0
:
tdLog
.
exit
(
cmd
)
# cmd = "mkdir -p " + self.logDir
# if os.system(cmd) != 0:
# tdLog.exit(cmd)
os
.
makedirs
(
self
.
logDir
)
cmd
=
"mkdir -p "
+
self
.
cfgDir
if
os
.
system
(
cmd
)
!=
0
:
tdLog
.
exit
(
cmd
)
# cmd = "mkdir -p " + self.cfgDir
# if os.system(cmd) != 0:
# tdLog.exit(cmd)
os
.
makedirs
(
self
.
cfgDir
)
cmd
=
"touch "
+
self
.
cfgPath
if
os
.
system
(
cmd
)
!=
0
:
...
...
@@ -247,6 +252,8 @@ class TDDnode:
if
(
"packaging"
not
in
rootRealPath
):
paths
.
append
(
os
.
path
.
join
(
root
,
tool
))
break
if
(
len
(
paths
)
==
0
):
return
""
return
paths
[
0
]
def
start
(
self
):
...
...
@@ -309,6 +316,69 @@ class TDDnode:
time
.
sleep
(
10
)
# time.sleep(5)
def
startWin
(
self
):
binPath
=
self
.
getPath
(
"taosd.exe"
)
if
(
binPath
==
""
):
tdLog
.
exit
(
"taosd.exe not found!"
)
else
:
tdLog
.
info
(
"taosd.exe found: %s"
%
binPath
)
taosadapterBinPath
=
self
.
getPath
(
"taosadapter.exe"
)
if
(
taosadapterBinPath
==
""
):
tdLog
.
info
(
"taosAdapter.exe not found!"
)
else
:
tdLog
.
info
(
"taosAdapter.exe found in %s"
%
taosadapterBuildPath
)
if
self
.
deployed
==
0
:
tdLog
.
exit
(
"dnode:%d is not deployed"
%
(
self
.
index
))
cmd
=
"mintty -h never %s -c %s"
%
(
binPath
,
self
.
cfgDir
)
if
(
taosadapterBinPath
!=
""
):
taosadapterCmd
=
"mintty -h never -w hide %s --monitor.writeToTD=false "
%
(
taosadapterBinPath
)
if
os
.
system
(
taosadapterCmd
)
!=
0
:
tdLog
.
exit
(
taosadapterCmd
)
if
os
.
system
(
cmd
)
!=
0
:
tdLog
.
exit
(
cmd
)
self
.
running
=
1
tdLog
.
debug
(
"dnode:%d is running with %s "
%
(
self
.
index
,
cmd
))
if
self
.
valgrind
==
0
:
time
.
sleep
(
0.1
)
key
=
'from offline to online'
bkey
=
bytes
(
key
,
encoding
=
"utf8"
)
logFile
=
self
.
logDir
+
"/taosdlog.0"
i
=
0
while
not
os
.
path
.
exists
(
logFile
):
sleep
(
0.1
)
i
+=
1
if
i
>
50
:
break
popen
=
subprocess
.
Popen
(
'tail -n +0 -f '
+
logFile
,
stdout
=
subprocess
.
PIPE
,
stderr
=
subprocess
.
PIPE
,
shell
=
True
)
pid
=
popen
.
pid
# print('Popen.pid:' + str(pid))
timeout
=
time
.
time
()
+
60
*
2
while
True
:
line
=
popen
.
stdout
.
readline
().
strip
()
if
bkey
in
line
:
popen
.
kill
()
break
if
time
.
time
()
>
timeout
:
tdLog
.
exit
(
'wait too long for taosd start'
)
tdLog
.
debug
(
"the dnode:%d has been started."
%
(
self
.
index
))
else
:
tdLog
.
debug
(
"wait 10 seconds for the dnode:%d to start."
%
(
self
.
index
))
time
.
sleep
(
10
)
def
startWithoutSleep
(
self
):
binPath
=
self
.
getPath
()
...
...
@@ -475,7 +545,6 @@ class TDDnodes:
for
i
in
range
(
len
(
self
.
dnodes
)):
self
.
dnodes
[
i
].
init
(
self
.
path
)
self
.
sim
=
TDSimClient
(
self
.
path
)
def
setTestCluster
(
self
,
value
):
...
...
@@ -504,6 +573,10 @@ class TDDnodes:
self
.
check
(
index
)
self
.
dnodes
[
index
-
1
].
start
()
def
startWin
(
self
,
index
):
self
.
check
(
index
)
self
.
dnodes
[
index
-
1
].
startWin
()
def
startWithoutSleep
(
self
,
index
):
self
.
check
(
index
)
self
.
dnodes
[
index
-
1
].
startWithoutSleep
()
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录