Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
47e07b7b
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看板
提交
47e07b7b
编写于
6月 21, 2022
作者:
H
Hongze Cheng
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
more work
上级
29e65ce7
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
212 addition
and
10 deletion
+212
-10
source/dnode/vnode/src/inc/tsdb.h
source/dnode/vnode/src/inc/tsdb.h
+3
-2
source/dnode/vnode/src/tsdb/tsdbFS.c
source/dnode/vnode/src/tsdb/tsdbFS.c
+209
-8
未找到文件。
source/dnode/vnode/src/inc/tsdb.h
浏览文件 @
47e07b7b
...
@@ -172,8 +172,9 @@ void tsdbDelFileName(STsdb *pTsdb, SDelFile *pFile, char fname[]);
...
@@ -172,8 +172,9 @@ void tsdbDelFileName(STsdb *pTsdb, SDelFile *pFile, char fname[]);
// tsdbFS.c ==============================================================================================
// tsdbFS.c ==============================================================================================
int32_t
tsdbFSOpen
(
STsdb
*
pTsdb
,
STsdbFS
**
ppFS
);
int32_t
tsdbFSOpen
(
STsdb
*
pTsdb
,
STsdbFS
**
ppFS
);
int32_t
tsdbFSClose
(
STsdbFS
*
pFS
);
int32_t
tsdbFSClose
(
STsdbFS
*
pFS
);
int32_t
tsdbFSStart
(
STsdbFS
*
pFS
);
int32_t
tsdbFSBegin
(
STsdbFS
*
pFS
);
int32_t
tsdbFSEnd
(
STsdbFS
*
pFS
,
int8_t
rollback
);
int32_t
tsdbFSCommit
(
STsdbFS
*
pFS
);
int32_t
tsdbFSRollback
(
STsdbFS
*
pFS
);
// tsdbReaderWriter.c ==============================================================================================
// tsdbReaderWriter.c ==============================================================================================
// SDataFWriter
// SDataFWriter
int32_t
tsdbDataFWriterOpen
(
SDataFWriter
**
ppWriter
,
STsdb
*
pTsdb
,
SDFileSet
*
pSet
);
int32_t
tsdbDataFWriterOpen
(
SDataFWriter
**
ppWriter
,
STsdb
*
pTsdb
,
SDFileSet
*
pSet
);
...
...
source/dnode/vnode/src/tsdb/tsdbFS.c
浏览文件 @
47e07b7b
...
@@ -17,7 +17,7 @@
...
@@ -17,7 +17,7 @@
typedef
struct
{
typedef
struct
{
SDelFile
*
pDelFile
;
SDelFile
*
pDelFile
;
SArray
*
aDFileSet
;
// SArray<aDFileSet>
SArray
*
aDFileSet
;
// SArray<aDFileSet
*
>
}
STsdbFSState
;
}
STsdbFSState
;
struct
STsdbFS
{
struct
STsdbFS
{
...
@@ -212,6 +212,59 @@ _err:
...
@@ -212,6 +212,59 @@ _err:
return
code
;
return
code
;
}
}
static
int32_t
tsdbSaveCurrentState
(
STsdbFS
*
pFS
,
STsdbFSState
*
pState
)
{
int32_t
code
=
0
;
int64_t
n
;
int64_t
size
;
char
tfname
[
TSDB_FILENAME_LEN
];
char
fname
[
TSDB_FILENAME_LEN
];
char
*
pData
=
NULL
;
TdFilePtr
pFD
=
NULL
;
snprintf
(
tfname
,
TSDB_FILENAME_LEN
-
1
,
"%s/CURRENT.t"
,
pFS
->
pTsdb
->
path
);
snprintf
(
fname
,
TSDB_FILENAME_LEN
-
1
,
"%s/CURRENT"
,
pFS
->
pTsdb
->
path
);
// encode
code
=
tsdbFSStateToJsonStr
(
pState
,
&
pData
);
if
(
code
)
goto
_err
;
// create and write tfname
pFD
=
taosOpenFile
(
tfname
,
TD_FILE_WRITE
|
TD_FILE_CREATE
|
TD_FILE_TRUNC
);
if
(
pFD
==
NULL
)
{
code
=
TAOS_SYSTEM_ERROR
(
errno
);
goto
_err
;
}
size
=
strlen
(
pData
);
n
=
taosWriteFile
(
pFD
,
pData
,
size
);
if
(
n
<
0
)
{
code
=
TAOS_SYSTEM_ERROR
(
errno
);
goto
_err
;
}
if
(
taosFsyncFile
(
pFD
)
<
0
)
{
code
=
TAOS_SYSTEM_ERROR
(
errno
);
goto
_err
;
}
taosCloseFile
(
&
pFD
);
// rename
code
=
taosRenameFile
(
tfname
,
fname
);
if
(
code
)
{
code
=
TAOS_SYSTEM_ERROR
(
code
);
goto
_err
;
}
if
(
pData
)
taosMemoryFree
(
pData
);
return
code
;
_err:
tsdbError
(
"vgId:%d tsdb save current state failed since %s"
,
TD_VID
(
pFS
->
pTsdb
->
pVnode
),
tstrerror
(
code
));
if
(
pData
)
taosMemoryFree
(
pData
);
return
code
;
}
static
int32_t
tsdbLoadCurrentState
(
STsdbFS
*
pFS
,
STsdbFSState
*
pState
)
{
static
int32_t
tsdbLoadCurrentState
(
STsdbFS
*
pFS
,
STsdbFSState
*
pState
)
{
int32_t
code
=
0
;
int32_t
code
=
0
;
int64_t
size
;
int64_t
size
;
...
@@ -294,12 +347,107 @@ _err:
...
@@ -294,12 +347,107 @@ _err:
return
code
;
return
code
;
}
}
int32_t
tsdbFSCloseImpl
(
STsdbFS
*
pFS
)
{
static
int32_t
tsdbFSCloseImpl
(
STsdbFS
*
pFS
)
{
int32_t
code
=
0
;
// TODO
return
code
;
}
static
int32_t
tsdbApplyDFileSetChange
(
STsdbFS
*
pFS
,
SDFileSet
*
pFrom
,
SDFileSet
*
pTo
)
{
int32_t
code
=
0
;
int32_t
code
=
0
;
// TODO
// TODO
return
code
;
return
code
;
}
}
static
int32_t
tsdbApplyDelFileChange
(
STsdbFS
*
pFS
,
SDelFile
*
pFrom
,
SDelFile
*
pTo
)
{
int32_t
code
=
0
;
char
fname
[
TSDB_FILENAME_LEN
];
if
(
pFrom
&&
pTo
)
{
if
(
pFrom
!=
pTo
)
{
tsdbDelFileName
(
pFS
->
pTsdb
,
pFrom
,
fname
);
if
(
taosRemoveFile
(
fname
)
<
0
)
{
code
=
TAOS_SYSTEM_ERROR
(
errno
);
goto
_err
;
}
}
}
else
if
(
pFrom
)
{
tsdbDelFileName
(
pFS
->
pTsdb
,
pFrom
,
fname
);
if
(
taosRemoveFile
(
fname
)
<
0
)
{
code
=
TAOS_SYSTEM_ERROR
(
errno
);
goto
_err
;
}
}
else
{
// do nothing
}
return
code
;
_err:
tsdbError
(
"vgId:%d tsdb apply del file change failed since %s"
,
TD_VID
(
pFS
->
pTsdb
->
pVnode
),
tstrerror
(
code
));
return
code
;
}
static
int32_t
tsdbFSApplyDiskChange
(
STsdbFS
*
pFS
,
STsdbFSState
*
pFrom
,
STsdbFSState
*
pTo
)
{
int32_t
code
=
0
;
int32_t
iFrom
=
0
;
int32_t
nFrom
=
taosArrayGetSize
(
pFrom
->
aDFileSet
);
int32_t
iTo
=
0
;
int32_t
nTo
=
taosArrayGetSize
(
pTo
->
aDFileSet
);
SDFileSet
*
pDFileSetFrom
;
SDFileSet
*
pDFileSetTo
;
// SDelFile
code
=
tsdbApplyDelFileChange
(
pFS
,
pFrom
->
pDelFile
,
pTo
->
pDelFile
);
if
(
code
)
goto
_err
;
// SDFileSet
while
(
iFrom
<
nFrom
&&
iTo
<
nTo
)
{
pDFileSetFrom
=
(
SDFileSet
*
)
taosArrayGetP
(
pFrom
->
aDFileSet
,
iFrom
);
pDFileSetTo
=
(
SDFileSet
*
)
taosArrayGetP
(
pTo
->
aDFileSet
,
iTo
);
if
(
pDFileSetFrom
->
fid
==
pDFileSetTo
->
fid
)
{
code
=
tsdbApplyDFileSetChange
(
pFS
,
pDFileSetFrom
,
pDFileSetTo
);
if
(
code
)
goto
_err
;
iFrom
++
;
iTo
++
;
}
else
if
(
pDFileSetFrom
->
fid
<
pDFileSetTo
->
fid
)
{
code
=
tsdbApplyDFileSetChange
(
pFS
,
pDFileSetFrom
,
NULL
);
if
(
code
)
goto
_err
;
iFrom
++
;
}
else
{
iTo
++
;
}
}
while
(
iFrom
<
nFrom
)
{
pDFileSetFrom
=
(
SDFileSet
*
)
taosArrayGetP
(
pFrom
->
aDFileSet
,
iFrom
);
code
=
tsdbApplyDFileSetChange
(
pFS
,
pDFileSetFrom
,
NULL
);
if
(
code
)
goto
_err
;
iFrom
++
;
}
#if 0
// do noting
while (iTo < nTo) {
pDFileSetTo = (SDFileSet *)taosArrayGetP(pTo->aDFileSet, iTo);
code = tsdbApplyDFileSetChange(pFS, NULL, pDFileSetTo);
if (code) goto _err;
iTo++;
}
#endif
return
code
;
_err:
tsdbError
(
"vgId:%d tsdb fs apply disk change failed sicne %s"
,
TD_VID
(
pFS
->
pTsdb
->
pVnode
),
tstrerror
(
code
));
return
code
;
}
// EXPOSED APIS ====================================================================================
// EXPOSED APIS ====================================================================================
int32_t
tsdbFSOpen
(
STsdb
*
pTsdb
,
STsdbFS
**
ppFS
)
{
int32_t
tsdbFSOpen
(
STsdb
*
pTsdb
,
STsdbFS
**
ppFS
)
{
int32_t
code
=
0
;
int32_t
code
=
0
;
...
@@ -325,7 +473,7 @@ int32_t tsdbFSOpen(STsdb *pTsdb, STsdbFS **ppFS) {
...
@@ -325,7 +473,7 @@ int32_t tsdbFSOpen(STsdb *pTsdb, STsdbFS **ppFS) {
code
=
TSDB_CODE_OUT_OF_MEMORY
;
code
=
TSDB_CODE_OUT_OF_MEMORY
;
goto
_err
;
goto
_err
;
}
}
pFS
->
cState
->
aDFileSet
=
taosArrayInit
(
0
,
sizeof
(
SDFileSet
));
pFS
->
cState
->
aDFileSet
=
taosArrayInit
(
0
,
sizeof
(
SDFileSet
*
));
if
(
pFS
->
cState
->
aDFileSet
==
NULL
)
{
if
(
pFS
->
cState
->
aDFileSet
==
NULL
)
{
code
=
TSDB_CODE_OUT_OF_MEMORY
;
code
=
TSDB_CODE_OUT_OF_MEMORY
;
goto
_err
;
goto
_err
;
...
@@ -336,7 +484,7 @@ int32_t tsdbFSOpen(STsdb *pTsdb, STsdbFS **ppFS) {
...
@@ -336,7 +484,7 @@ int32_t tsdbFSOpen(STsdb *pTsdb, STsdbFS **ppFS) {
code
=
TSDB_CODE_OUT_OF_MEMORY
;
code
=
TSDB_CODE_OUT_OF_MEMORY
;
goto
_err
;
goto
_err
;
}
}
pFS
->
nState
->
aDFileSet
=
taosArrayInit
(
0
,
sizeof
(
SDFileSet
));
pFS
->
nState
->
aDFileSet
=
taosArrayInit
(
0
,
sizeof
(
SDFileSet
*
));
if
(
pFS
->
nState
->
aDFileSet
==
NULL
)
{
if
(
pFS
->
nState
->
aDFileSet
==
NULL
)
{
code
=
TSDB_CODE_OUT_OF_MEMORY
;
code
=
TSDB_CODE_OUT_OF_MEMORY
;
goto
_err
;
goto
_err
;
...
@@ -376,14 +524,67 @@ _err:
...
@@ -376,14 +524,67 @@ _err:
return
code
;
return
code
;
}
}
int32_t
tsdbFS
Start
(
STsdbFS
*
pFS
)
{
int32_t
tsdbFS
Begin
(
STsdbFS
*
pFS
)
{
int32_t
code
=
0
;
int32_t
code
=
0
;
// TODO
ASSERT
(
!
pFS
->
inTxn
);
pFS
->
inTxn
=
1
;
pFS
->
nState
->
pDelFile
=
pFS
->
cState
->
pDelFile
;
taosArrayClear
(
pFS
->
nState
->
aDFileSet
);
for
(
int32_t
iDFileSet
=
0
;
iDFileSet
<
taosArrayGetSize
(
pFS
->
cState
->
aDFileSet
);
iDFileSet
++
)
{
SDFileSet
*
pDFileSet
=
(
SDFileSet
*
)
taosArrayGetP
(
pFS
->
cState
->
aDFileSet
,
iDFileSet
);
if
(
taosArrayPush
(
pFS
->
nState
->
aDFileSet
,
&
pDFileSet
)
==
NULL
)
{
code
=
TSDB_CODE_OUT_OF_MEMORY
;
goto
_err
;
}
}
return
code
;
_err:
tsdbError
(
"vgId:%d tsdb fs begin failed since %s"
,
TD_VID
(
pFS
->
pTsdb
->
pVnode
),
tstrerror
(
code
));
return
code
;
return
code
;
}
}
int32_t
tsdbFS
End
(
STsdbFS
*
pFS
,
int8_t
rollback
)
{
int32_t
tsdbFS
Commit
(
STsdbFS
*
pFS
)
{
int32_t
code
=
0
;
int32_t
code
=
0
;
// TODO
STsdbFSState
*
pState
=
pFS
->
nState
;
// need lock (todo)
pFS
->
nState
=
pFS
->
cState
;
pFS
->
cState
=
pState
;
// save
code
=
tsdbSaveCurrentState
(
pFS
,
pFS
->
cState
);
if
(
code
)
goto
_err
;
// apply commit on disk
code
=
tsdbFSApplyDiskChange
(
pFS
,
pFS
->
nState
,
pFS
->
cState
);
if
(
code
)
goto
_err
;
pFS
->
inTxn
=
0
;
return
code
;
_err:
tsdbError
(
"vgId:%d tsdb fs commit failed since %s"
,
TD_VID
(
pFS
->
pTsdb
->
pVnode
),
tstrerror
(
code
));
return
code
;
}
int32_t
tsdbFSRollback
(
STsdbFS
*
pFS
)
{
int32_t
code
=
0
;
code
=
tsdbFSApplyDiskChange
(
pFS
,
pFS
->
nState
,
pFS
->
cState
);
if
(
code
)
goto
_err
;
pFS
->
inTxn
=
0
;
return
code
;
_err:
tsdbError
(
"vgId:%d tsdb fs rollback failed since %s"
,
TD_VID
(
pFS
->
pTsdb
->
pVnode
),
tstrerror
(
code
));
return
code
;
return
code
;
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录