Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
为 GitLab 提交贡献
登录/注册
切换导航
H
h2database
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
Administrator
h2database
Commits
3a92ea32
提交
3a92ea32
authored
12 年前
作者:
Thomas Mueller
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
A persistent multi-version map: a utility to store and read streams
上级
b568eadd
全部展开
显示空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
192 行增加
和
129 行删除
+192
-129
TestStreamStore.java
h2/src/test/org/h2/test/store/TestStreamStore.java
+62
-12
StreamStore.java
h2/src/tools/org/h2/dev/store/btree/StreamStore.java
+130
-117
没有找到文件。
h2/src/test/org/h2/test/store/TestStreamStore.java
浏览文件 @
3a92ea32
...
...
@@ -21,7 +21,7 @@ import org.h2.util.IOUtils;
import
org.h2.util.New
;
import
org.h2.util.StringUtils
;
// import org.junit.Test;
//import static org.junit.Assert.*;
//
import static org.junit.Assert.*;
/**
* Test the stream store.
...
...
@@ -39,12 +39,62 @@ public class TestStreamStore extends TestBase {
@Override
public
void
test
()
throws
IOException
{
testDetectIllegalId
();
testTreeStructure
();
testFormat
();
testWithExistingData
();
testWithFullMap
();
testLoop
();
}
public
void
testDetectIllegalId
()
throws
IOException
{
Map
<
Long
,
byte
[]>
map
=
New
.
hashMap
();
StreamStore
store
=
new
StreamStore
(
map
);
try
{
store
.
length
(
new
byte
[]{
3
,
0
,
0
});
fail
();
}
catch
(
IllegalArgumentException
e
)
{
// expected
}
try
{
store
.
remove
(
new
byte
[]{
3
,
0
,
0
});
fail
();
}
catch
(
IllegalArgumentException
e
)
{
// expected
}
map
.
put
(
0L
,
new
byte
[]{
3
,
0
,
0
});
InputStream
in
=
store
.
get
(
new
byte
[]{
2
,
1
,
0
});
try
{
in
.
read
();
fail
();
}
catch
(
IllegalArgumentException
e
)
{
// expected
}
}
public
void
testTreeStructure
()
throws
IOException
{
final
AtomicInteger
reads
=
new
AtomicInteger
();
Map
<
Long
,
byte
[]>
map
=
new
HashMap
<
Long
,
byte
[]>()
{
private
static
final
long
serialVersionUID
=
1L
;
public
byte
[]
get
(
Object
k
)
{
reads
.
incrementAndGet
();
return
super
.
get
(
k
);
}
};
StreamStore
store
=
new
StreamStore
(
map
);
store
.
setMinBlockSize
(
10
);
store
.
setMaxBlockSize
(
100
);
byte
[]
id
=
store
.
put
(
new
ByteArrayInputStream
(
new
byte
[
10000
]));
InputStream
in
=
store
.
get
(
id
);
assertEquals
(
0
,
in
.
read
());
assertEquals
(
3
,
reads
.
get
());
}
public
void
testFormat
()
throws
IOException
{
Map
<
Long
,
byte
[]>
map
=
New
.
hashMap
();
StreamStore
store
=
new
StreamStore
(
map
);
...
...
@@ -55,26 +105,26 @@ public class TestStreamStore extends TestBase {
byte
[]
id
;
id
=
store
.
put
(
new
ByteArrayInputStream
(
new
byte
[
200
]));
int
todoInefficient
;
assertEquals
(
"
ffffffff0fb40102870100140286
01"
,
StringUtils
.
convertBytesToHex
(
id
));
assertEquals
(
200
,
store
.
length
(
id
))
;
assertEquals
(
"
02c80188
01"
,
StringUtils
.
convertBytesToHex
(
id
));
id
=
store
.
put
(
new
ByteArrayInputStream
(
new
byte
[
0
]));
assertEquals
(
""
,
StringUtils
.
convertBytesToHex
(
id
));
id
=
store
.
put
(
new
ByteArrayInputStream
(
new
byte
[
1
]));
assertEquals
(
"0100"
,
StringUtils
.
convertBytesToHex
(
id
));
assertEquals
(
"0
00
100"
,
StringUtils
.
convertBytesToHex
(
id
));
id
=
store
.
put
(
new
ByteArrayInputStream
(
new
byte
[
3
]));
assertEquals
(
"03000000"
,
StringUtils
.
convertBytesToHex
(
id
));
assertEquals
(
"0
00
3000000"
,
StringUtils
.
convertBytesToHex
(
id
));
id
=
store
.
put
(
new
ByteArrayInputStream
(
new
byte
[
10
]));
assertEquals
(
"0
00a0288
01"
,
StringUtils
.
convertBytesToHex
(
id
));
assertEquals
(
"0
10a89
01"
,
StringUtils
.
convertBytesToHex
(
id
));
byte
[]
combined
=
StringUtils
.
convertHexToBytes
(
"0
10a020b0
c"
);
byte
[]
combined
=
StringUtils
.
convertHexToBytes
(
"0
001aa0002bbc
c"
);
assertEquals
(
3
,
store
.
length
(
combined
));
InputStream
in
=
store
.
get
(
combined
);
assertEquals
(
1
,
in
.
skip
(
1
));
assertEquals
(
0x
0
b
,
in
.
read
());
assertEquals
(
0x
b
b
,
in
.
read
());
assertEquals
(
1
,
in
.
skip
(
1
));
}
...
...
@@ -137,10 +187,10 @@ public class TestStreamStore extends TestBase {
};
StreamStore
store
=
new
StreamStore
(
map
);
store
.
setMinBlockSize
(
1
0
);
store
.
setMaxBlockSize
(
2
0
);
store
.
setMinBlockSize
(
2
0
);
store
.
setMaxBlockSize
(
10
0
);
store
.
setNextKey
(
0
);
store
.
put
(
new
ByteArrayInputStream
(
new
byte
[
2
0
]));
store
.
put
(
new
ByteArrayInputStream
(
new
byte
[
10
0
]));
assertEquals
(
1
,
map
.
size
());
assertEquals
(
64
,
tests
.
get
());
assertEquals
(
Long
.
MAX_VALUE
/
2
+
1
,
store
.
getNextKey
());
...
...
@@ -153,6 +203,7 @@ public class TestStreamStore extends TestBase {
assertEquals
(
256
,
store
.
getMinBlockSize
());
store
.
setNextKey
(
0
);
assertEquals
(
0
,
store
.
getNextKey
());
test
(
store
,
10
,
20
,
1000
);
for
(
int
i
=
0
;
i
<
20
;
i
++)
{
test
(
store
,
0
,
128
,
i
);
test
(
store
,
10
,
128
,
i
);
...
...
@@ -161,7 +212,6 @@ public class TestStreamStore extends TestBase {
test
(
store
,
0
,
128
,
i
);
test
(
store
,
10
,
128
,
i
);
}
test
(
store
,
10
,
20
,
1000
);
}
private
void
test
(
StreamStore
store
,
int
minBlockSize
,
int
maxBlockSize
,
int
length
)
throws
IOException
{
...
...
This diff is collapsed.
Click to expand it.
h2/src/tools/org/h2/dev/store/btree/StreamStore.java
浏览文件 @
3a92ea32
差异被折叠。
点击展开。
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论