Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
d75e835a
TDengine
项目概览
taosdata
/
TDengine
大约 1 年 前同步成功
通知
1184
Star
22015
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,发现更多精彩内容 >>
提交
d75e835a
编写于
7月 10, 2020
作者:
S
Shengliang Guan
浏览文件
操作
浏览文件
下载
差异文件
Merge from develop into feature/vnode
上级
e7eccba5
0d7579b9
变更
48
展开全部
隐藏空白更改
内联
并排
Showing
48 changed file
with
2903 addition
and
1416 deletion
+2903
-1416
.travis.yml
.travis.yml
+10
-6
src/client/inc/tscUtil.h
src/client/inc/tscUtil.h
+10
-0
src/client/src/tscAsync.c
src/client/src/tscAsync.c
+7
-1
src/client/src/tscFunctionImpl.c
src/client/src/tscFunctionImpl.c
+2
-3
src/client/src/tscParseInsert.c
src/client/src/tscParseInsert.c
+5
-5
src/client/src/tscUtil.c
src/client/src/tscUtil.c
+2
-12
src/common/src/tglobal.c
src/common/src/tglobal.c
+1
-1
src/connector/jdbc/buildTDengine.sh
src/connector/jdbc/buildTDengine.sh
+0
-44
src/connector/jdbc/src/main/java/com/taosdata/jdbc/utils/TDNode.java
...or/jdbc/src/main/java/com/taosdata/jdbc/utils/TDNode.java
+236
-0
src/connector/jdbc/src/main/java/com/taosdata/jdbc/utils/TDNodes.java
...r/jdbc/src/main/java/com/taosdata/jdbc/utils/TDNodes.java
+94
-0
src/connector/jdbc/src/test/java/com/taosdata/jdbc/BaseTest.java
...nector/jdbc/src/test/java/com/taosdata/jdbc/BaseTest.java
+21
-10
src/dnode/inc/dnodeMgmt.h
src/dnode/inc/dnodeMgmt.h
+2
-0
src/dnode/src/dnodeMain.c
src/dnode/src/dnodeMain.c
+1
-0
src/dnode/src/dnodeMgmt.c
src/dnode/src/dnodeMgmt.c
+11
-4
src/dnode/src/dnodeSystem.c
src/dnode/src/dnodeSystem.c
+13
-0
src/mnode/src/mnodeMain.c
src/mnode/src/mnodeMain.c
+1
-1
src/mnode/src/mnodeSdb.c
src/mnode/src/mnodeSdb.c
+13
-8
src/mnode/src/mnodeShow.c
src/mnode/src/mnodeShow.c
+3
-2
src/mnode/src/mnodeVgroup.c
src/mnode/src/mnodeVgroup.c
+6
-5
src/plugins/http/inc/httpInt.h
src/plugins/http/inc/httpInt.h
+1
-1
src/plugins/http/src/httpContext.c
src/plugins/http/src/httpContext.c
+17
-16
src/plugins/http/src/httpHandle.c
src/plugins/http/src/httpHandle.c
+3
-3
src/plugins/http/src/httpServer.c
src/plugins/http/src/httpServer.c
+4
-4
src/query/inc/qExecutor.h
src/query/inc/qExecutor.h
+1
-0
src/query/inc/qUtil.h
src/query/inc/qUtil.h
+3
-1
src/query/inc/tsqlfunction.h
src/query/inc/tsqlfunction.h
+1
-1
src/query/src/qExecutor.c
src/query/src/qExecutor.c
+124
-91
src/query/src/qUtil.c
src/query/src/qUtil.c
+16
-13
src/rpc/src/rpcMain.c
src/rpc/src/rpcMain.c
+2
-1
src/util/inc/tfile.h
src/util/inc/tfile.h
+1
-0
src/util/src/tfile.c
src/util/src/tfile.c
+24
-13
src/wal/src/walMain.c
src/wal/src/walMain.c
+4
-3
tests/pytest/crash_gen.py
tests/pytest/crash_gen.py
+1056
-681
tests/pytest/crash_gen.sh
tests/pytest/crash_gen.sh
+12
-1
tests/pytest/fulltest.sh
tests/pytest/fulltest.sh
+1
-1
tests/pytest/import_merge/importCSV.py
tests/pytest/import_merge/importCSV.py
+94
-0
tests/pytest/regressiontest.sh
tests/pytest/regressiontest.sh
+1
-1
tests/pytest/testCompress.py
tests/pytest/testCompress.py
+136
-0
tests/pytest/testNoCompress.py
tests/pytest/testNoCompress.py
+137
-0
tests/pytest/util/dnodes-random-fail.py
tests/pytest/util/dnodes-random-fail.py
+500
-0
tests/pytest/util/dnodes.py
tests/pytest/util/dnodes.py
+41
-21
tests/pytest/util/sql.py
tests/pytest/util/sql.py
+6
-3
tests/script/general/parser/fill_us.sim
tests/script/general/parser/fill_us.sim
+3
-3
tests/script/general/parser/testSuite.sim
tests/script/general/parser/testSuite.sim
+37
-33
tests/script/jenkins/basic.txt
tests/script/jenkins/basic.txt
+0
-3
tests/script/sh/exec-random-fail.sh
tests/script/sh/exec-random-fail.sh
+113
-0
tests/script/unique/cluster/client1_0.sim
tests/script/unique/cluster/client1_0.sim
+23
-4
tests/script/unique/cluster/cluster_main.sim
tests/script/unique/cluster/cluster_main.sim
+104
-416
未找到文件。
.travis.yml
浏览文件 @
d75e835a
...
...
@@ -13,7 +13,7 @@ branches:
matrix
:
-
os
:
linux
dist
:
bionic
dist
:
focal
language
:
c
git
:
...
...
@@ -28,8 +28,6 @@ matrix:
-
build-essential
-
cmake
-
net-tools
-
python-pip
-
python-setuptools
-
python3-pip
-
python3-setuptools
-
valgrind
...
...
@@ -54,13 +52,19 @@ matrix:
cd ${TRAVIS_BUILD_DIR}/debug
make install > /dev/null || travis_terminate $?
pip install numpy
pip install --user ${TRAVIS_BUILD_DIR}/src/connector/python/linux/python2/
pip3 install numpy
pip3 install --user ${TRAVIS_BUILD_DIR}/src/connector/python/linux/python3/
cd ${TRAVIS_BUILD_DIR}/tests
./test-all.sh smoke || travis_terminate $?
sleep 1
cd ${TRAVIS_BUILD_DIR}/tests/pytest
pkill -TERM -x taosd
fuser -k -n tcp 6030
sleep 1
./crash_gen.sh -a -p -t 4 -s 25|| travis_terminate $?
sleep 1
cd ${TRAVIS_BUILD_DIR}/tests/pytest
./valgrind-test.sh 2>&1 > mem-error-out.log
...
...
@@ -160,7 +164,7 @@ matrix:
script
:
-
cmake .. > /dev/null
-
make
> /dev/null
-
make
-
os
:
linux
dist
:
bionic
...
...
src/client/inc/tscUtil.h
浏览文件 @
d75e835a
...
...
@@ -87,6 +87,16 @@ typedef struct SVgroupTableInfo {
SArray
*
itemList
;
//SArray<STableIdInfo>
}
SVgroupTableInfo
;
static
FORCE_INLINE
SQueryInfo
*
tscGetQueryInfoDetail
(
SSqlCmd
*
pCmd
,
int32_t
subClauseIndex
)
{
assert
(
pCmd
!=
NULL
&&
subClauseIndex
>=
0
&&
subClauseIndex
<
TSDB_MAX_UNION_CLAUSE
);
if
(
pCmd
->
pQueryInfo
==
NULL
||
subClauseIndex
>=
pCmd
->
numOfClause
)
{
return
NULL
;
}
return
pCmd
->
pQueryInfo
[
subClauseIndex
];
}
int32_t
tscCreateDataBlock
(
size_t
initialSize
,
int32_t
rowSize
,
int32_t
startOffset
,
const
char
*
name
,
STableMeta
*
pTableMeta
,
STableDataBlocks
**
dataBlocks
);
void
tscDestroyDataBlock
(
STableDataBlocks
*
pDataBlock
);
...
...
src/client/src/tscAsync.c
浏览文件 @
d75e835a
...
...
@@ -477,7 +477,13 @@ void tscTableMetaCallBack(void *param, TAOS_RES *res, int code) {
tscDebug
(
"%p redo parse sql string to build submit block"
,
pSql
);
pCmd
->
parseFinished
=
false
;
if
((
code
=
tsParseSql
(
pSql
,
true
))
==
TSDB_CODE_SUCCESS
)
{
code
=
tsParseSql
(
pSql
,
true
);
if
(
code
==
TSDB_CODE_TSC_ACTION_IN_PROGRESS
)
{
return
;
}
if
(
code
==
TSDB_CODE_SUCCESS
)
{
/*
* Discard previous built submit blocks, and then parse the sql string again and build up all submit blocks,
* and send the required submit block according to index value in supporter to server.
...
...
src/client/src/tscFunctionImpl.c
浏览文件 @
d75e835a
...
...
@@ -340,13 +340,12 @@ bool stableQueryFunctChanged(int32_t funcId) {
*/
void
resetResultInfo
(
SResultInfo
*
pResInfo
)
{
pResInfo
->
initialized
=
false
;
}
void
setResultInfoBuf
(
SResultInfo
*
pResInfo
,
int32_t
size
,
bool
superTable
)
{
void
setResultInfoBuf
(
SResultInfo
*
pResInfo
,
int32_t
size
,
bool
superTable
,
char
*
buf
)
{
assert
(
pResInfo
->
interResultBuf
==
NULL
);
pResInfo
->
bufLen
=
size
;
pResInfo
->
superTableQ
=
superTable
;
pResInfo
->
interResultBuf
=
calloc
(
1
,
(
size_t
)
size
);
pResInfo
->
interResultBuf
=
buf
;
}
// set the query flag to denote that query is completed
...
...
src/client/src/tscParseInsert.c
浏览文件 @
d75e835a
...
...
@@ -1310,6 +1310,11 @@ int tsParseSql(SSqlObj *pSql, bool initial) {
tscDebug
(
"%p resume to parse sql: %s"
,
pSql
,
pCmd
->
curSql
);
}
ret
=
tscAllocPayload
(
&
pSql
->
cmd
,
TSDB_DEFAULT_PAYLOAD_SIZE
);
if
(
TSDB_CODE_SUCCESS
!=
ret
)
{
return
ret
;
}
if
(
tscIsInsertData
(
pSql
->
sqlstr
))
{
/*
* Set the fp before parse the sql string, in case of getTableMeta failed, in which
...
...
@@ -1326,11 +1331,6 @@ int tsParseSql(SSqlObj *pSql, bool initial) {
ret
=
tsParseInsertSql
(
pSql
);
}
else
{
ret
=
tscAllocPayload
(
&
pSql
->
cmd
,
TSDB_DEFAULT_PAYLOAD_SIZE
);
if
(
TSDB_CODE_SUCCESS
!=
ret
)
{
return
ret
;
}
SSqlInfo
SQLInfo
=
qSQLParse
(
pSql
->
sqlstr
);
ret
=
tscToSQLCmd
(
pSql
,
&
SQLInfo
);
SQLInfoDestroy
(
&
SQLInfo
);
...
...
src/client/src/tscUtil.c
浏览文件 @
d75e835a
...
...
@@ -1464,16 +1464,6 @@ STableMetaInfo* tscGetMetaInfo(SQueryInfo* pQueryInfo, int32_t tableIndex) {
return
pQueryInfo
->
pTableMetaInfo
[
tableIndex
];
}
SQueryInfo
*
tscGetQueryInfoDetail
(
SSqlCmd
*
pCmd
,
int32_t
subClauseIndex
)
{
assert
(
pCmd
!=
NULL
&&
subClauseIndex
>=
0
&&
subClauseIndex
<
TSDB_MAX_UNION_CLAUSE
);
if
(
pCmd
->
pQueryInfo
==
NULL
||
subClauseIndex
>=
pCmd
->
numOfClause
)
{
return
NULL
;
}
return
pCmd
->
pQueryInfo
[
subClauseIndex
];
}
int32_t
tscGetQueryInfoDetailSafely
(
SSqlCmd
*
pCmd
,
int32_t
subClauseIndex
,
SQueryInfo
**
pQueryInfo
)
{
int32_t
ret
=
TSDB_CODE_SUCCESS
;
...
...
@@ -2097,7 +2087,7 @@ void tscTryQueryNextClause(SSqlObj* pSql, void (*queryFp)()) {
}
void
tscGetResultColumnChr
(
SSqlRes
*
pRes
,
SFieldInfo
*
pFieldInfo
,
int32_t
columnIndex
)
{
SFieldSupInfo
*
pInfo
=
taosArrayGet
(
pFieldInfo
->
pSupportInfo
,
columnIndex
);
//tscFieldInfoGetSupp(pFieldInfo, columnIndex);
SFieldSupInfo
*
pInfo
=
taosArrayGet
(
pFieldInfo
->
pSupportInfo
,
columnIndex
);
assert
(
pInfo
->
pSqlExpr
!=
NULL
);
int32_t
type
=
pInfo
->
pSqlExpr
->
resType
;
...
...
@@ -2112,7 +2102,7 @@ void tscGetResultColumnChr(SSqlRes* pRes, SFieldInfo* pFieldInfo, int32_t column
if
(
isNull
(
pData
,
type
))
{
pRes
->
tsrow
[
columnIndex
]
=
NULL
;
}
else
{
pRes
->
tsrow
[
columnIndex
]
=
pData
+
VARSTR_HEADER_SIZE
;
pRes
->
tsrow
[
columnIndex
]
=
((
tstr
*
)
pData
)
->
data
;
}
if
(
realLen
<
pInfo
->
pSqlExpr
->
resBytes
-
VARSTR_HEADER_SIZE
)
{
// todo refactor
...
...
src/common/src/tglobal.c
浏览文件 @
d75e835a
...
...
@@ -124,7 +124,7 @@ int32_t tsMnodeEqualVnodeNum = 4;
int32_t
tsEnableHttpModule
=
1
;
int32_t
tsRestRowLimit
=
10240
;
uint16_t
tsHttpPort
=
6020
;
// only tcp, range tcp[6020]
int32_t
tsHttpCacheSessions
=
100
;
int32_t
tsHttpCacheSessions
=
100
0
;
int32_t
tsHttpSessionExpire
=
36000
;
int32_t
tsHttpMaxThreads
=
2
;
int32_t
tsHttpEnableCompress
=
0
;
...
...
src/connector/jdbc/buildTDengine.sh
已删除
100755 → 0
浏览文件 @
e7eccba5
#!/bin/bash
ulimit
-c
unlimited
function
buildTDengine
{
cd
/root/TDengine
git remote update
REMOTE_COMMIT
=
`
git rev-parse
--short
remotes/origin/develop
`
LOCAL_COMMIT
=
`
git rev-parse
--short
@
`
echo
" LOCAL:
$LOCAL_COMMIT
"
echo
"REMOTE:
$REMOTE_COMMIT
"
if
[
"
$LOCAL_COMMIT
"
==
"
$REMOTE_COMMIT
"
]
;
then
echo
"repo up-to-date"
else
echo
"repo need to pull"
git pull
LOCAL_COMMIT
=
`
git rev-parse
--short
@
`
cd
/root/TDengine/debug
rm
-rf
/root/TDengine/debug/
*
cmake ..
make
>
/dev/null
make
install
fi
}
function
restartTaosd
{
systemctl stop taosd
pkill
-KILL
-x
taosd
sleep
10
logDir
=
`
grep
'logDir'
/etc/taos/taos.cfg|awk
'END{print $2}'
`
dataDir
=
`
grep
'dataDir'
/etc/taos/taos.cfg|awk
'{print $2}'
`
rm
-rf
$logDir
/
*
rm
-rf
$dataDir
/
*
taosd 2>&1
>
/dev/null &
sleep
10
}
buildTDengine
restartTaosd
src/connector/jdbc/src/main/java/com/taosdata/jdbc/utils/TDNode.java
0 → 100644
浏览文件 @
d75e835a
package
com.taosdata.jdbc.utils
;
import
java.io.File
;
import
java.util.*
;
import
java.util.concurrent.TimeUnit
;
public
class
TDNode
{
private
int
index
;
private
int
running
;
private
int
deployed
;
private
boolean
testCluster
;
private
String
path
;
private
String
cfgDir
;
private
String
dataDir
;
private
String
logDir
;
private
String
cfgPath
;
public
TDNode
(
int
index
)
{
this
.
index
=
index
;
running
=
0
;
deployed
=
0
;
testCluster
=
false
;
}
public
void
setPath
(
String
path
)
{
this
.
path
=
path
;
}
public
void
setTestCluster
(
boolean
testCluster
)
{
this
.
testCluster
=
testCluster
;
}
public
void
searchTaosd
(
File
dir
,
ArrayList
<
String
>
taosdPath
)
{
File
[]
fileList
=
dir
.
listFiles
();
if
(
fileList
==
null
||
fileList
.
length
==
0
)
{
return
;
}
for
(
File
file
:
fileList
)
{
if
(
file
.
isFile
())
{
if
(
file
.
getName
().
equals
(
"taosd"
))
{
taosdPath
.
add
(
file
.
getAbsolutePath
());
}
}
else
{
searchTaosd
(
file
,
taosdPath
);
}
}
}
public
void
start
()
{
String
selfPath
=
System
.
getProperty
(
"user.dir"
);
String
binPath
=
""
;
String
projDir
=
selfPath
+
"/../../../../"
;
try
{
ArrayList
<
String
>
taosdPath
=
new
ArrayList
<>();
File
dir
=
new
File
(
projDir
);
String
realProjDir
=
dir
.
getCanonicalPath
();
dir
=
new
File
(
realProjDir
);
System
.
out
.
println
(
"project Dir: "
+
projDir
);
searchTaosd
(
dir
,
taosdPath
);
if
(
taosdPath
.
size
()
==
0
)
{
System
.
out
.
println
(
"The project path doens't exist"
);
return
;
}
else
{
for
(
String
p
:
taosdPath
)
{
if
(!
p
.
contains
(
"packing"
))
{
binPath
=
p
;
}
}
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
if
(
binPath
.
isEmpty
())
{
System
.
out
.
println
(
"taosd not found"
);
return
;
}
else
{
System
.
out
.
println
(
"taosd found in "
+
binPath
);
}
if
(
this
.
deployed
==
0
)
{
System
.
out
.
println
(
"dnode"
+
index
+
"is not deployed"
);
return
;
}
String
cmd
=
"nohup "
+
binPath
+
" -c "
+
cfgDir
+
" > /dev/null 2>&1 & "
;
System
.
out
.
println
(
"start taosd cmd: "
+
cmd
);
try
{
Runtime
.
getRuntime
().
exec
(
cmd
);
TimeUnit
.
SECONDS
.
sleep
(
5
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
this
.
running
=
1
;
}
public
void
stop
()
{
String
toBeKilled
=
"taosd"
;
if
(
this
.
running
!=
0
)
{
String
killCmd
=
"pkill -kill -x "
+
toBeKilled
;
String
[]
killCmds
=
{
"sh"
,
"-c"
,
killCmd
};
try
{
Runtime
.
getRuntime
().
exec
(
killCmds
).
waitFor
();
for
(
int
port
=
6030
;
port
<
6041
;
port
++)
{
String
fuserCmd
=
"fuser -k -n tcp "
+
port
;
Runtime
.
getRuntime
().
exec
(
fuserCmd
).
waitFor
();
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
this
.
running
=
0
;
System
.
out
.
println
(
"dnode:"
+
this
.
index
+
" is stopped by pkill"
);
}
}
public
void
startIP
()
{
try
{
String
cmd
=
"sudo ifconfig lo:"
+
index
+
"192.168.0."
+
index
+
" up"
;
Runtime
.
getRuntime
().
exec
(
cmd
).
waitFor
();
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
public
void
stopIP
()
{
try
{
String
cmd
=
"sudo ifconfig lo:"
+
index
+
"192.168.0."
+
index
+
" down"
;
Runtime
.
getRuntime
().
exec
(
cmd
).
waitFor
();
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
public
void
setCfgConfig
(
String
option
,
String
value
)
{
try
{
String
cmd
=
"echo "
+
option
+
" "
+
value
+
" >> "
+
this
.
cfgPath
;
String
[]
cmdLine
=
{
"sh"
,
"-c"
,
cmd
};
Process
ps
=
Runtime
.
getRuntime
().
exec
(
cmdLine
);
ps
.
waitFor
();
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
public
String
getDnodeRootDir
()
{
String
dnodeRootDir
=
this
.
path
+
"/sim/psim/dnode"
+
this
.
index
;
return
dnodeRootDir
;
}
public
String
getDnodesRootDir
()
{
String
dnodesRootDir
=
this
.
path
+
"/sim/psim"
+
this
.
index
;
return
dnodesRootDir
;
}
public
void
deploy
()
{
this
.
logDir
=
this
.
path
+
"/sim/dnode"
+
this
.
index
+
"/log"
;
this
.
dataDir
=
this
.
path
+
"/sim/dnode"
+
this
.
index
+
"/data"
;
this
.
cfgDir
=
this
.
path
+
"/sim/dnode"
+
this
.
index
+
"/cfg"
;
this
.
cfgPath
=
this
.
path
+
"/sim/dnode"
+
this
.
index
+
"/cfg/taos.cfg"
;
try
{
String
cmd
=
"rm -rf "
+
this
.
logDir
;
Runtime
.
getRuntime
().
exec
(
cmd
).
waitFor
();
cmd
=
"rm -rf "
+
this
.
cfgDir
;
Runtime
.
getRuntime
().
exec
(
cmd
).
waitFor
();
cmd
=
"rm -rf "
+
this
.
dataDir
;
Runtime
.
getRuntime
().
exec
(
cmd
).
waitFor
();
cmd
=
"mkdir -p "
+
this
.
logDir
;
Runtime
.
getRuntime
().
exec
(
cmd
).
waitFor
();
cmd
=
"mkdir -p "
+
this
.
cfgDir
;
Runtime
.
getRuntime
().
exec
(
cmd
).
waitFor
();
cmd
=
"mkdir -p "
+
this
.
dataDir
;
Runtime
.
getRuntime
().
exec
(
cmd
).
waitFor
();
cmd
=
"touch "
+
this
.
cfgPath
;
Runtime
.
getRuntime
().
exec
(
cmd
).
waitFor
();
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
if
(
this
.
testCluster
)
{
startIP
();
setCfgConfig
(
"masterIp"
,
"192.168.0.1"
);
setCfgConfig
(
"secondIp"
,
"192.168.0.2"
);
setCfgConfig
(
"publicIp"
,
"192.168.0."
+
this
.
index
);
setCfgConfig
(
"internalIp"
,
"192.168.0."
+
this
.
index
);
setCfgConfig
(
"privateIp"
,
"192.168.0."
+
this
.
index
);
}
setCfgConfig
(
"dataDir"
,
this
.
dataDir
);
setCfgConfig
(
"logDir"
,
this
.
logDir
);
setCfgConfig
(
"numOfLogLines"
,
"1000000/00"
);
setCfgConfig
(
"mnodeEqualVnodeNum"
,
"0"
);
setCfgConfig
(
"walLevel"
,
"1"
);
setCfgConfig
(
"statusInterval"
,
"1"
);
setCfgConfig
(
"numOfTotalVnodes"
,
"64"
);
setCfgConfig
(
"numOfMnodes"
,
"3"
);
setCfgConfig
(
"numOfThreadsPerCore"
,
"2.0"
);
setCfgConfig
(
"monitor"
,
"0"
);
setCfgConfig
(
"maxVnodeConnections"
,
"30000"
);
setCfgConfig
(
"maxMgmtConnections"
,
"30000"
);
setCfgConfig
(
"maxMeterConnections"
,
"30000"
);
setCfgConfig
(
"maxShellConns"
,
"30000"
);
setCfgConfig
(
"locale"
,
"en_US.UTF-8"
);
setCfgConfig
(
"charset"
,
"UTF-8"
);
setCfgConfig
(
"asyncLog"
,
"0"
);
setCfgConfig
(
"anyIp"
,
"0"
);
setCfgConfig
(
"dDebugFlag"
,
"135"
);
setCfgConfig
(
"mDebugFlag"
,
"135"
);
setCfgConfig
(
"sdbDebugFlag"
,
"135"
);
setCfgConfig
(
"rpcDebugFlag"
,
"135"
);
setCfgConfig
(
"tmrDebugFlag"
,
"131"
);
setCfgConfig
(
"cDebugFlag"
,
"135"
);
setCfgConfig
(
"httpDebugFlag"
,
"135"
);
setCfgConfig
(
"monitorDebugFlag"
,
"135"
);
setCfgConfig
(
"udebugFlag"
,
"135"
);
setCfgConfig
(
"jnidebugFlag"
,
"135"
);
setCfgConfig
(
"qdebugFlag"
,
"135"
);
this
.
deployed
=
1
;
}
}
\ No newline at end of file
src/connector/jdbc/src/main/java/com/taosdata/jdbc/utils/TDNodes.java
0 → 100644
浏览文件 @
d75e835a
package
com.taosdata.jdbc.utils
;
import
java.io.File
;
import
java.util.*
;
public
class
TDNodes
{
private
ArrayList
<
TDNode
>
tdNodes
;
private
boolean
testCluster
;
public
TDNodes
()
{
tdNodes
=
new
ArrayList
<>();
for
(
int
i
=
1
;
i
<
11
;
i
++)
{
tdNodes
.
add
(
new
TDNode
(
i
));
}
}
public
void
setPath
(
String
path
)
{
try
{
String
killCmd
=
"pkill -kill -x taosd"
;
String
[]
killCmds
=
{
"sh"
,
"-c"
,
killCmd
};
Runtime
.
getRuntime
().
exec
(
killCmds
).
waitFor
();
String
binPath
=
System
.
getProperty
(
"user.dir"
);
binPath
+=
"/../../../debug"
;
System
.
out
.
println
(
"binPath: "
+
binPath
);
File
file
=
new
File
(
path
);
binPath
=
file
.
getCanonicalPath
();
System
.
out
.
println
(
"binPath real path: "
+
binPath
);
if
(
path
.
isEmpty
()){
file
=
new
File
(
path
+
"/../../"
);
path
=
file
.
getCanonicalPath
();
}
for
(
int
i
=
0
;
i
<
tdNodes
.
size
();
i
++)
{
tdNodes
.
get
(
i
).
setPath
(
path
);
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
public
void
setTestCluster
(
boolean
testCluster
)
{
this
.
testCluster
=
testCluster
;
}
public
void
check
(
int
index
)
{
if
(
index
<
1
||
index
>
10
)
{
System
.
out
.
println
(
"index: "
+
index
+
" should on a scale of [1, 10]"
);
return
;
}
}
public
void
deploy
(
int
index
)
{
try
{
File
file
=
new
File
(
System
.
getProperty
(
"user.dir"
)
+
"/../../../"
);
String
projectRealPath
=
file
.
getCanonicalPath
();
check
(
index
);
tdNodes
.
get
(
index
-
1
).
setTestCluster
(
this
.
testCluster
);
tdNodes
.
get
(
index
-
1
).
setPath
(
projectRealPath
);
tdNodes
.
get
(
index
-
1
).
deploy
();
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
System
.
out
.
println
(
"deploy Test Exception"
);
}
}
public
void
cfg
(
int
index
,
String
option
,
String
value
)
{
check
(
index
);
tdNodes
.
get
(
index
-
1
).
setCfgConfig
(
option
,
value
);
}
public
void
start
(
int
index
)
{
check
(
index
);
tdNodes
.
get
(
index
-
1
).
start
();
}
public
void
stop
(
int
index
)
{
check
(
index
);
tdNodes
.
get
(
index
-
1
).
stop
();
}
public
void
startIP
(
int
index
)
{
check
(
index
);
tdNodes
.
get
(
index
-
1
).
startIP
();
}
public
void
stopIP
(
int
index
)
{
check
(
index
);
tdNodes
.
get
(
index
-
1
).
stopIP
();
}
}
\ No newline at end of file
src/connector/jdbc/src/test/java/com/taosdata/jdbc/BaseTest.java
浏览文件 @
d75e835a
package
com.taosdata.jdbc
;
import
java.io.
BufferedReader
;
import
java.io.InputStreamReader
;
import
java.io.
File
;
import
com.taosdata.jdbc.utils.TDNodes
;
import
org.junit.AfterClass
;
import
org.junit.BeforeClass
;
public
class
BaseTest
{
private
static
boolean
testCluster
=
false
;
private
static
String
deployPath
=
System
.
getProperty
(
"user.dir"
);
private
static
TDNodes
tdNodes
=
new
TDNodes
();
@BeforeClass
public
static
void
setupEnv
()
{
try
{
String
path
=
System
.
getProperty
(
"user.dir"
);
String
bashPath
=
path
+
"/buildTDengine.sh"
;
File
file
=
new
File
(
deployPath
+
"/../../../"
);
String
rootPath
=
file
.
getCanonicalPath
();
tdNodes
.
setPath
(
rootPath
);
tdNodes
.
setTestCluster
(
testCluster
);
Process
ps
=
Runtime
.
getRuntime
().
exec
(
bashPath
);
ps
.
waitFor
();
tdNodes
.
deploy
(
1
);
tdNodes
.
start
(
1
);
BufferedReader
br
=
new
BufferedReader
(
new
InputStreamReader
(
ps
.
getInputStream
()));
while
(
br
.
readLine
()
!=
null
)
{
System
.
out
.
println
(
br
.
readLine
());
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
System
.
out
.
println
(
"Base Test Exception"
);
}
}
@AfterClass
public
static
void
cleanUpEnv
()
{
tdNodes
.
stop
(
1
);
}
}
\ No newline at end of file
src/dnode/inc/dnodeMgmt.h
浏览文件 @
d75e835a
...
...
@@ -22,6 +22,8 @@ extern "C" {
int32_t
dnodeInitMgmt
();
void
dnodeCleanupMgmt
();
int32_t
dnodeInitMgmtTimer
();
void
dnodeCleanupMgmtTimer
();
void
dnodeDispatchToMgmtQueue
(
SRpcMsg
*
rpcMsg
);
void
*
dnodeGetVnode
(
int32_t
vgId
);
...
...
src/dnode/src/dnodeMain.c
浏览文件 @
d75e835a
...
...
@@ -57,6 +57,7 @@ static const SDnodeComponent tsDnodeComponents[] = {
{
"server"
,
dnodeInitServer
,
dnodeCleanupServer
},
{
"mgmt"
,
dnodeInitMgmt
,
dnodeCleanupMgmt
},
{
"modules"
,
dnodeInitModules
,
dnodeCleanupModules
},
{
"mgmt-tmr"
,
dnodeInitMgmtTimer
,
dnodeCleanupMgmtTimer
},
{
"shell"
,
dnodeInitShell
,
dnodeCleanupShell
}
};
...
...
src/dnode/src/dnodeMgmt.c
浏览文件 @
d75e835a
...
...
@@ -147,6 +147,12 @@ int32_t dnodeInitMgmt() {
return
-
1
;
}
dInfo
(
"dnode mgmt is initialized"
);
return
TSDB_CODE_SUCCESS
;
}
int32_t
dnodeInitMgmtTimer
()
{
tsDnodeTmr
=
taosTmrInit
(
100
,
200
,
60000
,
"DND-DM"
);
if
(
tsDnodeTmr
==
NULL
)
{
dError
(
"failed to init dnode timer"
);
...
...
@@ -155,13 +161,11 @@ int32_t dnodeInitMgmt() {
}
taosTmrReset
(
dnodeSendStatusMsg
,
500
,
NULL
,
tsDnodeTmr
,
&
tsStatusTimer
);
dInfo
(
"dnode mgmt is initialized"
);
dInfo
(
"dnode mgmt timer is initialized"
);
return
TSDB_CODE_SUCCESS
;
}
void
dnodeCleanupMgmt
()
{
void
dnodeCleanupMgmt
Timer
()
{
if
(
tsStatusTimer
!=
NULL
)
{
taosTmrStopA
(
&
tsStatusTimer
);
tsStatusTimer
=
NULL
;
...
...
@@ -171,7 +175,10 @@ void dnodeCleanupMgmt() {
taosTmrCleanUp
(
tsDnodeTmr
);
tsDnodeTmr
=
NULL
;
}
}
void
dnodeCleanupMgmt
()
{
dnodeCleanupMgmtTimer
();
dnodeCloseVnodes
();
if
(
tsMgmtQset
)
taosQsetThreadResume
(
tsMgmtQset
);
...
...
src/dnode/src/dnodeSystem.c
浏览文件 @
d75e835a
...
...
@@ -20,6 +20,7 @@
#include "tglobal.h"
#include "dnodeInt.h"
#include "dnodeMain.h"
#include "tfile.h"
static
void
signal_handler
(
int32_t
signum
,
siginfo_t
*
sigInfo
,
void
*
context
);
static
sem_t
exitSem
;
...
...
@@ -67,6 +68,18 @@ int32_t main(int32_t argc, char *argv[]) {
taosSetAllocMode
(
TAOS_ALLOC_MODE_DETECT_LEAK
,
NULL
,
true
);
}
}
#endif
#ifdef TAOS_RANDOM_FILE_FAIL
else
if
(
strcmp
(
argv
[
i
],
"--random-file-fail-factor"
)
==
0
)
{
if
(
(
i
+
1
)
<
argc
)
{
int
factor
=
atoi
(
argv
[
i
+
1
]);
printf
(
"The factor of random failure is %d
\n
"
,
factor
);
taosSetRandomFileFailFactor
(
factor
);
}
else
{
printf
(
"Please specify a number for random failure factor!"
);
exit
(
EXIT_FAILURE
);
}
}
#endif
}
...
...
src/mnode/src/mnodeMain.c
浏览文件 @
d75e835a
...
...
@@ -41,7 +41,7 @@ typedef struct {
void
(
*
cleanup
)();
}
SMnodeComponent
;
void
*
tsMnodeTmr
;
void
*
tsMnodeTmr
=
NULL
;
static
bool
tsMgmtIsRunning
=
false
;
static
const
SMnodeComponent
tsMnodeComponents
[]
=
{
...
...
src/mnode/src/mnodeSdb.c
浏览文件 @
d75e835a
...
...
@@ -471,8 +471,8 @@ static int32_t sdbInsertHash(SSdbTable *pTable, SSdbOper *pOper) {
atomic_add_fetch_32
(
&
pTable
->
autoIndex
,
1
);
}
sdbDebug
(
"table:%s, insert record:%s to hash, rowSize:%d numOfRows:%"
PRId64
"
ver:%"
PRIu64
"
, msg:%p"
,
pTable
->
tableName
,
sdbGetKeyStrFromObj
(
pTable
,
pOper
->
pObj
),
pOper
->
rowSize
,
pTable
->
numOfRows
,
sdbGetVersion
(),
pOper
->
pMsg
);
sdbDebug
(
"table:%s, insert record:%s to hash, rowSize:%d numOfRows:%"
PRId64
", msg:%p"
,
pTable
->
tableName
,
sdbGetKeyStrFromObj
(
pTable
,
pOper
->
pObj
),
pOper
->
rowSize
,
pTable
->
numOfRows
,
pOper
->
pMsg
);
(
*
pTable
->
insertFp
)(
pOper
);
return
TSDB_CODE_SUCCESS
;
...
...
@@ -490,8 +490,8 @@ static int32_t sdbDeleteHash(SSdbTable *pTable, SSdbOper *pOper) {
taosHashRemove
(
pTable
->
iHandle
,
key
,
keySize
);
atomic_sub_fetch_32
(
&
pTable
->
numOfRows
,
1
);
sdbDebug
(
"table:%s, delete record:%s from hash, numOfRows:%"
PRId64
"
ver:%"
PRIu64
"
, msg:%p"
,
pTable
->
tableName
,
sdbGetKeyStrFromObj
(
pTable
,
pOper
->
pObj
),
pTable
->
numOfRows
,
sdbGetVersion
(),
pOper
->
pMsg
);
sdbDebug
(
"table:%s, delete record:%s from hash, numOfRows:%"
PRId64
", msg:%p"
,
pTable
->
tableName
,
sdbGetKeyStrFromObj
(
pTable
,
pOper
->
pObj
),
pTable
->
numOfRows
,
pOper
->
pMsg
);
int8_t
*
updateEnd
=
pOper
->
pObj
+
pTable
->
refCountPos
-
1
;
*
updateEnd
=
1
;
...
...
@@ -501,8 +501,8 @@ static int32_t sdbDeleteHash(SSdbTable *pTable, SSdbOper *pOper) {
}
static
int32_t
sdbUpdateHash
(
SSdbTable
*
pTable
,
SSdbOper
*
pOper
)
{
sdbDebug
(
"table:%s, update record:%s in hash, numOfRows:%"
PRId64
"
ver:%"
PRIu64
"
, msg:%p"
,
pTable
->
tableName
,
sdbGetKeyStrFromObj
(
pTable
,
pOper
->
pObj
),
pTable
->
numOfRows
,
sdbGetVersion
(),
pOper
->
pMsg
);
sdbDebug
(
"table:%s, update record:%s in hash, numOfRows:%"
PRId64
", msg:%p"
,
pTable
->
tableName
,
sdbGetKeyStrFromObj
(
pTable
,
pOper
->
pObj
),
pTable
->
numOfRows
,
pOper
->
pMsg
);
(
*
pTable
->
updateFp
)(
pOper
);
return
TSDB_CODE_SUCCESS
;
...
...
@@ -967,7 +967,11 @@ static void *sdbWorkerFp(void *param) {
}
int32_t
code
=
sdbWrite
(
pOper
,
pHead
,
type
);
if
(
pOper
&&
code
<=
0
)
pOper
->
retCode
=
code
;
if
(
code
>
0
)
code
=
0
;
if
(
pOper
)
pOper
->
retCode
=
code
;
else
pHead
->
len
=
code
;
// hackway
}
walFsync
(
tsSdbObj
.
wal
);
...
...
@@ -982,7 +986,8 @@ static void *sdbWorkerFp(void *param) {
sdbDecRef
(
pOper
->
table
,
pOper
->
pObj
);
sdbConfirmForward
(
NULL
,
pOper
,
pOper
->
retCode
);
}
else
if
(
type
==
TAOS_QTYPE_FWD
)
{
syncConfirmForward
(
tsSdbObj
.
sync
,
pHead
->
version
,
TSDB_CODE_SUCCESS
);
pHead
=
(
SWalHead
*
)
item
;
syncConfirmForward
(
tsSdbObj
.
sync
,
pHead
->
version
,
pHead
->
len
);
taosFreeQitem
(
item
);
}
else
{
taosFreeQitem
(
item
);
...
...
src/mnode/src/mnodeShow.c
浏览文件 @
d75e835a
...
...
@@ -310,7 +310,8 @@ static int32_t mnodeProcessConnectMsg(SMnodeMsg *pMsg) {
if
(
pDb
->
status
!=
TSDB_DB_STATUS_READY
)
{
mError
(
"db:%s, status:%d, in dropping"
,
pDb
->
name
,
pDb
->
status
);
return
TSDB_CODE_MND_DB_IN_DROPPING
;
code
=
TSDB_CODE_MND_DB_IN_DROPPING
;
goto
connect_over
;
}
mnodeDecDbRef
(
pDb
);
}
...
...
@@ -355,7 +356,7 @@ static int32_t mnodeProcessUseMsg(SMnodeMsg *pMsg) {
int32_t
code
=
TSDB_CODE_SUCCESS
;
if
(
pMsg
->
pDb
==
NULL
)
pMsg
->
pDb
=
mnodeGetDb
(
pUseDbMsg
->
db
);
if
(
pMsg
->
pDb
==
NULL
)
{
code
=
TSDB_CODE_MND_INVALID_DB
;
return
TSDB_CODE_MND_INVALID_DB
;
}
if
(
pMsg
->
pDb
->
status
!=
TSDB_DB_STATUS_READY
)
{
...
...
src/mnode/src/mnodeVgroup.c
浏览文件 @
d75e835a
...
...
@@ -470,7 +470,6 @@ static int32_t mnodeCreateVgroupCb(SMnodeMsg *pMsg, int32_t code) {
pVgroup
->
vnodeGid
[
i
].
dnodeId
);
}
mnodeIncVgroupRef
(
pVgroup
);
pMsg
->
expected
=
pVgroup
->
numOfVnodes
;
mnodeSendCreateVgroupMsg
(
pVgroup
,
pMsg
);
...
...
@@ -492,6 +491,9 @@ int32_t mnodeCreateVgroup(SMnodeMsg *pMsg) {
return
TSDB_CODE_MND_NO_ENOUGH_DNODES
;
}
pMsg
->
pVgroup
=
pVgroup
;
mnodeIncVgroupRef
(
pVgroup
);
SSdbOper
oper
=
{
.
type
=
SDB_OPER_GLOBAL
,
.
table
=
tsVgroupSdb
,
...
...
@@ -501,8 +503,6 @@ int32_t mnodeCreateVgroup(SMnodeMsg *pMsg) {
.
cb
=
mnodeCreateVgroupCb
};
pMsg
->
pVgroup
=
pVgroup
;
int32_t
code
=
sdbInsertRow
(
&
oper
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
pMsg
->
pVgroup
=
NULL
;
...
...
@@ -925,19 +925,20 @@ static int32_t mnodeProcessVnodeCfgMsg(SMnodeMsg *pMsg) {
mDebug
(
"dnode:%s, vgId:%d, invalid dnode"
,
taosIpStr
(
pCfg
->
dnodeId
),
pCfg
->
vgId
);
return
TSDB_CODE_MND_VGROUP_NOT_EXIST
;
}
mnodeDecDnodeRef
(
pDnode
);
SVgObj
*
pVgroup
=
mnodeGetVgroup
(
pCfg
->
vgId
);
if
(
pVgroup
==
NULL
)
{
mDebug
(
"dnode:%s, vgId:%d, no vgroup info"
,
taosIpStr
(
pCfg
->
dnodeId
),
pCfg
->
vgId
);
mnodeDecDnodeRef
(
pDnode
);
return
TSDB_CODE_MND_VGROUP_NOT_EXIST
;
}
mnodeDecVgroupRef
(
pVgroup
);
mDebug
(
"vgId:%d, send create vnode msg to dnode %s for vnode cfg msg"
,
pVgroup
->
vgId
,
pDnode
->
dnodeEp
);
SRpcIpSet
ipSet
=
mnodeGetIpSetFromIp
(
pDnode
->
dnodeEp
);
mnodeSendCreateVnodeMsg
(
pVgroup
,
&
ipSet
,
NULL
);
mnodeDecDnodeRef
(
pDnode
);
mnodeDecVgroupRef
(
pVgroup
);
return
TSDB_CODE_SUCCESS
;
}
...
...
src/plugins/http/inc/httpInt.h
浏览文件 @
d75e835a
...
...
@@ -206,7 +206,7 @@ typedef struct HttpThread {
pthread_mutex_t
threadMutex
;
bool
stop
;
int
pollFd
;
int
numOf
Fd
s
;
int
numOf
Context
s
;
int
threadId
;
char
label
[
HTTP_LABEL_SIZE
];
bool
(
*
processData
)(
HttpContext
*
pContext
);
...
...
src/plugins/http/src/httpContext.c
浏览文件 @
d75e835a
...
...
@@ -44,7 +44,7 @@ static void httpDestroyContext(void *data) {
HttpThread
*
pThread
=
pContext
->
pThread
;
httpRemoveContextFromEpoll
(
pContext
);
httpReleaseSession
(
pContext
);
atomic_sub_fetch_32
(
&
pThread
->
numOf
Fd
s
,
1
);
atomic_sub_fetch_32
(
&
pThread
->
numOf
Context
s
,
1
);
pContext
->
pThread
=
0
;
pContext
->
state
=
HTTP_CONTEXT_STATE_CLOSED
;
...
...
@@ -171,38 +171,39 @@ bool httpInitContext(HttpContext *pContext) {
void
httpCloseContextByApp
(
HttpContext
*
pContext
)
{
pContext
->
parsed
=
false
;
bool
keepAlive
=
true
;
if
(
pContext
->
httpVersion
==
HTTP_VERSION_10
&&
pContext
->
httpKeepAlive
!=
HTTP_KEEPALIVE_ENABLE
)
{
keepAlive
=
false
;
}
else
if
(
pContext
->
httpVersion
!=
HTTP_VERSION_10
&&
pContext
->
httpKeepAlive
==
HTTP_KEEPALIVE_DISABLE
)
{
keepAlive
=
false
;
}
else
{}
}
else
{
}
if
(
keepAlive
)
{
if
(
httpAlterContextState
(
pContext
,
HTTP_CONTEXT_STATE_HANDLING
,
HTTP_CONTEXT_STATE_READY
))
{
httpDebug
(
"context:%p, fd:%d, ip:%s, last state:handling, keepAlive:true, reuse con
nect"
,
pContext
,
pContext
->
fd
,
pContext
->
ipstr
);
httpDebug
(
"context:%p, fd:%d, ip:%s, last state:handling, keepAlive:true, reuse con
text"
,
pContext
,
pContext
->
fd
,
pContext
->
ipstr
);
}
else
if
(
httpAlterContextState
(
pContext
,
HTTP_CONTEXT_STATE_DROPPING
,
HTTP_CONTEXT_STATE_CLOSED
))
{
httpRemoveContextFromEpoll
(
pContext
);
httpDebug
(
"context:%p, fd:%d, ip:%s, last state:dropping, keepAlive:true, close connect"
,
pContext
,
pContext
->
fd
,
pContext
->
ipstr
);
httpDebug
(
"context:%p, fd:%d, ip:%s, last state:dropping, keepAlive:true, close connect"
,
pContext
,
pContext
->
fd
,
pContext
->
ipstr
);
}
else
if
(
httpAlterContextState
(
pContext
,
HTTP_CONTEXT_STATE_READY
,
HTTP_CONTEXT_STATE_READY
))
{
httpDebug
(
"context:%p, fd:%d, ip:%s, last state:ready, keepAlive:true, reuse con
nect"
,
pContext
,
pContext
->
fd
,
pContext
->
ipstr
);
httpDebug
(
"context:%p, fd:%d, ip:%s, last state:ready, keepAlive:true, reuse con
text"
,
pContext
,
pContext
->
fd
,
pContext
->
ipstr
);
}
else
if
(
httpAlterContextState
(
pContext
,
HTTP_CONTEXT_STATE_CLOSED
,
HTTP_CONTEXT_STATE_CLOSED
))
{
httpRemoveContextFromEpoll
(
pContext
);
httpDebug
(
"context:%p, fd:%d, ip:%s, last state:ready, keepAlive:true, close connect"
,
pContext
,
pContext
->
fd
,
pContext
->
ipstr
);
httpDebug
(
"context:%p, fd:%d, ip:%s, last state:ready, keepAlive:true, close connect"
,
pContext
,
pContext
->
fd
,
pContext
->
ipstr
);
}
else
{
httpRemoveContextFromEpoll
(
pContext
);
httpError
(
"context:%p, fd:%d, ip:%s, last state:%s:%d, keepAlive:true, close connect"
,
pContext
,
pContext
->
fd
,
pContext
->
ipstr
,
httpContextStateStr
(
pContext
->
state
),
pContext
->
state
);
httpError
(
"context:%p, fd:%d, ip:%s, last state:%s:%d, keepAlive:true, close connect"
,
pContext
,
pContext
->
fd
,
pContext
->
ipstr
,
httpContextStateStr
(
pContext
->
state
),
pContext
->
state
);
}
}
else
{
httpRemoveContextFromEpoll
(
pContext
);
httpDebug
(
"context:%p, fd:%d, ip:%s, last state:%s:%d, keepAlive:false, close con
nect"
,
pContext
,
pContext
->
fd
,
pContext
->
ipstr
,
httpContextStateStr
(
pContext
->
state
),
pContext
->
state
);
httpDebug
(
"context:%p, fd:%d, ip:%s, last state:%s:%d, keepAlive:false, close con
text"
,
pContext
,
pContext
->
fd
,
pContext
->
ipstr
,
httpContextStateStr
(
pContext
->
state
),
pContext
->
state
);
}
httpReleaseContext
(
pContext
);
...
...
@@ -214,7 +215,7 @@ void httpCloseContextByServer(HttpContext *pContext) {
}
else
if
(
httpAlterContextState
(
pContext
,
HTTP_CONTEXT_STATE_DROPPING
,
HTTP_CONTEXT_STATE_DROPPING
))
{
httpDebug
(
"context:%p, fd:%d, ip:%s, epoll already finished, wait app finished"
,
pContext
,
pContext
->
fd
,
pContext
->
ipstr
);
}
else
if
(
httpAlterContextState
(
pContext
,
HTTP_CONTEXT_STATE_READY
,
HTTP_CONTEXT_STATE_CLOSED
))
{
httpDebug
(
"context:%p, fd:%d, ip:%s, epoll finished, close con
tex
t"
,
pContext
,
pContext
->
fd
,
pContext
->
ipstr
);
httpDebug
(
"context:%p, fd:%d, ip:%s, epoll finished, close con
nec
t"
,
pContext
,
pContext
->
fd
,
pContext
->
ipstr
);
}
else
if
(
httpAlterContextState
(
pContext
,
HTTP_CONTEXT_STATE_CLOSED
,
HTTP_CONTEXT_STATE_CLOSED
))
{
httpDebug
(
"context:%p, fd:%d, ip:%s, epoll finished, will be closed soon"
,
pContext
,
pContext
->
fd
,
pContext
->
ipstr
);
}
else
{
...
...
src/plugins/http/src/httpHandle.c
浏览文件 @
d75e835a
...
...
@@ -313,9 +313,9 @@ bool httpParseRequest(HttpContext* pContext) {
return
true
;
}
httpTraceL
(
"context:%p, fd:%d, ip:%s, thread:%s, numOf
Fds:%d, read size:%d, raw data:
\n
%s"
,
pContext
,
pContext
->
fd
,
pContext
->
ipstr
,
pContext
->
pThread
->
label
,
pContext
->
pThread
->
numOfFds
,
pContext
->
parser
.
bufsize
,
pContext
->
parser
.
buffer
);
httpTraceL
(
"context:%p, fd:%d, ip:%s, thread:%s, numOf
Contexts:%d, read size:%d, raw data:
\n
%s"
,
pContext
,
pContext
->
fd
,
pContext
->
ipstr
,
pContext
->
pThread
->
label
,
pContext
->
pThread
->
numOfContexts
,
pContext
->
parser
.
bufsize
,
pContext
->
parser
.
buffer
);
if
(
!
httpGetHttpMethod
(
pContext
))
{
return
false
;
...
...
src/plugins/http/src/httpServer.c
浏览文件 @
d75e835a
...
...
@@ -293,7 +293,7 @@ static void *httpAcceptHttpConnection(void *arg) {
totalFds
=
1
;
for
(
int
i
=
0
;
i
<
pServer
->
numOfThreads
;
++
i
)
{
totalFds
+=
pServer
->
pThreads
[
i
].
numOf
Fd
s
;
totalFds
+=
pServer
->
pThreads
[
i
].
numOf
Context
s
;
}
if
(
totalFds
>
tsHttpCacheSessions
*
100
)
{
...
...
@@ -332,9 +332,9 @@ static void *httpAcceptHttpConnection(void *arg) {
}
// notify the data process, add into the FdObj list
atomic_add_fetch_32
(
&
pThread
->
numOf
Fd
s
,
1
);
httpDebug
(
"context:%p, fd:%d, ip:%s, thread:%s numOf
Fds:%d totalFds:%d, accept a new connection"
,
pContext
,
connFd
,
pContext
->
ipstr
,
pThread
->
label
,
pThread
->
numOfFd
s
,
totalFds
);
atomic_add_fetch_32
(
&
pThread
->
numOf
Context
s
,
1
);
httpDebug
(
"context:%p, fd:%d, ip:%s, thread:%s numOf
Contexts:%d totalFds:%d, accept a new connection"
,
pContext
,
connFd
,
pContext
->
ipstr
,
pThread
->
label
,
pThread
->
numOfContext
s
,
totalFds
);
// pick up next thread for next connection
threadId
++
;
...
...
src/query/inc/qExecutor.h
浏览文件 @
d75e835a
...
...
@@ -172,6 +172,7 @@ typedef struct SQueryRuntimeEnv {
bool
topBotQuery
;
// false
bool
groupbyNormalCol
;
// denote if this is a groupby normal column query
bool
hasTagResults
;
// if there are tag values in final result or not
int32_t
interBufSize
;
// intermediate buffer sizse
int32_t
prevGroupId
;
// previous executed group id
SDiskbasedResultBuf
*
pResultBuf
;
// query result buffer based on blocked-wised disk file
}
SQueryRuntimeEnv
;
...
...
src/query/inc/qUtil.h
浏览文件 @
d75e835a
...
...
@@ -15,6 +15,8 @@
#ifndef TDENGINE_QUERYUTIL_H
#define TDENGINE_QUERYUTIL_H
int32_t
getOutputInterResultBufSize
(
SQuery
*
pQuery
);
void
clearTimeWindowResBuf
(
SQueryRuntimeEnv
*
pRuntimeEnv
,
SWindowResult
*
pOneOutputRes
);
void
copyTimeWindowResBuf
(
SQueryRuntimeEnv
*
pRuntimeEnv
,
SWindowResult
*
dst
,
const
SWindowResult
*
src
);
...
...
@@ -35,7 +37,7 @@ SWindowResult *getWindowResult(SWindowResInfo *pWindowResInfo, int32_t slot);
#define curTimeWindow(_winres) ((_winres)->curIndex)
bool
isWindowResClosed
(
SWindowResInfo
*
pWindowResInfo
,
int32_t
slot
);
void
createQueryResultInfo
(
SQuery
*
pQuery
,
SWindowResult
*
pResultRow
,
bool
isSTableQuery
,
SPosInfo
*
posInfo
);
void
createQueryResultInfo
(
SQuery
*
pQuery
,
SWindowResult
*
pResultRow
,
bool
isSTableQuery
,
SPosInfo
*
posInfo
,
size_t
interBufSize
);
char
*
getPosInResultPage
(
SQueryRuntimeEnv
*
pRuntimeEnv
,
int32_t
columnIndex
,
SWindowResult
*
pResult
);
...
...
src/query/inc/tsqlfunction.h
浏览文件 @
d75e835a
...
...
@@ -272,7 +272,7 @@ bool top_bot_datablock_filter(SQLFunctionCtx *pCtx, int32_t functionId, char *mi
bool
stableQueryFunctChanged
(
int32_t
funcId
);
void
resetResultInfo
(
SResultInfo
*
pResInfo
);
void
setResultInfoBuf
(
SResultInfo
*
pResInfo
,
int32_t
size
,
bool
superTable
);
void
setResultInfoBuf
(
SResultInfo
*
pResInfo
,
int32_t
size
,
bool
superTable
,
char
*
buf
);
static
FORCE_INLINE
void
initResultInfo
(
SResultInfo
*
pResInfo
)
{
pResInfo
->
initialized
=
true
;
// the this struct has been initialized flag
...
...
src/query/src/qExecutor.c
浏览文件 @
d75e835a
此差异已折叠。
点击以展开。
src/query/src/qUtil.c
浏览文件 @
d75e835a
...
...
@@ -17,15 +17,24 @@
#include "hash.h"
#include "taosmsg.h"
#include "qextbuffer.h"
#include "ttime.h"
#include "qfill.h"
#include "ttime.h"
#include "qExecutor.h"
#include "qUtil.h"
int32_t
getOutputInterResultBufSize
(
SQuery
*
pQuery
)
{
int32_t
size
=
0
;
for
(
int32_t
i
=
0
;
i
<
pQuery
->
numOfOutput
;
++
i
)
{
assert
(
pQuery
->
pSelectExpr
[
i
].
interBytes
<=
DEFAULT_INTERN_BUF_PAGE_SIZE
);
size
+=
pQuery
->
pSelectExpr
[
i
].
interBytes
;
}
assert
(
size
>
0
);
return
size
;
}
int32_t
initWindowResInfo
(
SWindowResInfo
*
pWindowResInfo
,
SQueryRuntimeEnv
*
pRuntimeEnv
,
int32_t
size
,
int32_t
threshold
,
int16_t
type
)
{
pWindowResInfo
->
capacity
=
size
;
...
...
@@ -43,7 +52,7 @@ int32_t initWindowResInfo(SWindowResInfo *pWindowResInfo, SQueryRuntimeEnv *pRun
pWindowResInfo
->
pResult
=
calloc
(
threshold
,
sizeof
(
SWindowResult
));
for
(
int32_t
i
=
0
;
i
<
pWindowResInfo
->
capacity
;
++
i
)
{
SPosInfo
posInfo
=
{
-
1
,
-
1
};
createQueryResultInfo
(
pRuntimeEnv
->
pQuery
,
&
pWindowResInfo
->
pResult
[
i
],
pRuntimeEnv
->
stableQuery
,
&
posInfo
);
createQueryResultInfo
(
pRuntimeEnv
->
pQuery
,
&
pWindowResInfo
->
pResult
[
i
],
pRuntimeEnv
->
stableQuery
,
&
posInfo
,
pRuntimeEnv
->
interBufSize
);
}
return
TSDB_CODE_SUCCESS
;
...
...
@@ -54,11 +63,7 @@ void destroyTimeWindowRes(SWindowResult *pWindowRes, int32_t nOutputCols) {
return
;
}
// TODO opt malloc strategy
for
(
int32_t
i
=
0
;
i
<
nOutputCols
;
++
i
)
{
free
(
pWindowRes
->
resultInfo
[
i
].
interResultBuf
);
}
free
(
pWindowRes
->
resultInfo
[
0
].
interResultBuf
);
free
(
pWindowRes
->
resultInfo
);
}
...
...
@@ -241,10 +246,9 @@ void clearTimeWindowResBuf(SQueryRuntimeEnv *pRuntimeEnv, SWindowResult *pWindow
}
pWindowRes
->
numOfRows
=
0
;
// pWindowRes->nAlloc = 0;
pWindowRes
->
pos
=
(
SPosInfo
){
-
1
,
-
1
};
pWindowRes
->
status
.
closed
=
false
;
pWindowRes
->
window
=
(
STimeWindow
){
0
,
0
}
;
pWindowRes
->
window
=
TSWINDOW_INITIALIZER
;
}
/**
...
...
@@ -254,7 +258,6 @@ void clearTimeWindowResBuf(SQueryRuntimeEnv *pRuntimeEnv, SWindowResult *pWindow
*/
void
copyTimeWindowResBuf
(
SQueryRuntimeEnv
*
pRuntimeEnv
,
SWindowResult
*
dst
,
const
SWindowResult
*
src
)
{
dst
->
numOfRows
=
src
->
numOfRows
;
// dst->nAlloc = src->nAlloc;
dst
->
window
=
src
->
window
;
dst
->
status
=
src
->
status
;
...
...
src/rpc/src/rpcMain.c
浏览文件 @
d75e835a
...
...
@@ -1366,6 +1366,7 @@ static int32_t rpcCompressRpcMsg(char* pCont, int32_t contLen) {
}
int32_t
compLen
=
LZ4_compress_default
(
pCont
,
buf
,
contLen
,
contLen
+
overhead
);
tDebug
(
"compress rpc msg, before:%d, after:%d, overhead:%d"
,
contLen
,
compLen
,
overhead
);
/*
* only the compressed size is less than the value of contLen - overhead, the compression is applied
...
...
@@ -1378,7 +1379,7 @@ static int32_t rpcCompressRpcMsg(char* pCont, int32_t contLen) {
memcpy
(
pCont
+
overhead
,
buf
,
compLen
);
pHead
->
comp
=
1
;
//
tDebug("compress rpc msg, before:%d, after:%d", contLen, compLen);
tDebug
(
"compress rpc msg, before:%d, after:%d"
,
contLen
,
compLen
);
finalLen
=
compLen
+
overhead
;
}
else
{
finalLen
=
contLen
;
...
...
src/util/inc/tfile.h
浏览文件 @
d75e835a
...
...
@@ -18,6 +18,7 @@
#ifdef TAOS_RANDOM_FILE_FAIL
void
taosSetRandomFileFailFactor
(
int
factor
);
ssize_t
taos_tread
(
int
fd
,
void
*
buf
,
size_t
count
);
ssize_t
taos_twrite
(
int
fd
,
void
*
buf
,
size_t
count
);
off_t
taos_lseek
(
int
fd
,
off_t
offset
,
int
whence
);
...
...
src/util/src/tfile.c
浏览文件 @
d75e835a
...
...
@@ -26,40 +26,51 @@
#include "os.h"
#define RANDOM_FILE_FAIL_FACTOR 5
#ifdef TAOS_RANDOM_FILE_FAIL
static
int
random_file_fail_factor
=
20
;
void
taosSetRandomFileFailFactor
(
int
factor
)
{
random_file_fail_factor
=
factor
;
}
#endif
ssize_t
taos_tread
(
int
fd
,
void
*
buf
,
size_t
count
)
{
#ifdef TAOS_RANDOM_FILE_FAIL
if
(
rand
()
%
RANDOM_FILE_FAIL_FACTOR
==
0
)
{
errno
=
EIO
;
return
-
1
;
if
(
random_file_fail_factor
>
0
)
{
if
(
rand
()
%
random_file_fail_factor
==
0
)
{
errno
=
EIO
;
return
-
1
;
}
}
#endif
return
tread
(
fd
,
buf
,
count
);
}
ssize_t
taos_twrite
(
int
fd
,
void
*
buf
,
size_t
count
)
{
#ifdef TAOS_RANDOM_FILE_FAIL
if
(
rand
()
%
RANDOM_FILE_FAIL_FACTOR
==
0
)
{
errno
=
EIO
;
return
-
1
;
if
(
random_file_fail_factor
>
0
)
{
if
(
rand
()
%
random_file_fail_factor
==
0
)
{
errno
=
EIO
;
return
-
1
;
}
}
#endif
return
twrite
(
fd
,
buf
,
count
);
}
off_t
taos_lseek
(
int
fd
,
off_t
offset
,
int
whence
)
{
#ifdef TAOS_RANDOM_FILE_FAIL
if
(
rand
()
%
RANDOM_FILE_FAIL_FACTOR
==
0
)
{
errno
=
EIO
;
return
-
1
;
if
(
random_file_fail_factor
>
0
)
{
if
(
rand
()
%
random_file_fail_factor
==
0
)
{
errno
=
EIO
;
return
-
1
;
}
}
#endif
return
lseek
(
fd
,
offset
,
whence
);
}
src/wal/src/walMain.c
浏览文件 @
d75e835a
...
...
@@ -28,6 +28,7 @@
#include "taoserror.h"
#include "twal.h"
#include "tqueue.h"
#include "tfile.h"
#define walPrefix "wal"
...
...
@@ -180,7 +181,7 @@ int walWrite(void *handle, SWalHead *pHead) {
taosCalcChecksumAppend
(
0
,
(
uint8_t
*
)
pHead
,
sizeof
(
SWalHead
));
int
contLen
=
pHead
->
len
+
sizeof
(
SWalHead
);
if
(
write
(
pWal
->
fd
,
pHead
,
contLen
)
!=
contLen
)
{
if
(
t
write
(
pWal
->
fd
,
pHead
,
contLen
)
!=
contLen
)
{
wError
(
"wal:%s, failed to write(%s)"
,
pWal
->
name
,
strerror
(
errno
));
terrno
=
TAOS_SYSTEM_ERROR
(
errno
);
}
else
{
...
...
@@ -325,7 +326,7 @@ static int walRestoreWalFile(SWal *pWal, void *pVnode, FWalWrite writeFp) {
wDebug
(
"wal:%s, start to restore"
,
name
);
while
(
1
)
{
int
ret
=
read
(
fd
,
pHead
,
sizeof
(
SWalHead
));
int
ret
=
t
read
(
fd
,
pHead
,
sizeof
(
SWalHead
));
if
(
ret
==
0
)
break
;
if
(
ret
!=
sizeof
(
SWalHead
))
{
...
...
@@ -340,7 +341,7 @@ static int walRestoreWalFile(SWal *pWal, void *pVnode, FWalWrite writeFp) {
break
;
}
ret
=
read
(
fd
,
pHead
->
cont
,
pHead
->
len
);
ret
=
t
read
(
fd
,
pHead
->
cont
,
pHead
->
len
);
if
(
ret
!=
pHead
->
len
)
{
wWarn
(
"wal:%s, failed to read body, skip, len:%d ret:%d"
,
name
,
pHead
->
len
,
ret
);
terrno
=
TAOS_SYSTEM_ERROR
(
errno
);
...
...
tests/pytest/crash_gen.py
浏览文件 @
d75e835a
此差异已折叠。
点击以展开。
tests/pytest/crash_gen.sh
浏览文件 @
d75e835a
...
...
@@ -31,11 +31,22 @@ then
exit
-1
fi
CURR_DIR
=
`
pwd
`
IN_TDINTERNAL
=
"community"
if
[[
"
$CURR_DIR
"
==
*
"
$IN_TDINTERNAL
"
*
]]
;
then
TAOS_DIR
=
$CURR_DIR
/../../..
else
TAOS_DIR
=
$CURR_DIR
/../..
fi
TAOSD_DIR
=
`
find
$TAOS_DIR
-name
"taosd"
|grep bin|head
-n1
`
LIB_DIR
=
`
echo
$TAOSD_DIR
|rev|cut
-d
'/'
-f
3,4,5,6|rev
`
/lib
# First we need to set up a path for Python to find our own TAOS modules, so that "import" can work.
export
PYTHONPATH
=
$(
pwd
)
/../../src/connector/python/linux/python3
# Then let us set up the library path so that our compiled SO file can be loaded by Python
export
LD_LIBRARY_PATH
=
$LD_LIBRARY_PATH
:
$
(
pwd
)
/../../build/build/lib
export
LD_LIBRARY_PATH
=
$LD_LIBRARY_PATH
:
$
LIB_DIR
# Now we are all let, and let's see if we can find a crash. Note we pass all params
python3 ./crash_gen.py
$@
tests/pytest/fulltest.sh
浏览文件 @
d75e835a
...
...
@@ -121,7 +121,7 @@ python3 ./test.py -f import_merge/importTORestart.py
python3 ./test.py
-f
import_merge/importTPORestart.py
python3 ./test.py
-f
import_merge/importTRestart.py
python3 ./test.py
-f
import_merge/importInsertThenImport.py
python3 ./test.py
-f
import_merge/importCSV.py
# user
python3 ./test.py
-f
user/user_create.py
python3 ./test.py
-f
user/pass_len.py
...
...
tests/pytest/import_merge/importCSV.py
0 → 100644
浏览文件 @
d75e835a
###################################################################
# Copyright (c) 2016 by TAOS Technologies, Inc.
# All rights reserved.
#
# This file is proprietary and confidential to TAOS Technologies.
# No part of this file may be reproduced, stored, transmitted,
# disclosed or used in any form or by any means other than as
# expressly provided by the written permission from Jianhui Tao
#
###################################################################
# -*- coding: utf-8 -*-
import
sys
import
os
import
csv
import
random
from
util.log
import
*
from
util.cases
import
*
from
util.sql
import
*
from
util.dnodes
import
*
class
TDTestCase
:
def
init
(
self
,
conn
,
logSql
):
tdLog
.
debug
(
"start to execute %s"
%
__file__
)
tdSql
.
init
(
conn
.
cursor
(),
logSql
)
self
.
csvfile
=
"/tmp/file.csv"
self
.
rows
=
10000
self
.
ntables
=
1
self
.
startTime
=
1520000010000
def
genRandomStr
(
self
,
maxLen
):
H
=
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
salt
=
''
if
maxLen
<=
1
:
maxLen
=
2
l
=
random
.
randint
(
1
,
maxLen
)
for
i
in
range
(
l
):
salt
+=
random
.
choice
(
H
)
return
salt
def
createCSVFile
(
self
):
f
=
open
(
self
.
csvfile
,
'w'
,
encoding
=
'utf-8'
)
csv_writer
=
csv
.
writer
(
f
,
quoting
=
csv
.
QUOTE_NONNUMERIC
)
for
i
in
range
(
self
.
rows
):
csv_writer
.
writerow
([
self
.
startTime
+
i
,
self
.
genRandomStr
(
5
),
self
.
genRandomStr
(
6
),
self
.
genRandomStr
(
7
),
self
.
genRandomStr
(
8
),
self
.
genRandomStr
(
9
),
self
.
genRandomStr
(
10
),
self
.
genRandomStr
(
11
),
self
.
genRandomStr
(
12
),
self
.
genRandomStr
(
13
),
self
.
genRandomStr
(
14
)])
f
.
close
()
def
destroyCSVFile
(
self
):
os
.
remove
(
self
.
csvfile
)
def
run
(
self
):
self
.
createCSVFile
()
tdDnodes
.
stop
(
1
)
tdDnodes
.
deploy
(
1
)
tdDnodes
.
start
(
1
)
tdSql
.
execute
(
'reset query cache'
)
tdSql
.
execute
(
'drop database if exists db'
)
tdSql
.
execute
(
'create database db'
)
tdSql
.
execute
(
'use db'
)
tdSql
.
execute
(
'''create table tbx (ts TIMESTAMP,
collect_area NCHAR(5),
device_id BINARY(6),
imsi BINARY(7),
imei BINARY(8),
mdn BINARY(9),
net_type BINARY(10),
mno NCHAR(11),
province NCHAR(12),
city NCHAR(13),
alarm BINARY(14))'''
)
tdSql
.
execute
(
"import into tbx file
\'
%s
\'
"
%
(
self
.
csvfile
))
tdSql
.
query
(
'select * from tbx'
)
tdSql
.
checkRows
(
self
.
rows
)
def
stop
(
self
):
self
.
destroyCSVFile
()
tdSql
.
close
()
tdLog
.
success
(
"%s successfully executed"
%
__file__
)
tdDnodes
.
stop
(
1
)
tdCases
.
addWindows
(
__file__
,
TDTestCase
())
tdCases
.
addLinux
(
__file__
,
TDTestCase
())
tests/pytest/regressiontest.sh
浏览文件 @
d75e835a
...
...
@@ -121,7 +121,7 @@ python3 ./test.py -f import_merge/importTORestart.py
python3 ./test.py
-f
import_merge/importTPORestart.py
python3 ./test.py
-f
import_merge/importTRestart.py
python3 ./test.py
-f
import_merge/importInsertThenImport.py
python3 ./test.py
-f
import_merge/importCSV.py
# user
python3 ./test.py
-f
user/user_create.py
python3 ./test.py
-f
user/pass_len.py
...
...
tests/pytest/testCompress.py
0 → 100644
浏览文件 @
d75e835a
此差异已折叠。
点击以展开。
tests/pytest/testNoCompress.py
0 → 100644
浏览文件 @
d75e835a
此差异已折叠。
点击以展开。
tests/pytest/util/dnodes-random-fail.py
0 → 100644
浏览文件 @
d75e835a
此差异已折叠。
点击以展开。
tests/pytest/util/dnodes.py
浏览文件 @
d75e835a
此差异已折叠。
点击以展开。
tests/pytest/util/sql.py
浏览文件 @
d75e835a
...
...
@@ -71,7 +71,8 @@ class TDSql:
except
Exception
as
e
:
caller
=
inspect
.
getframeinfo
(
inspect
.
stack
()[
1
][
0
])
args
=
(
caller
.
filename
,
caller
.
lineno
,
sql
,
repr
(
e
))
tdLog
.
exit
(
"%s(%d) failed: sql:%s, %s"
%
args
)
tdLog
.
notice
(
"%s(%d) failed: sql:%s, %s"
%
args
)
raise
Exception
(
repr
(
e
))
return
self
.
queryRows
def
waitedQuery
(
self
,
sql
,
expectRows
,
timeout
):
...
...
@@ -89,7 +90,8 @@ class TDSql:
except
Exception
as
e
:
caller
=
inspect
.
getframeinfo
(
inspect
.
stack
()[
1
][
0
])
args
=
(
caller
.
filename
,
caller
.
lineno
,
sql
,
repr
(
e
))
tdLog
.
exit
(
"%s(%d) failed: sql:%s, %s"
%
args
)
tdLog
.
notice
(
"%s(%d) failed: sql:%s, %s"
%
args
)
raise
Exception
(
repr
(
e
))
return
(
self
.
queryRows
,
timeout
)
def
checkRows
(
self
,
expectRows
):
...
...
@@ -158,7 +160,8 @@ class TDSql:
except
Exception
as
e
:
caller
=
inspect
.
getframeinfo
(
inspect
.
stack
()[
1
][
0
])
args
=
(
caller
.
filename
,
caller
.
lineno
,
sql
,
repr
(
e
))
tdLog
.
exit
(
"%s(%d) failed: sql:%s, %s"
%
args
)
tdLog
.
notice
(
"%s(%d) failed: sql:%s, %s"
%
args
)
raise
Exception
(
repr
(
e
))
return
self
.
affectedRows
def
checkAffectedRows
(
self
,
expectAffectedRows
):
...
...
tests/script/general/parser/fill_us.sim
浏览文件 @
d75e835a
system sh/stop_dnodes.sh
system sh/ip.sh -i 1 -s up
system sh/deploy.sh -n dnode1 -
m 192.168.0.1 -i 192.168.0.
1
system sh/cfg.sh -n dnode1 -c
commitLog
-v 0
system sh/deploy.sh -n dnode1 -
i
1
system sh/cfg.sh -n dnode1 -c
walLevel
-v 0
system sh/exec.sh -n dnode1 -s start
sleep 3000
sql connect
...
...
tests/script/general/parser/testSuite.sim
浏览文件 @
d75e835a
此差异已折叠。
点击以展开。
tests/script/jenkins/basic.txt
浏览文件 @
d75e835a
此差异已折叠。
点击以展开。
tests/script/sh/exec-random-fail.sh
0 → 100755
浏览文件 @
d75e835a
此差异已折叠。
点击以展开。
tests/script/unique/cluster/client1_0.sim
浏览文件 @
d75e835a
此差异已折叠。
点击以展开。
tests/script/unique/cluster/cluster_main.sim
浏览文件 @
d75e835a
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录