Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
apache
Iotdb
提交
f39b9e96
I
Iotdb
项目概览
apache
/
Iotdb
大约 1 年 前同步成功
通知
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,发现更多精彩内容 >>
提交
f39b9e96
编写于
7月 17, 2020
作者:
张
张凌哲
提交者:
Jialin Qiao
7月 17, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update vm merge utils
上级
1e9297ca
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
14 addition
and
76 deletion
+14
-76
server/src/main/java/org/apache/iotdb/db/engine/flush/VmMergeUtils.java
...n/java/org/apache/iotdb/db/engine/flush/VmMergeUtils.java
+1
-71
server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessor.java
.../apache/iotdb/db/engine/storagegroup/TsFileProcessor.java
+13
-5
未找到文件。
server/src/main/java/org/apache/iotdb/db/engine/flush/VmMergeUtils.java
浏览文件 @
f39b9e96
...
...
@@ -52,76 +52,6 @@ public class VmMergeUtils {
throw
new
IllegalStateException
(
"Utility class"
);
}
public
static
void
fullMerge
(
RestorableTsFileIOWriter
writer
,
List
<
List
<
RestorableTsFileIOWriter
>>
vmWriters
,
String
storageGroup
,
VmLogger
vmLogger
,
Set
<
String
>
devices
,
boolean
sequence
)
throws
IOException
{
Map
<
String
,
TsFileSequenceReader
>
tsFileSequenceReaderMap
=
new
HashMap
<>();
Map
<
String
,
Map
<
String
,
MeasurementSchema
>>
deviceMeasurementMap
=
new
HashMap
<>();
for
(
List
<
RestorableTsFileIOWriter
>
subVmWriters
:
vmWriters
)
{
fillDeviceMeasurementMap
(
devices
,
deviceMeasurementMap
,
subVmWriters
);
}
if
(!
sequence
)
{
for
(
Entry
<
String
,
Map
<
String
,
MeasurementSchema
>>
deviceMeasurementEntry
:
deviceMeasurementMap
.
entrySet
())
{
String
deviceId
=
deviceMeasurementEntry
.
getKey
();
writer
.
startChunkGroup
(
deviceId
);
long
maxVersion
=
Long
.
MIN_VALUE
;
for
(
Entry
<
String
,
MeasurementSchema
>
entry
:
deviceMeasurementEntry
.
getValue
()
.
entrySet
())
{
String
measurementId
=
entry
.
getKey
();
Map
<
Long
,
TimeValuePair
>
timeValuePairMap
=
new
TreeMap
<>();
for
(
int
i
=
vmWriters
.
size
()
-
1
;
i
>=
0
;
i
--)
{
maxVersion
=
writeUnseqChunk
(
writer
,
storageGroup
,
tsFileSequenceReaderMap
,
deviceId
,
maxVersion
,
entry
,
measurementId
,
timeValuePairMap
,
vmWriters
.
get
(
i
));
}
IChunkWriter
chunkWriter
=
new
ChunkWriterImpl
(
entry
.
getValue
());
for
(
TimeValuePair
timeValuePair
:
timeValuePairMap
.
values
())
{
writeTVPair
(
timeValuePair
,
chunkWriter
);
}
chunkWriter
.
writeToFileWriter
(
writer
);
}
writer
.
writeVersion
(
maxVersion
);
writer
.
endChunkGroup
();
if
(
vmLogger
!=
null
)
{
vmLogger
.
logDevice
(
deviceId
,
writer
.
getPos
());
}
}
}
else
{
for
(
Entry
<
String
,
Map
<
String
,
MeasurementSchema
>>
deviceMeasurementEntry
:
deviceMeasurementMap
.
entrySet
())
{
String
deviceId
=
deviceMeasurementEntry
.
getKey
();
writer
.
startChunkGroup
(
deviceId
);
for
(
Entry
<
String
,
MeasurementSchema
>
entry
:
deviceMeasurementEntry
.
getValue
()
.
entrySet
())
{
String
measurementId
=
entry
.
getKey
();
ChunkMetadata
newChunkMetadata
=
null
;
Chunk
newChunk
=
null
;
for
(
int
i
=
vmWriters
.
size
()
-
1
;
i
>=
0
;
i
--)
{
Pair
<
ChunkMetadata
,
Chunk
>
chunkPair
=
writeSeqChunk
(
writer
,
storageGroup
,
tsFileSequenceReaderMap
,
deviceId
,
measurementId
,
vmWriters
.
get
(
i
),
newChunkMetadata
,
newChunk
);
newChunkMetadata
=
chunkPair
.
left
;
newChunk
=
chunkPair
.
right
;
}
if
(
newChunkMetadata
!=
null
&&
newChunk
!=
null
)
{
writer
.
writeChunk
(
newChunk
,
newChunkMetadata
);
}
}
writer
.
endChunkGroup
();
if
(
vmLogger
!=
null
)
{
vmLogger
.
logDevice
(
deviceId
,
writer
.
getPos
());
}
}
}
for
(
TsFileSequenceReader
reader
:
tsFileSequenceReaderMap
.
values
())
{
reader
.
close
();
logger
.
info
(
"{} vm file close a reader"
,
reader
.
getFileName
());
}
}
private
static
Pair
<
ChunkMetadata
,
Chunk
>
writeSeqChunk
(
RestorableTsFileIOWriter
writer
,
String
storageGroup
,
Map
<
String
,
TsFileSequenceReader
>
tsFileSequenceReaderMap
,
String
deviceId
,
...
...
@@ -211,7 +141,7 @@ public class VmMergeUtils {
}
}
public
static
void
levelM
erge
(
RestorableTsFileIOWriter
writer
,
public
static
void
m
erge
(
RestorableTsFileIOWriter
writer
,
List
<
RestorableTsFileIOWriter
>
vmWriters
,
String
storageGroup
,
VmLogger
vmLogger
,
Set
<
String
>
devices
,
boolean
sequence
)
throws
IOException
{
Map
<
String
,
TsFileSequenceReader
>
tsFileSequenceReaderMap
=
new
HashMap
<>();
...
...
server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessor.java
浏览文件 @
f39b9e96
...
...
@@ -84,7 +84,6 @@ import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import
org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding
;
import
org.apache.iotdb.tsfile.fileSystem.FSFactoryProducer
;
import
org.apache.iotdb.tsfile.read.common.Path
;
import
org.apache.iotdb.tsfile.utils.Pair
;
import
org.apache.iotdb.tsfile.write.schema.MeasurementSchema
;
import
org.apache.iotdb.tsfile.write.writer.RestorableTsFileIOWriter
;
import
org.slf4j.Logger
;
...
...
@@ -678,7 +677,7 @@ public class TsFileProcessor {
if
(
targetFile
.
getName
().
endsWith
(
TSFILE_SUFFIX
))
{
if
(!
isMergeFinished
)
{
writer
.
getIOWriterOut
().
truncate
(
offset
-
1
);
VmMergeUtils
.
fullMerge
(
writer
,
vmWriters
,
VmMergeUtils
.
merge
(
writer
,
packVmWritersToSequenceList
(
vmWriters
)
,
storageGroupName
,
new
VmLogger
(
tsFileResource
.
getTsFile
().
getParent
(),
tsFileResource
.
getTsFile
().
getName
()),
...
...
@@ -719,7 +718,7 @@ public class TsFileProcessor {
List
<
TsFileResource
>
levelVmFiles
=
new
ArrayList
<>(
vmTsFileResources
.
get
(
level
)
.
subList
(
startIndex
,
startIndex
+
sourceFileList
.
size
()));
VmMergeUtils
.
levelM
erge
(
newVmWriter
,
levelVmWriters
,
VmMergeUtils
.
m
erge
(
newVmWriter
,
levelVmWriters
,
storageGroupName
,
new
VmLogger
(
tsFileResource
.
getTsFile
().
getParent
(),
tsFileResource
.
getTsFile
().
getName
()),
...
...
@@ -1106,13 +1105,22 @@ public class TsFileProcessor {
private
void
flushAllVmToTsFile
(
List
<
List
<
RestorableTsFileIOWriter
>>
currMergeVmWriters
,
List
<
List
<
TsFileResource
>>
currMergeVmFiles
,
VmLogger
vmLogger
)
throws
IOException
{
VmMergeUtils
.
fullMerge
(
writer
,
currMergeVmWriters
,
VmMergeUtils
.
merge
(
writer
,
packVmWritersToSequenceList
(
currMergeVmWriters
)
,
storageGroupName
,
vmLogger
,
new
HashSet
<>(),
sequence
);
for
(
int
i
=
0
;
i
<
currMergeVmFiles
.
size
();
i
++)
{
deleteVmFiles
(
currMergeVmFiles
.
get
(
i
),
currMergeVmWriters
.
get
(
i
));
}
}
private
List
<
RestorableTsFileIOWriter
>
packVmWritersToSequenceList
(
List
<
List
<
RestorableTsFileIOWriter
>>
vmWriters
)
{
List
<
RestorableTsFileIOWriter
>
sequenceVmWriters
=
new
ArrayList
<>();
for
(
int
i
=
vmWriters
.
size
()
-
1
;
i
>
0
;
i
--)
{
sequenceVmWriters
.
addAll
(
vmWriters
.
get
(
i
));
}
return
sequenceVmWriters
;
}
class
VmMergeTask
implements
Runnable
{
private
final
List
<
List
<
TsFileResource
>>
vmMergeTsFiles
;
...
...
@@ -1183,7 +1191,7 @@ public class TsFileProcessor {
// merge all vm files into a new vm file
File
tmpFile
=
createNewTmpFile
();
RestorableTsFileIOWriter
tmpWriter
=
new
RestorableTsFileIOWriter
(
tmpFile
);
VmMergeUtils
.
levelM
erge
(
tmpWriter
,
vmMergeWriters
.
get
(
i
),
VmMergeUtils
.
m
erge
(
tmpWriter
,
vmMergeWriters
.
get
(
i
),
storageGroupName
,
vmLogger
,
new
HashSet
<>(),
sequence
);
tmpWriter
.
close
();
vmMergeLock
.
writeLock
().
lock
();
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录