Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
74a4a89d
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看板
提交
74a4a89d
编写于
6月 25, 2023
作者:
Y
yihaoDeng
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add checkpoint
上级
832aed5e
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
42 addition
and
11 deletion
+42
-11
source/libs/stream/src/streamSnapshot.c
source/libs/stream/src/streamSnapshot.c
+42
-11
未找到文件。
source/libs/stream/src/streamSnapshot.c
浏览文件 @
74a4a89d
...
@@ -14,6 +14,7 @@
...
@@ -14,6 +14,7 @@
*/
*/
#include "streamSnapshot.h"
#include "streamSnapshot.h"
#include "query.h"
#include "rocksdb/c.h"
#include "rocksdb/c.h"
#include "tcommon.h"
#include "tcommon.h"
...
@@ -26,8 +27,9 @@ enum SBackendFileType {
...
@@ -26,8 +27,9 @@ enum SBackendFileType {
};
};
typedef
struct
SBackendFileItem
{
typedef
struct
SBackendFileItem
{
char
*
name
;
char
*
name
;
int8_t
type
;
int8_t
type
;
int64_t
size
;
}
SBackendFileItem
;
}
SBackendFileItem
;
typedef
struct
SBackendFile
{
typedef
struct
SBackendFile
{
char
*
pCurrent
;
char
*
pCurrent
;
...
@@ -54,6 +56,7 @@ struct SStreamSnapBlockHdr {
...
@@ -54,6 +56,7 @@ struct SStreamSnapBlockHdr {
int64_t
index
;
int64_t
index
;
char
name
[
128
];
char
name
[
128
];
int64_t
size
;
int64_t
size
;
int64_t
totalSize
;
uint8_t
data
[];
uint8_t
data
[];
};
};
struct
SStreamSnapReader
{
struct
SStreamSnapReader
{
...
@@ -127,25 +130,30 @@ int32_t streamSnapHandleInit(SStreamSnapHandle* handle, char* path) {
...
@@ -127,25 +130,30 @@ int32_t streamSnapHandleInit(SStreamSnapHandle* handle, 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
);
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
);
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
);
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
);
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
);
taosArrayPush
(
list
,
&
item
);
taosArrayPush
(
list
,
&
item
);
handle
->
pBackendFile
=
pFile
;
handle
->
pBackendFile
=
pFile
;
...
@@ -209,30 +217,43 @@ int32_t streamSnapReaderClose(SStreamSnapReader* pReader) {
...
@@ -209,30 +217,43 @@ int32_t streamSnapReaderClose(SStreamSnapReader* pReader) {
}
}
int32_t
streamSnapRead
(
SStreamSnapReader
*
pReader
,
uint8_t
**
ppData
,
int64_t
*
size
)
{
int32_t
streamSnapRead
(
SStreamSnapReader
*
pReader
,
uint8_t
**
ppData
,
int64_t
*
size
)
{
// impl later
// impl later
int32_t
code
=
0
;
SStreamSnapHandle
*
pHandle
=
&
pReader
->
handle
;
SStreamSnapHandle
*
pHandle
=
&
pReader
->
handle
;
SBackendFileItem
*
item
=
taosArrayGet
(
pHandle
->
pFileList
,
pHandle
->
currFileIdx
);
SBackendFileItem
*
item
=
taosArrayGet
(
pHandle
->
pFileList
,
pHandle
->
currFileIdx
);
uint8_t
*
buf
=
taosMemoryCalloc
(
1
,
sizeof
(
SStreamSnapBlockHdr
)
+
kBlockSize
);
uint8_t
*
buf
=
taosMemoryCalloc
(
1
,
sizeof
(
SStreamSnapBlockHdr
)
+
kBlockSize
);
int64_t
nread
=
taos
ReadFile
(
pHandle
->
fd
,
buf
+
sizeof
(
SStreamSnapBlockHdr
),
kBlockSize
);
int64_t
nread
=
taos
PReadFile
(
pHandle
->
fd
,
buf
+
sizeof
(
SStreamSnapBlockHdr
),
kBlockSize
,
pHandle
->
offset
);
if
(
nread
==
-
1
)
{
if
(
nread
==
-
1
)
{
code
=
TAOS_SYSTEM_ERROR
(
terrno
);
qError
(
"stream snap failed to read snap, file name:%s, reason:%s"
,
item
->
name
,
tstrerror
(
code
));
return
code
;
// handle later
// handle later
return
-
1
;
return
-
1
;
}
else
if
(
nread
<=
kBlockSize
)
{
// left bytes less than kBlockSize
pHandle
->
offset
+=
nread
;
if
(
pHandle
->
offset
>=
item
->
size
||
nread
<
kBlockSize
)
{
taosCloseFile
(
&
pHandle
->
fd
);
pHandle
->
currFileIdx
+=
1
;
}
}
else
{
}
else
{
taosCloseFile
(
&
pHandle
->
fd
);
pHandle
->
currFileIdx
+=
1
;
if
(
pHandle
->
currFileIdx
>=
taosArrayGetSize
(
pHandle
->
pFileList
))
{
if
(
pHandle
->
currFileIdx
>=
taosArrayGetSize
(
pHandle
->
pFileList
))
{
// finish
// finish
return
0
;
return
0
;
}
}
item
=
taosArrayGet
(
pHandle
->
pFileList
,
pHandle
->
currFileIdx
);
item
=
taosArrayGet
(
pHandle
->
pFileList
,
pHandle
->
currFileIdx
);
pHandle
->
offset
=
0
;
pHandle
->
fd
=
taosOpenFile
(
item
->
name
,
TD_FILE_READ
);
pHandle
->
fd
=
taosOpenFile
(
item
->
name
,
TD_FILE_READ
);
// handle err later
// handle err later
nread
=
taosReadFile
(
pHandle
->
fd
,
buf
+
sizeof
(
SStreamSnapBlockHdr
),
kBlockSize
);
nread
=
taosReadFile
(
pHandle
->
fd
,
buf
+
sizeof
(
SStreamSnapBlockHdr
),
kBlockSize
);
pHandle
->
offset
+=
nread
;
}
}
SStreamSnapBlockHdr
*
pHdr
=
(
SStreamSnapBlockHdr
*
)
buf
;
SStreamSnapBlockHdr
*
pHdr
=
(
SStreamSnapBlockHdr
*
)
buf
;
pHdr
->
size
=
nread
;
pHdr
->
size
=
nread
;
pHdr
->
type
=
item
->
type
;
pHdr
->
type
=
item
->
type
;
pHdr
->
totalSize
=
item
->
size
;
memcpy
(
pHdr
->
name
,
item
->
name
,
strlen
(
item
->
name
));
memcpy
(
pHdr
->
name
,
item
->
name
,
strlen
(
item
->
name
));
pHandle
->
seraial
+=
nread
;
pHandle
->
seraial
+=
nread
;
...
@@ -264,18 +285,25 @@ int32_t streamSnapWriterOpen(void* pMeta, int64_t sver, int64_t ever, SStreamSna
...
@@ -264,18 +285,25 @@ int32_t streamSnapWriterOpen(void* pMeta, int64_t sver, int64_t ever, SStreamSna
handle
->
pFileList
=
list
;
handle
->
pFileList
=
list
;
handle
->
currFileIdx
=
0
;
handle
->
currFileIdx
=
0
;
handle
->
offset
=
0
;
handle
->
fd
=
taosOpenFile
(
taosArrayGet
(
handle
->
pFileList
,
handle
->
currFileIdx
),
TD_FILE_WRITE
);
handle
->
fd
=
taosOpenFile
(
taosArrayGet
(
handle
->
pFileList
,
handle
->
currFileIdx
),
TD_FILE_WRITE
);
*
ppWriter
=
pWriter
;
*
ppWriter
=
pWriter
;
return
0
;
return
0
;
}
}
int32_t
streamSnapWrite
(
SStreamSnapWriter
*
pWriter
,
uint8_t
*
pData
,
uint32_t
nData
)
{
int32_t
streamSnapWrite
(
SStreamSnapWriter
*
pWriter
,
uint8_t
*
pData
,
uint32_t
nData
)
{
SStreamSnapBlockHdr
*
pHdr
=
(
SStreamSnapBlockHdr
*
)
pData
;
int32_t
code
=
0
;
SStreamSnapHandle
*
handle
=
&
pWriter
->
handle
;
SStreamSnapBlockHdr
*
pHdr
=
(
SStreamSnapBlockHdr
*
)
pData
;
SBackendFileItem
*
pItem
=
taosArrayGetP
(
handle
->
pFileList
,
handle
->
currFileIdx
);
SStreamSnapHandle
*
handle
=
&
pWriter
->
handle
;
SBackendFileItem
*
pItem
=
taosArrayGetP
(
handle
->
pFileList
,
handle
->
currFileIdx
);
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
)
{
taosWriteFile
(
handle
->
fd
,
pHdr
->
data
,
pHdr
->
size
);
if
(
taosPWriteFile
(
handle
->
fd
,
pHdr
->
data
,
pHdr
->
size
,
handle
->
offset
)
!=
pHdr
->
size
)
{
code
=
TAOS_SYSTEM_ERROR
(
terrno
);
qError
(
"stream snap failed to write snap, file name:%s, reason:%s"
,
pHdr
->
name
,
tstrerror
(
code
));
return
code
;
}
handle
->
offset
+=
pHdr
->
size
;
}
else
{
}
else
{
taosCloseFile
(
&
handle
->
fd
);
taosCloseFile
(
&
handle
->
fd
);
...
@@ -284,9 +312,12 @@ int32_t streamSnapWrite(SStreamSnapWriter* pWriter, uint8_t* pData, uint32_t nDa
...
@@ -284,9 +312,12 @@ int32_t streamSnapWrite(SStreamSnapWriter* pWriter, uint8_t* pData, uint32_t nDa
item
.
type
=
pHdr
->
type
;
item
.
type
=
pHdr
->
type
;
taosArrayPush
(
handle
->
pFileList
,
&
item
);
taosArrayPush
(
handle
->
pFileList
,
&
item
);
handle
->
fd
=
taosOpenFile
(
taosArrayGet
(
handle
->
pFileList
,
taosArrayGetSize
(
handle
->
pFileList
)
-
1
),
TD_FILE_WRITE
);
handle
->
offset
=
0
;
taosWriteFile
(
handle
->
fd
,
pHdr
->
data
,
pHdr
->
size
);
handle
->
currFileIdx
+=
1
;
handle
->
currFileIdx
+=
1
;
handle
->
fd
=
taosOpenFile
(
taosArrayGet
(
handle
->
pFileList
,
taosArrayGetSize
(
handle
->
pFileList
)
-
1
),
TD_FILE_WRITE
);
taosPWriteFile
(
handle
->
fd
,
pHdr
->
data
,
pHdr
->
size
,
handle
->
offset
);
handle
->
offset
+=
pHdr
->
size
;
}
}
// impl later
// impl later
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录