Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
67463396
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看板
提交
67463396
编写于
8月 17, 2023
作者:
H
Haojun Liao
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'origin/enh/triggerCheckPoint2' into enh/triggerCheckPoint2
# Conflicts: # source/libs/stream/src/streamSnapshot.c
上级
ea6574b3
114df7c3
变更
12
展开全部
隐藏空白更改
内联
并排
Showing
12 changed file
with
643 addition
and
241 deletion
+643
-241
include/libs/stream/tstream.h
include/libs/stream/tstream.h
+17
-12
include/util/tarray.h
include/util/tarray.h
+3
-0
source/dnode/mnode/impl/src/mndStream.c
source/dnode/mnode/impl/src/mndStream.c
+2
-2
source/dnode/vnode/src/inc/vnodeInt.h
source/dnode/vnode/src/inc/vnodeInt.h
+5
-1
source/dnode/vnode/src/tq/tqStreamStateSnap.c
source/dnode/vnode/src/tq/tqStreamStateSnap.c
+23
-7
source/dnode/vnode/src/vnd/vnodeSnapshot.c
source/dnode/vnode/src/vnd/vnodeSnapshot.c
+29
-26
source/libs/stream/src/streamBackendRocksdb.c
source/libs/stream/src/streamBackendRocksdb.c
+358
-117
source/libs/stream/src/streamMeta.c
source/libs/stream/src/streamMeta.c
+71
-23
source/libs/stream/src/streamSnapshot.c
source/libs/stream/src/streamSnapshot.c
+115
-50
source/libs/stream/src/streamState.c
source/libs/stream/src/streamState.c
+1
-1
source/libs/tdb/test/tdbPageRecycleTest.cpp
source/libs/tdb/test/tdbPageRecycleTest.cpp
+1
-1
source/util/src/tarray.c
source/util/src/tarray.c
+18
-1
未找到文件。
include/libs/stream/tstream.h
浏览文件 @
67463396
...
@@ -14,13 +14,13 @@
...
@@ -14,13 +14,13 @@
*/
*/
#include "os.h"
#include "os.h"
#include "ttimer.h"
#include "streamState.h"
#include "streamState.h"
#include "tdatablock.h"
#include "tdatablock.h"
#include "tdbInt.h"
#include "tdbInt.h"
#include "tmsg.h"
#include "tmsg.h"
#include "tmsgcb.h"
#include "tmsgcb.h"
#include "tqueue.h"
#include "tqueue.h"
#include "ttimer.h"
#ifdef __cplusplus
#ifdef __cplusplus
extern
"C"
{
extern
"C"
{
...
@@ -49,7 +49,7 @@ enum {
...
@@ -49,7 +49,7 @@ enum {
TASK_STATUS__SCAN_HISTORY
,
// stream task scan history data by using tsdbread in the stream scanner
TASK_STATUS__SCAN_HISTORY
,
// stream task scan history data by using tsdbread in the stream scanner
TASK_STATUS__HALT
,
// pause, but not be manipulated by user command
TASK_STATUS__HALT
,
// pause, but not be manipulated by user command
TASK_STATUS__PAUSE
,
// pause
TASK_STATUS__PAUSE
,
// pause
TASK_STATUS__CK
,
// stream task is in checkpoint status, no data are allowed to put into inputQ anymore
TASK_STATUS__CK
,
// stream task is in checkpoint status, no data are allowed to put into inputQ anymore
TASK_STATUS__CK_READY
,
TASK_STATUS__CK_READY
,
};
};
...
@@ -324,8 +324,8 @@ struct SStreamTask {
...
@@ -324,8 +324,8 @@ struct SStreamTask {
int32_t
nextCheckId
;
int32_t
nextCheckId
;
SArray
*
checkpointInfo
;
// SArray<SStreamCheckpointInfo>
SArray
*
checkpointInfo
;
// SArray<SStreamCheckpointInfo>
STaskTimestamp
tsInfo
;
STaskTimestamp
tsInfo
;
SArray
*
pReadyMsgList
;
// SArray<SStreamChkptReadyInfo*>
SArray
*
pReadyMsgList
;
// SArray<SStreamChkptReadyInfo*>
TdThreadMutex
lock
;
// secure the operation of set task status and puting data into inputQ
TdThreadMutex
lock
;
// secure the operation of set task status and puting data into inputQ
SArray
*
pUpstreamInfoList
;
SArray
*
pUpstreamInfoList
;
// output
// output
...
@@ -390,11 +390,13 @@ typedef struct SStreamMeta {
...
@@ -390,11 +390,13 @@ typedef struct SStreamMeta {
tmr_h
hbTmr
;
tmr_h
hbTmr
;
SMgmtInfo
mgmtInfo
;
SMgmtInfo
mgmtInfo
;
int32_t
chkptNotReadyTasks
;
int32_t
chkptNotReadyTasks
;
SArray
*
checkpointSaved
;
SArray
*
checkpointInUse
;
int64_t
chkpId
;
int32_t
checkpointCap
;
SArray
*
chkpSaved
;
SRWLatch
checkpointDirLock
;
SArray
*
chkpInUse
;
int32_t
chkpCap
;
SRWLatch
chkpDirLock
;
}
SStreamMeta
;
}
SStreamMeta
;
int32_t
tEncodeStreamEpInfo
(
SEncoder
*
pEncoder
,
const
SStreamChildEpInfo
*
pInfo
);
int32_t
tEncodeStreamEpInfo
(
SEncoder
*
pEncoder
,
const
SStreamChildEpInfo
*
pInfo
);
...
@@ -420,7 +422,7 @@ typedef struct {
...
@@ -420,7 +422,7 @@ typedef struct {
typedef
struct
{
typedef
struct
{
int32_t
type
;
int32_t
type
;
int64_t
stage
;
//
nodeId from upstream task
int64_t
stage
;
//
nodeId from upstream task
int64_t
streamId
;
int64_t
streamId
;
int32_t
taskId
;
int32_t
taskId
;
int32_t
srcVgId
;
int32_t
srcVgId
;
...
@@ -568,7 +570,7 @@ typedef struct SNodeUpdateInfo {
...
@@ -568,7 +570,7 @@ typedef struct SNodeUpdateInfo {
typedef
struct
SStreamTaskNodeUpdateMsg
{
typedef
struct
SStreamTaskNodeUpdateMsg
{
int64_t
streamId
;
int64_t
streamId
;
int32_t
taskId
;
int32_t
taskId
;
SArray
*
pNodeList
;
// SArray<SNodeUpdateInfo>
SArray
*
pNodeList
;
// SArray<SNodeUpdateInfo>
}
SStreamTaskNodeUpdateMsg
;
}
SStreamTaskNodeUpdateMsg
;
int32_t
tEncodeStreamTaskUpdateMsg
(
SEncoder
*
pEncoder
,
const
SStreamTaskNodeUpdateMsg
*
pMsg
);
int32_t
tEncodeStreamTaskUpdateMsg
(
SEncoder
*
pEncoder
,
const
SStreamTaskNodeUpdateMsg
*
pMsg
);
...
@@ -616,7 +618,7 @@ int32_t streamProcessDispatchRsp(SStreamTask* pTask, SStreamDispatchRsp* pRsp, i
...
@@ -616,7 +618,7 @@ int32_t streamProcessDispatchRsp(SStreamTask* pTask, SStreamDispatchRsp* pRsp, i
void
streamTaskCloseUpstreamInput
(
SStreamTask
*
pTask
,
int32_t
taskId
);
void
streamTaskCloseUpstreamInput
(
SStreamTask
*
pTask
,
int32_t
taskId
);
void
streamTaskOpenAllUpstreamInput
(
SStreamTask
*
pTask
);
void
streamTaskOpenAllUpstreamInput
(
SStreamTask
*
pTask
);
int32_t
streamProcessRetrieveReq
(
SStreamTask
*
pTask
,
SStreamRetrieveReq
*
pReq
,
SRpcMsg
*
pMsg
);
int32_t
streamProcessRetrieveReq
(
SStreamTask
*
pTask
,
SStreamRetrieveReq
*
pReq
,
SRpcMsg
*
pMsg
);
void
streamTaskOpenAllUpstreamInput
(
SStreamTask
*
pTask
);
void
streamTaskOpenAllUpstreamInput
(
SStreamTask
*
pTask
);
void
streamTaskCloseUpstreamInput
(
SStreamTask
*
pTask
,
int32_t
taskId
);
void
streamTaskCloseUpstreamInput
(
SStreamTask
*
pTask
,
int32_t
taskId
);
SStreamChildEpInfo
*
streamTaskGetUpstreamTaskEpInfo
(
SStreamTask
*
pTask
,
int32_t
taskId
);
SStreamChildEpInfo
*
streamTaskGetUpstreamTaskEpInfo
(
SStreamTask
*
pTask
,
int32_t
taskId
);
...
@@ -696,6 +698,9 @@ int32_t streamMetaGetNumOfTasks(SStreamMeta* pMeta); // todo remove it
...
@@ -696,6 +698,9 @@ int32_t streamMetaGetNumOfTasks(SStreamMeta* pMeta); // todo remove it
SStreamTask
*
streamMetaAcquireTask
(
SStreamMeta
*
pMeta
,
int64_t
streamId
,
int32_t
taskId
);
SStreamTask
*
streamMetaAcquireTask
(
SStreamMeta
*
pMeta
,
int64_t
streamId
,
int32_t
taskId
);
void
streamMetaReleaseTask
(
SStreamMeta
*
pMeta
,
SStreamTask
*
pTask
);
void
streamMetaReleaseTask
(
SStreamMeta
*
pMeta
,
SStreamTask
*
pTask
);
// 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
);
int32_t
streamLoadTasks
(
SStreamMeta
*
pMeta
);
int32_t
streamLoadTasks
(
SStreamMeta
*
pMeta
);
...
...
include/util/tarray.h
浏览文件 @
67463396
...
@@ -200,8 +200,11 @@ void taosArrayClear(SArray* pArray);
...
@@ -200,8 +200,11 @@ 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
);
...
...
source/dnode/mnode/impl/src/mndStream.c
浏览文件 @
67463396
...
@@ -48,6 +48,7 @@ typedef struct SStreamVnodeRevertIndex {
...
@@ -48,6 +48,7 @@ typedef struct SStreamVnodeRevertIndex {
static
int32_t
mndNodeCheckSentinel
=
0
;
static
int32_t
mndNodeCheckSentinel
=
0
;
static
SStreamVnodeRevertIndex
execNodeList
;
static
SStreamVnodeRevertIndex
execNodeList
;
#define MND_STREAM_CHECKPOINT_NAME "stream-checkpoint"
static
int32_t
mndStreamActionInsert
(
SSdb
*
pSdb
,
SStreamObj
*
pStream
);
static
int32_t
mndStreamActionInsert
(
SSdb
*
pSdb
,
SStreamObj
*
pStream
);
static
int32_t
mndStreamActionDelete
(
SSdb
*
pSdb
,
SStreamObj
*
pStream
);
static
int32_t
mndStreamActionDelete
(
SSdb
*
pSdb
,
SStreamObj
*
pStream
);
static
int32_t
mndStreamActionUpdate
(
SSdb
*
pSdb
,
SStreamObj
*
pOldStream
,
SStreamObj
*
pNewStream
);
static
int32_t
mndStreamActionUpdate
(
SSdb
*
pSdb
,
SStreamObj
*
pOldStream
,
SStreamObj
*
pNewStream
);
...
@@ -1063,7 +1064,6 @@ static int32_t mndAddStreamCheckpointToTrans(STrans *pTrans, SStreamObj *pStream
...
@@ -1063,7 +1064,6 @@ static int32_t mndAddStreamCheckpointToTrans(STrans *pTrans, SStreamObj *pStream
}
}
}
}
pStream
->
checkpointFreq
=
checkpointId
;
pStream
->
checkpointId
=
checkpointId
;
pStream
->
checkpointId
=
checkpointId
;
pStream
->
checkpointFreq
=
taosGetTimestampMs
();
pStream
->
checkpointFreq
=
taosGetTimestampMs
();
atomic_store_64
(
&
pStream
->
currentTick
,
0
);
atomic_store_64
(
&
pStream
->
currentTick
,
0
);
...
@@ -1100,7 +1100,7 @@ static int32_t mndProcessStreamDoCheckpoint(SRpcMsg *pReq) {
...
@@ -1100,7 +1100,7 @@ static int32_t mndProcessStreamDoCheckpoint(SRpcMsg *pReq) {
SMStreamDoCheckpointMsg
*
pMsg
=
(
SMStreamDoCheckpointMsg
*
)
pReq
->
pCont
;
SMStreamDoCheckpointMsg
*
pMsg
=
(
SMStreamDoCheckpointMsg
*
)
pReq
->
pCont
;
int64_t
checkpointId
=
pMsg
->
checkpointId
;
int64_t
checkpointId
=
pMsg
->
checkpointId
;
STrans
*
pTrans
=
mndTransCreate
(
pMnode
,
TRN_POLICY_RETRY
,
TRN_CONFLICT_DB_INSIDE
,
NULL
,
"stream-checkpoint"
);
STrans
*
pTrans
=
mndTransCreate
(
pMnode
,
TRN_POLICY_RETRY
,
TRN_CONFLICT_DB_INSIDE
,
NULL
,
MND_STREAM_CHECKPOINT_NAME
);
if
(
pTrans
==
NULL
)
{
if
(
pTrans
==
NULL
)
{
mError
(
"failed to trigger checkpoint, reason: %s"
,
tstrerror
(
TSDB_CODE_OUT_OF_MEMORY
));
mError
(
"failed to trigger checkpoint, reason: %s"
,
tstrerror
(
TSDB_CODE_OUT_OF_MEMORY
));
return
-
1
;
return
-
1
;
...
...
source/dnode/vnode/src/inc/vnodeInt.h
浏览文件 @
67463396
...
@@ -93,7 +93,7 @@ typedef struct SQueryNode SQueryNode;
...
@@ -93,7 +93,7 @@ typedef struct SQueryNode SQueryNode;
#define VNODE_BUFPOOL_SEGMENTS 3
#define VNODE_BUFPOOL_SEGMENTS 3
#define VND_INFO_FNAME "vnode.json"
#define VND_INFO_FNAME
"vnode.json"
#define VND_INFO_FNAME_TMP "vnode_tmp.json"
#define VND_INFO_FNAME_TMP "vnode_tmp.json"
// vnd.h
// vnd.h
...
@@ -330,6 +330,10 @@ int32_t streamStateSnapRead(SStreamStateReader* pReader, uint8_t** ppData);
...
@@ -330,6 +330,10 @@ int32_t streamStateSnapRead(SStreamStateReader* pReader, uint8_t** ppData);
int32_t
streamStateSnapWriterOpen
(
STQ
*
pTq
,
int64_t
sver
,
int64_t
ever
,
SStreamStateWriter
**
ppWriter
);
int32_t
streamStateSnapWriterOpen
(
STQ
*
pTq
,
int64_t
sver
,
int64_t
ever
,
SStreamStateWriter
**
ppWriter
);
int32_t
streamStateSnapWriterClose
(
SStreamStateWriter
*
pWriter
,
int8_t
rollback
);
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
,
int64_t
chkpId
);
int32_t
streamStateLoadTasks
(
SStreamStateWriter
*
pWriter
);
// SStreamTaskReader ======================================
// SStreamTaskReader ======================================
// SStreamStateWriter =====================================
// SStreamStateWriter =====================================
// SStreamStateReader =====================================
// SStreamStateReader =====================================
...
...
source/dnode/vnode/src/tq/tqStreamStateSnap.c
浏览文件 @
67463396
...
@@ -41,13 +41,17 @@ int32_t streamStateSnapReaderOpen(STQ* pTq, int64_t sver, int64_t ever, SStreamS
...
@@ -41,13 +41,17 @@ int32_t streamStateSnapReaderOpen(STQ* pTq, int64_t sver, int64_t ever, SStreamS
code
=
TSDB_CODE_OUT_OF_MEMORY
;
code
=
TSDB_CODE_OUT_OF_MEMORY
;
goto
_err
;
goto
_err
;
}
}
SStreamMeta
*
meta
=
pTq
->
pStreamMeta
;
pReader
->
pTq
=
pTq
;
pReader
->
pTq
=
pTq
;
pReader
->
sver
=
sver
;
pReader
->
sver
=
sver
;
pReader
->
ever
=
ever
;
pReader
->
ever
=
ever
;
int64_t
chkpId
=
meta
?
meta
->
chkpId
:
0
;
SStreamSnapReader
*
pSnapReader
=
NULL
;
SStreamSnapReader
*
pSnapReader
=
NULL
;
sprintf
(
tdir
,
"%s%s%s%s%s"
,
pTq
->
path
,
TD_DIRSEP
,
VNODE_TQ_STREAM
,
TD_DIRSEP
,
"checkpoints"
);
if
(
streamSnapReaderOpen
(
pTq
,
sver
,
ever
,
tdir
,
&
pSnapReader
)
==
0
)
{
if
(
streamSnapReaderOpen
(
pTq
,
sver
,
chkpId
,
pTq
->
path
,
&
pSnapReader
)
==
0
)
{
pReader
->
complete
=
1
;
pReader
->
complete
=
1
;
}
else
{
}
else
{
code
=
-
1
;
code
=
-
1
;
...
@@ -131,14 +135,18 @@ int32_t streamStateSnapWriterOpen(STQ* pTq, int64_t sver, int64_t ever, SStreamS
...
@@ -131,14 +135,18 @@ int32_t streamStateSnapWriterOpen(STQ* pTq, int64_t sver, int64_t ever, SStreamS
pWriter
->
sver
=
sver
;
pWriter
->
sver
=
sver
;
pWriter
->
ever
=
ever
;
pWriter
->
ever
=
ever
;
sprintf
(
tdir
,
"%s%s%s"
,
pTq
->
path
,
TD_DIRSEP
,
VNODE_TQ_STREAM
);
sprintf
(
tdir
,
"%s%s%s%s%s"
,
pTq
->
path
,
TD_DIRSEP
,
VNODE_TQ_STREAM
,
TD_DIRSEP
,
"received"
);
taosMkDir
(
tdir
);
SStreamSnapWriter
*
pSnapWriter
=
NULL
;
SStreamSnapWriter
*
pSnapWriter
=
NULL
;
if
(
streamSnapWriterOpen
(
pTq
,
sver
,
ever
,
tdir
,
&
pSnapWriter
)
<
0
)
{
if
(
streamSnapWriterOpen
(
pTq
,
sver
,
ever
,
tdir
,
&
pSnapWriter
)
<
0
)
{
goto
_err
;
goto
_err
;
}
}
tqDebug
(
"vgId:%d, vnode stream-state snapshot writer opened
"
,
TD_VID
(
pTq
->
pVnode
)
);
tqDebug
(
"vgId:%d, vnode stream-state snapshot writer opened
, path:%s"
,
TD_VID
(
pTq
->
pVnode
),
tdir
);
pWriter
->
pWriterImpl
=
pSnapWriter
;
pWriter
->
pWriterImpl
=
pSnapWriter
;
*
ppWriter
=
pWriter
;
return
code
;
return
code
;
_err:
_err:
tqError
(
"vgId:%d, vnode stream-state snapshot writer failed to open since %s"
,
TD_VID
(
pTq
->
pVnode
),
tstrerror
(
code
));
tqError
(
"vgId:%d, vnode stream-state snapshot writer failed to open since %s"
,
TD_VID
(
pTq
->
pVnode
),
tstrerror
(
code
));
...
@@ -151,13 +159,21 @@ int32_t streamStateSnapWriterClose(SStreamStateWriter* pWriter, int8_t rollback)
...
@@ -151,13 +159,21 @@ int32_t streamStateSnapWriterClose(SStreamStateWriter* pWriter, int8_t rollback)
int32_t
code
=
0
;
int32_t
code
=
0
;
tqDebug
(
"vgId:%d, vnode stream-state snapshot writer closed"
,
TD_VID
(
pWriter
->
pTq
->
pVnode
));
tqDebug
(
"vgId:%d, vnode stream-state snapshot writer closed"
,
TD_VID
(
pWriter
->
pTq
->
pVnode
));
code
=
streamSnapWriterClose
(
pWriter
->
pWriterImpl
,
rollback
);
code
=
streamSnapWriterClose
(
pWriter
->
pWriterImpl
,
rollback
);
return
code
;
}
int32_t
streamStateRebuildFromSnap
(
SStreamStateWriter
*
pWriter
,
int64_t
chkpId
)
{
int32_t
code
=
streamMetaReopen
(
pWriter
->
pTq
->
pStreamMeta
,
chkpId
);
if
(
code
==
0
)
{
code
=
streamStateLoadTasks
(
pWriter
);
}
taosMemoryFree
(
pWriter
);
taosMemoryFree
(
pWriter
);
return
code
;
return
code
;
}
}
int32_t
streamStateLoadTasks
(
SStreamStateWriter
*
pWriter
)
{
return
streamLoadTasks
(
pWriter
->
pTq
->
pStreamMeta
);
}
int32_t
streamStateSnapWrite
(
SStreamStateWriter
*
pWriter
,
uint8_t
*
pData
,
uint32_t
nData
)
{
int32_t
streamStateSnapWrite
(
SStreamStateWriter
*
pWriter
,
uint8_t
*
pData
,
uint32_t
nData
)
{
int32_t
code
=
0
;
tqDebug
(
"vgId:%d, vnode stream-state snapshot write"
,
TD_VID
(
pWriter
->
pTq
->
pVnode
));
tqDebug
(
"vgId:%d, vnode stream-state snapshot write"
,
TD_VID
(
pWriter
->
pTq
->
pVnode
));
code
=
streamSnapWrite
(
pWriter
->
pWriterImpl
,
pData
+
sizeof
(
SSnapDataHdr
),
nData
-
sizeof
(
SSnapDataHdr
));
return
streamSnapWrite
(
pWriter
->
pWriterImpl
,
pData
+
sizeof
(
SSnapDataHdr
),
nData
-
sizeof
(
SSnapDataHdr
));
return
code
;
}
}
source/dnode/vnode/src/vnd/vnodeSnapshot.c
浏览文件 @
67463396
...
@@ -248,31 +248,30 @@ int32_t vnodeSnapRead(SVSnapReader *pReader, uint8_t **ppData, uint32_t *nData)
...
@@ -248,31 +248,30 @@ int32_t vnodeSnapRead(SVSnapReader *pReader, uint8_t **ppData, uint32_t *nData)
}
}
}
}
}
}
// if (!pReader->streamStateDone) {
if
(
!
pReader
->
streamStateDone
)
{
// if (pReader->pStreamStateReader == NULL) {
if
(
pReader
->
pStreamStateReader
==
NULL
)
{
// code =
code
=
// streamStateSnapReaderOpen(pReader->pVnode->pTq, pReader->sver, pReader->sver,
streamStateSnapReaderOpen
(
pReader
->
pVnode
->
pTq
,
pReader
->
sver
,
pReader
->
sver
,
&
pReader
->
pStreamStateReader
);
// &pReader->pStreamStateReader);
if
(
code
)
{
// if (code) {
pReader
->
streamStateDone
=
1
;
// pReader->streamStateDone = 1;
pReader
->
pStreamStateReader
=
NULL
;
// pReader->pStreamStateReader = NULL;
goto
_err
;
// goto _err;
}
// }
}
// }
code
=
streamStateSnapRead
(
pReader
->
pStreamStateReader
,
ppData
);
// code = streamStateSnapRead(pReader->pStreamStateReader, ppData);
if
(
code
)
{
// if (code) {
goto
_err
;
// goto _err;
}
else
{
// } else {
if
(
*
ppData
)
{
// if (*ppData) {
goto
_exit
;
// goto _exit;
}
else
{
// } else {
pReader
->
streamStateDone
=
1
;
// pReader->streamStateDone = 1;
code
=
streamStateSnapReaderClose
(
pReader
->
pStreamStateReader
);
// code = streamStateSnapReaderClose(pReader->pStreamStateReader);
if
(
code
)
goto
_err
;
// if (code) goto _err;
pReader
->
pStreamStateReader
=
NULL
;
// pReader->pStreamStateReader = NULL;
}
// }
}
// }
}
// }
// RSMA ==============
// RSMA ==============
if
(
VND_IS_RSMA
(
pReader
->
pVnode
)
&&
!
pReader
->
rsmaDone
)
{
if
(
VND_IS_RSMA
(
pReader
->
pVnode
)
&&
!
pReader
->
rsmaDone
)
{
...
@@ -419,6 +418,10 @@ int32_t vnodeSnapWriterClose(SVSnapWriter *pWriter, int8_t rollback, SSnapshot *
...
@@ -419,6 +418,10 @@ 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
,
0
);
pWriter
->
pStreamStateWriter
=
NULL
;
if
(
code
)
goto
_exit
;
}
}
if
(
pWriter
->
pRsmaSnapWriter
)
{
if
(
pWriter
->
pRsmaSnapWriter
)
{
...
@@ -527,7 +530,7 @@ int32_t vnodeSnapWrite(SVSnapWriter *pWriter, uint8_t *pData, uint32_t nData) {
...
@@ -527,7 +530,7 @@ int32_t vnodeSnapWrite(SVSnapWriter *pWriter, uint8_t *pData, uint32_t nData) {
code
=
streamTaskSnapWrite
(
pWriter
->
pStreamTaskWriter
,
pData
,
nData
);
code
=
streamTaskSnapWrite
(
pWriter
->
pStreamTaskWriter
,
pData
,
nData
);
if
(
code
)
goto
_err
;
if
(
code
)
goto
_err
;
}
break
;
}
break
;
case
SNAP_DATA_STREAM_STATE
:
{
case
SNAP_DATA_STREAM_STATE
_BACKEND
:
{
if
(
pWriter
->
pStreamStateWriter
==
NULL
)
{
if
(
pWriter
->
pStreamStateWriter
==
NULL
)
{
code
=
streamStateSnapWriterOpen
(
pVnode
->
pTq
,
pWriter
->
sver
,
pWriter
->
ever
,
&
pWriter
->
pStreamStateWriter
);
code
=
streamStateSnapWriterOpen
(
pVnode
->
pTq
,
pWriter
->
sver
,
pWriter
->
ever
,
&
pWriter
->
pStreamStateWriter
);
if
(
code
)
goto
_err
;
if
(
code
)
goto
_err
;
...
...
source/libs/stream/src/streamBackendRocksdb.c
浏览文件 @
67463396
此差异已折叠。
点击以展开。
source/libs/stream/src/streamMeta.c
浏览文件 @
67463396
...
@@ -48,22 +48,13 @@ SStreamMeta* streamMetaOpen(const char* path, void* ahandle, FTaskExpand expandF
...
@@ -48,22 +48,13 @@ SStreamMeta* streamMetaOpen(const char* path, void* ahandle, FTaskExpand expandF
return
NULL
;
return
NULL
;
}
}
int32_t
len
=
strlen
(
path
)
+
20
;
char
*
tpath
=
taosMemoryCalloc
(
1
,
strlen
(
path
)
+
64
);
char
*
streamPath
=
taosMemoryCalloc
(
1
,
len
);
sprintf
(
tpath
,
"%s%s%s"
,
path
,
TD_DIRSEP
,
"stream"
);
sprintf
(
streamPath
,
"%s/%s"
,
path
,
"stream"
);
pMeta
->
path
=
tpath
;
pMeta
->
path
=
taosStrdup
(
streamPath
);
if
(
tdbOpen
(
pMeta
->
path
,
16
*
1024
,
1
,
&
pMeta
->
db
,
0
)
<
0
)
{
goto
_err
;
}
memset
(
streamPath
,
0
,
len
);
if
(
tdbOpen
(
pMeta
->
path
,
16
*
1024
,
1
,
&
pMeta
->
db
,
0
)
<
0
)
{
sprintf
(
streamPath
,
"%s/%s"
,
pMeta
->
path
,
"checkpoints"
);
code
=
taosMulModeMkDir
(
streamPath
,
0755
);
if
(
code
!=
0
)
{
terrno
=
TAOS_SYSTEM_ERROR
(
code
);
goto
_err
;
goto
_err
;
}
}
if
(
tdbTbOpen
(
"task.db"
,
sizeof
(
int32_t
),
-
1
,
NULL
,
pMeta
->
db
,
&
pMeta
->
pTaskDb
,
0
)
<
0
)
{
if
(
tdbTbOpen
(
"task.db"
,
sizeof
(
int32_t
),
-
1
,
NULL
,
pMeta
->
db
,
&
pMeta
->
pTaskDb
,
0
)
<
0
)
{
goto
_err
;
goto
_err
;
}
}
...
@@ -100,12 +91,13 @@ SStreamMeta* streamMetaOpen(const char* path, void* ahandle, FTaskExpand expandF
...
@@ -100,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
)
{
...
@@ -118,9 +110,6 @@ SStreamMeta* streamMetaOpen(const char* path, void* ahandle, FTaskExpand expandF
...
@@ -118,9 +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
;
}
}
taosMemoryFree
(
streamPath
);
taosInitRWLatch
(
&
pMeta
->
lock
);
taosInitRWLatch
(
&
pMeta
->
lock
);
taosThreadMutexInit
(
&
pMeta
->
backendMutex
,
NULL
);
taosThreadMutexInit
(
&
pMeta
->
backendMutex
,
NULL
);
...
@@ -128,7 +117,6 @@ SStreamMeta* streamMetaOpen(const char* path, void* ahandle, FTaskExpand expandF
...
@@ -128,7 +117,6 @@ SStreamMeta* streamMetaOpen(const char* path, void* ahandle, FTaskExpand expandF
return
pMeta
;
return
pMeta
;
_err:
_err:
taosMemoryFree
(
streamPath
);
taosMemoryFree
(
pMeta
->
path
);
taosMemoryFree
(
pMeta
->
path
);
if
(
pMeta
->
pTasks
)
taosHashCleanup
(
pMeta
->
pTasks
);
if
(
pMeta
->
pTasks
)
taosHashCleanup
(
pMeta
->
pTasks
);
if
(
pMeta
->
pTaskList
)
taosArrayDestroy
(
pMeta
->
pTaskList
);
if
(
pMeta
->
pTaskList
)
taosArrayDestroy
(
pMeta
->
pTaskList
);
...
@@ -141,6 +129,66 @@ _err:
...
@@ -141,6 +129,66 @@ _err:
return
NULL
;
return
NULL
;
}
}
int32_t
streamMetaReopen
(
SStreamMeta
*
pMeta
,
int64_t
chkpId
)
{
// 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
);
char
*
newPath
=
taosMemoryCalloc
(
1
,
strlen
(
pMeta
->
path
)
+
64
);
sprintf
(
newPath
,
"%s%s%s"
,
pMeta
->
path
,
TD_DIRSEP
,
"received"
);
if
(
taosRenameFile
(
newPath
,
defaultPath
)
<
0
)
{
taosMemoryFree
(
defaultPath
);
taosMemoryFree
(
newPath
);
return
-
1
;
}
pMeta
->
streamBackend
=
streamBackendInit
(
pMeta
->
path
,
0
);
if
(
pMeta
->
streamBackend
==
NULL
)
{
return
-
1
;
}
pMeta
->
streamBackendRid
=
taosAddRef
(
streamBackendId
,
pMeta
->
streamBackend
);
taosHashClear
(
pMeta
->
pTasks
);
taosArrayClear
(
pMeta
->
pTaskList
);
taosHashClear
(
pMeta
->
pTaskBackendUnique
);
taosArrayClear
(
pMeta
->
chkpSaved
);
taosArrayClear
(
pMeta
->
chkpInUse
);
return
0
;
}
void
streamMetaClose
(
SStreamMeta
*
pMeta
)
{
void
streamMetaClose
(
SStreamMeta
*
pMeta
)
{
qDebug
(
"start to close stream meta"
);
qDebug
(
"start to close stream meta"
);
if
(
pMeta
==
NULL
)
{
if
(
pMeta
==
NULL
)
{
...
@@ -168,8 +216,8 @@ void streamMetaClose(SStreamMeta* pMeta) {
...
@@ -168,8 +216,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
);
qDebug
(
"end to close stream meta"
);
qDebug
(
"end to close stream meta"
);
...
...
source/libs/stream/src/streamSnapshot.c
浏览文件 @
67463396
...
@@ -64,6 +64,7 @@ struct SStreamSnapReader {
...
@@ -64,6 +64,7 @@ struct SStreamSnapReader {
int64_t
sver
;
int64_t
sver
;
int64_t
ever
;
int64_t
ever
;
SStreamSnapHandle
handle
;
SStreamSnapHandle
handle
;
int64_t
checkpointId
;
};
};
struct
SStreamSnapWriter
{
struct
SStreamSnapWriter
{
void
*
pMeta
;
void
*
pMeta
;
...
@@ -78,31 +79,60 @@ const char* ROCKSDB_CURRENT = "CURRENT";
...
@@ -78,31 +79,60 @@ const char* ROCKSDB_CURRENT = "CURRENT";
const
char
*
ROCKSDB_CHECKPOINT_META
=
"CHECKPOINT"
;
const
char
*
ROCKSDB_CHECKPOINT_META
=
"CHECKPOINT"
;
static
int64_t
kBlockSize
=
64
*
1024
;
static
int64_t
kBlockSize
=
64
*
1024
;
int32_t
streamSnapHandleInit
(
SStreamSnapHandle
*
handle
,
char
*
path
);
int32_t
streamSnapHandleInit
(
SStreamSnapHandle
*
handle
,
char
*
path
,
int64_t
chkpId
);
void
streamSnapHandleDestroy
(
SStreamSnapHandle
*
handle
);
void
streamSnapHandleDestroy
(
SStreamSnapHandle
*
handle
);
// static void streamBuildFname(char* path, char* file, char* fullname)
// static void streamBuildFname(char* path, char* file, char* fullname)
#define STREAM_ROCKSDB_BUILD_FULLNAME(path, file, fullname) \
#define STREAM_ROCKSDB_BUILD_FULLNAME(path, file, fullname) \
do { \
do { \
sprintf(fullname, "%s
/%s", path, file);
\
sprintf(fullname, "%s
%s%s", path, TD_DIRSEP, file);
\
} while (0)
} while (0)
int32_t
streamSnapHandleInit
(
SStreamSnapHandle
*
pHandle
,
char
*
path
)
{
int32_t
streamGetFileSize
(
char
*
path
,
char
*
name
,
int64_t
*
sz
)
{
int
ret
=
0
;
char
*
fullname
=
taosMemoryCalloc
(
1
,
strlen
(
path
)
+
32
);
sprintf
(
fullname
,
"%s%s%s"
,
path
,
TD_DIRSEP
,
name
);
ret
=
taosStatFile
(
fullname
,
sz
,
NULL
);
taosMemoryFree
(
fullname
);
return
ret
;
}
TdFilePtr
streamOpenFile
(
char
*
path
,
char
*
name
,
int32_t
opt
)
{
char
fullname
[
256
]
=
{
0
};
STREAM_ROCKSDB_BUILD_FULLNAME
(
path
,
name
,
fullname
);
return
taosOpenFile
(
fullname
,
opt
);
}
int32_t
streamSnapHandleInit
(
SStreamSnapHandle
*
pHandle
,
char
*
path
,
int64_t
chkpId
)
{
// impl later
// impl later
int
len
=
strlen
(
path
);
char
*
tdir
=
taosMemoryCalloc
(
1
,
len
+
128
);
memcpy
(
tdir
,
path
,
len
);
if
(
chkpId
!=
0
)
{
sprintf
(
tdir
,
"%s%s%s%s%s%scheckpoint%"
PRId64
""
,
path
,
TD_DIRSEP
,
"stream"
,
TD_DIRSEP
,
"checkpoints"
,
TD_DIRSEP
,
chkpId
);
}
else
{
sprintf
(
tdir
,
"%s%s%s%s%s"
,
path
,
TD_DIRSEP
,
"stream"
,
TD_DIRSEP
,
"state"
);
}
int32_t
code
=
0
;
int32_t
code
=
0
;
TdDirPtr
pDir
=
taosOpenDir
(
path
);
TdDirPtr
pDir
=
taosOpenDir
(
tdir
);
if
(
NULL
==
pDir
)
{
if
(
NULL
==
pDir
)
{
qError
(
"stream-state failed to open %s"
,
tdir
);
goto
_err
;
goto
_err
;
}
}
SBanckendFile
*
pFile
=
taosMemoryCalloc
(
1
,
sizeof
(
SBanckendFile
));
SBanckendFile
*
pFile
=
taosMemoryCalloc
(
1
,
sizeof
(
SBanckendFile
));
pHandle
->
pBackendFile
=
pFile
;
pHandle
->
pBackendFile
=
pFile
;
pHandle
->
checkpointId
=
0
;
pHandle
->
checkpointId
=
chkpId
;
pHandle
->
seraial
=
0
;
pHandle
->
seraial
=
0
;
pFile
->
path
=
t
aosStrdup
(
path
)
;
pFile
->
path
=
t
dir
;
pFile
->
pSst
=
taosArrayInit
(
16
,
sizeof
(
void
*
));
pFile
->
pSst
=
taosArrayInit
(
16
,
sizeof
(
void
*
));
TdDirEntryPtr
pDirEntry
;
TdDirEntryPtr
pDirEntry
;
...
@@ -117,7 +147,7 @@ int32_t streamSnapHandleInit(SStreamSnapHandle* pHandle, char* path) {
...
@@ -117,7 +147,7 @@ int32_t streamSnapHandleInit(SStreamSnapHandle* pHandle, char* path) {
continue
;
continue
;
}
}
if
(
strlen
(
name
)
>=
strlen
(
ROCKSDB_OPTIONS
)
&&
0
==
strncmp
(
name
,
ROCKSDB_OPTIONS
,
strlen
(
ROCKSDB_OPTIONS
)))
{
if
(
strlen
(
name
)
>=
strlen
(
ROCKSDB_OPTIONS
)
&&
0
==
strncmp
(
name
,
ROCKSDB_OPTIONS
,
strlen
(
ROCKSDB_OPTIONS
)))
{
pFile
->
p
Mainfest
=
taosStrdup
(
name
);
pFile
->
p
Options
=
taosStrdup
(
name
);
continue
;
continue
;
}
}
if
(
strlen
(
name
)
>=
strlen
(
ROCKSDB_CHECKPOINT_META
)
&&
if
(
strlen
(
name
)
>=
strlen
(
ROCKSDB_CHECKPOINT_META
)
&&
...
@@ -134,7 +164,9 @@ int32_t streamSnapHandleInit(SStreamSnapHandle* pHandle, char* path) {
...
@@ -134,7 +164,9 @@ int32_t streamSnapHandleInit(SStreamSnapHandle* pHandle, char* path) {
taosCloseDir
(
&
pDir
);
taosCloseDir
(
&
pDir
);
if
(
pFile
->
pCurrent
==
NULL
)
{
if
(
pFile
->
pCurrent
==
NULL
)
{
qError
(
"stream-state failed to open %s, reason: no valid file"
,
tdir
);
code
=
-
1
;
code
=
-
1
;
tdir
=
NULL
;
goto
_err
;
goto
_err
;
}
}
SArray
*
list
=
taosArrayInit
(
64
,
sizeof
(
SBackendFileItem
));
SArray
*
list
=
taosArrayInit
(
64
,
sizeof
(
SBackendFileItem
));
...
@@ -143,50 +175,45 @@ int32_t streamSnapHandleInit(SStreamSnapHandle* pHandle, char* path) {
...
@@ -143,50 +175,45 @@ int32_t streamSnapHandleInit(SStreamSnapHandle* pHandle, char* path) {
// current
// current
item
.
name
=
pFile
->
pCurrent
;
item
.
name
=
pFile
->
pCurrent
;
item
.
type
=
ROCKSDB_CURRENT_TYPE
;
item
.
type
=
ROCKSDB_CURRENT_TYPE
;
taosStatFile
(
pFile
->
pCurrent
,
&
item
.
size
,
NULL
,
NULL
);
streamGetFileSize
(
pFile
->
path
,
item
.
name
,
&
item
.
size
);
taosArrayPush
(
list
,
&
item
);
taosArrayPush
(
list
,
&
item
);
// mainfest
// mainfest
item
.
name
=
pFile
->
pMainfest
;
item
.
name
=
pFile
->
pMainfest
;
item
.
type
=
ROCKSDB_MAINFEST_TYPE
;
item
.
type
=
ROCKSDB_MAINFEST_TYPE
;
taosStatFile
(
pFile
->
pMainfest
,
&
item
.
size
,
NULL
,
NULL
);
streamGetFileSize
(
pFile
->
path
,
item
.
name
,
&
item
.
size
);
taosArrayPush
(
list
,
&
item
);
taosArrayPush
(
list
,
&
item
);
// options
// options
item
.
name
=
pFile
->
pOptions
;
item
.
name
=
pFile
->
pOptions
;
item
.
type
=
ROCKSDB_OPTIONS_TYPE
;
item
.
type
=
ROCKSDB_OPTIONS_TYPE
;
taosStatFile
(
pFile
->
pOptions
,
&
item
.
size
,
NULL
,
NULL
);
streamGetFileSize
(
pFile
->
path
,
item
.
name
,
&
item
.
size
);
taosArrayPush
(
list
,
&
item
);
taosArrayPush
(
list
,
&
item
);
// sst
// sst
for
(
int
i
=
0
;
i
<
taosArrayGetSize
(
pFile
->
pSst
);
i
++
)
{
for
(
int
i
=
0
;
i
<
taosArrayGetSize
(
pFile
->
pSst
);
i
++
)
{
char
*
sst
=
taosArrayGetP
(
pFile
->
pSst
,
i
);
char
*
sst
=
taosArrayGetP
(
pFile
->
pSst
,
i
);
item
.
name
=
sst
;
item
.
name
=
sst
;
item
.
type
=
ROCKSDB_SST_TYPE
;
item
.
type
=
ROCKSDB_SST_TYPE
;
taosStatFile
(
sst
,
&
item
.
size
,
NULL
,
NULL
);
streamGetFileSize
(
pFile
->
path
,
item
.
name
,
&
item
.
size
);
taosArrayPush
(
list
,
&
item
);
taosArrayPush
(
list
,
&
item
);
}
}
// meta
// meta
item
.
name
=
pFile
->
pCheckpointMeta
;
item
.
name
=
pFile
->
pCheckpointMeta
;
item
.
type
=
ROCKSDB_CHECKPOINT_META_TYPE
;
item
.
type
=
ROCKSDB_CHECKPOINT_META_TYPE
;
taosStatFile
(
pFile
->
pCheckpointMeta
,
&
item
.
size
,
NULL
,
NULL
);
if
(
streamGetFileSize
(
pFile
->
path
,
item
.
name
,
&
item
.
size
)
==
0
)
{
taosArrayPush
(
list
,
&
item
);
taosArrayPush
(
list
,
&
item
);
}
pHandle
->
pBackendFile
=
pFile
;
pHandle
->
pBackendFile
=
pFile
;
pHandle
->
currFileIdx
=
0
;
pHandle
->
currFileIdx
=
0
;
pHandle
->
pFileList
=
list
;
pHandle
->
pFileList
=
list
;
char
fullname
[
256
]
=
{
0
};
char
*
file
=
taosArrayGet
(
pHandle
->
pFileList
,
pHandle
->
currFileIdx
);
STREAM_ROCKSDB_BUILD_FULLNAME
(
pFile
->
path
,
file
,
fullname
);
pHandle
->
fd
=
taosOpenFile
(
fullname
,
TD_FILE_READ
);
if
(
pHandle
->
fd
==
NULL
)
{
goto
_err
;
}
pHandle
->
seraial
=
0
;
pHandle
->
seraial
=
0
;
pHandle
->
offset
=
0
;
pHandle
->
offset
=
0
;
return
0
;
return
0
;
_err:
_err:
streamSnapHandleDestroy
(
pHandle
);
streamSnapHandleDestroy
(
pHandle
);
taosMemoryFreeClear
(
tdir
);
code
=
-
1
;
code
=
-
1
;
return
code
;
return
code
;
...
@@ -194,31 +221,33 @@ _err:
...
@@ -194,31 +221,33 @@ _err:
void
streamSnapHandleDestroy
(
SStreamSnapHandle
*
handle
)
{
void
streamSnapHandleDestroy
(
SStreamSnapHandle
*
handle
)
{
SBanckendFile
*
pFile
=
handle
->
pBackendFile
;
SBanckendFile
*
pFile
=
handle
->
pBackendFile
;
taosMemoryFree
(
pFile
->
pCheckpointMeta
);
if
(
pFile
)
{
taosMemoryFree
(
pFile
->
pCurrent
);
taosMemoryFree
(
pFile
->
pCheckpointMeta
);
taosMemoryFree
(
pFile
->
pMainfest
);
taosMemoryFree
(
pFile
->
pCurrent
);
taosMemoryFree
(
pFile
->
pOptions
);
taosMemoryFree
(
pFile
->
pMainfest
);
taosMemoryFree
(
pFile
->
path
);
taosMemoryFree
(
pFile
->
pOptions
);
for
(
int
i
=
0
;
i
<
taosArrayGetSize
(
pFile
->
pSst
);
i
++
)
{
taosMemoryFree
(
pFile
->
path
);
char
*
sst
=
taosArrayGetP
(
pFile
->
pSst
,
i
);
for
(
int
i
=
0
;
i
<
taosArrayGetSize
(
pFile
->
pSst
);
i
++
)
{
taosMemoryFree
(
sst
);
char
*
sst
=
taosArrayGetP
(
pFile
->
pSst
,
i
);
taosMemoryFree
(
sst
);
}
taosArrayDestroy
(
pFile
->
pSst
);
taosMemoryFree
(
pFile
);
}
}
taosArrayDestroy
(
pFile
->
pSst
);
taosMemoryFree
(
pFile
);
taosArrayDestroy
(
handle
->
pFileList
);
taosArrayDestroy
(
handle
->
pFileList
);
taosCloseFile
(
&
handle
->
fd
);
taosCloseFile
(
&
handle
->
fd
);
return
;
return
;
}
}
int32_t
streamSnapReaderOpen
(
void
*
pMeta
,
int64_t
sver
,
int64_t
ever
,
char
*
path
,
SStreamSnapReader
**
ppReader
)
{
int32_t
streamSnapReaderOpen
(
void
*
pMeta
,
int64_t
sver
,
int64_t
chkpId
,
char
*
path
,
SStreamSnapReader
**
ppReader
)
{
// impl later
// impl later
SStreamSnapReader
*
pReader
=
taosMemoryCalloc
(
1
,
sizeof
(
SStreamSnapReader
));
SStreamSnapReader
*
pReader
=
taosMemoryCalloc
(
1
,
sizeof
(
SStreamSnapReader
));
if
(
pReader
==
NULL
)
{
if
(
pReader
==
NULL
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
return
TSDB_CODE_OUT_OF_MEMORY
;
}
}
// const char* path = NULL;
if
(
streamSnapHandleInit
(
&
pReader
->
handle
,
(
char
*
)
path
)
<
0
)
{
if
(
streamSnapHandleInit
(
&
pReader
->
handle
,
(
char
*
)
path
,
chkpId
)
<
0
)
{
taosMemoryFree
(
pReader
);
taosMemoryFree
(
pReader
);
return
-
1
;
return
-
1
;
}
}
...
@@ -242,17 +271,32 @@ int32_t streamSnapRead(SStreamSnapReader* pReader, uint8_t** ppData, int64_t* si
...
@@ -242,17 +271,32 @@ int32_t streamSnapRead(SStreamSnapReader* pReader, uint8_t** ppData, int64_t* si
SBackendFileItem
*
item
=
taosArrayGet
(
pHandle
->
pFileList
,
pHandle
->
currFileIdx
);
SBackendFileItem
*
item
=
taosArrayGet
(
pHandle
->
pFileList
,
pHandle
->
currFileIdx
);
if
(
pHandle
->
fd
==
NULL
)
{
if
(
pHandle
->
currFileIdx
>=
taosArrayGetSize
(
pHandle
->
pFileList
))
{
// finish
*
ppData
=
NULL
;
*
size
=
0
;
return
0
;
}
else
{
pHandle
->
fd
=
streamOpenFile
(
pFile
->
path
,
item
->
name
,
TD_FILE_READ
);
qDebug
(
"stream-state open file %s, current offset:%"
PRId64
", size:% "
PRId64
", file no.%d"
,
item
->
name
,
(
int64_t
)
pHandle
->
offset
,
item
->
size
,
pHandle
->
currFileIdx
);
}
}
qDebug
(
"stream-state start to read file %s, current offset:%"
PRId64
", size:%"
PRId64
", file no.%d"
,
item
->
name
,
(
int64_t
)
pHandle
->
offset
,
item
->
size
,
pHandle
->
currFileIdx
);
uint8_t
*
buf
=
taosMemoryCalloc
(
1
,
sizeof
(
SStreamSnapBlockHdr
)
+
kBlockSize
);
uint8_t
*
buf
=
taosMemoryCalloc
(
1
,
sizeof
(
SStreamSnapBlockHdr
)
+
kBlockSize
);
int64_t
nread
=
taosPReadFile
(
pHandle
->
fd
,
buf
+
sizeof
(
SStreamSnapBlockHdr
),
kBlockSize
,
pHandle
->
offset
);
int64_t
nread
=
taosPReadFile
(
pHandle
->
fd
,
buf
+
sizeof
(
SStreamSnapBlockHdr
),
kBlockSize
,
pHandle
->
offset
);
if
(
nread
==
-
1
)
{
if
(
nread
==
-
1
)
{
code
=
TAOS_SYSTEM_ERROR
(
terrno
);
code
=
TAOS_SYSTEM_ERROR
(
terrno
);
qError
(
"stream
snap failed to read snap, file name:%s, type:%d,
reason:%s"
,
item
->
name
,
item
->
type
,
qError
(
"stream
-state snap failed to read snap, file name:%s, type:%d,
reason:%s"
,
item
->
name
,
item
->
type
,
tstrerror
(
code
));
tstrerror
(
code
));
return
code
;
// handle later
return
-
1
;
return
-
1
;
}
else
if
(
nread
>
0
&&
nread
<=
kBlockSize
)
{
}
else
if
(
nread
>
0
&&
nread
<=
kBlockSize
)
{
// left bytes less than kBlockSize
// left bytes less than kBlockSize
qDebug
(
"stream-state read file %s, current offset:%"
PRId64
",size:% "
PRId64
", file no.%d"
,
item
->
name
,
(
int64_t
)
pHandle
->
offset
,
item
->
size
,
pHandle
->
currFileIdx
);
pHandle
->
offset
+=
nread
;
pHandle
->
offset
+=
nread
;
if
(
pHandle
->
offset
>=
item
->
size
||
nread
<
kBlockSize
)
{
if
(
pHandle
->
offset
>=
item
->
size
||
nread
<
kBlockSize
)
{
taosCloseFile
(
&
pHandle
->
fd
);
taosCloseFile
(
&
pHandle
->
fd
);
...
@@ -260,6 +304,11 @@ int32_t streamSnapRead(SStreamSnapReader* pReader, uint8_t** ppData, int64_t* si
...
@@ -260,6 +304,11 @@ int32_t streamSnapRead(SStreamSnapReader* pReader, uint8_t** ppData, int64_t* si
pHandle
->
currFileIdx
+=
1
;
pHandle
->
currFileIdx
+=
1
;
}
}
}
else
{
}
else
{
qDebug
(
"stream-state no data read, close file no.%d, move to next file, open and read"
,
pHandle
->
currFileIdx
);
taosCloseFile
(
&
pHandle
->
fd
);
pHandle
->
offset
=
0
;
pHandle
->
currFileIdx
+=
1
;
if
(
pHandle
->
currFileIdx
>=
taosArrayGetSize
(
pHandle
->
pFileList
))
{
if
(
pHandle
->
currFileIdx
>=
taosArrayGetSize
(
pHandle
->
pFileList
))
{
// finish
// finish
*
ppData
=
NULL
;
*
ppData
=
NULL
;
...
@@ -267,12 +316,13 @@ int32_t streamSnapRead(SStreamSnapReader* pReader, uint8_t** ppData, int64_t* si
...
@@ -267,12 +316,13 @@ int32_t streamSnapRead(SStreamSnapReader* pReader, uint8_t** ppData, int64_t* si
return
0
;
return
0
;
}
}
item
=
taosArrayGet
(
pHandle
->
pFileList
,
pHandle
->
currFileIdx
);
item
=
taosArrayGet
(
pHandle
->
pFileList
,
pHandle
->
currFileIdx
);
char
fullname
[
256
]
=
{
0
};
pHandle
->
fd
=
streamOpenFile
(
pFile
->
path
,
item
->
name
,
TD_FILE_READ
);
STREAM_ROCKSDB_BUILD_FULLNAME
(
pFile
->
path
,
item
->
name
,
fullname
);
pHandle
->
fd
=
taosOpenFile
(
fullname
,
TD_FILE_READ
);
nread
=
taosPReadFile
(
pHandle
->
fd
,
buf
+
sizeof
(
SStreamSnapBlockHdr
),
kBlockSize
,
pHandle
->
offset
);
nread
=
taosPReadFile
(
pHandle
->
fd
,
buf
+
sizeof
(
SStreamSnapBlockHdr
),
kBlockSize
,
pHandle
->
offset
);
pHandle
->
offset
+=
nread
;
pHandle
->
offset
+=
nread
;
qDebug
(
"stream-state open file and read file %s, current offset:%"
PRId64
", size:% "
PRId64
", file no.%d"
,
item
->
name
,
(
int64_t
)
pHandle
->
offset
,
item
->
size
,
pHandle
->
currFileIdx
);
}
}
SStreamSnapBlockHdr
*
pHdr
=
(
SStreamSnapBlockHdr
*
)
buf
;
SStreamSnapBlockHdr
*
pHdr
=
(
SStreamSnapBlockHdr
*
)
buf
;
...
@@ -310,7 +360,7 @@ int32_t streamSnapWriterOpen(void* pMeta, int64_t sver, int64_t ever, char* path
...
@@ -310,7 +360,7 @@ int32_t streamSnapWriterOpen(void* pMeta, int64_t sver, int64_t ever, char* path
pHandle
->
pFileList
=
list
;
pHandle
->
pFileList
=
list
;
pHandle
->
currFileIdx
=
0
;
pHandle
->
currFileIdx
=
0
;
pHandle
->
offset
=
0
;
pHandle
->
offset
=
0
;
pHandle
->
fd
=
taosOpenFile
(
taosArrayGet
(
pHandle
->
pFileList
,
pHandle
->
currFileIdx
),
TD_FILE_WRITE
);
*
ppWriter
=
pWriter
;
*
ppWriter
=
pWriter
;
return
0
;
return
0
;
}
}
...
@@ -321,14 +371,25 @@ int32_t streamSnapWrite(SStreamSnapWriter* pWriter, uint8_t* pData, uint32_t nDa
...
@@ -321,14 +371,25 @@ int32_t streamSnapWrite(SStreamSnapWriter* pWriter, uint8_t* pData, uint32_t nDa
SStreamSnapBlockHdr
*
pHdr
=
(
SStreamSnapBlockHdr
*
)
pData
;
SStreamSnapBlockHdr
*
pHdr
=
(
SStreamSnapBlockHdr
*
)
pData
;
SStreamSnapHandle
*
pHandle
=
&
pWriter
->
handle
;
SStreamSnapHandle
*
pHandle
=
&
pWriter
->
handle
;
SBanckendFile
*
pFile
=
pHandle
->
pBackendFile
;
SBanckendFile
*
pFile
=
pHandle
->
pBackendFile
;
SBackendFileItem
*
pItem
=
taosArrayGetP
(
pHandle
->
pFileList
,
pHandle
->
currFileIdx
);
SBackendFileItem
*
pItem
=
taosArrayGet
(
pHandle
->
pFileList
,
pHandle
->
currFileIdx
);
if
(
pHandle
->
fd
==
NULL
)
{
pHandle
->
fd
=
streamOpenFile
(
pFile
->
path
,
pItem
->
name
,
TD_FILE_CREATE
|
TD_FILE_WRITE
|
TD_FILE_APPEND
);
if
(
pHandle
->
fd
==
NULL
)
{
code
=
TAOS_SYSTEM_ERROR
(
terrno
);
qError
(
"stream-state failed to open file name:%s%s%s, reason:%s"
,
pFile
->
path
,
TD_DIRSEP
,
pHdr
->
name
,
tstrerror
(
code
));
}
}
if
(
strlen
(
pHdr
->
name
)
==
strlen
(
pItem
->
name
)
&&
strcmp
(
pHdr
->
name
,
pItem
->
name
)
==
0
)
{
if
(
strlen
(
pHdr
->
name
)
==
strlen
(
pItem
->
name
)
&&
strcmp
(
pHdr
->
name
,
pItem
->
name
)
==
0
)
{
if
(
taosPWriteFile
(
pHandle
->
fd
,
pHdr
->
data
,
pHdr
->
size
,
pHandle
->
offset
)
!=
pHdr
->
size
)
{
int64_t
bytes
=
taosPWriteFile
(
pHandle
->
fd
,
pHdr
->
data
,
pHdr
->
size
,
pHandle
->
offset
);
if
(
bytes
!=
pHdr
->
size
)
{
code
=
TAOS_SYSTEM_ERROR
(
terrno
);
code
=
TAOS_SYSTEM_ERROR
(
terrno
);
qError
(
"stream
snap
failed to write snap, file name:%s, reason:%s"
,
pHdr
->
name
,
tstrerror
(
code
));
qError
(
"stream
-state
failed to write snap, file name:%s, reason:%s"
,
pHdr
->
name
,
tstrerror
(
code
));
return
code
;
return
code
;
}
}
pHandle
->
offset
+=
pHdr
->
size
;
pHandle
->
offset
+=
bytes
;
}
else
{
}
else
{
taosCloseFile
(
&
pHandle
->
fd
);
taosCloseFile
(
&
pHandle
->
fd
);
pHandle
->
offset
=
0
;
pHandle
->
offset
=
0
;
...
@@ -339,10 +400,13 @@ int32_t streamSnapWrite(SStreamSnapWriter* pWriter, uint8_t* pData, uint32_t nDa
...
@@ -339,10 +400,13 @@ int32_t streamSnapWrite(SStreamSnapWriter* pWriter, uint8_t* pData, uint32_t nDa
item
.
type
=
pHdr
->
type
;
item
.
type
=
pHdr
->
type
;
taosArrayPush
(
pHandle
->
pFileList
,
&
item
);
taosArrayPush
(
pHandle
->
pFileList
,
&
item
);
char
fullname
[
256
]
=
{
0
};
SBackendFileItem
*
pItem
=
taosArrayGet
(
pHandle
->
pFileList
,
pHandle
->
currFileIdx
);
char
*
name
=
((
SBackendFileItem
*
)
taosArrayGet
(
pHandle
->
pFileList
,
taosArrayGetSize
(
pHandle
->
pFileList
)
-
1
))
->
name
;
pHandle
->
fd
=
streamOpenFile
(
pFile
->
path
,
pItem
->
name
,
TD_FILE_CREATE
|
TD_FILE_WRITE
|
TD_FILE_APPEND
);
STREAM_ROCKSDB_BUILD_FULLNAME
(
pFile
->
path
,
name
,
fullname
);
if
(
pHandle
->
fd
==
NULL
)
{
pHandle
->
fd
=
taosOpenFile
(
fullname
,
TD_FILE_WRITE
);
code
=
TAOS_SYSTEM_ERROR
(
terrno
);
qError
(
"stream-state failed to open file name:%s%s%s, reason:%s"
,
pFile
->
path
,
TD_DIRSEP
,
pHdr
->
name
,
tstrerror
(
code
));
}
taosPWriteFile
(
pHandle
->
fd
,
pHdr
->
data
,
pHdr
->
size
,
pHandle
->
offset
);
taosPWriteFile
(
pHandle
->
fd
,
pHdr
->
data
,
pHdr
->
size
,
pHandle
->
offset
);
pHandle
->
offset
+=
pHdr
->
size
;
pHandle
->
offset
+=
pHdr
->
size
;
...
@@ -367,6 +431,7 @@ int32_t streamSnapWriterClose(SStreamSnapWriter* pWriter, int8_t rollback) {
...
@@ -367,6 +431,7 @@ int32_t streamSnapWriterClose(SStreamSnapWriter* pWriter, int8_t rollback) {
qDebug
(
"stream snap get file list, %s"
,
buf
);
qDebug
(
"stream snap get file list, %s"
,
buf
);
taosMemoryFree
(
buf
);
taosMemoryFree
(
buf
);
}
}
for
(
int
i
=
0
;
i
<
taosArrayGetSize
(
handle
->
pFileList
);
i
++
)
{
for
(
int
i
=
0
;
i
<
taosArrayGetSize
(
handle
->
pFileList
);
i
++
)
{
SBackendFileItem
*
item
=
taosArrayGet
(
handle
->
pFileList
,
i
);
SBackendFileItem
*
item
=
taosArrayGet
(
handle
->
pFileList
,
i
);
taosMemoryFree
(
item
->
name
);
taosMemoryFree
(
item
->
name
);
...
...
source/libs/stream/src/streamState.c
浏览文件 @
67463396
...
@@ -108,7 +108,7 @@ SStreamState* streamStateOpen(char* path, void* pTask, bool specPath, int32_t sz
...
@@ -108,7 +108,7 @@ SStreamState* streamStateOpen(char* path, void* pTask, bool specPath, int32_t sz
SStreamTask
*
pStreamTask
=
pTask
;
SStreamTask
*
pStreamTask
=
pTask
;
char
statePath
[
1024
];
char
statePath
[
1024
];
if
(
!
specPath
)
{
if
(
!
specPath
)
{
sprintf
(
statePath
,
"%s
/%d"
,
path
,
pStreamTask
->
id
.
taskId
);
sprintf
(
statePath
,
"%s
%s%d"
,
path
,
TD_DIRSEP
,
pStreamTask
->
id
.
taskId
);
}
else
{
}
else
{
memset
(
statePath
,
0
,
1024
);
memset
(
statePath
,
0
,
1024
);
tstrncpy
(
statePath
,
path
,
1024
);
tstrncpy
(
statePath
,
path
,
1024
);
...
...
source/libs/tdb/test/tdbPageRecycleTest.cpp
浏览文件 @
67463396
...
@@ -804,7 +804,7 @@ TEST(TdbPageRecycleTest, recycly_delete_interior_ofp_nocommit) {
...
@@ -804,7 +804,7 @@ TEST(TdbPageRecycleTest, recycly_delete_interior_ofp_nocommit) {
// sprintf(&key[count - 2], "%c", i);
// sprintf(&key[count - 2], "%c", i);
key
[
count
-
2
]
=
'0'
+
i
;
key
[
count
-
2
]
=
'0'
+
i
;
ret
=
tdbTbInsert
(
pDb
,
key
,
count
,
NULL
,
NULL
,
txn
);
ret
=
tdbTbInsert
(
pDb
,
key
,
count
,
NULL
,
0
,
txn
);
GTEST_ASSERT_EQ
(
ret
,
0
);
GTEST_ASSERT_EQ
(
ret
,
0
);
}
}
}
}
...
...
source/util/src/tarray.c
浏览文件 @
67463396
...
@@ -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
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录