Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
23cbcdd0
T
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1187
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看板
提交
23cbcdd0
编写于
8月 19, 2021
作者:
L
lichuang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[TD-4352]<feature>fix bug:save new file content in new meta cache
上级
2d464964
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
27 addition
and
12 deletion
+27
-12
src/tsdb/inc/tsdbFS.h
src/tsdb/inc/tsdbFS.h
+3
-2
src/tsdb/src/tsdbCommit.c
src/tsdb/src/tsdbCommit.c
+23
-10
src/tsdb/src/tsdbFS.c
src/tsdb/src/tsdbFS.c
+1
-0
未找到文件。
src/tsdb/inc/tsdbFS.h
浏览文件 @
23cbcdd0
...
...
@@ -42,8 +42,9 @@ typedef struct {
typedef
struct
{
pthread_rwlock_t
lock
;
SFSStatus
*
cstatus
;
// current status
SHashObj
*
metaCache
;
// meta cache
SFSStatus
*
cstatus
;
// current status
SHashObj
*
metaCache
;
// meta cache
SHashObj
*
metaCacheComp
;
// meta cache for compact
bool
intxn
;
SFSStatus
*
nstatus
;
// new status
}
STsdbFS
;
...
...
src/tsdb/src/tsdbCommit.c
浏览文件 @
23cbcdd0
...
...
@@ -57,7 +57,7 @@ typedef struct {
#define TSDB_COMMIT_TXN_VERSION(ch) FS_TXN_VERSION(REPO_FS(TSDB_COMMIT_REPO(ch)))
static
int
tsdbCommitMeta
(
STsdbRepo
*
pRepo
);
static
int
tsdbUpdateMetaRecord
(
STsdbFS
*
pfs
,
SMFile
*
pMFile
,
uint64_t
uid
,
void
*
cont
,
int
contLen
,
bool
updateMeta
);
static
int
tsdbUpdateMetaRecord
(
STsdbFS
*
pfs
,
SMFile
*
pMFile
,
uint64_t
uid
,
void
*
cont
,
int
contLen
,
bool
compact
);
static
int
tsdbDropMetaRecord
(
STsdbFS
*
pfs
,
SMFile
*
pMFile
,
uint64_t
uid
);
static
int
tsdbCompactMetaFile
(
STsdbRepo
*
pRepo
,
STsdbFS
*
pfs
,
SMFile
*
pMFile
);
static
int
tsdbCommitTSData
(
STsdbRepo
*
pRepo
);
...
...
@@ -328,7 +328,7 @@ static int tsdbCommitMeta(STsdbRepo *pRepo) {
pAct
=
(
SActObj
*
)
pNode
->
data
;
if
(
pAct
->
act
==
TSDB_UPDATE_META
)
{
pCont
=
(
SActCont
*
)
POINTER_SHIFT
(
pAct
,
sizeof
(
SActObj
));
if
(
tsdbUpdateMetaRecord
(
pfs
,
&
mf
,
pAct
->
uid
,
(
void
*
)(
pCont
->
cont
),
pCont
->
len
,
tru
e
)
<
0
)
{
if
(
tsdbUpdateMetaRecord
(
pfs
,
&
mf
,
pAct
->
uid
,
(
void
*
)(
pCont
->
cont
),
pCont
->
len
,
fals
e
)
<
0
)
{
tsdbError
(
"vgId:%d failed to update META record, uid %"
PRIu64
" since %s"
,
REPO_ID
(
pRepo
),
pAct
->
uid
,
tstrerror
(
terrno
));
tsdbCloseMFile
(
&
mf
);
...
...
@@ -402,7 +402,7 @@ void tsdbGetRtnSnap(STsdbRepo *pRepo, SRtn *pRtn) {
pRtn
->
minFid
,
pRtn
->
midFid
,
pRtn
->
maxFid
);
}
static
int
tsdbUpdateMetaRecord
(
STsdbFS
*
pfs
,
SMFile
*
pMFile
,
uint64_t
uid
,
void
*
cont
,
int
contLen
,
bool
updateMeta
)
{
static
int
tsdbUpdateMetaRecord
(
STsdbFS
*
pfs
,
SMFile
*
pMFile
,
uint64_t
uid
,
void
*
cont
,
int
contLen
,
bool
compact
)
{
char
buf
[
64
]
=
"
\0
"
;
void
*
pBuf
=
buf
;
SKVRecord
rInfo
;
...
...
@@ -428,18 +428,18 @@ static int tsdbUpdateMetaRecord(STsdbFS *pfs, SMFile *pMFile, uint64_t uid, void
}
tsdbUpdateMFileMagic
(
pMFile
,
POINTER_SHIFT
(
cont
,
contLen
-
sizeof
(
TSCKSUM
)));
if
(
!
updateMeta
)
{
pMFile
->
info
.
nRecords
++
;
return
0
;
}
SKVRecord
*
pRecord
=
taosHashGet
(
pfs
->
metaCache
,
(
void
*
)
&
uid
,
sizeof
(
uid
));
SHashObj
*
cache
=
compact
?
pfs
->
metaCacheComp
:
pfs
->
metaCache
;
pMFile
->
info
.
nRecords
++
;
SKVRecord
*
pRecord
=
taosHashGet
(
cache
,
(
void
*
)
&
uid
,
sizeof
(
uid
));
if
(
pRecord
!=
NULL
)
{
pMFile
->
info
.
tombSize
+=
(
pRecord
->
size
+
sizeof
(
SKVRecord
));
}
else
{
pMFile
->
info
.
nRecords
++
;
}
taosHashPut
(
pfs
->
metaC
ache
,
(
void
*
)(
&
uid
),
sizeof
(
uid
),
(
void
*
)(
&
rInfo
),
sizeof
(
rInfo
));
taosHashPut
(
c
ache
,
(
void
*
)(
&
uid
),
sizeof
(
uid
),
(
void
*
)(
&
rInfo
),
sizeof
(
rInfo
));
return
0
;
}
...
...
@@ -517,6 +517,13 @@ static int tsdbCompactMetaFile(STsdbRepo *pRepo, STsdbFS *pfs, SMFile *pMFile) {
goto
_err
;
}
// init Comp
assert
(
pfs
->
metaCacheComp
==
NULL
);
pfs
->
metaCacheComp
=
taosHashInit
(
4096
,
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_BIGINT
),
true
,
HASH_NO_LOCK
);
if
(
pfs
->
metaCacheComp
==
NULL
)
{
goto
_err
;
}
pRecord
=
taosHashIterate
(
pfs
->
metaCache
,
NULL
);
while
(
pRecord
)
{
if
(
tsdbSeekMFile
(
pMFile
,
pRecord
->
offset
+
sizeof
(
SKVRecord
),
SEEK_SET
)
<
0
)
{
...
...
@@ -545,7 +552,7 @@ static int tsdbCompactMetaFile(STsdbRepo *pRepo, STsdbFS *pfs, SMFile *pMFile) {
goto
_err
;
}
if
(
tsdbUpdateMetaRecord
(
pfs
,
&
mf
,
pRecord
->
uid
,
pBuf
,
(
int
)
pRecord
->
size
,
fals
e
)
<
0
)
{
if
(
tsdbUpdateMetaRecord
(
pfs
,
&
mf
,
pRecord
->
uid
,
pBuf
,
(
int
)
pRecord
->
size
,
tru
e
)
<
0
)
{
tsdbError
(
"vgId:%d failed to update META record, uid %"
PRIu64
" since %s"
,
REPO_ID
(
pRepo
),
pRecord
->
uid
,
tstrerror
(
terrno
));
goto
_err
;
...
...
@@ -569,9 +576,15 @@ _err:
// update current meta file info
pfs
->
nstatus
->
pmf
=
NULL
;
tsdbUpdateMFile
(
pfs
,
&
mf
);
taosHashCleanup
(
pfs
->
metaCache
);
pfs
->
metaCache
=
pfs
->
metaCacheComp
;
pfs
->
metaCacheComp
=
NULL
;
}
else
{
// remove meta.tmp file
remove
(
mf
.
f
.
aname
);
taosHashCleanup
(
pfs
->
metaCacheComp
);
pfs
->
metaCacheComp
=
NULL
;
}
tfree
(
pBuf
);
...
...
src/tsdb/src/tsdbFS.c
浏览文件 @
23cbcdd0
...
...
@@ -215,6 +215,7 @@ STsdbFS *tsdbNewFS(STsdbCfg *pCfg) {
}
pfs
->
intxn
=
false
;
pfs
->
metaCacheComp
=
NULL
;
pfs
->
nstatus
=
tsdbNewFSStatus
(
maxFSet
);
if
(
pfs
->
nstatus
==
NULL
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录