Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
b2fb94d7
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看板
提交
b2fb94d7
编写于
8月 10, 2023
作者:
Y
yihaoDeng
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'enh/chkpTransfer' of
https://github.com/taosdata/TDengine
into enh/chkpTransfer
上级
ea00f676
100d2240
变更
14
隐藏空白更改
内联
并排
Showing
14 changed file
with
442 addition
and
152 deletion
+442
-152
include/libs/stream/tstream.h
include/libs/stream/tstream.h
+7
-6
include/libs/transport/trpc.h
include/libs/transport/trpc.h
+1
-1
include/util/tarray.h
include/util/tarray.h
+5
-2
source/client/src/clientEnv.c
source/client/src/clientEnv.c
+1
-1
source/dnode/mgmt/node_mgmt/src/dmTransport.c
source/dnode/mgmt/node_mgmt/src/dmTransport.c
+1
-1
source/dnode/vnode/src/inc/vnodeInt.h
source/dnode/vnode/src/inc/vnodeInt.h
+3
-0
source/dnode/vnode/src/tq/tqStreamStateSnap.c
source/dnode/vnode/src/tq/tqStreamStateSnap.c
+16
-3
source/dnode/vnode/src/vnd/vnodeSnapshot.c
source/dnode/vnode/src/vnd/vnodeSnapshot.c
+3
-0
source/libs/stream/src/streamBackendRocksdb.c
source/libs/stream/src/streamBackendRocksdb.c
+317
-84
source/libs/stream/src/streamMeta.c
source/libs/stream/src/streamMeta.c
+63
-46
source/libs/transport/inc/transportInt.h
source/libs/transport/inc/transportInt.h
+3
-3
source/libs/transport/src/trans.c
source/libs/transport/src/trans.c
+1
-1
source/libs/transport/src/transCli.c
source/libs/transport/src/transCli.c
+1
-1
source/util/src/tarray.c
source/util/src/tarray.c
+20
-3
未找到文件。
include/libs/stream/tstream.h
浏览文件 @
b2fb94d7
...
@@ -369,11 +369,11 @@ typedef struct SStreamMeta {
...
@@ -369,11 +369,11 @@ typedef struct SStreamMeta {
int32_t
chkptNotReadyTasks
;
int32_t
chkptNotReadyTasks
;
int64_t
ch
eckpoint
Id
;
int64_t
ch
kp
Id
;
SArray
*
ch
eckpoint
Saved
;
SArray
*
ch
kp
Saved
;
SArray
*
ch
eckpoint
InUse
;
SArray
*
ch
kp
InUse
;
int32_t
ch
eckpoint
Cap
;
int32_t
ch
kp
Cap
;
SRWLatch
ch
eckpoint
DirLock
;
SRWLatch
ch
kp
DirLock
;
}
SStreamMeta
;
}
SStreamMeta
;
int32_t
tEncodeStreamEpInfo
(
SEncoder
*
pEncoder
,
const
SStreamChildEpInfo
*
pInfo
);
int32_t
tEncodeStreamEpInfo
(
SEncoder
*
pEncoder
,
const
SStreamChildEpInfo
*
pInfo
);
...
@@ -611,7 +611,8 @@ SStreamTask* streamMetaAcquireTask(SStreamMeta* pMeta, int32_t taskId);
...
@@ -611,7 +611,8 @@ SStreamTask* streamMetaAcquireTask(SStreamMeta* pMeta, int32_t taskId);
void
streamMetaReleaseTask
(
SStreamMeta
*
pMeta
,
SStreamTask
*
pTask
);
void
streamMetaReleaseTask
(
SStreamMeta
*
pMeta
,
SStreamTask
*
pTask
);
void
streamMetaRemoveTask
(
SStreamMeta
*
pMeta
,
int32_t
taskId
);
void
streamMetaRemoveTask
(
SStreamMeta
*
pMeta
,
int32_t
taskId
);
int32_t
streamStateRebuild
(
SStreamMeta
*
pMeta
,
char
*
path
,
int64_t
chkpId
);
// int32_t streamStateRebuild(SStreamMeta* pMeta, char* path, int64_t chkpId);
int32_t
streamMetaReopen
(
SStreamMeta
*
pMeta
,
int64_t
chkpId
);
int32_t
streamMetaBegin
(
SStreamMeta
*
pMeta
);
int32_t
streamMetaBegin
(
SStreamMeta
*
pMeta
);
int32_t
streamMetaCommit
(
SStreamMeta
*
pMeta
);
int32_t
streamMetaCommit
(
SStreamMeta
*
pMeta
);
...
...
include/libs/transport/trpc.h
浏览文件 @
b2fb94d7
...
@@ -89,7 +89,7 @@ typedef struct SRpcInit {
...
@@ -89,7 +89,7 @@ typedef struct SRpcInit {
int32_t
retryMinInterval
;
// retry init interval
int32_t
retryMinInterval
;
// retry init interval
int32_t
retryStepFactor
;
// retry interval factor
int32_t
retryStepFactor
;
// retry interval factor
int32_t
retryMaxInterval
;
// retry max interval
int32_t
retryMaxInterval
;
// retry max interval
int64_t
retryMaxTim
oue
t
;
int64_t
retryMaxTim
eou
t
;
int32_t
failFastThreshold
;
int32_t
failFastThreshold
;
int32_t
failFastInterval
;
int32_t
failFastInterval
;
...
...
include/util/tarray.h
浏览文件 @
b2fb94d7
...
@@ -200,13 +200,16 @@ void taosArrayClear(SArray* pArray);
...
@@ -200,13 +200,16 @@ void taosArrayClear(SArray* pArray);
* @param pArray
* @param pArray
* @param fp
* @param fp
*/
*/
void
taosArrayClearEx
(
SArray
*
pArray
,
void
(
*
fp
)(
void
*
));
void
taosArrayClearEx
(
SArray
*
pArray
,
void
(
*
fp
)(
void
*
));
void
taosArrayClearP
(
SArray
*
pArray
,
void
(
*
fp
)(
void
*
));
void
*
taosArrayDestroy
(
SArray
*
pArray
);
void
*
taosArrayDestroy
(
SArray
*
pArray
);
void
taosArrayDestroyP
(
SArray
*
pArray
,
FDelete
fp
);
void
taosArrayDestroyP
(
SArray
*
pArray
,
FDelete
fp
);
void
taosArrayDestroyEx
(
SArray
*
pArray
,
FDelete
fp
);
void
taosArrayDestroyEx
(
SArray
*
pArray
,
FDelete
fp
);
void
taosArraySwap
(
SArray
*
a
,
SArray
*
b
);
void
taosArraySwap
(
SArray
*
a
,
SArray
*
b
);
...
...
source/client/src/clientEnv.c
浏览文件 @
b2fb94d7
...
@@ -169,7 +169,7 @@ void *openTransporter(const char *user, const char *auth, int32_t numOfThread) {
...
@@ -169,7 +169,7 @@ void *openTransporter(const char *user, const char *auth, int32_t numOfThread) {
rpcInit
.
retryMinInterval
=
tsRedirectPeriod
;
rpcInit
.
retryMinInterval
=
tsRedirectPeriod
;
rpcInit
.
retryStepFactor
=
tsRedirectFactor
;
rpcInit
.
retryStepFactor
=
tsRedirectFactor
;
rpcInit
.
retryMaxInterval
=
tsRedirectMaxPeriod
;
rpcInit
.
retryMaxInterval
=
tsRedirectMaxPeriod
;
rpcInit
.
retryMaxTim
oue
t
=
tsMaxRetryWaitTime
;
rpcInit
.
retryMaxTim
eou
t
=
tsMaxRetryWaitTime
;
int32_t
connLimitNum
=
tsNumOfRpcSessions
/
(
tsNumOfRpcThreads
*
3
);
int32_t
connLimitNum
=
tsNumOfRpcSessions
/
(
tsNumOfRpcThreads
*
3
);
connLimitNum
=
TMAX
(
connLimitNum
,
10
);
connLimitNum
=
TMAX
(
connLimitNum
,
10
);
...
...
source/dnode/mgmt/node_mgmt/src/dmTransport.c
浏览文件 @
b2fb94d7
...
@@ -298,7 +298,7 @@ int32_t dmInitClient(SDnode *pDnode) {
...
@@ -298,7 +298,7 @@ int32_t dmInitClient(SDnode *pDnode) {
rpcInit
.
retryMinInterval
=
tsRedirectPeriod
;
rpcInit
.
retryMinInterval
=
tsRedirectPeriod
;
rpcInit
.
retryStepFactor
=
tsRedirectFactor
;
rpcInit
.
retryStepFactor
=
tsRedirectFactor
;
rpcInit
.
retryMaxInterval
=
tsRedirectMaxPeriod
;
rpcInit
.
retryMaxInterval
=
tsRedirectMaxPeriod
;
rpcInit
.
retryMaxTim
oue
t
=
tsMaxRetryWaitTime
;
rpcInit
.
retryMaxTim
eou
t
=
tsMaxRetryWaitTime
;
rpcInit
.
failFastInterval
=
5000
;
// interval threshold(ms)
rpcInit
.
failFastInterval
=
5000
;
// interval threshold(ms)
rpcInit
.
failFastThreshold
=
3
;
// failed threshold
rpcInit
.
failFastThreshold
=
3
;
// failed threshold
...
...
source/dnode/vnode/src/inc/vnodeInt.h
浏览文件 @
b2fb94d7
...
@@ -331,6 +331,9 @@ int32_t streamStateSnapWriterClose(SStreamStateWriter* pWriter, int8_t rollback)
...
@@ -331,6 +331,9 @@ int32_t streamStateSnapWriterClose(SStreamStateWriter* pWriter, int8_t rollback)
int32_t
streamStateSnapWrite
(
SStreamStateWriter
*
pWriter
,
uint8_t
*
pData
,
uint32_t
nData
);
int32_t
streamStateSnapWrite
(
SStreamStateWriter
*
pWriter
,
uint8_t
*
pData
,
uint32_t
nData
);
int32_t
streamStateRebuildFromSnap
(
SStreamStateWriter
*
pWriter
,
char
*
path
,
int64_t
chkpId
);
int32_t
streamStateRebuildFromSnap
(
SStreamStateWriter
*
pWriter
,
char
*
path
,
int64_t
chkpId
);
int32_t
streamStateLoadTasks
(
SStreamStateWriter
*
pWriter
);
// SStreamTaskReader ======================================
// SStreamTaskReader ======================================
// SStreamStateWriter =====================================
// SStreamStateWriter =====================================
// SStreamStateReader =====================================
// SStreamStateReader =====================================
...
...
source/dnode/vnode/src/tq/tqStreamStateSnap.c
浏览文件 @
b2fb94d7
...
@@ -47,11 +47,11 @@ int32_t streamStateSnapReaderOpen(STQ* pTq, int64_t sver, int64_t ever, SStreamS
...
@@ -47,11 +47,11 @@ int32_t streamStateSnapReaderOpen(STQ* pTq, int64_t sver, int64_t ever, SStreamS
pReader
->
sver
=
sver
;
pReader
->
sver
=
sver
;
pReader
->
ever
=
ever
;
pReader
->
ever
=
ever
;
int64_t
ch
eckpointId
=
meta
?
meta
->
checkpoint
Id
:
0
;
int64_t
ch
kpId
=
meta
?
meta
->
chkp
Id
:
0
;
SStreamSnapReader
*
pSnapReader
=
NULL
;
SStreamSnapReader
*
pSnapReader
=
NULL
;
if
(
streamSnapReaderOpen
(
pTq
,
sver
,
ch
eckpoint
Id
,
pTq
->
path
,
&
pSnapReader
)
==
0
)
{
if
(
streamSnapReaderOpen
(
pTq
,
sver
,
ch
kp
Id
,
pTq
->
path
,
&
pSnapReader
)
==
0
)
{
pReader
->
complete
=
1
;
pReader
->
complete
=
1
;
}
else
{
}
else
{
code
=
-
1
;
code
=
-
1
;
...
@@ -163,7 +163,20 @@ int32_t streamStateSnapWriterClose(SStreamStateWriter* pWriter, int8_t rollback)
...
@@ -163,7 +163,20 @@ int32_t streamStateSnapWriterClose(SStreamStateWriter* pWriter, int8_t rollback)
return
code
;
return
code
;
}
}
int32_t
streamStateRebuildFromSnap
(
SStreamStateWriter
*
pWriter
,
char
*
path
,
int64_t
chkpId
)
{
int32_t
streamStateRebuildFromSnap
(
SStreamStateWriter
*
pWriter
,
char
*
path
,
int64_t
chkpId
)
{
return
streamStateRebuild
(
pWriter
->
pTq
->
pStreamMeta
,
path
,
chkpId
);
int32_t
code
=
streamMetaReopen
(
pWriter
->
pTq
->
pStreamMeta
,
chkpId
);
if
(
code
==
0
)
{
code
=
streamStateLoadTasks
(
pWriter
);
}
return
code
;
}
int32_t
streamStateLoadTasksImpl
(
SStreamMeta
*
pMeta
,
int64_t
ver
)
{
// impl later
return
streamLoadTasks
(
pMeta
,
ver
);
}
int32_t
streamStateLoadTasks
(
SStreamStateWriter
*
pWriter
)
{
SWal
*
pWal
=
pWriter
->
pTq
->
pVnode
->
pWal
;
return
streamStateLoadTasksImpl
(
pWriter
->
pTq
->
pStreamMeta
,
walGetCommittedVer
(
pWal
));
}
}
int32_t
streamStateSnapWrite
(
SStreamStateWriter
*
pWriter
,
uint8_t
*
pData
,
uint32_t
nData
)
{
int32_t
streamStateSnapWrite
(
SStreamStateWriter
*
pWriter
,
uint8_t
*
pData
,
uint32_t
nData
)
{
...
...
source/dnode/vnode/src/vnd/vnodeSnapshot.c
浏览文件 @
b2fb94d7
...
@@ -409,6 +409,9 @@ int32_t vnodeSnapWriterClose(SVSnapWriter *pWriter, int8_t rollback, SSnapshot *
...
@@ -409,6 +409,9 @@ int32_t vnodeSnapWriterClose(SVSnapWriter *pWriter, int8_t rollback, SSnapshot *
if
(
pWriter
->
pStreamStateWriter
)
{
if
(
pWriter
->
pStreamStateWriter
)
{
code
=
streamStateSnapWriterClose
(
pWriter
->
pStreamStateWriter
,
rollback
);
code
=
streamStateSnapWriterClose
(
pWriter
->
pStreamStateWriter
,
rollback
);
if
(
code
)
goto
_exit
;
if
(
code
)
goto
_exit
;
code
=
streamStateRebuildFromSnap
(
pWriter
->
pStreamStateWriter
,
NULL
,
0
);
if
(
code
)
goto
_exit
;
}
}
if
(
pWriter
->
pRsmaSnapWriter
)
{
if
(
pWriter
->
pRsmaSnapWriter
)
{
...
...
source/libs/stream/src/streamBackendRocksdb.c
浏览文件 @
b2fb94d7
...
@@ -20,6 +20,27 @@
...
@@ -20,6 +20,27 @@
#include "tcommon.h"
#include "tcommon.h"
#include "tref.h"
#include "tref.h"
typedef
struct
{
int8_t
init
;
char
*
pCurrent
;
char
*
pManifest
;
SArray
*
pSST
;
int64_t
preCkptId
;
int64_t
curChkpId
;
char
*
path
;
char
*
buf
;
int32_t
len
;
// ping-pong buf
SHashObj
*
pSstTbl
[
2
];
int8_t
idx
;
SArray
*
pAdd
;
SArray
*
pDel
;
int8_t
update
;
}
SBackendManager
;
typedef
struct
SCompactFilteFactory
{
typedef
struct
SCompactFilteFactory
{
void
*
status
;
void
*
status
;
}
SCompactFilteFactory
;
}
SCompactFilteFactory
;
...
@@ -127,6 +148,218 @@ void destroyFunc(void* arg);
...
@@ -127,6 +148,218 @@ void destroyFunc(void* arg);
int32_t
encodeValueFunc
(
void
*
value
,
int32_t
vlen
,
int64_t
ttl
,
char
**
dest
);
int32_t
encodeValueFunc
(
void
*
value
,
int32_t
vlen
,
int64_t
ttl
,
char
**
dest
);
int32_t
decodeValueFunc
(
void
*
value
,
int32_t
vlen
,
int64_t
*
ttl
,
char
**
dest
);
int32_t
decodeValueFunc
(
void
*
value
,
int32_t
vlen
,
int64_t
*
ttl
,
char
**
dest
);
SBackendManager
*
bkdMgtCreate
(
char
*
path
)
{
SBackendManager
*
p
=
taosMemoryCalloc
(
1
,
sizeof
(
SBackendManager
));
p
->
curChkpId
=
0
;
p
->
preCkptId
=
0
;
p
->
pSST
=
taosArrayInit
(
64
,
sizeof
(
void
*
));
p
->
path
=
taosStrdup
(
path
);
p
->
len
=
strlen
(
path
)
+
128
;
p
->
buf
=
taosMemoryCalloc
(
1
,
p
->
len
);
p
->
idx
=
0
;
p
->
pSstTbl
[
0
]
=
taosHashInit
(
64
,
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_BINARY
),
false
,
HASH_ENTRY_LOCK
);
p
->
pSstTbl
[
1
]
=
taosHashInit
(
64
,
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_BINARY
),
false
,
HASH_ENTRY_LOCK
);
p
->
pAdd
=
taosArrayInit
(
64
,
sizeof
(
void
*
));
p
->
pDel
=
taosArrayInit
(
64
,
sizeof
(
void
*
));
p
->
update
=
0
;
return
p
;
}
void
bkdMgtDestroy
(
SBackendManager
*
bm
)
{
if
(
bm
==
NULL
)
return
;
taosMemoryFree
(
bm
->
buf
);
taosMemoryFree
(
bm
->
path
);
taosArrayDestroyP
(
bm
->
pSST
,
taosMemoryFree
);
taosArrayDestroyP
(
bm
->
pAdd
,
taosMemoryFree
);
taosArrayDestroyP
(
bm
->
pDel
,
taosMemoryFree
);
taosHashCleanup
(
bm
->
pSstTbl
[
0
]);
taosHashCleanup
(
bm
->
pSstTbl
[
1
]);
taosMemoryFree
(
bm
);
}
int32_t
compareHashTableImpl
(
SHashObj
*
p1
,
SHashObj
*
p2
,
SArray
*
diff
)
{
int32_t
code
=
0
;
size_t
len
=
0
;
void
*
pIter
=
taosHashIterate
(
p2
,
NULL
);
while
(
pIter
)
{
char
*
name
=
taosHashGetKey
(
pIter
,
&
len
);
if
(
!
taosHashGet
(
p1
,
name
,
len
))
{
char
*
p
=
taosStrdup
(
name
);
taosArrayPush
(
diff
,
&
p
);
}
pIter
=
taosHashIterate
(
p2
,
pIter
);
}
return
code
;
}
int32_t
compareHashTable
(
SHashObj
*
p1
,
SHashObj
*
p2
,
SArray
*
add
,
SArray
*
del
)
{
int32_t
code
=
0
;
code
=
compareHashTableImpl
(
p1
,
p2
,
add
);
code
=
compareHashTableImpl
(
p2
,
p1
,
del
);
return
code
;
}
int32_t
bkdMgtGetDelta
(
SBackendManager
*
bm
,
int64_t
chkpId
,
SArray
*
list
)
{
const
char
*
pCurrent
=
"CURRENT"
;
int32_t
currLen
=
strlen
(
pCurrent
);
const
char
*
pManifest
=
"MANIFEST-"
;
int32_t
maniLen
=
strlen
(
pManifest
);
const
char
*
pSST
=
".sst"
;
int32_t
sstLen
=
strlen
(
pSST
);
memset
(
bm
->
buf
,
0
,
bm
->
len
);
sprintf
(
bm
->
buf
,
"%s%scheckpoint%"
PRId64
""
,
bm
->
path
,
TD_DIRSEP
,
chkpId
);
taosArrayClearP
(
bm
->
pAdd
,
taosMemoryFree
);
taosArrayClearP
(
bm
->
pDel
,
taosMemoryFree
);
TdDirPtr
pDir
=
taosOpenDir
(
bm
->
buf
);
TdDirEntryPtr
de
=
NULL
;
int8_t
dummy
=
0
;
while
((
de
=
taosReadDir
(
pDir
))
!=
NULL
)
{
char
*
name
=
taosGetDirEntryName
(
de
);
if
(
strcmp
(
name
,
"."
)
==
0
||
strcmp
(
name
,
".."
)
==
0
)
continue
;
if
(
strlen
(
name
)
==
currLen
&&
strcmp
(
name
,
pCurrent
)
==
0
)
{
taosMemoryFreeClear
(
bm
->
pCurrent
);
bm
->
pCurrent
=
taosStrdup
(
name
);
taosHashPut
(
bm
->
pSstTbl
[
1
-
bm
->
idx
],
name
,
strlen
(
name
),
&
dummy
,
sizeof
(
dummy
));
continue
;
}
if
(
strlen
(
name
)
>=
maniLen
&&
strncmp
(
name
,
pManifest
,
maniLen
)
==
0
)
{
taosMemoryFreeClear
(
bm
->
pManifest
);
bm
->
pManifest
=
taosStrdup
(
name
);
taosHashPut
(
bm
->
pSstTbl
[
1
-
bm
->
idx
],
name
,
strlen
(
name
),
&
dummy
,
sizeof
(
dummy
));
continue
;
}
if
(
strlen
(
name
)
>=
sstLen
&&
strncmp
(
name
+
strlen
(
name
)
-
4
,
pSST
,
sstLen
)
==
0
)
{
char
*
p
=
taosStrdup
(
name
);
taosHashPut
(
bm
->
pSstTbl
[
1
-
bm
->
idx
],
name
,
strlen
(
name
),
&
dummy
,
sizeof
(
dummy
));
continue
;
}
}
if
(
bm
->
init
==
0
)
{
bm
->
preCkptId
=
-
1
;
bm
->
curChkpId
=
chkpId
;
bm
->
init
=
1
;
void
*
pIter
=
taosHashIterate
(
bm
->
pSstTbl
[
1
-
bm
->
idx
],
NULL
);
while
(
pIter
)
{
size_t
len
;
char
*
name
=
taosHashGetKey
(
pIter
,
&
len
);
if
(
name
!=
NULL
&&
len
!=
0
)
{
taosArrayPush
(
bm
->
pAdd
,
&
name
);
}
pIter
=
taosHashIterate
(
bm
->
pSstTbl
[
1
-
bm
->
idx
],
pIter
);
}
if
(
taosArrayGetSize
(
bm
->
pAdd
)
>
0
)
bm
->
update
=
1
;
}
else
{
int32_t
code
=
compareHashTable
(
bm
->
pSstTbl
[
bm
->
idx
],
bm
->
pSstTbl
[
1
-
bm
->
idx
],
bm
->
pAdd
,
bm
->
pDel
);
if
(
code
!=
0
)
{
// dead code
taosArrayClearP
(
bm
->
pAdd
,
taosMemoryFree
);
taosArrayClearP
(
bm
->
pDel
,
taosMemoryFree
);
taosHashClear
(
bm
->
pSstTbl
[
1
-
bm
->
idx
]);
bm
->
update
=
0
;
return
code
;
}
bm
->
preCkptId
=
bm
->
curChkpId
;
bm
->
curChkpId
=
chkpId
;
if
(
taosArrayGetSize
(
bm
->
pAdd
)
==
0
&&
taosArrayGetSize
(
bm
->
pDel
)
==
0
)
{
bm
->
update
=
0
;
}
}
taosHashClear
(
bm
->
pSstTbl
[
bm
->
idx
]);
bm
->
idx
=
1
-
bm
->
idx
;
return
0
;
}
int32_t
bkdMgtDumpTo
(
SBackendManager
*
bm
,
char
*
dname
)
{
int32_t
code
=
0
;
int32_t
len
=
bm
->
len
+
128
;
char
*
dstBuf
=
taosMemoryCalloc
(
1
,
len
);
char
*
srcBuf
=
taosMemoryCalloc
(
1
,
len
);
char
*
srcDir
=
taosMemoryCalloc
(
1
,
len
);
char
*
dstDir
=
taosMemoryCalloc
(
1
,
len
);
sprintf
(
srcDir
,
"%s%s%s%"
PRId64
""
,
bm
->
path
,
TD_DIRSEP
,
"checkpoint"
,
bm
->
curChkpId
);
sprintf
(
dstDir
,
"%s%s%s"
,
bm
->
path
,
TD_DIRSEP
,
dname
);
if
(
!
taosDirExist
(
srcDir
))
{
return
0
;
}
code
=
taosMkDir
(
dstDir
);
if
(
code
!=
0
)
{
return
code
;
}
// clear current file
memset
(
dstBuf
,
0
,
len
);
sprintf
(
dstBuf
,
"%s%s%s"
,
dstDir
,
TD_DIRSEP
,
bm
->
pCurrent
);
taosRemoveFile
(
dstBuf
);
memset
(
dstBuf
,
0
,
len
);
sprintf
(
dstBuf
,
"%s%s%s"
,
dstDir
,
TD_DIRSEP
,
bm
->
pManifest
);
taosRemoveFile
(
dstBuf
);
// add file to $name dir
for
(
int
i
=
0
;
i
<
taosArrayGetSize
(
bm
->
pAdd
);
i
++
)
{
memset
(
dstBuf
,
0
,
len
);
memset
(
srcBuf
,
0
,
len
);
char
*
filename
=
taosArrayGetP
(
bm
->
pAdd
,
i
);
sprintf
(
srcBuf
,
"%s%s%s"
,
srcDir
,
TD_DIRSEP
,
filename
);
sprintf
(
dstBuf
,
"%s%s%s"
,
dstDir
,
TD_DIRSEP
,
filename
);
taosCopyFile
(
srcBuf
,
dstBuf
);
}
// del file in $name
for
(
int
i
=
0
;
i
<
taosArrayGetSize
(
bm
->
pDel
);
i
++
)
{
memset
(
dstBuf
,
0
,
len
);
memset
(
srcBuf
,
0
,
len
);
char
*
filename
=
taosArrayGetP
(
bm
->
pDel
,
i
);
sprintf
(
dstBuf
,
"%s%s%s"
,
dstDir
,
TD_DIRSEP
,
filename
);
taosRemoveFile
(
dstBuf
);
}
// copy current file to dst dir
memset
(
srcBuf
,
0
,
len
);
memset
(
dstBuf
,
0
,
len
);
sprintf
(
srcBuf
,
"%s%s%s"
,
srcDir
,
TD_DIRSEP
,
bm
->
pCurrent
);
sprintf
(
dstBuf
,
"%s%s%s"
,
dstDir
,
TD_DIRSEP
,
bm
->
pCurrent
);
taosCopyFile
(
srcBuf
,
dstBuf
);
// copy manifest file to dst dir
memset
(
srcBuf
,
0
,
len
);
memset
(
dstBuf
,
0
,
len
);
sprintf
(
srcBuf
,
"%s%s%s"
,
srcDir
,
TD_DIRSEP
,
bm
->
pManifest
);
sprintf
(
dstBuf
,
"%s%s%s"
,
dstDir
,
TD_DIRSEP
,
bm
->
pManifest
);
taosCopyFile
(
srcBuf
,
dstBuf
);
// clear delta data buf
taosArrayClearP
(
bm
->
pAdd
,
taosMemoryFree
);
taosArrayClearP
(
bm
->
pDel
,
taosMemoryFree
);
taosMemoryFree
(
srcBuf
);
taosMemoryFree
(
dstBuf
);
taosMemoryFree
(
srcDir
);
taosMemoryFree
(
dstDir
);
return
code
;
}
SCfInit
ginitDict
[]
=
{
SCfInit
ginitDict
[]
=
{
{
"default"
,
7
,
0
,
defaultKeyComp
,
defaultKeyEncode
,
defaultKeyDecode
,
defaultKeyToString
,
compareDefaultName
,
{
"default"
,
7
,
0
,
defaultKeyComp
,
defaultKeyEncode
,
defaultKeyDecode
,
defaultKeyToString
,
compareDefaultName
,
destroyFunc
,
encodeValueFunc
,
decodeValueFunc
},
destroyFunc
,
encodeValueFunc
,
decodeValueFunc
},
...
@@ -151,8 +384,8 @@ int32_t copyFiles(const char* src, const char* dst) {
...
@@ -151,8 +384,8 @@ int32_t copyFiles(const char* src, const char* dst) {
// opt later, just hard link
// opt later, just hard link
int32_t
sLen
=
strlen
(
src
);
int32_t
sLen
=
strlen
(
src
);
int32_t
dLen
=
strlen
(
dst
);
int32_t
dLen
=
strlen
(
dst
);
char
*
absSrcPath
=
taosMemoryCalloc
(
1
,
sLen
+
64
);
char
*
srcName
=
taosMemoryCalloc
(
1
,
sLen
+
64
);
char
*
absDstPath
=
taosMemoryCalloc
(
1
,
dLen
+
64
);
char
*
dstName
=
taosMemoryCalloc
(
1
,
dLen
+
64
);
TdDirPtr
pDir
=
taosOpenDir
(
src
);
TdDirPtr
pDir
=
taosOpenDir
(
src
);
if
(
pDir
==
NULL
)
return
0
;
if
(
pDir
==
NULL
)
return
0
;
...
@@ -162,22 +395,22 @@ int32_t copyFiles(const char* src, const char* dst) {
...
@@ -162,22 +395,22 @@ int32_t copyFiles(const char* src, const char* dst) {
char
*
name
=
taosGetDirEntryName
(
de
);
char
*
name
=
taosGetDirEntryName
(
de
);
if
(
strcmp
(
name
,
"."
)
==
0
||
strcmp
(
name
,
".."
)
==
0
)
continue
;
if
(
strcmp
(
name
,
"."
)
==
0
||
strcmp
(
name
,
".."
)
==
0
)
continue
;
sprintf
(
absSrcPath
,
"%s%s%s"
,
src
,
TD_DIRSEP
,
name
);
sprintf
(
srcName
,
"%s%s%s"
,
src
,
TD_DIRSEP
,
name
);
sprintf
(
absDstPath
,
"%s%s%s"
,
dst
,
TD_DIRSEP
,
name
);
sprintf
(
dstName
,
"%s%s%s"
,
dst
,
TD_DIRSEP
,
name
);
if
(
!
taosDirEntryIsDir
(
de
))
{
if
(
!
taosDirEntryIsDir
(
de
))
{
code
=
taosCopyFile
(
absSrcPath
,
absDstPath
);
code
=
taosCopyFile
(
srcName
,
dstName
);
if
(
code
==
-
1
)
{
if
(
code
==
-
1
)
{
goto
_err
;
goto
_err
;
}
}
}
}
memset
(
absSrcPath
,
0
,
sLen
+
64
);
memset
(
srcName
,
0
,
sLen
+
64
);
memset
(
absDstPath
,
0
,
dLen
+
64
);
memset
(
dstName
,
0
,
dLen
+
64
);
}
}
_err:
_err:
taosMemoryFreeClear
(
absSrcPath
);
taosMemoryFreeClear
(
srcName
);
taosMemoryFreeClear
(
absDstPath
);
taosMemoryFreeClear
(
dstName
);
taosCloseDir
(
&
pDir
);
taosCloseDir
(
&
pDir
);
return
code
>=
0
?
0
:
-
1
;
return
code
>=
0
?
0
:
-
1
;
}
}
...
@@ -219,6 +452,7 @@ int32_t rebuildDirFromCheckpoint(const char* path, int64_t chkpId, char** dst) {
...
@@ -219,6 +452,7 @@ int32_t rebuildDirFromCheckpoint(const char* path, int64_t chkpId, char** dst) {
return
0
;
return
0
;
}
}
void
*
streamBackendInit
(
const
char
*
streamPath
,
int64_t
chkpId
)
{
void
*
streamBackendInit
(
const
char
*
streamPath
,
int64_t
chkpId
)
{
char
*
backendPath
=
NULL
;
char
*
backendPath
=
NULL
;
int32_t
code
=
rebuildDirFromCheckpoint
(
streamPath
,
chkpId
,
&
backendPath
);
int32_t
code
=
rebuildDirFromCheckpoint
(
streamPath
,
chkpId
,
&
backendPath
);
...
@@ -405,74 +639,75 @@ void streamBackendHandleCleanup(void* arg) {
...
@@ -405,74 +639,75 @@ void streamBackendHandleCleanup(void* arg) {
int32_t
getLatestCheckpoint
(
void
*
arg
,
int64_t
*
checkpoint
)
{
int32_t
getLatestCheckpoint
(
void
*
arg
,
int64_t
*
checkpoint
)
{
SStreamMeta
*
pMeta
=
arg
;
SStreamMeta
*
pMeta
=
arg
;
taosWLockLatch
(
&
pMeta
->
ch
eckpoint
DirLock
);
taosWLockLatch
(
&
pMeta
->
ch
kp
DirLock
);
int64_t
tc
=
0
;
int64_t
tc
=
0
;
int32_t
sz
=
taosArrayGetSize
(
pMeta
->
ch
eckpoint
Saved
);
int32_t
sz
=
taosArrayGetSize
(
pMeta
->
ch
kp
Saved
);
if
(
sz
<=
0
)
{
if
(
sz
<=
0
)
{
taosWUnLockLatch
(
&
pMeta
->
chkpDirLock
);
return
-
1
;
return
-
1
;
}
else
{
}
else
{
tc
=
*
(
int64_t
*
)
taosArrayGetLast
(
pMeta
->
ch
eckpoint
Saved
);
tc
=
*
(
int64_t
*
)
taosArrayGetLast
(
pMeta
->
ch
kp
Saved
);
}
}
taosArrayPush
(
pMeta
->
ch
eckpoint
InUse
,
&
tc
);
taosArrayPush
(
pMeta
->
ch
kp
InUse
,
&
tc
);
*
checkpoint
=
tc
;
*
checkpoint
=
tc
;
taosWUnLockLatch
(
&
pMeta
->
ch
eckpoint
DirLock
);
taosWUnLockLatch
(
&
pMeta
->
ch
kp
DirLock
);
return
0
;
return
0
;
}
}
/*
/*
* checkpointSave |--cp1--|--cp2--|--cp3--|--cp4--|--cp5--|
* checkpointSave |--cp1--|--cp2--|--cp3--|--cp4--|--cp5--|
* ch
eckpoint
InUse: |--cp2--|--cp4--|
* ch
kp
InUse: |--cp2--|--cp4--|
* ch
eckpoint
InUse is doing translation, cannot del until
* ch
kp
InUse is doing translation, cannot del until
* replication is finished
* replication is finished
*/
*/
int32_t
delObsoleteCheckpoint
(
void
*
arg
,
const
char
*
path
)
{
int32_t
delObsoleteCheckpoint
(
void
*
arg
,
const
char
*
path
)
{
SStreamMeta
*
pMeta
=
arg
;
SStreamMeta
*
pMeta
=
arg
;
taosWLockLatch
(
&
pMeta
->
ch
eckpoint
DirLock
);
taosWLockLatch
(
&
pMeta
->
ch
kp
DirLock
);
SArray
*
ch
eckpoint
Del
=
taosArrayInit
(
10
,
sizeof
(
int64_t
));
SArray
*
ch
kp
Del
=
taosArrayInit
(
10
,
sizeof
(
int64_t
));
SArray
*
ch
eckpoint
Dup
=
taosArrayInit
(
10
,
sizeof
(
int64_t
));
SArray
*
ch
kp
Dup
=
taosArrayInit
(
10
,
sizeof
(
int64_t
));
int64_t
minId
=
0
;
int64_t
minId
=
0
;
if
(
taosArrayGetSize
(
pMeta
->
ch
eckpoint
InUse
)
>=
1
)
{
if
(
taosArrayGetSize
(
pMeta
->
ch
kp
InUse
)
>=
1
)
{
minId
=
*
(
int64_t
*
)
taosArrayGet
(
pMeta
->
ch
eckpoint
InUse
,
0
);
minId
=
*
(
int64_t
*
)
taosArrayGet
(
pMeta
->
ch
kp
InUse
,
0
);
for
(
int
i
=
0
;
i
<
taosArrayGetSize
(
pMeta
->
ch
eckpoint
Saved
);
i
++
)
{
for
(
int
i
=
0
;
i
<
taosArrayGetSize
(
pMeta
->
ch
kp
Saved
);
i
++
)
{
int64_t
id
=
*
(
int64_t
*
)
taosArrayGet
(
pMeta
->
ch
eckpoint
Saved
,
i
);
int64_t
id
=
*
(
int64_t
*
)
taosArrayGet
(
pMeta
->
ch
kp
Saved
,
i
);
if
(
id
>=
minId
)
{
if
(
id
>=
minId
)
{
taosArrayPush
(
ch
eckpoint
Dup
,
&
id
);
taosArrayPush
(
ch
kp
Dup
,
&
id
);
}
else
{
}
else
{
taosArrayPush
(
ch
eckpoint
Del
,
&
id
);
taosArrayPush
(
ch
kp
Del
,
&
id
);
}
}
}
}
}
else
{
}
else
{
int32_t
sz
=
taosArrayGetSize
(
pMeta
->
ch
eckpoint
Saved
);
int32_t
sz
=
taosArrayGetSize
(
pMeta
->
ch
kp
Saved
);
int32_t
dsz
=
sz
-
pMeta
->
ch
eckpoint
Cap
;
// del size
int32_t
dsz
=
sz
-
pMeta
->
ch
kp
Cap
;
// del size
for
(
int
i
=
0
;
i
<
dsz
;
i
++
)
{
for
(
int
i
=
0
;
i
<
dsz
;
i
++
)
{
int64_t
id
=
*
(
int64_t
*
)
taosArrayGet
(
pMeta
->
ch
eckpoint
Saved
,
i
);
int64_t
id
=
*
(
int64_t
*
)
taosArrayGet
(
pMeta
->
ch
kp
Saved
,
i
);
taosArrayPush
(
ch
eckpoint
Del
,
&
id
);
taosArrayPush
(
ch
kp
Del
,
&
id
);
}
}
for
(
int
i
=
dsz
<
0
?
0
:
dsz
;
i
<
sz
;
i
++
)
{
for
(
int
i
=
dsz
<
0
?
0
:
dsz
;
i
<
sz
;
i
++
)
{
int64_t
id
=
*
(
int64_t
*
)
taosArrayGet
(
pMeta
->
ch
eckpoint
Saved
,
i
);
int64_t
id
=
*
(
int64_t
*
)
taosArrayGet
(
pMeta
->
ch
kp
Saved
,
i
);
taosArrayPush
(
ch
eckpoint
Dup
,
&
id
);
taosArrayPush
(
ch
kp
Dup
,
&
id
);
}
}
}
}
taosArrayDestroy
(
pMeta
->
ch
eckpoint
Saved
);
taosArrayDestroy
(
pMeta
->
ch
kp
Saved
);
pMeta
->
ch
eckpointSaved
=
checkpoint
Dup
;
pMeta
->
ch
kpSaved
=
chkp
Dup
;
taosWUnLockLatch
(
&
pMeta
->
ch
eckpoint
DirLock
);
taosWUnLockLatch
(
&
pMeta
->
ch
kp
DirLock
);
for
(
int
i
=
0
;
i
<
taosArrayGetSize
(
ch
eckpoint
Del
);
i
++
)
{
for
(
int
i
=
0
;
i
<
taosArrayGetSize
(
ch
kp
Del
);
i
++
)
{
int64_t
id
=
*
(
int64_t
*
)
taosArrayGet
(
ch
eckpoint
Del
,
i
);
int64_t
id
=
*
(
int64_t
*
)
taosArrayGet
(
ch
kp
Del
,
i
);
char
tbuf
[
256
]
=
{
0
};
char
tbuf
[
256
]
=
{
0
};
sprintf
(
tbuf
,
"%s%scheckpoint%"
PRId64
""
,
path
,
TD_DIRSEP
,
id
);
sprintf
(
tbuf
,
"%s%scheckpoint%"
PRId64
""
,
path
,
TD_DIRSEP
,
id
);
if
(
taosIsDir
(
tbuf
))
{
if
(
taosIsDir
(
tbuf
))
{
taosRemoveDir
(
tbuf
);
taosRemoveDir
(
tbuf
);
}
}
}
}
taosArrayDestroy
(
ch
eckpoint
Del
);
taosArrayDestroy
(
ch
kp
Del
);
return
0
;
return
0
;
}
}
...
@@ -487,16 +722,21 @@ int32_t streamBackendLoadCheckpointInfo(void* arg) {
...
@@ -487,16 +722,21 @@ int32_t streamBackendLoadCheckpointInfo(void* arg) {
int32_t
code
=
0
;
int32_t
code
=
0
;
int32_t
len
=
strlen
(
pMeta
->
path
)
+
30
;
int32_t
len
=
strlen
(
pMeta
->
path
)
+
30
;
char
*
ch
eckpoint
Path
=
taosMemoryCalloc
(
1
,
len
);
char
*
ch
kp
Path
=
taosMemoryCalloc
(
1
,
len
);
sprintf
(
ch
eckpoint
Path
,
"%s%s%s"
,
pMeta
->
path
,
TD_DIRSEP
,
"checkpoints"
);
sprintf
(
ch
kp
Path
,
"%s%s%s"
,
pMeta
->
path
,
TD_DIRSEP
,
"checkpoints"
);
if
(
!
taosDirExist
(
ch
eckpoint
Path
))
{
if
(
!
taosDirExist
(
ch
kp
Path
))
{
// no checkpoint, nothing to load
// no checkpoint, nothing to load
taosMemoryFree
(
chkpPath
);
return
0
;
return
0
;
}
}
TdDirPtr
pDir
=
taosOpenDir
(
checkpointPath
);
TdDirPtr
pDir
=
taosOpenDir
(
chkpPath
);
if
(
pDir
==
NULL
)
return
0
;
if
(
pDir
==
NULL
)
{
taosMemoryFree
(
chkpPath
);
return
0
;
}
TdDirEntryPtr
de
=
NULL
;
TdDirEntryPtr
de
=
NULL
;
SArray
*
suffix
=
taosArrayInit
(
4
,
sizeof
(
int64_t
));
SArray
*
suffix
=
taosArrayInit
(
4
,
sizeof
(
int64_t
));
...
@@ -520,12 +760,12 @@ int32_t streamBackendLoadCheckpointInfo(void* arg) {
...
@@ -520,12 +760,12 @@ int32_t streamBackendLoadCheckpointInfo(void* arg) {
for
(
int
i
=
0
;
i
<
taosArrayGetSize
(
suffix
);
i
++
)
{
for
(
int
i
=
0
;
i
<
taosArrayGetSize
(
suffix
);
i
++
)
{
int64_t
id
=
*
(
int64_t
*
)
taosArrayGet
(
suffix
,
i
);
int64_t
id
=
*
(
int64_t
*
)
taosArrayGet
(
suffix
,
i
);
taosArrayPush
(
pMeta
->
ch
eckpoint
Saved
,
&
id
);
taosArrayPush
(
pMeta
->
ch
kp
Saved
,
&
id
);
}
}
taosArrayDestroy
(
suffix
);
taosArrayDestroy
(
suffix
);
taosCloseDir
(
&
pDir
);
taosCloseDir
(
&
pDir
);
taosMemoryFree
(
ch
eckpoint
Path
);
taosMemoryFree
(
ch
kp
Path
);
return
0
;
return
0
;
}
}
int32_t
streamBackendDoCheckpoint
(
void
*
arg
,
uint64_t
checkpointId
)
{
int32_t
streamBackendDoCheckpoint
(
void
*
arg
,
uint64_t
checkpointId
)
{
...
@@ -572,9 +812,9 @@ int32_t streamBackendDoCheckpoint(void* arg, uint64_t checkpointId) {
...
@@ -572,9 +812,9 @@ int32_t streamBackendDoCheckpoint(void* arg, uint64_t checkpointId) {
}
}
rocksdb_checkpoint_object_destroy
(
cp
);
rocksdb_checkpoint_object_destroy
(
cp
);
}
}
taosWLockLatch
(
&
pMeta
->
ch
eckpoint
DirLock
);
taosWLockLatch
(
&
pMeta
->
ch
kp
DirLock
);
taosArrayPush
(
pMeta
->
ch
eckpoint
Saved
,
&
checkpointId
);
taosArrayPush
(
pMeta
->
ch
kp
Saved
,
&
checkpointId
);
taosWUnLockLatch
(
&
pMeta
->
ch
eckpoint
DirLock
);
taosWUnLockLatch
(
&
pMeta
->
ch
kp
DirLock
);
delObsoleteCheckpoint
(
arg
,
path
);
delObsoleteCheckpoint
(
arg
,
path
);
...
@@ -624,9 +864,9 @@ int defaultKeyComp(void* state, const char* aBuf, size_t aLen, const char* bBuf,
...
@@ -624,9 +864,9 @@ int defaultKeyComp(void* state, const char* aBuf, size_t aLen, const char* bBuf,
return
ret
;
return
ret
;
}
}
}
}
int
streamStateValueIsStale
(
char
*
v
v
)
{
int
streamStateValueIsStale
(
char
*
v
)
{
int64_t
ts
=
0
;
int64_t
ts
=
0
;
taosDecodeFixedI64
(
v
v
,
&
ts
);
taosDecodeFixedI64
(
v
,
&
ts
);
return
(
ts
!=
0
&&
ts
<
taosGetTimestampMs
())
?
1
:
0
;
return
(
ts
!=
0
&&
ts
<
taosGetTimestampMs
())
?
1
:
0
;
}
}
int
iterValueIsStale
(
rocksdb_iterator_t
*
iter
)
{
int
iterValueIsStale
(
rocksdb_iterator_t
*
iter
)
{
...
@@ -732,8 +972,8 @@ int stateSessionKeyDBComp(void* state, const char* aBuf, size_t aLen, const char
...
@@ -732,8 +972,8 @@ int stateSessionKeyDBComp(void* state, const char* aBuf, size_t aLen, const char
return
stateSessionKeyCmpr
(
&
w1
,
sizeof
(
w1
),
&
w2
,
sizeof
(
w2
));
return
stateSessionKeyCmpr
(
&
w1
,
sizeof
(
w1
),
&
w2
,
sizeof
(
w2
));
}
}
int
stateSessionKeyEncode
(
void
*
ses
,
char
*
buf
)
{
int
stateSessionKeyEncode
(
void
*
k
,
char
*
buf
)
{
SStateSessionKey
*
sess
=
ses
;
SStateSessionKey
*
sess
=
k
;
int
len
=
0
;
int
len
=
0
;
len
+=
taosEncodeFixedI64
((
void
**
)
&
buf
,
sess
->
key
.
win
.
skey
);
len
+=
taosEncodeFixedI64
((
void
**
)
&
buf
,
sess
->
key
.
win
.
skey
);
len
+=
taosEncodeFixedI64
((
void
**
)
&
buf
,
sess
->
key
.
win
.
ekey
);
len
+=
taosEncodeFixedI64
((
void
**
)
&
buf
,
sess
->
key
.
win
.
ekey
);
...
@@ -741,8 +981,8 @@ int stateSessionKeyEncode(void* ses, char* buf) {
...
@@ -741,8 +981,8 @@ int stateSessionKeyEncode(void* ses, char* buf) {
len
+=
taosEncodeFixedI64
((
void
**
)
&
buf
,
sess
->
opNum
);
len
+=
taosEncodeFixedI64
((
void
**
)
&
buf
,
sess
->
opNum
);
return
len
;
return
len
;
}
}
int
stateSessionKeyDecode
(
void
*
ses
,
char
*
buf
)
{
int
stateSessionKeyDecode
(
void
*
k
,
char
*
buf
)
{
SStateSessionKey
*
sess
=
ses
;
SStateSessionKey
*
sess
=
k
;
int
len
=
0
;
int
len
=
0
;
char
*
p
=
buf
;
char
*
p
=
buf
;
...
@@ -957,33 +1197,23 @@ int32_t decodeValueFunc(void* value, int32_t vlen, int64_t* ttl, char** dest) {
...
@@ -957,33 +1197,23 @@ int32_t decodeValueFunc(void* value, int32_t vlen, int64_t* ttl, char** dest) {
SStreamValue
key
=
{
0
};
SStreamValue
key
=
{
0
};
char
*
p
=
value
;
char
*
p
=
value
;
if
(
streamStateValueIsStale
(
p
))
{
if
(
streamStateValueIsStale
(
p
))
{
if
(
dest
!=
NULL
)
*
dest
=
NULL
;
goto
_EXCEPT
;
return
-
1
;
}
}
p
=
taosDecodeFixedI64
(
p
,
&
key
.
unixTimestamp
);
p
=
taosDecodeFixedI64
(
p
,
&
key
.
unixTimestamp
);
p
=
taosDecodeFixedI32
(
p
,
&
key
.
len
);
p
=
taosDecodeFixedI32
(
p
,
&
key
.
len
);
if
(
vlen
!=
(
sizeof
(
int64_t
)
+
sizeof
(
int32_t
)
+
key
.
len
))
{
if
(
vlen
!=
(
sizeof
(
int64_t
)
+
sizeof
(
int32_t
)
+
key
.
len
))
{
if
(
dest
!=
NULL
)
*
dest
=
NULL
;
qError
(
"vlen: %d, read len: %d"
,
vlen
,
key
.
len
);
qError
(
"vlen: %d, read len: %d"
,
vlen
,
key
.
len
);
return
-
1
;
goto
_EXCEPT
;
}
if
(
key
.
len
==
0
)
{
key
.
data
=
NULL
;
}
else
{
p
=
taosDecodeBinary
(
p
,
(
void
**
)
&
(
key
.
data
),
key
.
len
);
}
}
if
(
key
.
len
!=
0
&&
dest
!=
NULL
)
p
=
taosDecodeBinary
(
p
,
(
void
**
)
dest
,
key
.
len
);
if
(
ttl
!=
NULL
)
{
if
(
ttl
!=
NULL
)
*
ttl
=
key
.
unixTimestamp
==
0
?
0
:
key
.
unixTimestamp
-
taosGetTimestampMs
();
int64_t
now
=
taosGetTimestampMs
();
*
ttl
=
key
.
unixTimestamp
==
0
?
0
:
key
.
unixTimestamp
-
now
;
}
if
(
dest
!=
NULL
)
{
*
dest
=
key
.
data
;
}
else
{
taosMemoryFree
(
key
.
data
);
}
return
key
.
len
;
return
key
.
len
;
_EXCEPT:
if
(
dest
!=
NULL
)
*
dest
=
NULL
;
if
(
ttl
!=
NULL
)
*
ttl
=
0
;
return
-
1
;
}
}
const
char
*
compareDefaultName
(
void
*
arg
)
{
const
char
*
compareDefaultName
(
void
*
arg
)
{
...
@@ -1097,15 +1327,17 @@ int32_t streamStateOpenBackendCf(void* backend, char* name, char** cfs, int32_t
...
@@ -1097,15 +1327,17 @@ int32_t streamStateOpenBackendCf(void* backend, char* name, char** cfs, int32_t
}
else
{
}
else
{
qDebug
(
"succ to open rocksdb cf"
);
qDebug
(
"succ to open rocksdb cf"
);
}
}
// close default cf
// close default cf
and destroy default cfOpts
if
(((
rocksdb_column_family_handle_t
**
)
cfHandle
)[
0
]
!=
0
)
rocksdb_column_family_handle_destroy
(
cfHandle
[
0
]);
if
(((
rocksdb_column_family_handle_t
**
)
cfHandle
)[
0
]
!=
0
)
rocksdb_column_family_handle_destroy
(
cfHandle
[
0
]);
rocksdb_options_destroy
(
cfOpts
[
0
]);
rocksdb_options_destroy
(
cfOpts
[
0
]);
handle
->
db
=
db
;
handle
->
db
=
db
;
static
int32_t
cfLen
=
sizeof
(
ginitDict
)
/
sizeof
(
ginitDict
[
0
]);
static
int32_t
cfLen
=
sizeof
(
ginitDict
)
/
sizeof
(
ginitDict
[
0
]);
for
(
int
i
=
0
;
i
<
nCf
;
i
++
)
{
for
(
int
i
=
0
;
i
<
nCf
;
i
++
)
{
char
*
cf
=
cfs
[
i
];
char
*
cf
=
cfs
[
i
];
if
(
i
==
0
)
continue
;
if
(
i
==
0
)
continue
;
// skip default column family, not set opt
char
funcname
[
64
]
=
{
0
};
char
funcname
[
64
]
=
{
0
};
if
(
3
==
sscanf
(
cf
,
"0x%"
PRIx64
"-%d_%s"
,
&
streamId
,
&
taskId
,
funcname
))
{
if
(
3
==
sscanf
(
cf
,
"0x%"
PRIx64
"-%d_%s"
,
&
streamId
,
&
taskId
,
funcname
))
{
char
idstr
[
128
]
=
{
0
};
char
idstr
[
128
]
=
{
0
};
...
@@ -1127,7 +1359,6 @@ int32_t streamStateOpenBackendCf(void* backend, char* name, char** cfs, int32_t
...
@@ -1127,7 +1359,6 @@ int32_t streamStateOpenBackendCf(void* backend, char* name, char** cfs, int32_t
inst
->
pCompares
=
taosMemoryCalloc
(
cfLen
,
sizeof
(
rocksdb_comparator_t
*
));
inst
->
pCompares
=
taosMemoryCalloc
(
cfLen
,
sizeof
(
rocksdb_comparator_t
*
));
inst
->
dbOpt
=
handle
->
dbOpt
;
inst
->
dbOpt
=
handle
->
dbOpt
;
// rocksdb_writeoptions_disable_WAL(inst->wOpt, 1);
taosHashPut
(
handle
->
cfInst
,
idstr
,
strlen
(
idstr
)
+
1
,
&
inst
,
sizeof
(
void
*
));
taosHashPut
(
handle
->
cfInst
,
idstr
,
strlen
(
idstr
)
+
1
,
&
inst
,
sizeof
(
void
*
));
}
else
{
}
else
{
inst
=
*
pInst
;
inst
=
*
pInst
;
...
@@ -1181,8 +1412,8 @@ int streamStateOpenBackend(void* backend, SStreamState* pState) {
...
@@ -1181,8 +1412,8 @@ int streamStateOpenBackend(void* backend, SStreamState* pState) {
taosAcquireRef
(
streamBackendId
,
pState
->
streamBackendRid
);
taosAcquireRef
(
streamBackendId
,
pState
->
streamBackendRid
);
SBackendWrapper
*
handle
=
backend
;
SBackendWrapper
*
handle
=
backend
;
SBackendCfWrapper
*
pBackendCfWrapper
=
taosMemoryCalloc
(
1
,
sizeof
(
SBackendCfWrapper
));
SBackendCfWrapper
*
pBackendCfWrapper
=
taosMemoryCalloc
(
1
,
sizeof
(
SBackendCfWrapper
));
taosThreadMutexLock
(
&
handle
->
cfMutex
);
taosThreadMutexLock
(
&
handle
->
cfMutex
);
RocksdbCfInst
**
ppInst
=
taosHashGet
(
handle
->
cfInst
,
pState
->
pTdbState
->
idstr
,
strlen
(
pState
->
pTdbState
->
idstr
)
+
1
);
RocksdbCfInst
**
ppInst
=
taosHashGet
(
handle
->
cfInst
,
pState
->
pTdbState
->
idstr
,
strlen
(
pState
->
pTdbState
->
idstr
)
+
1
);
if
(
ppInst
!=
NULL
&&
*
ppInst
!=
NULL
)
{
if
(
ppInst
!=
NULL
&&
*
ppInst
!=
NULL
)
{
RocksdbCfInst
*
inst
=
*
ppInst
;
RocksdbCfInst
*
inst
=
*
ppInst
;
...
@@ -2355,9 +2586,7 @@ void* streamDefaultIterCreate_rocksdb(SStreamState* pState) {
...
@@ -2355,9 +2586,7 @@ void* streamDefaultIterCreate_rocksdb(SStreamState* pState) {
}
}
int32_t
streamDefaultIterValid_rocksdb
(
void
*
iter
)
{
int32_t
streamDefaultIterValid_rocksdb
(
void
*
iter
)
{
SStreamStateCur
*
pCur
=
iter
;
SStreamStateCur
*
pCur
=
iter
;
bool
val
=
rocksdb_iter_valid
(
pCur
->
iter
);
return
rocksdb_iter_valid
(
pCur
->
iter
)
?
1
:
0
;
return
val
?
1
:
0
;
}
}
void
streamDefaultIterSeek_rocksdb
(
void
*
iter
,
const
char
*
key
)
{
void
streamDefaultIterSeek_rocksdb
(
void
*
iter
,
const
char
*
key
)
{
SStreamStateCur
*
pCur
=
iter
;
SStreamStateCur
*
pCur
=
iter
;
...
@@ -2373,13 +2602,16 @@ char* streamDefaultIterKey_rocksdb(void* iter, int32_t* len) {
...
@@ -2373,13 +2602,16 @@ char* streamDefaultIterKey_rocksdb(void* iter, int32_t* len) {
}
}
char
*
streamDefaultIterVal_rocksdb
(
void
*
iter
,
int32_t
*
len
)
{
char
*
streamDefaultIterVal_rocksdb
(
void
*
iter
,
int32_t
*
len
)
{
SStreamStateCur
*
pCur
=
iter
;
SStreamStateCur
*
pCur
=
iter
;
int32_t
vlen
=
0
;
char
*
ret
=
NULL
;
char
*
dst
=
NULL
;
const
char
*
vval
=
rocksdb_iter_value
(
pCur
->
iter
,
(
size_t
*
)
&
vlen
);
int32_t
vlen
=
0
;
if
(
decodeValueFunc
((
void
*
)
vval
,
vlen
,
NULL
,
&
dst
)
<
0
)
{
const
char
*
val
=
rocksdb_iter_value
(
pCur
->
iter
,
(
size_t
*
)
&
vlen
);
*
len
=
decodeValueFunc
((
void
*
)
val
,
vlen
,
NULL
,
&
ret
);
if
(
*
len
<
0
)
{
return
NULL
;
return
NULL
;
}
}
return
dst
;
return
ret
;
}
}
// batch func
// batch func
void
*
streamStateCreateBatch
()
{
void
*
streamStateCreateBatch
()
{
...
@@ -2434,6 +2666,7 @@ int32_t streamStatePutBatchOptimize(SStreamState* pState, int32_t cfIdx, rocksdb
...
@@ -2434,6 +2666,7 @@ int32_t streamStatePutBatchOptimize(SStreamState* pState, int32_t cfIdx, rocksdb
if
(
tmpBuf
==
NULL
)
{
if
(
tmpBuf
==
NULL
)
{
taosMemoryFree
(
ttlV
);
taosMemoryFree
(
ttlV
);
}
}
{
{
char
tbuf
[
256
]
=
{
0
};
char
tbuf
[
256
]
=
{
0
};
ginitDict
[
cfIdx
].
toStrFunc
((
void
*
)
key
,
tbuf
);
ginitDict
[
cfIdx
].
toStrFunc
((
void
*
)
key
,
tbuf
);
...
...
source/libs/stream/src/streamMeta.c
浏览文件 @
b2fb94d7
...
@@ -36,14 +36,14 @@ void streamMetaCleanup() {
...
@@ -36,14 +36,14 @@ void streamMetaCleanup() {
taosCloseRef
(
streamBackendCfWrapperId
);
taosCloseRef
(
streamBackendCfWrapperId
);
}
}
int32_t
streamStateRebuild
(
SStreamMeta
*
pMeta
,
char
*
path
,
int64_t
chkpId
)
{
//
int32_t streamStateRebuild(SStreamMeta* pMeta, char* path, int64_t chkpId) {
int32_t
code
=
0
;
//
int32_t code = 0;
int32_t
nTask
=
taosHashGetSize
(
pMeta
->
pTasks
);
//
int32_t nTask = taosHashGetSize(pMeta->pTasks);
assert
(
nTask
==
0
);
//
assert(nTask == 0);
return
code
;
//
return code;
}
//
}
SStreamMeta
*
streamMetaOpen
(
const
char
*
path
,
void
*
ahandle
,
FTaskExpand
expandFunc
,
int32_t
vgId
)
{
SStreamMeta
*
streamMetaOpen
(
const
char
*
path
,
void
*
ahandle
,
FTaskExpand
expandFunc
,
int32_t
vgId
)
{
int32_t
code
=
-
1
;
int32_t
code
=
-
1
;
SStreamMeta
*
pMeta
=
taosMemoryCalloc
(
1
,
sizeof
(
SStreamMeta
));
SStreamMeta
*
pMeta
=
taosMemoryCalloc
(
1
,
sizeof
(
SStreamMeta
));
...
@@ -91,12 +91,13 @@ SStreamMeta* streamMetaOpen(const char* path, void* ahandle, FTaskExpand expandF
...
@@ -91,12 +91,13 @@ SStreamMeta* streamMetaOpen(const char* path, void* ahandle, FTaskExpand expandF
pMeta
->
pTaskBackendUnique
=
pMeta
->
pTaskBackendUnique
=
taosHashInit
(
64
,
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_BINARY
),
false
,
HASH_ENTRY_LOCK
);
taosHashInit
(
64
,
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_BINARY
),
false
,
HASH_ENTRY_LOCK
);
pMeta
->
ch
eckpoint
Saved
=
taosArrayInit
(
4
,
sizeof
(
int64_t
));
pMeta
->
ch
kp
Saved
=
taosArrayInit
(
4
,
sizeof
(
int64_t
));
pMeta
->
ch
eckpoint
InUse
=
taosArrayInit
(
4
,
sizeof
(
int64_t
));
pMeta
->
ch
kp
InUse
=
taosArrayInit
(
4
,
sizeof
(
int64_t
));
pMeta
->
ch
eckpoint
Cap
=
8
;
pMeta
->
ch
kp
Cap
=
8
;
taosInitRWLatch
(
&
pMeta
->
ch
eckpoint
DirLock
);
taosInitRWLatch
(
&
pMeta
->
ch
kp
DirLock
);
int64_t
chkpId
=
streamGetLatestCheckpointId
(
pMeta
);
int64_t
chkpId
=
streamGetLatestCheckpointId
(
pMeta
);
pMeta
->
chkpId
=
chkpId
;
pMeta
->
streamBackend
=
streamBackendInit
(
pMeta
->
path
,
chkpId
);
pMeta
->
streamBackend
=
streamBackendInit
(
pMeta
->
path
,
chkpId
);
if
(
pMeta
->
streamBackend
==
NULL
)
{
if
(
pMeta
->
streamBackend
==
NULL
)
{
...
@@ -109,7 +110,6 @@ SStreamMeta* streamMetaOpen(const char* path, void* ahandle, FTaskExpand expandF
...
@@ -109,7 +110,6 @@ SStreamMeta* streamMetaOpen(const char* path, void* ahandle, FTaskExpand expandF
terrno
=
TAOS_SYSTEM_ERROR
(
code
);
terrno
=
TAOS_SYSTEM_ERROR
(
code
);
goto
_err
;
goto
_err
;
}
}
taosInitRWLatch
(
&
pMeta
->
lock
);
taosInitRWLatch
(
&
pMeta
->
lock
);
taosThreadMutexInit
(
&
pMeta
->
backendMutex
,
NULL
);
taosThreadMutexInit
(
&
pMeta
->
backendMutex
,
NULL
);
...
@@ -128,48 +128,65 @@ _err:
...
@@ -128,48 +128,65 @@ _err:
return
NULL
;
return
NULL
;
}
}
void
streamMetaReopen
(
SStreamMeta
**
ppMeta
)
{
int32_t
streamMetaReopen
(
SStreamMeta
*
pMeta
,
int64_t
chkpId
)
{
SStreamMeta
*
pMeta
=
*
ppMeta
;
// stop all running tasking and reopen later
void
*
pIter
=
NULL
;
while
(
1
)
{
pIter
=
taosHashIterate
(
pMeta
->
pTasks
,
pIter
);
if
(
pIter
==
NULL
)
{
break
;
}
SStreamTask
*
pTask
=
*
(
SStreamTask
**
)
pIter
;
if
(
pTask
->
schedTimer
)
{
taosTmrStop
(
pTask
->
schedTimer
);
pTask
->
schedTimer
=
NULL
;
}
if
(
pTask
->
launchTaskTimer
)
{
taosTmrStop
(
pTask
->
launchTaskTimer
);
pTask
->
launchTaskTimer
=
NULL
;
}
tFreeStreamTask
(
pTask
);
}
// close stream backend
streamBackendCleanup
(
pMeta
->
streamBackend
);
taosRemoveRef
(
streamBackendId
,
pMeta
->
streamBackendRid
);
pMeta
->
streamBackendRid
=
-
1
;
pMeta
->
streamBackend
=
NULL
;
char
*
defaultPath
=
taosMemoryCalloc
(
1
,
strlen
(
pMeta
->
path
)
+
64
);
sprintf
(
defaultPath
,
"%s%s%s"
,
pMeta
->
path
,
TD_DIRSEP
,
"state"
);
taosRemoveDir
(
defaultPath
);
SStreamMeta
*
pNewMeta
=
taosMemoryCalloc
(
1
,
sizeof
(
SStreamMeta
));
char
*
newPath
=
taosMemoryCalloc
(
1
,
strlen
(
pMeta
->
path
)
+
64
);
pNewMeta
->
path
=
taosStrdup
(
pMeta
->
path
);
sprintf
(
newPath
,
"%s%s%s"
,
pMeta
->
path
,
TD_DIRSEP
,
"received"
);
pNewMeta
->
vgId
=
pMeta
->
vgId
;
pNewMeta
->
walScanCounter
=
0
;
pNewMeta
->
ahandle
=
pMeta
->
ahandle
;
pNewMeta
->
expandFunc
=
pMeta
->
expandFunc
;
*
ppMeta
=
pNewMeta
;
if
(
taosRenameFile
(
newPath
,
defaultPath
)
<
0
)
{
taosMemoryFree
(
defaultPath
);
taosMemoryFree
(
newPath
);
return
-
1
;
}
streamMetaClose
(
pMeta
);
pMeta
->
streamBackend
=
streamBackendInit
(
pMeta
->
path
,
0
);
if
(
pMeta
->
streamBackend
==
NULL
)
{
return
-
1
;
}
pMeta
->
streamBackendRid
=
taosAddRef
(
streamBackendId
,
pMeta
->
streamBackend
);
// tdbAbort(pMeta->db, pMeta->txn);
taosHashClear
(
pMeta
->
pTasks
);
// tdbTbClose(pMeta->pTaskDb);
// tdbTbClose(pMeta->pCheckpointDb);
// tdbClose(pMeta->db);
// void* pIter = NULL;
taosArrayClear
(
pMeta
->
pTaskList
);
// while (1) {
// pIter = taosHashIterate(pMeta->pTasks, pIter);
// if (pIter == NULL) {
// break;
// }
// SStreamTask* pTask = *(SStreamTask**)pIter;
taosHashClear
(
pMeta
->
pTaskBackendUnique
);
// if (pTask->schedTimer) {
// taosTmrStop(pTask->schedTimer);
// pTask->schedTimer = NULL;
// }
// if (pTask->launchTaskTimer) {
taosArrayClear
(
pMeta
->
chkpSaved
);
// taosTmrStop(pTask->launchTaskTimer);
// pTask->launchTaskTimer = NULL;
// }
// tFreeStreamTask(pTask);
taosArrayClear
(
pMeta
->
chkpInUse
);
// }
// taosHashClear(pMeta->pTasks);
return
0
;
// taosRemoveRef(streamBackendId, pMeta->streamBackendRid);
}
}
void
streamMetaClose
(
SStreamMeta
*
pMeta
)
{
void
streamMetaClose
(
SStreamMeta
*
pMeta
)
{
tdbAbort
(
pMeta
->
db
,
pMeta
->
txn
);
tdbAbort
(
pMeta
->
db
,
pMeta
->
txn
);
...
@@ -205,8 +222,8 @@ void streamMetaClose(SStreamMeta* pMeta) {
...
@@ -205,8 +222,8 @@ void streamMetaClose(SStreamMeta* pMeta) {
taosThreadMutexDestroy
(
&
pMeta
->
backendMutex
);
taosThreadMutexDestroy
(
&
pMeta
->
backendMutex
);
taosHashCleanup
(
pMeta
->
pTaskBackendUnique
);
taosHashCleanup
(
pMeta
->
pTaskBackendUnique
);
taosArrayDestroy
(
pMeta
->
ch
eckpoint
Saved
);
taosArrayDestroy
(
pMeta
->
ch
kp
Saved
);
taosArrayDestroy
(
pMeta
->
ch
eckpoint
InUse
);
taosArrayDestroy
(
pMeta
->
ch
kp
InUse
);
taosMemoryFree
(
pMeta
);
taosMemoryFree
(
pMeta
);
}
}
...
...
source/libs/transport/inc/transportInt.h
浏览文件 @
b2fb94d7
...
@@ -46,14 +46,14 @@ typedef struct {
...
@@ -46,14 +46,14 @@ typedef struct {
int8_t
connType
;
int8_t
connType
;
char
label
[
TSDB_LABEL_LEN
];
char
label
[
TSDB_LABEL_LEN
];
char
user
[
TSDB_UNI_LEN
];
// meter ID
char
user
[
TSDB_UNI_LEN
];
// meter ID
int32_t
compatibilityVer
;
int32_t
compatibilityVer
;
int32_t
compressSize
;
// -1: no compress, 0 : all data compressed, size: compress data if larger than size
int32_t
compressSize
;
// -1: no compress, 0 : all data compressed, size: compress data if larger than size
int8_t
encryption
;
// encrypt or not
int8_t
encryption
;
// encrypt or not
int32_t
retryMinInterval
;
// retry init interval
int32_t
retryMinInterval
;
// retry init interval
int32_t
retryStepFactor
;
// retry interval factor
int32_t
retryStepFactor
;
// retry interval factor
int32_t
retryMaxInterval
;
// retry max interval
int32_t
retryMaxInterval
;
// retry max interval
int32_t
retryMaxTim
oue
t
;
int32_t
retryMaxTim
eou
t
;
int32_t
failFastThreshold
;
int32_t
failFastThreshold
;
int32_t
failFastInterval
;
int32_t
failFastInterval
;
...
...
source/libs/transport/src/trans.c
浏览文件 @
b2fb94d7
...
@@ -55,7 +55,7 @@ void* rpcOpen(const SRpcInit* pInit) {
...
@@ -55,7 +55,7 @@ void* rpcOpen(const SRpcInit* pInit) {
pRpc
->
retryMinInterval
=
pInit
->
retryMinInterval
;
// retry init interval
pRpc
->
retryMinInterval
=
pInit
->
retryMinInterval
;
// retry init interval
pRpc
->
retryStepFactor
=
pInit
->
retryStepFactor
;
pRpc
->
retryStepFactor
=
pInit
->
retryStepFactor
;
pRpc
->
retryMaxInterval
=
pInit
->
retryMaxInterval
;
pRpc
->
retryMaxInterval
=
pInit
->
retryMaxInterval
;
pRpc
->
retryMaxTim
ouet
=
pInit
->
retryMaxTimoue
t
;
pRpc
->
retryMaxTim
eout
=
pInit
->
retryMaxTimeou
t
;
pRpc
->
failFastThreshold
=
pInit
->
failFastThreshold
;
pRpc
->
failFastThreshold
=
pInit
->
failFastThreshold
;
pRpc
->
failFastInterval
=
pInit
->
failFastInterval
;
pRpc
->
failFastInterval
=
pInit
->
failFastInterval
;
...
...
source/libs/transport/src/transCli.c
浏览文件 @
b2fb94d7
...
@@ -2256,7 +2256,7 @@ bool cliGenRetryRule(SCliConn* pConn, STransMsg* pResp, SCliMsg* pMsg) {
...
@@ -2256,7 +2256,7 @@ bool cliGenRetryRule(SCliConn* pConn, STransMsg* pResp, SCliMsg* pMsg) {
pCtx
->
retryMinInterval
=
pTransInst
->
retryMinInterval
;
pCtx
->
retryMinInterval
=
pTransInst
->
retryMinInterval
;
pCtx
->
retryMaxInterval
=
pTransInst
->
retryMaxInterval
;
pCtx
->
retryMaxInterval
=
pTransInst
->
retryMaxInterval
;
pCtx
->
retryStepFactor
=
pTransInst
->
retryStepFactor
;
pCtx
->
retryStepFactor
=
pTransInst
->
retryStepFactor
;
pCtx
->
retryMaxTimeout
=
pTransInst
->
retryMaxTim
oue
t
;
pCtx
->
retryMaxTimeout
=
pTransInst
->
retryMaxTim
eou
t
;
pCtx
->
retryInitTimestamp
=
taosGetTimestampMs
();
pCtx
->
retryInitTimestamp
=
taosGetTimestampMs
();
pCtx
->
retryNextInterval
=
pCtx
->
retryMinInterval
;
pCtx
->
retryNextInterval
=
pCtx
->
retryMinInterval
;
pCtx
->
retryStep
=
0
;
pCtx
->
retryStep
=
0
;
...
...
source/util/src/tarray.c
浏览文件 @
b2fb94d7
...
@@ -191,7 +191,7 @@ void* taosArrayGet(const SArray* pArray, size_t index) {
...
@@ -191,7 +191,7 @@ void* taosArrayGet(const SArray* pArray, size_t index) {
}
}
if
(
index
>=
pArray
->
size
)
{
if
(
index
>=
pArray
->
size
)
{
uError
(
"index is out of range, current:%"
PRIzu
" max:%d"
,
index
,
pArray
->
capacity
);
uError
(
"index is out of range, current:%"
PRIzu
" max:%d"
,
index
,
pArray
->
capacity
);
return
NULL
;
return
NULL
;
}
}
...
@@ -319,7 +319,7 @@ SArray* taosArrayDup(const SArray* pSrc, __array_item_dup_fn_t fn) {
...
@@ -319,7 +319,7 @@ SArray* taosArrayDup(const SArray* pSrc, __array_item_dup_fn_t fn) {
if
(
NULL
==
pSrc
)
{
if
(
NULL
==
pSrc
)
{
return
NULL
;
return
NULL
;
}
}
if
(
pSrc
->
size
==
0
)
{
// empty array list
if
(
pSrc
->
size
==
0
)
{
// empty array list
return
taosArrayInit
(
8
,
pSrc
->
elemSize
);
return
taosArrayInit
(
8
,
pSrc
->
elemSize
);
}
}
...
@@ -360,6 +360,23 @@ void taosArrayClearEx(SArray* pArray, void (*fp)(void*)) {
...
@@ -360,6 +360,23 @@ void taosArrayClearEx(SArray* pArray, void (*fp)(void*)) {
pArray
->
size
=
0
;
pArray
->
size
=
0
;
}
}
void
taosArrayClearP
(
SArray
*
pArray
,
void
(
*
fp
)(
void
*
))
{
// if (pArray == NULL) return;
// if (fp == NULL) {
// pArray->size = 0;
// return;
// }
// for (int32_t i = 0; i < pArray->size; ++i) {
// fp(TARRAY_GET_ELEM(pArray, i));
// }
if
(
pArray
)
{
for
(
int32_t
i
=
0
;
i
<
pArray
->
size
;
i
++
)
{
fp
(
*
(
void
**
)
TARRAY_GET_ELEM
(
pArray
,
i
));
}
}
taosArrayClear
(
pArray
);
}
void
*
taosArrayDestroy
(
SArray
*
pArray
)
{
void
*
taosArrayDestroy
(
SArray
*
pArray
)
{
if
(
pArray
)
{
if
(
pArray
)
{
...
@@ -492,7 +509,7 @@ void* taosDecodeArray(const void* buf, SArray** pArray, FDecode decode, int32_t
...
@@ -492,7 +509,7 @@ void* taosDecodeArray(const void* buf, SArray** pArray, FDecode decode, int32_t
// order array<type *>
// order array<type *>
void
taosArraySortPWithExt
(
SArray
*
pArray
,
__ext_compar_fn_t
fn
,
const
void
*
param
)
{
void
taosArraySortPWithExt
(
SArray
*
pArray
,
__ext_compar_fn_t
fn
,
const
void
*
param
)
{
taosqsort
(
pArray
->
pData
,
pArray
->
size
,
pArray
->
elemSize
,
param
,
fn
);
taosqsort
(
pArray
->
pData
,
pArray
->
size
,
pArray
->
elemSize
,
param
,
fn
);
// taosArrayGetSize(pArray) > 8 ? taosArrayQuickSort(pArray, fn, param) : taosArrayInsertSort(pArray, fn, param);
// taosArrayGetSize(pArray) > 8 ? taosArrayQuickSort(pArray, fn, param) : taosArrayInsertSort(pArray, fn, param);
}
}
void
taosArraySwap
(
SArray
*
a
,
SArray
*
b
)
{
void
taosArraySwap
(
SArray
*
a
,
SArray
*
b
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录