Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
apache
Iotdb
提交
1484436e
I
Iotdb
项目概览
apache
/
Iotdb
10 个月 前同步成功
通知
25
Star
3344
Fork
916
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
I
Iotdb
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
未验证
提交
1484436e
编写于
12月 01, 2022
作者:
A
Alan Choo
提交者:
GitHub
12月 01, 2022
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix (#8285)
上级
84c01ae8
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
21 addition
and
10 deletion
+21
-10
server/src/main/java/org/apache/iotdb/db/engine/storagegroup/DataRegion.java
...a/org/apache/iotdb/db/engine/storagegroup/DataRegion.java
+21
-10
未找到文件。
server/src/main/java/org/apache/iotdb/db/engine/storagegroup/DataRegion.java
浏览文件 @
1484436e
...
...
@@ -389,6 +389,8 @@ public class DataRegion {
private
long
lastLogTime
;
/** last recovery log files num */
private
long
lastLogCheckFilesNum
;
/** recover performers of unsealed TsFiles */
private
List
<
UnsealedTsFileRecoverPerformer
>
recoverPerformers
=
new
ArrayList
<>();
public
DataRegionRecoveryContext
(
long
numOfFilesToRecover
)
{
this
.
numOfFilesToRecover
=
numOfFilesToRecover
;
...
...
@@ -441,13 +443,13 @@ public class DataRegion {
// split by partition so that we can find the last file of each partition and decide to
// close it or not
DataRegionRecoveryContext
D
ataRegionRecoveryContext
=
DataRegionRecoveryContext
d
ataRegionRecoveryContext
=
new
DataRegionRecoveryContext
(
tmpSeqTsFiles
.
size
()
+
tmpUnseqTsFiles
.
size
());
Map
<
Long
,
List
<
TsFileResource
>>
partitionTmpSeqTsFiles
=
splitResourcesByPartition
(
tmpSeqTsFiles
);
Map
<
Long
,
List
<
TsFileResource
>>
partitionTmpUnseqTsFiles
=
splitResourcesByPartition
(
tmpUnseqTsFiles
);
//
recover unsealed TsFiles
//
submit unsealed TsFiles to recover
List
<
WALRecoverListener
>
recoverListeners
=
new
ArrayList
<>();
for
(
List
<
TsFileResource
>
value
:
partitionTmpSeqTsFiles
.
values
())
{
// tsFiles without resource file are unsealed
...
...
@@ -459,7 +461,7 @@ public class DataRegion {
}
else
{
value
.
remove
(
value
.
size
()
-
1
);
WALRecoverListener
recoverListener
=
recoverUnsealedTsFile
(
tsFileResource
,
D
ataRegionRecoveryContext
,
true
);
recoverUnsealedTsFile
(
tsFileResource
,
d
ataRegionRecoveryContext
,
true
);
if
(
recoverListener
!=
null
)
{
recoverListeners
.
add
(
recoverListener
);
}
...
...
@@ -476,13 +478,14 @@ public class DataRegion {
}
else
{
value
.
remove
(
value
.
size
()
-
1
);
WALRecoverListener
recoverListener
=
recoverUnsealedTsFile
(
tsFileResource
,
D
ataRegionRecoveryContext
,
false
);
recoverUnsealedTsFile
(
tsFileResource
,
d
ataRegionRecoveryContext
,
false
);
if
(
recoverListener
!=
null
)
{
recoverListeners
.
add
(
recoverListener
);
}
}
}
}
// signal wal recover manager to recover this region's files
WALRecoverManager
.
getInstance
().
getAllDataRegionScannedLatch
().
countDown
();
// recover sealed TsFiles
if
(!
partitionTmpSeqTsFiles
.
isEmpty
())
{
...
...
@@ -491,7 +494,7 @@ public class DataRegion {
for
(
Entry
<
Long
,
List
<
TsFileResource
>>
partitionFiles
:
partitionTmpSeqTsFiles
.
entrySet
())
{
recoverFilesInPartition
(
partitionFiles
.
getKey
(),
D
ataRegionRecoveryContext
,
d
ataRegionRecoveryContext
,
partitionFiles
.
getValue
(),
true
,
partitionFiles
.
getKey
()
==
latestPartitionId
);
...
...
@@ -500,7 +503,7 @@ public class DataRegion {
for
(
Entry
<
Long
,
List
<
TsFileResource
>>
partitionFiles
:
partitionTmpUnseqTsFiles
.
entrySet
())
{
recoverFilesInPartition
(
partitionFiles
.
getKey
(),
D
ataRegionRecoveryContext
,
d
ataRegionRecoveryContext
,
partitionFiles
.
getValue
(),
false
,
false
);
...
...
@@ -514,7 +517,16 @@ public class DataRegion {
recoverListener
.
getCause
());
}
// update VSGRecoveryContext
DataRegionRecoveryContext
.
incrementRecoveredFilesNum
();
dataRegionRecoveryContext
.
incrementRecoveredFilesNum
();
}
// recover unsealed TsFiles, sort make sure last flush time not be replaced by early files
dataRegionRecoveryContext
.
recoverPerformers
.
sort
(
(
p1
,
p2
)
->
compareFileName
(
p1
.
getTsFileResource
().
getTsFile
(),
p2
.
getTsFileResource
().
getTsFile
()));
for
(
UnsealedTsFileRecoverPerformer
recoverPerformer
:
dataRegionRecoveryContext
.
recoverPerformers
)
{
recoverUnsealedTsFileCallBack
(
recoverPerformer
);
}
for
(
TsFileResource
resource
:
tsFileManager
.
getTsFileList
(
true
))
{
long
partitionNum
=
resource
.
getTimePartition
();
...
...
@@ -732,13 +744,12 @@ public class DataRegion {
TsFileResource
unsealedTsFile
,
DataRegionRecoveryContext
context
,
boolean
isSeq
)
{
UnsealedTsFileRecoverPerformer
recoverPerformer
=
new
UnsealedTsFileRecoverPerformer
(
unsealedTsFile
,
isSeq
,
idTable
,
this
::
callbackAfterUnsealedTsFileRecovered
);
unsealedTsFile
,
isSeq
,
idTable
,
performer
->
context
.
recoverPerformers
.
add
(
performer
)
);
// remember to close UnsealedTsFileRecoverPerformer
return
WALRecoverManager
.
getInstance
().
addRecoverPerformer
(
recoverPerformer
);
}
private
void
callbackAfterUnsealedTsFileRecovered
(
UnsealedTsFileRecoverPerformer
recoverPerformer
)
{
private
void
recoverUnsealedTsFileCallBack
(
UnsealedTsFileRecoverPerformer
recoverPerformer
)
{
TsFileResource
tsFileResource
=
recoverPerformer
.
getTsFileResource
();
boolean
isSeq
=
recoverPerformer
.
isSequence
();
if
(!
recoverPerformer
.
canWrite
())
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录