Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
89a9e013
T
TDengine
项目概览
taosdata
/
TDengine
大约 2 年 前同步成功
通知
1193
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看板
提交
89a9e013
编写于
6月 06, 2023
作者:
H
Hongze Cheng
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
more code
上级
96d29bc9
变更
4
显示空白变更内容
内联
并排
Showing
4 changed file
with
354 addition
and
176 deletion
+354
-176
source/dnode/vnode/src/tsdb/dev/inc/tsdbUtil.h
source/dnode/vnode/src/tsdb/dev/inc/tsdbUtil.h
+2
-0
source/dnode/vnode/src/tsdb/dev/tsdbDataFileRW.c
source/dnode/vnode/src/tsdb/dev/tsdbDataFileRW.c
+338
-168
source/dnode/vnode/src/tsdb/dev/tsdbSttFileRW.c
source/dnode/vnode/src/tsdb/dev/tsdbSttFileRW.c
+4
-8
source/dnode/vnode/src/tsdb/dev/tsdbUtil.c
source/dnode/vnode/src/tsdb/dev/tsdbUtil.c
+10
-0
未找到文件。
source/dnode/vnode/src/tsdb/dev/inc/tsdbUtil.h
浏览文件 @
89a9e013
...
@@ -64,6 +64,8 @@ int32_t tTombBlockFree(STombBlock *delBlock);
...
@@ -64,6 +64,8 @@ int32_t tTombBlockFree(STombBlock *delBlock);
int32_t
tTombBlockClear
(
STombBlock
*
delBlock
);
int32_t
tTombBlockClear
(
STombBlock
*
delBlock
);
int32_t
tTombBlockPut
(
STombBlock
*
delBlock
,
const
STombRecord
*
delRecord
);
int32_t
tTombBlockPut
(
STombBlock
*
delBlock
,
const
STombRecord
*
delRecord
);
int32_t
tTombRecordCmpr
(
const
STombRecord
*
r1
,
const
STombRecord
*
r2
);
// STbStatisBlock ----------
// STbStatisBlock ----------
#define STATIS_RECORD_NUM_ELEM 9
#define STATIS_RECORD_NUM_ELEM 9
typedef
union
{
typedef
union
{
...
...
source/dnode/vnode/src/tsdb/dev/tsdbDataFileRW.c
浏览文件 @
89a9e013
...
@@ -17,9 +17,13 @@
...
@@ -17,9 +17,13 @@
typedef
struct
{
typedef
struct
{
SFDataPtr
blockIdxPtr
[
1
];
SFDataPtr
blockIdxPtr
[
1
];
SFDataPtr
tombBlkPtr
[
1
];
// TODO: keep footer here
SFDataPtr
rsrvd
[
2
];
SFDataPtr
rsrvd
[
2
];
}
SDataFooter
;
}
SHeadFooter
;
typedef
struct
{
SFDataPtr
tombBlkPtr
[
1
];
SFDataPtr
rsrvd
[
2
];
}
STombFooter
;
// SDataFileReader =============================================
// SDataFileReader =============================================
struct
SDataFileReader
{
struct
SDataFileReader
{
...
@@ -28,7 +32,8 @@ struct SDataFileReader {
...
@@ -28,7 +32,8 @@ struct SDataFileReader {
uint8_t
*
bufArr
[
5
];
uint8_t
*
bufArr
[
5
];
struct
{
struct
{
bool
footerLoaded
;
bool
headFooterLoaded
;
bool
tombFooterLoaded
;
bool
blockIdxLoaded
;
bool
blockIdxLoaded
;
bool
tombBlkLoaded
;
bool
tombBlkLoaded
;
TABLEID
tbid
[
1
];
TABLEID
tbid
[
1
];
...
@@ -36,15 +41,38 @@ struct SDataFileReader {
...
@@ -36,15 +41,38 @@ struct SDataFileReader {
STsdbFD
*
fd
[
TSDB_FTYPE_MAX
];
STsdbFD
*
fd
[
TSDB_FTYPE_MAX
];
SDataFooter
footer
[
1
];
SHeadFooter
headFooter
[
1
];
STombFooter
tombFooter
[
1
];
TBlockIdxArray
blockIdxArray
[
1
];
TBlockIdxArray
blockIdxArray
[
1
];
TDataBlkArray
dataBlkArray
[
1
];
TDataBlkArray
dataBlkArray
[
1
];
TTombBlkArray
tombBlkArray
[
1
];
TTombBlkArray
tombBlkArray
[
1
];
};
};
static
int32_t
tsdbDataFileReadFooter
(
SDataFileReader
*
reader
)
{
static
int32_t
tsdbDataFileReadHeadFooter
(
SDataFileReader
*
reader
)
{
if
(
!
reader
->
config
->
files
[
TSDB_FTYPE_HEAD
].
exist
//
if
(
reader
->
fd
[
TSDB_FTYPE_HEAD
]
==
NULL
//
||
reader
->
ctx
->
footerLoaded
)
{
||
reader
->
ctx
->
headFooterLoaded
)
{
return
0
;
}
int32_t
code
=
0
;
int32_t
lino
=
0
;
code
=
tsdbReadFile
(
reader
->
fd
[
TSDB_FTYPE_HEAD
],
reader
->
config
->
files
[
TSDB_FTYPE_HEAD
].
file
.
size
-
sizeof
(
SHeadFooter
),
(
uint8_t
*
)
reader
->
headFooter
,
sizeof
(
SHeadFooter
));
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
reader
->
ctx
->
headFooterLoaded
=
true
;
_exit:
if
(
code
)
{
TSDB_ERROR_LOG
(
TD_VID
(
reader
->
config
->
tsdb
->
pVnode
),
lino
,
code
);
}
return
code
;
}
static
int32_t
tsdbDataFileReadTombFooter
(
SDataFileReader
*
reader
)
{
if
(
reader
->
fd
[
TSDB_FTYPE_TOMB
]
==
NULL
//
||
reader
->
ctx
->
tombFooterLoaded
)
{
return
0
;
return
0
;
}
}
...
@@ -52,10 +80,10 @@ static int32_t tsdbDataFileReadFooter(SDataFileReader *reader) {
...
@@ -52,10 +80,10 @@ static int32_t tsdbDataFileReadFooter(SDataFileReader *reader) {
int32_t
lino
=
0
;
int32_t
lino
=
0
;
code
=
code
=
tsdbReadFile
(
reader
->
fd
[
TSDB_FTYPE_
HEAD
],
reader
->
config
->
files
[
TSDB_FTYPE_HEAD
].
file
.
size
-
sizeof
(
SData
Footer
),
tsdbReadFile
(
reader
->
fd
[
TSDB_FTYPE_
TOMB
],
reader
->
config
->
files
[
TSDB_FTYPE_TOMB
].
file
.
size
-
sizeof
(
STomb
Footer
),
(
uint8_t
*
)
reader
->
footer
,
sizeof
(
SData
Footer
));
(
uint8_t
*
)
reader
->
tombFooter
,
sizeof
(
STomb
Footer
));
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
reader
->
ctx
->
f
ooterLoaded
=
true
;
reader
->
ctx
->
tombF
ooterLoaded
=
true
;
_exit:
_exit:
if
(
code
)
{
if
(
code
)
{
...
@@ -81,21 +109,21 @@ int32_t tsdbDataFileReaderOpen(const char *fname[], const SDataFileReaderConfig
...
@@ -81,21 +109,21 @@ int32_t tsdbDataFileReaderOpen(const char *fname[], const SDataFileReaderConfig
if
(
fname
)
{
if
(
fname
)
{
for
(
int32_t
i
=
0
;
i
<
TSDB_FTYPE_MAX
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
TSDB_FTYPE_MAX
;
++
i
)
{
if
(
fname
[
i
]
==
NULL
)
continue
;
if
(
fname
[
i
])
{
code
=
tsdbOpenFile
(
fname
[
i
],
config
->
szPage
,
TD_FILE_READ
,
&
reader
[
0
]
->
fd
[
i
]);
code
=
tsdbOpenFile
(
fname
[
i
],
config
->
szPage
,
TD_FILE_READ
,
&
reader
[
0
]
->
fd
[
i
]);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
}
}
}
}
else
{
}
else
{
for
(
int32_t
i
=
0
;
i
<
TSDB_FTYPE_MAX
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
TSDB_FTYPE_MAX
;
++
i
)
{
if
(
!
config
->
files
[
i
].
exist
)
continue
;
if
(
config
->
files
[
i
].
exist
)
{
char
fname1
[
TSDB_FILENAME_LEN
];
char
fname1
[
TSDB_FILENAME_LEN
];
tsdbTFileName
(
config
->
tsdb
,
&
config
->
files
[
i
].
file
,
fname1
);
tsdbTFileName
(
config
->
tsdb
,
&
config
->
files
[
i
].
file
,
fname1
);
code
=
tsdbOpenFile
(
fname1
,
config
->
szPage
,
TD_FILE_READ
,
&
reader
[
0
]
->
fd
[
i
]);
code
=
tsdbOpenFile
(
fname1
,
config
->
szPage
,
TD_FILE_READ
,
&
reader
[
0
]
->
fd
[
i
]);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
}
}
}
}
}
_exit:
_exit:
if
(
code
)
{
if
(
code
)
{
...
@@ -127,22 +155,21 @@ int32_t tsdbDataFileReadBlockIdx(SDataFileReader *reader, const TBlockIdxArray *
...
@@ -127,22 +155,21 @@ int32_t tsdbDataFileReadBlockIdx(SDataFileReader *reader, const TBlockIdxArray *
int32_t
code
=
0
;
int32_t
code
=
0
;
int32_t
lino
=
0
;
int32_t
lino
=
0
;
code
=
tsdbDataFileReadFooter
(
reader
);
if
(
!
reader
->
ctx
->
blockIdxLoaded
)
{
code
=
tsdbDataFileReadHeadFooter
(
reader
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
if
(
!
reader
->
ctx
->
blockIdxLoaded
)
{
TARRAY2_CLEAR
(
reader
->
blockIdxArray
,
NULL
);
TARRAY2_CLEAR
(
reader
->
blockIdxArray
,
NULL
);
if
(
reader
->
fd
[
TSDB_FTYPE_HEAD
]
//
if
(
reader
->
config
->
files
[
TSDB_FTYPE_HEAD
].
exist
//
&&
reader
->
headFooter
->
blockIdxPtr
->
size
)
{
&&
reader
->
footer
->
blockIdxPtr
->
size
)
{
code
=
tRealloc
(
&
reader
->
config
->
bufArr
[
0
],
reader
->
headFooter
->
blockIdxPtr
->
size
);
code
=
tRealloc
(
&
reader
->
config
->
bufArr
[
0
],
reader
->
footer
->
blockIdxPtr
->
size
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
code
=
tsdbReadFile
(
reader
->
fd
[
TSDB_FTYPE_HEAD
],
reader
->
footer
->
blockIdxPtr
->
offset
,
reader
->
config
->
bufArr
[
0
]
,
code
=
tsdbReadFile
(
reader
->
fd
[
TSDB_FTYPE_HEAD
],
reader
->
headFooter
->
blockIdxPtr
->
offset
,
reader
->
f
ooter
->
blockIdxPtr
->
size
);
reader
->
config
->
bufArr
[
0
],
reader
->
headF
ooter
->
blockIdxPtr
->
size
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
int32_t
size
=
reader
->
f
ooter
->
blockIdxPtr
->
size
/
sizeof
(
SBlockIdx
);
int32_t
size
=
reader
->
headF
ooter
->
blockIdxPtr
->
size
/
sizeof
(
SBlockIdx
);
for
(
int32_t
i
=
0
;
i
<
size
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
size
;
++
i
)
{
code
=
TARRAY2_APPEND_PTR
(
reader
->
blockIdxArray
,
((
SBlockIdx
*
)
reader
->
config
->
bufArr
[
0
])
+
i
);
code
=
TARRAY2_APPEND_PTR
(
reader
->
blockIdxArray
,
((
SBlockIdx
*
)
reader
->
config
->
bufArr
[
0
])
+
i
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
...
@@ -163,7 +190,7 @@ _exit:
...
@@ -163,7 +190,7 @@ _exit:
int32_t
tsdbDataFileReadDataBlk
(
SDataFileReader
*
reader
,
const
SBlockIdx
*
blockIdx
,
int32_t
tsdbDataFileReadDataBlk
(
SDataFileReader
*
reader
,
const
SBlockIdx
*
blockIdx
,
const
TDataBlkArray
**
dataBlkArray
)
{
const
TDataBlkArray
**
dataBlkArray
)
{
ASSERT
(
reader
->
ctx
->
f
ooterLoaded
);
ASSERT
(
reader
->
ctx
->
headF
ooterLoaded
);
if
(
reader
->
ctx
->
tbid
->
suid
==
blockIdx
->
suid
&&
reader
->
ctx
->
tbid
->
uid
==
blockIdx
->
uid
)
{
if
(
reader
->
ctx
->
tbid
->
suid
==
blockIdx
->
suid
&&
reader
->
ctx
->
tbid
->
uid
==
blockIdx
->
uid
)
{
dataBlkArray
[
0
]
=
reader
->
dataBlkArray
;
dataBlkArray
[
0
]
=
reader
->
dataBlkArray
;
...
@@ -224,23 +251,23 @@ int32_t tsdbDataFileReadTombBlk(SDataFileReader *reader, const TTombBlkArray **t
...
@@ -224,23 +251,23 @@ int32_t tsdbDataFileReadTombBlk(SDataFileReader *reader, const TTombBlkArray **t
int32_t
code
=
0
;
int32_t
code
=
0
;
int32_t
lino
=
0
;
int32_t
lino
=
0
;
if
(
!
reader
->
ctx
->
tombBlkLoaded
)
{
code
=
tsdbDataFileReadTombFooter
(
reader
);
if
(
!
reader
->
ctx
->
footerLoaded
)
{
code
=
tsdbDataFileReadFooter
(
reader
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
}
TARRAY2_CLEAR
(
reader
->
tombBlkArray
,
NULL
);
if
(
reader
->
fd
[
TSDB_FTYPE_TOMB
]
&&
!
reader
->
ctx
->
tombBlkLoaded
)
{
code
=
tsdbDataFileReadTombFooter
(
reader
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
if
(
reader
->
footer
->
tombBlkPtr
->
size
)
{
TARRAY2_CLEAR
(
reader
->
tombBlkArray
,
NULL
);
code
=
tRealloc
(
&
reader
->
config
->
bufArr
[
0
],
reader
->
footer
->
tombBlkPtr
->
size
);
if
(
reader
->
tombFooter
->
tombBlkPtr
->
size
)
{
code
=
tRealloc
(
&
reader
->
config
->
bufArr
[
0
],
reader
->
tombFooter
->
tombBlkPtr
->
size
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
code
=
tsdbReadFile
(
reader
->
fd
[
TSDB_FTYPE_TOMB
],
reader
->
footer
->
tombBlkPtr
->
offset
,
reader
->
config
->
bufArr
[
0
]
,
code
=
tsdbReadFile
(
reader
->
fd
[
TSDB_FTYPE_TOMB
],
reader
->
tombFooter
->
tombBlkPtr
->
offset
,
reader
->
f
ooter
->
tombBlkPtr
->
size
);
reader
->
config
->
bufArr
[
0
],
reader
->
tombF
ooter
->
tombBlkPtr
->
size
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
int32_t
size
=
reader
->
f
ooter
->
tombBlkPtr
->
size
/
sizeof
(
STombBlk
);
int32_t
size
=
reader
->
tombF
ooter
->
tombBlkPtr
->
size
/
sizeof
(
STombBlk
);
for
(
int32_t
i
=
0
;
i
<
size
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
size
;
++
i
)
{
code
=
TARRAY2_APPEND_PTR
(
reader
->
tombBlkArray
,
((
STombBlk
*
)
reader
->
config
->
bufArr
[
0
])
+
i
);
code
=
TARRAY2_APPEND_PTR
(
reader
->
tombBlkArray
,
((
STombBlk
*
)
reader
->
config
->
bufArr
[
0
])
+
i
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
...
@@ -301,6 +328,7 @@ struct SDataFileWriter {
...
@@ -301,6 +328,7 @@ struct SDataFileWriter {
struct
{
struct
{
bool
opened
;
bool
opened
;
SDataFileReader
*
reader
;
SDataFileReader
*
reader
;
// for ts data
const
TBlockIdxArray
*
blockIdxArray
;
const
TBlockIdxArray
*
blockIdxArray
;
int32_t
blockIdxArrayIdx
;
int32_t
blockIdxArrayIdx
;
bool
tbHasOldData
;
bool
tbHasOldData
;
...
@@ -309,12 +337,19 @@ struct SDataFileWriter {
...
@@ -309,12 +337,19 @@ struct SDataFileWriter {
SBlockData
bData
[
1
];
SBlockData
bData
[
1
];
int32_t
iRow
;
int32_t
iRow
;
TABLEID
tbid
[
1
];
TABLEID
tbid
[
1
];
// for tomb data
bool
hasOldTomb
;
const
TTombBlkArray
*
tombBlkArray
;
int32_t
tombBlkArrayIdx
;
STombBlock
tData
[
1
];
int32_t
iRowTomb
;
}
ctx
[
1
];
}
ctx
[
1
];
STFile
files
[
TSDB_FTYPE_MAX
];
STFile
files
[
TSDB_FTYPE_MAX
];
STsdbFD
*
fd
[
TSDB_FTYPE_MAX
];
STsdbFD
*
fd
[
TSDB_FTYPE_MAX
];
SDataFooter
footer
[
1
];
SHeadFooter
headFooter
[
1
];
STombFooter
tombFooter
[
1
];
TBlockIdxArray
blockIdxArray
[
1
];
TBlockIdxArray
blockIdxArray
[
1
];
TDataBlkArray
dataBlkArray
[
1
];
TDataBlkArray
dataBlkArray
[
1
];
TTombBlkArray
tombBlkArray
[
1
];
TTombBlkArray
tombBlkArray
[
1
];
...
@@ -327,14 +362,14 @@ static int32_t tsdbDataFileWriteBlockIdx(SDataFileWriter *writer) {
...
@@ -327,14 +362,14 @@ static int32_t tsdbDataFileWriteBlockIdx(SDataFileWriter *writer) {
int32_t
code
=
0
;
int32_t
code
=
0
;
int32_t
lino
=
0
;
int32_t
lino
=
0
;
writer
->
f
ooter
->
blockIdxPtr
->
offset
=
writer
->
files
[
TSDB_FTYPE_HEAD
].
size
;
writer
->
headF
ooter
->
blockIdxPtr
->
offset
=
writer
->
files
[
TSDB_FTYPE_HEAD
].
size
;
writer
->
f
ooter
->
blockIdxPtr
->
size
=
TARRAY2_DATA_LEN
(
writer
->
blockIdxArray
);
writer
->
headF
ooter
->
blockIdxPtr
->
size
=
TARRAY2_DATA_LEN
(
writer
->
blockIdxArray
);
if
(
writer
->
f
ooter
->
blockIdxPtr
->
size
)
{
if
(
writer
->
headF
ooter
->
blockIdxPtr
->
size
)
{
code
=
tsdbWriteFile
(
writer
->
fd
[
TSDB_FTYPE_HEAD
],
writer
->
f
ooter
->
blockIdxPtr
->
offset
,
code
=
tsdbWriteFile
(
writer
->
fd
[
TSDB_FTYPE_HEAD
],
writer
->
headF
ooter
->
blockIdxPtr
->
offset
,
(
void
*
)
TARRAY2_DATA
(
writer
->
blockIdxArray
),
writer
->
f
ooter
->
blockIdxPtr
->
size
);
(
void
*
)
TARRAY2_DATA
(
writer
->
blockIdxArray
),
writer
->
headF
ooter
->
blockIdxPtr
->
size
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
writer
->
files
[
TSDB_FTYPE_HEAD
].
size
+=
writer
->
f
ooter
->
blockIdxPtr
->
size
;
writer
->
files
[
TSDB_FTYPE_HEAD
].
size
+=
writer
->
headF
ooter
->
blockIdxPtr
->
size
;
}
}
_exit:
_exit:
...
@@ -350,7 +385,24 @@ static int32_t tsdbDataFileWriterCloseAbort(SDataFileWriter *writer) {
...
@@ -350,7 +385,24 @@ static int32_t tsdbDataFileWriterCloseAbort(SDataFileWriter *writer) {
}
}
static
int32_t
tsdbDataFileWriterDoClose
(
SDataFileWriter
*
writer
)
{
static
int32_t
tsdbDataFileWriterDoClose
(
SDataFileWriter
*
writer
)
{
// TODO
if
(
writer
->
ctx
->
reader
)
{
tsdbDataFileReaderClose
(
&
writer
->
ctx
->
reader
);
}
tTombBlockFree
(
writer
->
tData
);
tStatisBlockFree
(
writer
->
sData
);
tBlockDataDestroy
(
writer
->
bData
);
TARRAY2_FREE
(
writer
->
tombBlkArray
);
TARRAY2_FREE
(
writer
->
dataBlkArray
);
TARRAY2_FREE
(
writer
->
blockIdxArray
);
tTombBlockFree
(
writer
->
ctx
->
tData
);
for
(
int32_t
i
=
0
;
i
<
ARRAY_SIZE
(
writer
->
bufArr
);
++
i
)
{
tFree
(
writer
->
bufArr
[
i
]);
}
tDestroyTSchema
(
writer
->
skmRow
->
pTSchema
);
tDestroyTSchema
(
writer
->
skmTb
->
pTSchema
);
return
0
;
return
0
;
}
}
...
@@ -372,10 +424,6 @@ static int32_t tsdbDataFileWriterDoOpenReader(SDataFileWriter *writer) {
...
@@ -372,10 +424,6 @@ static int32_t tsdbDataFileWriterDoOpenReader(SDataFileWriter *writer) {
code
=
tsdbDataFileReaderOpen
(
NULL
,
config
,
&
writer
->
ctx
->
reader
);
code
=
tsdbDataFileReaderOpen
(
NULL
,
config
,
&
writer
->
ctx
->
reader
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
code
=
tsdbDataFileReadBlockIdx
(
writer
->
ctx
->
reader
,
&
writer
->
ctx
->
blockIdxArray
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
break
;
break
;
}
}
}
}
...
@@ -399,9 +447,11 @@ static int32_t tsdbDataFileWriterDoOpen(SDataFileWriter *writer) {
...
@@ -399,9 +447,11 @@ static int32_t tsdbDataFileWriterDoOpen(SDataFileWriter *writer) {
code
=
tsdbDataFileWriterDoOpenReader
(
writer
);
code
=
tsdbDataFileWriterDoOpenReader
(
writer
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
int32_t
ftype
;
// .head
// .head
writer
->
files
[
TSDB_FTYPE_HEAD
]
=
(
STFile
){
ftype
=
TSDB_FTYPE_HEAD
;
.
type
=
TSDB_FTYPE_HEAD
,
writer
->
files
[
ftype
]
=
(
STFile
){
.
type
=
ftype
,
.
did
=
writer
->
config
->
did
,
.
did
=
writer
->
config
->
did
,
.
fid
=
writer
->
config
->
fid
,
.
fid
=
writer
->
config
->
fid
,
.
cid
=
writer
->
config
->
cid
,
.
cid
=
writer
->
config
->
cid
,
...
@@ -409,38 +459,48 @@ static int32_t tsdbDataFileWriterDoOpen(SDataFileWriter *writer) {
...
@@ -409,38 +459,48 @@ static int32_t tsdbDataFileWriterDoOpen(SDataFileWriter *writer) {
};
};
// .data
// .data
if
(
writer
->
config
->
files
[
TSDB_FTYPE_DATA
].
exist
)
{
ftype
=
TSDB_FTYPE_DATA
;
writer
->
files
[
TSDB_FTYPE_DATA
]
=
writer
->
config
->
files
[
TSDB_FTYPE_DATA
].
file
;
if
(
writer
->
config
->
files
[
ftype
].
exist
)
{
writer
->
files
[
ftype
]
=
writer
->
config
->
files
[
ftype
].
file
;
}
else
{
}
else
{
writer
->
files
[
TSDB_FTYPE_DATA
]
=
writer
->
files
[
TSDB_FTYPE_HEAD
];
writer
->
files
[
ftype
]
=
(
STFile
){
writer
->
files
[
TSDB_FTYPE_DATA
].
type
=
TSDB_FTYPE_DATA
;
.
type
=
ftype
,
.
did
=
writer
->
config
->
did
,
.
fid
=
writer
->
config
->
fid
,
.
cid
=
writer
->
config
->
cid
,
.
size
=
0
,
};
}
}
// .sma
// .sma
if
(
writer
->
config
->
files
[
TSDB_FTYPE_SMA
].
exist
)
{
ftype
=
TSDB_FTYPE_SMA
;
writer
->
files
[
TSDB_FTYPE_SMA
]
=
writer
->
config
->
files
[
TSDB_FTYPE_SMA
].
file
;
if
(
writer
->
config
->
files
[
ftype
].
exist
)
{
writer
->
files
[
ftype
]
=
writer
->
config
->
files
[
ftype
].
file
;
}
else
{
}
else
{
writer
->
files
[
TSDB_FTYPE_SMA
]
=
writer
->
files
[
TSDB_FTYPE_HEAD
];
writer
->
files
[
ftype
]
=
(
STFile
){
writer
->
files
[
TSDB_FTYPE_SMA
].
type
=
TSDB_FTYPE_SMA
;
.
type
=
ftype
,
.
did
=
writer
->
config
->
did
,
.
fid
=
writer
->
config
->
fid
,
.
cid
=
writer
->
config
->
cid
,
.
size
=
0
,
};
}
}
// .tomb (todo)
// .tomb
writer
->
files
[
TSDB_FTYPE_TOMB
]
=
(
STFile
){
ftype
=
TSDB_FTYPE_TOMB
;
.
type
=
TSDB_FTYPE_TOMB
,
writer
->
files
[
ftype
]
=
(
STFile
){
.
type
=
ftype
,
.
did
=
writer
->
config
->
did
,
.
did
=
writer
->
config
->
did
,
.
fid
=
writer
->
config
->
fid
,
.
fid
=
writer
->
config
->
fid
,
.
cid
=
writer
->
config
->
cid
,
.
cid
=
writer
->
config
->
cid
,
.
size
=
0
,
.
size
=
0
,
};
};
// TODO: init footer
writer
->
ctx
->
opened
=
true
;
// writer->footer->blockIdxPtr->offset = 0;
_exit:
_exit:
if
(
code
)
{
if
(
code
)
{
TSDB_ERROR_LOG
(
TD_VID
(
writer
->
config
->
tsdb
->
pVnode
),
lino
,
code
);
TSDB_ERROR_LOG
(
TD_VID
(
writer
->
config
->
tsdb
->
pVnode
),
lino
,
code
);
}
else
{
writer
->
ctx
->
opened
=
true
;
}
}
return
code
;
return
code
;
}
}
...
@@ -548,16 +608,18 @@ static int32_t tsdbDataFileWriteDataBlk(SDataFileWriter *writer, const TDataBlkA
...
@@ -548,16 +608,18 @@ static int32_t tsdbDataFileWriteDataBlk(SDataFileWriter *writer, const TDataBlkA
int32_t
code
=
0
;
int32_t
code
=
0
;
int32_t
lino
=
0
;
int32_t
lino
=
0
;
SBlockIdx
blockIdx
[
1
];
int32_t
ftype
=
TSDB_FTYPE_HEAD
;
blockIdx
->
suid
=
writer
->
ctx
->
tbid
->
suid
;
SBlockIdx
blockIdx
[
1
]
=
{{
blockIdx
->
uid
=
writer
->
ctx
->
tbid
->
uid
;
.
suid
=
writer
->
ctx
->
tbid
->
suid
,
blockIdx
->
offset
=
writer
->
files
[
TSDB_FTYPE_HEAD
].
size
;
.
uid
=
writer
->
ctx
->
tbid
->
uid
,
blockIdx
->
size
=
TARRAY2_DATA_LEN
(
dataBlkArray
);
.
offset
=
writer
->
files
[
ftype
].
size
,
.
size
=
TARRAY2_DATA_LEN
(
dataBlkArray
),
}};
code
=
tsdbWriteFile
(
writer
->
fd
[
TSDB_FTYPE_HEAD
],
blockIdx
->
offset
,
(
const
uint8_t
*
)
TARRAY2_DATA
(
dataBlkArray
),
code
=
blockIdx
->
size
);
tsdbWriteFile
(
writer
->
fd
[
ftype
],
blockIdx
->
offset
,
(
const
uint8_t
*
)
TARRAY2_DATA
(
dataBlkArray
),
blockIdx
->
size
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
writer
->
files
[
TSDB_FTYPE_HEAD
].
size
+=
blockIdx
->
size
;
writer
->
files
[
ftype
].
size
+=
blockIdx
->
size
;
code
=
TARRAY2_APPEND_PTR
(
writer
->
blockIdxArray
,
blockIdx
);
code
=
TARRAY2_APPEND_PTR
(
writer
->
blockIdxArray
,
blockIdx
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
...
@@ -628,6 +690,7 @@ static int32_t tsdbDataFileDoWriteTSData(SDataFileWriter *writer, TSDBROW *row)
...
@@ -628,6 +690,7 @@ static int32_t tsdbDataFileDoWriteTSData(SDataFileWriter *writer, TSDBROW *row)
for
(;
writer
->
ctx
->
dataBlkArrayIdx
<
TARRAY2_SIZE
(
writer
->
ctx
->
dataBlkArray
);
writer
->
ctx
->
dataBlkArrayIdx
++
)
{
for
(;
writer
->
ctx
->
dataBlkArrayIdx
<
TARRAY2_SIZE
(
writer
->
ctx
->
dataBlkArray
);
writer
->
ctx
->
dataBlkArrayIdx
++
)
{
const
SDataBlk
*
dataBlk
=
TARRAY2_GET_PTR
(
writer
->
ctx
->
dataBlkArray
,
writer
->
ctx
->
dataBlkArrayIdx
);
const
SDataBlk
*
dataBlk
=
TARRAY2_GET_PTR
(
writer
->
ctx
->
dataBlkArray
,
writer
->
ctx
->
dataBlkArrayIdx
);
TSDBKEY
key
=
TSDBROW_KEY
(
row
);
TSDBKEY
key
=
TSDBROW_KEY
(
row
);
SDataBlk
dataBlk1
[
1
]
=
{{
SDataBlk
dataBlk1
[
1
]
=
{{
.
minKey
=
key
,
.
minKey
=
key
,
...
@@ -770,14 +833,14 @@ _exit:
...
@@ -770,14 +833,14 @@ _exit:
return
code
;
return
code
;
}
}
static
int32_t
tsdbDataFileWriteFooter
(
SDataFileWriter
*
writer
)
{
static
int32_t
tsdbDataFileWrite
Head
Footer
(
SDataFileWriter
*
writer
)
{
int32_t
code
=
0
;
int32_t
code
=
0
;
int32_t
lino
=
0
;
int32_t
lino
=
0
;
code
=
tsdbWriteFile
(
writer
->
fd
[
TSDB_FTYPE_HEAD
],
writer
->
files
[
TSDB_FTYPE_HEAD
].
size
,
code
=
tsdbWriteFile
(
writer
->
fd
[
TSDB_FTYPE_HEAD
],
writer
->
files
[
TSDB_FTYPE_HEAD
].
size
,
(
const
uint8_t
*
)
writer
->
footer
,
sizeof
(
SData
Footer
));
(
const
uint8_t
*
)
writer
->
headFooter
,
sizeof
(
SHead
Footer
));
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
writer
->
files
[
TSDB_FTYPE_HEAD
].
size
+=
sizeof
(
S
Data
Footer
);
writer
->
files
[
TSDB_FTYPE_HEAD
].
size
+=
sizeof
(
S
Head
Footer
);
_exit:
_exit:
if
(
code
)
{
if
(
code
)
{
...
@@ -847,19 +910,18 @@ _exit:
...
@@ -847,19 +910,18 @@ _exit:
}
}
static
int32_t
tsdbDataFileDoWriteTombBlk
(
SDataFileWriter
*
writer
)
{
static
int32_t
tsdbDataFileDoWriteTombBlk
(
SDataFileWriter
*
writer
)
{
if
(
writer
->
fd
[
TSDB_FTYPE_TOMB
]
==
NULL
)
return
0
;
int32_t
code
=
0
;
int32_t
code
=
0
;
int32_t
lino
=
0
;
int32_t
lino
=
0
;
writer
->
footer
->
tombBlkPtr
->
offset
=
writer
->
files
[
TSDB_FTYPE_TOMB
].
size
;
int32_t
ftype
=
TSDB_FTYPE_TOMB
;
writer
->
footer
->
tombBlkPtr
->
size
=
TARRAY2_DATA_LEN
(
writer
->
tombBlkArray
);
writer
->
tombFooter
->
tombBlkPtr
->
offset
=
writer
->
files
[
ftype
].
size
;
writer
->
tombFooter
->
tombBlkPtr
->
size
=
TARRAY2_DATA_LEN
(
writer
->
tombBlkArray
);
if
(
writer
->
f
ooter
->
tombBlkPtr
->
size
)
{
if
(
writer
->
tombF
ooter
->
tombBlkPtr
->
size
)
{
code
=
tsdbWriteFile
(
writer
->
fd
[
TSDB_FTYPE_TOMB
],
writer
->
f
ooter
->
tombBlkPtr
->
offset
,
code
=
tsdbWriteFile
(
writer
->
fd
[
ftype
],
writer
->
tombF
ooter
->
tombBlkPtr
->
offset
,
(
const
uint8_t
*
)
TARRAY2_DATA
(
writer
->
tombBlkArray
),
writer
->
f
ooter
->
tombBlkPtr
->
size
);
(
const
uint8_t
*
)
TARRAY2_DATA
(
writer
->
tombBlkArray
),
writer
->
tombF
ooter
->
tombBlkPtr
->
size
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
writer
->
files
[
TSDB_FTYPE_TOMB
].
size
+=
writer
->
f
ooter
->
tombBlkPtr
->
size
;
writer
->
files
[
ftype
].
size
+=
writer
->
tombF
ooter
->
tombBlkPtr
->
size
;
}
}
_exit:
_exit:
...
@@ -869,31 +931,111 @@ _exit:
...
@@ -869,31 +931,111 @@ _exit:
return
code
;
return
code
;
}
}
static
int32_t
tsdbDataFileWrite
rCloseCommit
(
SDataFileWriter
*
writer
,
TFileOpArray
*
opAr
r
)
{
static
int32_t
tsdbDataFileWrite
TombFooter
(
SDataFileWriter
*
write
r
)
{
int32_t
code
=
0
;
int32_t
code
=
0
;
int32_t
lino
=
0
;
int32_t
lino
=
0
;
TABLEID
tbid
[
1
]
=
{{
INT64_MAX
,
INT64_MAX
}};
code
=
tsdbDataFileWriteTableDataEnd
(
writer
);
code
=
tsdbWriteFile
(
writer
->
fd
[
TSDB_FTYPE_TOMB
],
writer
->
files
[
TSDB_FTYPE_TOMB
].
size
,
(
const
uint8_t
*
)
writer
->
tombFooter
,
sizeof
(
STombFooter
));
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
writer
->
files
[
TSDB_FTYPE_TOMB
].
size
+=
sizeof
(
STombFooter
);
code
=
tsdbDataFileWriteTableDataBegin
(
writer
,
tbid
);
_exit:
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
if
(
code
)
{
TSDB_ERROR_LOG
(
TD_VID
(
writer
->
config
->
tsdb
->
pVnode
),
lino
,
code
);
}
return
code
;
}
code
=
tsdbDataFileWriteBlockIdx
(
writer
);
static
int32_t
tsdbDataFileDoWriteTombRecord
(
SDataFileWriter
*
writer
,
const
STombRecord
*
record
)
{
int32_t
code
=
0
;
int32_t
lino
=
0
;
while
(
writer
->
ctx
->
hasOldTomb
)
{
for
(;
writer
->
ctx
->
iRowTomb
<
TOMB_BLOCK_SIZE
(
writer
->
ctx
->
tData
);
writer
->
ctx
->
iRowTomb
++
)
{
STombRecord
record1
[
1
]
=
{{
.
suid
=
TARRAY2_GET
(
writer
->
ctx
->
tData
->
suid
,
writer
->
ctx
->
iRowTomb
),
.
uid
=
TARRAY2_GET
(
writer
->
ctx
->
tData
->
uid
,
writer
->
ctx
->
iRowTomb
),
.
version
=
TARRAY2_GET
(
writer
->
ctx
->
tData
->
version
,
writer
->
ctx
->
iRowTomb
),
.
skey
=
TARRAY2_GET
(
writer
->
ctx
->
tData
->
skey
,
writer
->
ctx
->
iRowTomb
),
.
ekey
=
TARRAY2_GET
(
writer
->
ctx
->
tData
->
ekey
,
writer
->
ctx
->
iRowTomb
),
}};
int32_t
c
=
tTombRecordCmpr
(
record
,
record1
);
if
(
c
<
0
)
{
break
;
}
else
if
(
c
>
0
)
{
code
=
tTombBlockPut
(
writer
->
tData
,
record1
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
if
(
TOMB_BLOCK_SIZE
(
writer
->
tData
)
>=
writer
->
config
->
maxRow
)
{
code
=
tsdbDataFileDoWriteTombBlock
(
writer
);
code
=
tsdbDataFileDoWriteTombBlock
(
writer
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
}
}
else
{
ASSERT
(
0
);
}
}
code
=
tsdbDataFileDoWriteTombBlk
(
writer
);
if
(
writer
->
ctx
->
tombBlkArrayIdx
>=
TARRAY2_SIZE
(
writer
->
ctx
->
tombBlkArray
))
{
writer
->
ctx
->
hasOldTomb
=
false
;
break
;
}
for
(;
writer
->
ctx
->
tombBlkArrayIdx
<
TARRAY2_SIZE
(
writer
->
ctx
->
tombBlkArray
);
++
writer
->
ctx
->
tombBlkArrayIdx
)
{
const
STombBlk
*
tombBlk
=
TARRAY2_GET_PTR
(
writer
->
ctx
->
tombBlkArray
,
writer
->
ctx
->
tombBlkArrayIdx
);
code
=
tsdbDataFileReadTombBlock
(
writer
->
ctx
->
reader
,
tombBlk
,
writer
->
ctx
->
tData
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
writer
->
ctx
->
iRowTomb
=
0
;
writer
->
ctx
->
tombBlkArrayIdx
++
;
break
;
}
}
_write:
if
(
record
->
suid
==
INT64_MAX
)
goto
_exit
;
code
=
tTombBlockPut
(
writer
->
tData
,
record
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
code
=
tsdbDataFileWriteFooter
(
writer
);
if
(
TOMB_BLOCK_SIZE
(
writer
->
tData
)
>=
writer
->
config
->
maxRow
)
{
code
=
tsdbDataFileDoWriteTombBlock
(
writer
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
}
_exit:
if
(
code
)
{
TSDB_ERROR_LOG
(
TD_VID
(
writer
->
config
->
tsdb
->
pVnode
),
lino
,
code
);
}
return
code
;
}
static
int32_t
tsdbDataFileWriterCloseCommit
(
SDataFileWriter
*
writer
,
TFileOpArray
*
opArr
)
{
int32_t
code
=
0
;
int32_t
lino
=
0
;
STFileOp
op
;
int32_t
ftype
;
int32_t
ftype
;
STFileOp
op
;
if
(
writer
->
fd
[
TSDB_FTYPE_HEAD
])
{
TABLEID
tbid
[
1
]
=
{{
.
suid
=
INT64_MAX
,
.
uid
=
INT64_MAX
,
}};
code
=
tsdbDataFileWriteTableDataEnd
(
writer
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
code
=
tsdbDataFileWriteTableDataBegin
(
writer
,
tbid
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
code
=
tsdbDataFileWriteBlockIdx
(
writer
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
code
=
tsdbDataFileWriteHeadFooter
(
writer
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
// .head
// .head
ftype
=
TSDB_FTYPE_HEAD
;
ftype
=
TSDB_FTYPE_HEAD
;
...
@@ -903,7 +1045,6 @@ static int32_t tsdbDataFileWriterCloseCommit(SDataFileWriter *writer, TFileOpArr
...
@@ -903,7 +1045,6 @@ static int32_t tsdbDataFileWriterCloseCommit(SDataFileWriter *writer, TFileOpArr
.
fid
=
writer
->
config
->
fid
,
.
fid
=
writer
->
config
->
fid
,
.
of
=
writer
->
config
->
files
[
ftype
].
file
,
.
of
=
writer
->
config
->
files
[
ftype
].
file
,
};
};
code
=
TARRAY2_APPEND
(
opArr
,
op
);
code
=
TARRAY2_APPEND
(
opArr
,
op
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
}
}
...
@@ -917,14 +1058,12 @@ static int32_t tsdbDataFileWriterCloseCommit(SDataFileWriter *writer, TFileOpArr
...
@@ -917,14 +1058,12 @@ static int32_t tsdbDataFileWriterCloseCommit(SDataFileWriter *writer, TFileOpArr
// .data
// .data
ftype
=
TSDB_FTYPE_DATA
;
ftype
=
TSDB_FTYPE_DATA
;
if
(
writer
->
fd
[
ftype
])
{
if
(
!
writer
->
config
->
files
[
ftype
].
exist
)
{
if
(
!
writer
->
config
->
files
[
ftype
].
exist
)
{
op
=
(
STFileOp
){
op
=
(
STFileOp
){
.
optype
=
TSDB_FOP_CREATE
,
.
optype
=
TSDB_FOP_CREATE
,
.
fid
=
writer
->
config
->
fid
,
.
fid
=
writer
->
config
->
fid
,
.
nf
=
writer
->
files
[
ftype
],
.
nf
=
writer
->
files
[
ftype
],
};
};
code
=
TARRAY2_APPEND
(
opArr
,
op
);
code
=
TARRAY2_APPEND
(
opArr
,
op
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
}
else
if
(
writer
->
config
->
files
[
ftype
].
file
.
size
!=
writer
->
files
[
ftype
].
size
)
{
}
else
if
(
writer
->
config
->
files
[
ftype
].
file
.
size
!=
writer
->
files
[
ftype
].
size
)
{
...
@@ -934,22 +1073,18 @@ static int32_t tsdbDataFileWriterCloseCommit(SDataFileWriter *writer, TFileOpArr
...
@@ -934,22 +1073,18 @@ static int32_t tsdbDataFileWriterCloseCommit(SDataFileWriter *writer, TFileOpArr
.
of
=
writer
->
config
->
files
[
ftype
].
file
,
.
of
=
writer
->
config
->
files
[
ftype
].
file
,
.
nf
=
writer
->
files
[
ftype
],
.
nf
=
writer
->
files
[
ftype
],
};
};
code
=
TARRAY2_APPEND
(
opArr
,
op
);
code
=
TARRAY2_APPEND
(
opArr
,
op
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
}
}
}
// .sma
// .sma
ftype
=
TSDB_FTYPE_SMA
;
ftype
=
TSDB_FTYPE_SMA
;
if
(
writer
->
fd
[
ftype
])
{
if
(
!
writer
->
config
->
files
[
ftype
].
exist
)
{
if
(
!
writer
->
config
->
files
[
ftype
].
exist
)
{
op
=
(
STFileOp
){
op
=
(
STFileOp
){
.
optype
=
TSDB_FOP_CREATE
,
.
optype
=
TSDB_FOP_CREATE
,
.
fid
=
writer
->
config
->
fid
,
.
fid
=
writer
->
config
->
fid
,
.
nf
=
writer
->
files
[
ftype
],
.
nf
=
writer
->
files
[
ftype
],
};
};
code
=
TARRAY2_APPEND
(
opArr
,
op
);
code
=
TARRAY2_APPEND
(
opArr
,
op
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
}
else
if
(
writer
->
config
->
files
[
ftype
].
file
.
size
!=
writer
->
files
[
ftype
].
size
)
{
}
else
if
(
writer
->
config
->
files
[
ftype
].
file
.
size
!=
writer
->
files
[
ftype
].
size
)
{
...
@@ -959,21 +1094,56 @@ static int32_t tsdbDataFileWriterCloseCommit(SDataFileWriter *writer, TFileOpArr
...
@@ -959,21 +1094,56 @@ static int32_t tsdbDataFileWriterCloseCommit(SDataFileWriter *writer, TFileOpArr
.
of
=
writer
->
config
->
files
[
ftype
].
file
,
.
of
=
writer
->
config
->
files
[
ftype
].
file
,
.
nf
=
writer
->
files
[
ftype
],
.
nf
=
writer
->
files
[
ftype
],
};
};
code
=
TARRAY2_APPEND
(
opArr
,
op
);
code
=
TARRAY2_APPEND
(
opArr
,
op
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
}
}
}
}
// .tomb (TODO)
if
(
writer
->
fd
[
TSDB_FTYPE_TOMB
])
{
ftype
=
TSDB_FTYPE_TOMB
;
STombRecord
record
[
1
]
=
{{
.
suid
=
INT64_MAX
,
.
uid
=
INT64_MAX
,
.
version
=
INT64_MAX
,
}};
code
=
tsdbDataFileDoWriteTombRecord
(
writer
,
record
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
code
=
tsdbDataFileDoWriteTombBlock
(
writer
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
code
=
tsdbDataFileDoWriteTombBlk
(
writer
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
code
=
tsdbDataFileWriteTombFooter
(
writer
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
ftype
=
TSDB_FTYPE_SMA
;
if
(
writer
->
config
->
files
[
ftype
].
exist
)
{
op
=
(
STFileOp
){
.
optype
=
TSDB_FOP_REMOVE
,
.
fid
=
writer
->
config
->
fid
,
.
of
=
writer
->
config
->
files
[
ftype
].
file
,
};
code
=
TARRAY2_APPEND
(
opArr
,
op
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
}
op
=
(
STFileOp
){
.
optype
=
TSDB_FOP_CREATE
,
.
fid
=
writer
->
config
->
fid
,
.
nf
=
writer
->
files
[
ftype
],
};
code
=
TARRAY2_APPEND
(
opArr
,
op
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
}
for
(
int32_t
i
=
0
;
i
<
TSDB_FTYPE_MAX
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
TSDB_FTYPE_MAX
;
++
i
)
{
if
(
!
writer
->
fd
[
i
])
continue
;
if
(
writer
->
fd
[
i
])
{
code
=
tsdbFsyncFile
(
writer
->
fd
[
i
]);
code
=
tsdbFsyncFile
(
writer
->
fd
[
i
]);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
tsdbCloseFile
(
&
writer
->
fd
[
i
]);
tsdbCloseFile
(
&
writer
->
fd
[
i
]);
}
}
}
_exit:
_exit:
if
(
code
)
{
if
(
code
)
{
...
@@ -999,7 +1169,7 @@ static int32_t tsdbDataFileWriterOpenDataFD(SDataFileWriter *writer) {
...
@@ -999,7 +1169,7 @@ static int32_t tsdbDataFileWriterOpenDataFD(SDataFileWriter *writer) {
}
}
tsdbTFileName
(
writer
->
config
->
tsdb
,
&
writer
->
files
[
ftype
],
fname
);
tsdbTFileName
(
writer
->
config
->
tsdb
,
&
writer
->
files
[
ftype
],
fname
);
code
=
tsdbOpenFile
(
fname
,
writer
->
config
->
szPage
,
flag
,
&
writer
->
fd
[
i
]);
code
=
tsdbOpenFile
(
fname
,
writer
->
config
->
szPage
,
flag
,
&
writer
->
fd
[
ftype
]);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
if
(
writer
->
files
[
ftype
].
size
==
0
)
{
if
(
writer
->
files
[
ftype
].
size
==
0
)
{
...
@@ -1012,6 +1182,11 @@ static int32_t tsdbDataFileWriterOpenDataFD(SDataFileWriter *writer) {
...
@@ -1012,6 +1182,11 @@ static int32_t tsdbDataFileWriterOpenDataFD(SDataFileWriter *writer) {
}
}
}
}
if
(
writer
->
ctx
->
reader
)
{
code
=
tsdbDataFileReadBlockIdx
(
writer
->
ctx
->
reader
,
&
writer
->
ctx
->
blockIdxArray
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
}
_exit:
_exit:
if
(
code
)
{
if
(
code
)
{
TSDB_ERROR_LOG
(
TD_VID
(
writer
->
config
->
tsdb
->
pVnode
),
lino
,
code
);
TSDB_ERROR_LOG
(
TD_VID
(
writer
->
config
->
tsdb
->
pVnode
),
lino
,
code
);
...
@@ -1060,8 +1235,7 @@ int32_t tsdbDataFileWriteTSData(SDataFileWriter *writer, SRowInfo *row) {
...
@@ -1060,8 +1235,7 @@ int32_t tsdbDataFileWriteTSData(SDataFileWriter *writer, SRowInfo *row) {
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
}
}
// open FD
if
(
writer
->
fd
[
TSDB_FTYPE_HEAD
]
==
NULL
)
{
if
(
!
writer
->
fd
[
TSDB_FTYPE_DATA
])
{
code
=
tsdbDataFileWriterOpenDataFD
(
writer
);
code
=
tsdbDataFileWriterOpenDataFD
(
writer
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
}
}
...
@@ -1144,30 +1318,33 @@ static int32_t tsdbDataFileWriterOpenTombFD(SDataFileWriter *writer) {
...
@@ -1144,30 +1318,33 @@ static int32_t tsdbDataFileWriterOpenTombFD(SDataFileWriter *writer) {
int32_t
lino
=
0
;
int32_t
lino
=
0
;
char
fname
[
TSDB_FILENAME_LEN
];
char
fname
[
TSDB_FILENAME_LEN
];
int32_t
ftypes
[
2
]
=
{
TSDB_FTYPE_HEAD
,
TSDB_FTYPE_TOMB
};
int32_t
ftype
=
TSDB_FTYPE_TOMB
;
for
(
int32_t
i
=
0
;
i
<
ARRAY_SIZE
(
ftypes
);
++
i
)
{
int32_t
ftype
=
ftypes
[
i
];
if
(
writer
->
fd
[
ftype
])
continue
;
ASSERT
(
writer
->
files
[
ftype
].
size
==
0
)
;
int32_t
flag
=
TD_FILE_READ
|
TD_FILE_WRITE
|
TD_FILE_CREATE
|
TD_FILE_TRUNC
;
int32_t
flag
=
(
TD_FILE_READ
|
TD_FILE_WRITE
|
TD_FILE_CREATE
|
TD_FILE_TRUNC
)
;
tsdbTFileName
(
writer
->
config
->
tsdb
,
writer
->
files
+
ftype
,
fname
);
tsdbTFileName
(
writer
->
config
->
tsdb
,
writer
->
files
+
ftype
,
fname
);
code
=
tsdbOpenFile
(
fname
,
writer
->
config
->
szPage
,
flag
,
&
writer
->
fd
[
ftype
]);
code
=
tsdbOpenFile
(
fname
,
writer
->
config
->
szPage
,
flag
,
&
writer
->
fd
[
ftype
]);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
if
(
writer
->
files
[
ftype
].
size
==
0
)
{
uint8_t
hdr
[
TSDB_FHDR_SIZE
]
=
{
0
};
uint8_t
hdr
[
TSDB_FHDR_SIZE
]
=
{
0
};
code
=
tsdbWriteFile
(
writer
->
fd
[
ftype
],
0
,
hdr
,
TSDB_FHDR_SIZE
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
writer
->
files
[
ftype
].
size
+=
TSDB_FHDR_SIZE
;
code
=
tsdbWriteFile
(
writer
->
fd
[
i
],
0
,
hdr
,
TSDB_FHDR_SIZE
);
if
(
writer
->
ctx
->
reader
)
{
code
=
tsdbDataFileReadTombBlk
(
writer
->
ctx
->
reader
,
&
writer
->
ctx
->
tombBlkArray
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
writer
->
files
[
i
].
size
+=
TSDB_FHDR_SIZE
;
if
(
TARRAY2_SIZE
(
writer
->
ctx
->
tombBlkArray
)
>
0
)
{
}
writer
->
ctx
->
hasOldTomb
=
true
;
}
}
// Open iter (TODO)
writer
->
ctx
->
tombBlkArrayIdx
=
0
;
tTombBlockClear
(
writer
->
ctx
->
tData
);
writer
->
ctx
->
iRowTomb
=
0
;
}
_exit:
_exit:
if
(
code
)
{
if
(
code
)
{
...
@@ -1180,26 +1357,19 @@ int32_t tsdbDataFileWriteTombRecord(SDataFileWriter *writer, const STombRecord *
...
@@ -1180,26 +1357,19 @@ int32_t tsdbDataFileWriteTombRecord(SDataFileWriter *writer, const STombRecord *
int32_t
code
=
0
;
int32_t
code
=
0
;
int32_t
lino
=
0
;
int32_t
lino
=
0
;
#if 1
if
(
!
writer
->
ctx
->
opened
)
{
if
(
!
writer
->
ctx
->
opened
)
{
code
=
tsdbDataFileWriterDoOpen
(
writer
);
code
=
tsdbDataFileWriterDoOpen
(
writer
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
}
}
if
(
!
writer
->
fd
[
TSDB_FTYPE_TOMB
]
)
{
if
(
writer
->
fd
[
TSDB_FTYPE_TOMB
]
==
NULL
)
{
code
=
tsdbDataFileWriterOpenTombFD
(
writer
);
code
=
tsdbDataFileWriterOpenTombFD
(
writer
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
}
}
#endif
code
=
t
TombBlockPut
(
writer
->
tData
,
record
);
code
=
t
sdbDataFileDoWriteTombRecord
(
writer
,
record
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
if
(
TOMB_BLOCK_SIZE
(
writer
->
tData
)
>=
writer
->
config
->
maxRow
)
{
code
=
tsdbDataFileDoWriteTombBlock
(
writer
);
TSDB_CHECK_CODE
(
code
,
lino
,
_exit
);
}
_exit:
_exit:
if
(
code
)
{
if
(
code
)
{
TSDB_ERROR_LOG
(
TD_VID
(
writer
->
config
->
tsdb
->
pVnode
),
lino
,
code
);
TSDB_ERROR_LOG
(
TD_VID
(
writer
->
config
->
tsdb
->
pVnode
),
lino
,
code
);
...
...
source/dnode/vnode/src/tsdb/dev/tsdbSttFileRW.c
浏览文件 @
89a9e013
...
@@ -50,7 +50,6 @@ static int32_t tsdbSttSegReaderOpen(SSttFileReader *reader, int64_t offset, SStt
...
@@ -50,7 +50,6 @@ static int32_t tsdbSttSegReaderOpen(SSttFileReader *reader, int64_t offset, SStt
int32_t
code
=
0
;
int32_t
code
=
0
;
int32_t
lino
=
0
;
int32_t
lino
=
0
;
int32_t
vid
=
TD_VID
(
reader
->
config
->
tsdb
->
pVnode
);
segReader
[
0
]
=
taosMemoryCalloc
(
1
,
sizeof
(
*
segReader
[
0
]));
segReader
[
0
]
=
taosMemoryCalloc
(
1
,
sizeof
(
*
segReader
[
0
]));
if
(
!
segReader
[
0
])
return
TSDB_CODE_OUT_OF_MEMORY
;
if
(
!
segReader
[
0
])
return
TSDB_CODE_OUT_OF_MEMORY
;
...
@@ -61,7 +60,7 @@ static int32_t tsdbSttSegReaderOpen(SSttFileReader *reader, int64_t offset, SStt
...
@@ -61,7 +60,7 @@ static int32_t tsdbSttSegReaderOpen(SSttFileReader *reader, int64_t offset, SStt
_exit:
_exit:
if
(
code
)
{
if
(
code
)
{
TSDB_ERROR_LOG
(
vid
,
lino
,
code
);
TSDB_ERROR_LOG
(
TD_VID
(
reader
->
config
->
tsdb
->
pVnode
)
,
lino
,
code
);
taosMemoryFree
(
segReader
[
0
]);
taosMemoryFree
(
segReader
[
0
]);
segReader
[
0
]
=
NULL
;
segReader
[
0
]
=
NULL
;
}
}
...
@@ -82,7 +81,6 @@ static int32_t tsdbSttSegReaderClose(SSttSegReader **reader) {
...
@@ -82,7 +81,6 @@ static int32_t tsdbSttSegReaderClose(SSttSegReader **reader) {
int32_t
tsdbSttFileReaderOpen
(
const
char
*
fname
,
const
SSttFileReaderConfig
*
config
,
SSttFileReader
**
reader
)
{
int32_t
tsdbSttFileReaderOpen
(
const
char
*
fname
,
const
SSttFileReaderConfig
*
config
,
SSttFileReader
**
reader
)
{
int32_t
code
=
0
;
int32_t
code
=
0
;
int32_t
lino
=
0
;
int32_t
lino
=
0
;
int32_t
vid
=
TD_VID
(
config
->
tsdb
->
pVnode
);
reader
[
0
]
=
taosMemoryCalloc
(
1
,
sizeof
(
*
reader
[
0
]));
reader
[
0
]
=
taosMemoryCalloc
(
1
,
sizeof
(
*
reader
[
0
]));
if
(
reader
[
0
]
==
NULL
)
return
TSDB_CODE_OUT_OF_MEMORY
;
if
(
reader
[
0
]
==
NULL
)
return
TSDB_CODE_OUT_OF_MEMORY
;
...
@@ -112,7 +110,7 @@ int32_t tsdbSttFileReaderOpen(const char *fname, const SSttFileReaderConfig *con
...
@@ -112,7 +110,7 @@ int32_t tsdbSttFileReaderOpen(const char *fname, const SSttFileReaderConfig *con
_exit:
_exit:
if
(
code
)
{
if
(
code
)
{
TSDB_ERROR_LOG
(
vid
,
lino
,
code
);
TSDB_ERROR_LOG
(
TD_VID
(
config
->
tsdb
->
pVnode
)
,
lino
,
code
);
tsdbSttFileReaderClose
(
reader
);
tsdbSttFileReaderClose
(
reader
);
}
}
return
code
;
return
code
;
...
@@ -720,7 +718,6 @@ int32_t tsdbSttFileWriterOpen(const SSttFileWriterConfig *config, SSttFileWriter
...
@@ -720,7 +718,6 @@ int32_t tsdbSttFileWriterOpen(const SSttFileWriterConfig *config, SSttFileWriter
int32_t
tsdbSttFileWriterClose
(
SSttFileWriter
**
writer
,
int8_t
abort
,
TFileOpArray
*
opArray
)
{
int32_t
tsdbSttFileWriterClose
(
SSttFileWriter
**
writer
,
int8_t
abort
,
TFileOpArray
*
opArray
)
{
int32_t
code
=
0
;
int32_t
code
=
0
;
int32_t
lino
=
0
;
int32_t
lino
=
0
;
int32_t
vid
=
TD_VID
(
writer
[
0
]
->
config
->
tsdb
->
pVnode
);
if
(
writer
[
0
]
->
ctx
->
opened
)
{
if
(
writer
[
0
]
->
ctx
->
opened
)
{
if
(
abort
)
{
if
(
abort
)
{
...
@@ -737,7 +734,7 @@ int32_t tsdbSttFileWriterClose(SSttFileWriter **writer, int8_t abort, TFileOpArr
...
@@ -737,7 +734,7 @@ int32_t tsdbSttFileWriterClose(SSttFileWriter **writer, int8_t abort, TFileOpArr
_exit:
_exit:
if
(
code
)
{
if
(
code
)
{
TSDB_ERROR_LOG
(
vid
,
lino
,
code
);
TSDB_ERROR_LOG
(
TD_VID
(
writer
[
0
]
->
config
->
tsdb
->
pVnode
)
,
lino
,
code
);
}
}
return
code
;
return
code
;
}
}
...
@@ -745,7 +742,6 @@ _exit:
...
@@ -745,7 +742,6 @@ _exit:
int32_t
tsdbSttFileWriteTSData
(
SSttFileWriter
*
writer
,
SRowInfo
*
row
)
{
int32_t
tsdbSttFileWriteTSData
(
SSttFileWriter
*
writer
,
SRowInfo
*
row
)
{
int32_t
code
=
0
;
int32_t
code
=
0
;
int32_t
lino
=
0
;
int32_t
lino
=
0
;
int32_t
vid
=
TD_VID
(
writer
->
config
->
tsdb
->
pVnode
);
if
(
!
writer
->
ctx
->
opened
)
{
if
(
!
writer
->
ctx
->
opened
)
{
code
=
tsdbSttFWriterDoOpen
(
writer
);
code
=
tsdbSttFWriterDoOpen
(
writer
);
...
@@ -833,7 +829,7 @@ int32_t tsdbSttFileWriteTSData(SSttFileWriter *writer, SRowInfo *row) {
...
@@ -833,7 +829,7 @@ int32_t tsdbSttFileWriteTSData(SSttFileWriter *writer, SRowInfo *row) {
_exit:
_exit:
if
(
code
)
{
if
(
code
)
{
TSDB_ERROR_LOG
(
vid
,
lino
,
code
);
TSDB_ERROR_LOG
(
TD_VID
(
writer
->
config
->
tsdb
->
pVnode
)
,
lino
,
code
);
}
}
return
code
;
return
code
;
}
}
...
...
source/dnode/vnode/src/tsdb/dev/tsdbUtil.c
浏览文件 @
89a9e013
...
@@ -45,6 +45,16 @@ int32_t tTombBlockPut(STombBlock *delBlock, const STombRecord *delRecord) {
...
@@ -45,6 +45,16 @@ int32_t tTombBlockPut(STombBlock *delBlock, const STombRecord *delRecord) {
return
0
;
return
0
;
}
}
int32_t
tTombRecordCmpr
(
const
STombRecord
*
r1
,
const
STombRecord
*
r2
)
{
if
(
r1
->
suid
<
r2
->
suid
)
return
-
1
;
if
(
r1
->
suid
>
r2
->
suid
)
return
1
;
if
(
r1
->
uid
<
r2
->
uid
)
return
-
1
;
if
(
r1
->
uid
>
r2
->
uid
)
return
1
;
if
(
r1
->
version
<
r2
->
version
)
return
-
1
;
if
(
r1
->
version
>
r2
->
version
)
return
1
;
return
0
;
}
// STbStatisBlock ----------
// STbStatisBlock ----------
int32_t
tStatisBlockInit
(
STbStatisBlock
*
statisBlock
)
{
int32_t
tStatisBlockInit
(
STbStatisBlock
*
statisBlock
)
{
for
(
int32_t
i
=
0
;
i
<
ARRAY_SIZE
(
statisBlock
->
dataArr
);
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
ARRAY_SIZE
(
statisBlock
->
dataArr
);
++
i
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录