Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
52ca94ea
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看板
提交
52ca94ea
编写于
6月 14, 2023
作者:
Y
yihaoDeng
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
trigger checkpoint
上级
83dde6a2
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
66 addition
and
58 deletion
+66
-58
cmake/rocksdb_CMakeLists.txt.in
cmake/rocksdb_CMakeLists.txt.in
+5
-3
source/dnode/mnode/impl/src/mndMain.c
source/dnode/mnode/impl/src/mndMain.c
+1
-1
source/dnode/mnode/impl/src/mndStream.c
source/dnode/mnode/impl/src/mndStream.c
+46
-46
source/libs/stream/src/streamBackendRocksdb.c
source/libs/stream/src/streamBackendRocksdb.c
+13
-7
source/libs/stream/src/streamMeta.c
source/libs/stream/src/streamMeta.c
+1
-1
未找到文件。
cmake/rocksdb_CMakeLists.txt.in
浏览文件 @
52ca94ea
# rocksdb
# rocksdb
ExternalProject_Add(rocksdb
ExternalProject_Add(rocksdb
GIT_REPOSITORY https://github.com/facebook/rocksdb.git
URL https://github.com/facebook/rocksdb/archive/refs/tags/v8.1.1.tar.gz
GIT_TAG v8.1.1
URL_HASH MD5=3b4c97ee45df9c8a5517308d31ab008b
SOURCE_DIR "${TD_CONTRIB_DIR}/rocksdb"
DOWNLOAD_NO_PROGRESS 1
DOWNLOAD_DIR "${TD_CONTRIB_DIR}/deps-download"
SOURCE_DIR "${TD_CONTRIB_DIR}/rocksdb"
CONFIGURE_COMMAND ""
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
INSTALL_COMMAND ""
...
...
source/dnode/mnode/impl/src/mndMain.c
浏览文件 @
52ca94ea
...
@@ -265,7 +265,7 @@ static void *mndThreadFp(void *param) {
...
@@ -265,7 +265,7 @@ static void *mndThreadFp(void *param) {
}
}
if
(
sec
%
tsStreamCheckpointTickInterval
==
0
)
{
if
(
sec
%
tsStreamCheckpointTickInterval
==
0
)
{
//
mndStreamCheckpointTick(pMnode, sec);
mndStreamCheckpointTick
(
pMnode
,
sec
);
}
}
if
(
sec
%
tsTelemInterval
==
(
TMIN
(
60
,
(
tsTelemInterval
-
1
))))
{
if
(
sec
%
tsTelemInterval
==
(
TMIN
(
60
,
(
tsTelemInterval
-
1
))))
{
...
...
source/dnode/mnode/impl/src/mndStream.c
浏览文件 @
52ca94ea
...
@@ -850,61 +850,61 @@ static int32_t mndProcessStreamCheckpointTmr(SRpcMsg *pReq) {
...
@@ -850,61 +850,61 @@ static int32_t mndProcessStreamCheckpointTmr(SRpcMsg *pReq) {
// listEleSize();
// listEleSize();
// iterate all stream obj
// iterate all stream obj
SHashObj
*
vgIds
=
taosHashInit
(
64
,
MurmurHash3_32
,
false
,
HASH_NO_LOCK
);
//
SHashObj *vgIds = taosHashInit(64, MurmurHash3_32, false, HASH_NO_LOCK);
while
(
1
)
{
while
(
1
)
{
pIter
=
sdbFetch
(
pSdb
,
SDB_STREAM
,
pIter
,
(
void
**
)
&
pStream
);
pIter
=
sdbFetch
(
pSdb
,
SDB_STREAM
,
pIter
,
(
void
**
)
&
pStream
);
if
(
pIter
==
NULL
)
break
;
if
(
pIter
==
NULL
)
break
;
taosRLockLatch
(
&
pStream
->
lock
);
//
taosRLockLatch(&pStream->lock);
for
(
int32_t
i
=
0
;
i
<
taosArrayGetSize
(
pStream
->
tasks
);
i
++
)
{
//
for (int32_t i = 0; i < taosArrayGetSize(pStream->tasks); i++) {
SArray
*
pLevel
=
taosArrayGetP
(
pStream
->
tasks
,
i
);
//
SArray *pLevel = taosArrayGetP(pStream->tasks, i);
SStreamTask
*
pTask
=
taosArrayGetP
(
pLevel
,
0
);
//
SStreamTask *pTask = taosArrayGetP(pLevel, 0);
if
(
pTask
->
taskLevel
==
TASK_LEVEL__SOURCE
)
{
//
if (pTask->taskLevel == TASK_LEVEL__SOURCE) {
int32_t
sz
=
taosArrayGetSize
(
pLevel
);
//
int32_t sz = taosArrayGetSize(pLevel);
SList
*
list
=
taosHashGet
(
vgIds
,
&
pTask
->
nodeId
,
sizeof
(
pTask
->
nodeId
));
//
SList *list = taosHashGet(vgIds, &pTask->nodeId, sizeof(pTask->nodeId));
if
(
list
==
NULL
)
{
//
if (list == NULL) {
SList
tlist
;
//
SList tlist;
tdListInit
(
&
tlist
,
TSDB_STREAM_FNAME_LEN
);
//
tdListInit(&tlist, TSDB_STREAM_FNAME_LEN);
taosHashPut
(
vgIds
,
&
pTask
->
nodeId
,
sizeof
(
pTask
->
nodeId
),
&
tlist
,
sizeof
(
tlist
));
//
taosHashPut(vgIds, &pTask->nodeId, sizeof(pTask->nodeId), &tlist, sizeof(tlist));
list
=
taosHashGet
(
vgIds
,
&
pTask
->
nodeId
,
sizeof
(
pTask
->
nodeId
));
//
list = taosHashGet(vgIds, &pTask->nodeId, sizeof(pTask->nodeId));
}
//
}
tdListAppend
(
list
,
(
void
*
)
pStream
->
name
);
//
tdListAppend(list, (void *)pStream->name);
}
//
}
}
//
}
taosRUnLockLatch
(
&
pStream
->
lock
);
//
taosRUnLockLatch(&pStream->lock);
//
if (pIter == NULL) break;
if
(
pIter
==
NULL
)
break
;
//
//
incr tick
// incr tick
//
int64_t currentTick = atomic_add_fetch_64(&pStream->currentTick, 1);
int64_t
currentTick
=
atomic_add_fetch_64
(
&
pStream
->
currentTick
,
1
);
//
//
if >= checkpointFreq, build msg TDMT_MND_STREAM_BEGIN_CHECKPOINT, put into write q
// if >= checkpointFreq, build msg TDMT_MND_STREAM_BEGIN_CHECKPOINT, put into write q
//
//
if (currentTick >= pStream->checkpointFreq) {
// if (currentTick >= pStream->checkpointFreq) {
//
atomic_store_64(&pStream->currentTick, 0);
atomic_store_64
(
&
pStream
->
currentTick
,
0
);
//
SMStreamDoCheckpointMsg *pMsg = rpcMallocCont(sizeof(SMStreamDoCheckpointMsg));
SMStreamDoCheckpointMsg
*
pMsg
=
rpcMallocCont
(
sizeof
(
SMStreamDoCheckpointMsg
));
//
pMsg->streamId = pStream->uid;
pMsg
->
streamId
=
pStream
->
uid
;
//
pMsg->checkpointId = tGenIdPI64();
pMsg
->
checkpointId
=
tGenIdPI64
();
//
memcpy(pMsg->streamName, pStream->name, TSDB_STREAM_FNAME_LEN);
memcpy
(
pMsg
->
streamName
,
pStream
->
name
,
TSDB_STREAM_FNAME_LEN
);
//
SRpcMsg rpcMsg = {
SRpcMsg
rpcMsg
=
{
//
.msgType = TDMT_MND_STREAM_BEGIN_CHECKPOINT,
.
msgType
=
TDMT_MND_STREAM_BEGIN_CHECKPOINT
,
//
.pCont = pMsg,
.
pCont
=
pMsg
,
//
.contLen = sizeof(SMStreamDoCheckpointMsg),
.
contLen
=
sizeof
(
SMStreamDoCheckpointMsg
),
//
};
};
//
tmsgPutToQueue(&pMnode->msgCb, WRITE_QUEUE, &rpcMsg);
tmsgPutToQueue
(
&
pMnode
->
msgCb
,
WRITE_QUEUE
,
&
rpcMsg
);
}
}
void
*
vgIter
=
taosHashIterate
(
vgIds
,
NULL
);
//
void *vgIter = taosHashIterate(vgIds, NULL);
size_t
klen
=
0
;
//
size_t klen = 0;
int64_t
checkpointId
=
tGenIdPI64
();
//
int64_t checkpointId = tGenIdPI64();
while
(
vgIter
)
{
//
while (vgIter) {
int32_t
*
key
=
(
int32_t
*
)
taosHashGetKey
(
vgIter
,
&
klen
);
//
int32_t *key = (int32_t *)taosHashGetKey(vgIter, &klen);
SList
*
val
=
(
SList
*
)
vgIter
;
//
SList *val = (SList *)vgIter;
mndCreateCheckpoint
(
pMnode
,
*
key
,
val
);
//
mndCreateCheckpoint(pMnode, *key, val);
vgIter
=
taosHashIterate
(
vgIds
,
vgIter
);
//
vgIter = taosHashIterate(vgIds, vgIter);
}
//
}
taosHashCleanup
(
vgIds
);
//
taosHashCleanup(vgIds);
return
0
;
return
0
;
}
}
...
...
source/libs/stream/src/streamBackendRocksdb.c
浏览文件 @
52ca94ea
...
@@ -190,17 +190,21 @@ void streamBackendCleanup(void* arg) {
...
@@ -190,17 +190,21 @@ void streamBackendCleanup(void* arg) {
qDebug
(
"destroy stream backend backend:%p"
,
pHandle
);
qDebug
(
"destroy stream backend backend:%p"
,
pHandle
);
return
;
return
;
}
}
int32_t
streamBackendDoCheckpoint
(
int64_t
backendRid
,
const
char
*
path
)
{
int32_t
streamBackendDoCheckpoint
(
int64_t
backendRid
,
const
char
*
path
)
{
int64_t
st
=
taosGetTimestampMs
();
int64_t
st
=
taosGetTimestampMs
();
int32_t
code
=
-
1
;
int32_t
code
=
-
1
;
SBackendHandle
*
pHandle
=
taosAcquireRef
(
streamBackendId
,
backendRid
);
SBackendHandle
*
pHandle
=
taosAcquireRef
(
streamBackendId
,
backendRid
);
static
int
checkpointSuffix
=
1
;
static
int
checkpointSuffix
=
0
;
char
newDir
[
256
]
=
{
0
};
char
oldDir
[
256
]
=
{
0
};
sprintf
(
oldDir
,
"%s/checkpoint_%d"
,
path
,
checkpointSuffix
);
sprintf
(
newDir
,
"%s/checkpoint_%d"
,
path
,
1
-
checkpointSuffix
);
if
(
pHandle
==
NULL
)
{
if
(
pHandle
==
NULL
)
{
return
-
1
;
return
-
1
;
}
}
qDebug
(
"stream backend:%p start to do checkpoint at:%s "
,
pHandle
,
path
);
qDebug
(
"stream backend:%p start to do checkpoint at:%s "
,
pHandle
,
path
);
if
(
pHandle
->
db
!=
NULL
)
{
if
(
pHandle
->
db
!=
NULL
)
{
char
*
err
=
NULL
;
char
*
err
=
NULL
;
rocksdb_checkpoint_t
*
cp
=
rocksdb_checkpoint_object_create
(
pHandle
->
db
,
&
err
);
rocksdb_checkpoint_t
*
cp
=
rocksdb_checkpoint_object_create
(
pHandle
->
db
,
&
err
);
...
@@ -210,10 +214,8 @@ int32_t streamBackendDoCheckpoint(int64_t backendRid, const char* path) {
...
@@ -210,10 +214,8 @@ int32_t streamBackendDoCheckpoint(int64_t backendRid, const char* path) {
code
=
-
1
;
code
=
-
1
;
goto
_ERROR
;
goto
_ERROR
;
}
}
char
buf
[
256
]
=
{
0
};
sprintf
(
buf
,
"%s/checkpoint_%d"
,
path
,
checkpointSuffix
);
rocksdb_checkpoint_create
(
cp
,
buf
,
64
<<
20
,
&
err
);
rocksdb_checkpoint_create
(
cp
,
newDir
,
64
<<
20
,
&
err
);
if
(
err
!=
NULL
)
{
if
(
err
!=
NULL
)
{
qError
(
"stream backend:%p failed to do checkpoint at:%s, reason:%s"
,
pHandle
,
path
,
err
);
qError
(
"stream backend:%p failed to do checkpoint at:%s, reason:%s"
,
pHandle
,
path
,
err
);
taosMemoryFreeClear
(
err
);
taosMemoryFreeClear
(
err
);
...
@@ -224,7 +226,11 @@ int32_t streamBackendDoCheckpoint(int64_t backendRid, const char* path) {
...
@@ -224,7 +226,11 @@ int32_t streamBackendDoCheckpoint(int64_t backendRid, const char* path) {
}
}
rocksdb_checkpoint_object_destroy
(
cp
);
rocksdb_checkpoint_object_destroy
(
cp
);
}
}
checkpointSuffix
+=
1
;
if
(
taosIsDir
(
oldDir
))
{
taosRemoveDir
(
oldDir
);
}
taosRenameFile
(
newDir
,
oldDir
);
_ERROR:
_ERROR:
taosReleaseRef
(
streamBackendId
,
backendRid
);
taosReleaseRef
(
streamBackendId
,
backendRid
);
return
code
;
return
code
;
...
...
source/libs/stream/src/streamMeta.c
浏览文件 @
52ca94ea
...
@@ -405,7 +405,7 @@ int32_t streamLoadTasks(SStreamMeta* pMeta, int64_t ver) {
...
@@ -405,7 +405,7 @@ int32_t streamLoadTasks(SStreamMeta* pMeta, int64_t ver) {
int32_t
streamDoCheckpoint
(
SStreamMeta
*
pMeta
)
{
int32_t
streamDoCheckpoint
(
SStreamMeta
*
pMeta
)
{
int
code
=
-
1
;
int
code
=
-
1
;
char
buf
[
256
];
char
buf
[
256
]
=
{
0
}
;
sprintf
(
buf
,
"%s/%s"
,
pMeta
->
path
,
"checkpoints"
);
sprintf
(
buf
,
"%s/%s"
,
pMeta
->
path
,
"checkpoints"
);
code
=
taosMulModeMkDir
(
buf
,
0755
);
code
=
taosMulModeMkDir
(
buf
,
0755
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录