Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
为 GitLab 提交贡献
登录/注册
切换导航
H
h2database
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
Administrator
h2database
Commits
86846013
提交
86846013
authored
7 年前
作者:
Andrei Tokar
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
batch
上级
aad6a418
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
214 行增加
和
20 行删除
+214
-20
MVMap.java
h2/src/main/org/h2/mvstore/MVMap.java
+184
-4
Page.java
h2/src/main/org/h2/mvstore/Page.java
+15
-0
Transaction.java
h2/src/main/org/h2/mvstore/tx/Transaction.java
+1
-1
TransactionMap.java
h2/src/main/org/h2/mvstore/tx/TransactionMap.java
+2
-2
TransactionStore.java
h2/src/main/org/h2/mvstore/tx/TransactionStore.java
+12
-13
没有找到文件。
h2/src/main/org/h2/mvstore/MVMap.java
浏览文件 @
86846013
差异被折叠。
点击展开。
h2/src/main/org/h2/mvstore/Page.java
浏览文件 @
86846013
...
...
@@ -836,6 +836,8 @@ public abstract class Page implements Cloneable
}
}
public
abstract
CursorPos
getAppendCursorPos
(
CursorPos
cursorPos
);
public
abstract
void
removeAllRecursive
();
private
Object
[]
createKeyStorage
(
int
size
)
...
...
@@ -1083,6 +1085,13 @@ public abstract class Page implements Cloneable
removePage
();
}
@Override
public
CursorPos
getAppendCursorPos
(
CursorPos
cursorPos
)
{
int
keyCount
=
getKeyCount
();
Page
childPage
=
getChildPage
(
keyCount
);
return
childPage
.
getAppendCursorPos
(
new
CursorPos
(
this
,
keyCount
,
cursorPos
));
}
@Override
protected
void
readPayLoad
(
ByteBuffer
buff
)
{
int
keyCount
=
getKeyCount
();
...
...
@@ -1322,6 +1331,12 @@ public abstract class Page implements Cloneable
removePage
();
}
@Override
public
CursorPos
getAppendCursorPos
(
CursorPos
cursorPos
)
{
int
keyCount
=
getKeyCount
();
return
new
CursorPos
(
this
,
-
keyCount
-
1
,
cursorPos
);
}
@Override
protected
void
readPayLoad
(
ByteBuffer
buff
)
{
int
keyCount
=
getKeyCount
();
...
...
This diff is collapsed.
Click to expand it.
h2/src/main/org/h2/mvstore/tx/Transaction.java
浏览文件 @
86846013
...
...
@@ -300,7 +300,7 @@ public class Transaction {
}
int
currentStatus
=
getStatus
(
currentState
);
checkOpen
(
currentStatus
);
store
.
removeUndoLogRecord
(
transactionId
,
logId
);
store
.
removeUndoLogRecord
(
transactionId
);
}
/**
...
...
This diff is collapsed.
Click to expand it.
h2/src/main/org/h2/mvstore/tx/TransactionMap.java
浏览文件 @
86846013
...
...
@@ -88,9 +88,9 @@ public class TransactionMap<K, V> {
for
(
int
i
=
opentransactions
.
nextSetBit
(
0
);
i
>=
0
;
i
=
opentransactions
.
nextSetBit
(
i
+
1
))
{
MVMap
<
Long
,
Object
[]>
undoLog
=
store
.
undoLogs
[
i
];
if
(
undoLog
!=
null
)
{
MVMap
.
RootReference
rootReference
=
undoLog
.
getRoot
();
MVMap
.
RootReference
rootReference
=
undoLog
.
flushAppendBuffer
();
undoLogRootReferences
[
i
]
=
rootReference
;
undoLogSize
+=
rootReference
.
root
.
getTotalCount
();
undoLogSize
+=
rootReference
.
root
.
getTotalCount
()
+
rootReference
.
appendCounter
;
}
}
}
while
(
committingTransactions
!=
store
.
committingTransactions
.
get
()
||
...
...
This diff is collapsed.
Click to expand it.
h2/src/main/org/h2/mvstore/tx/TransactionStore.java
浏览文件 @
86846013
...
...
@@ -16,6 +16,7 @@ import org.h2.mvstore.Cursor;
import
org.h2.mvstore.DataUtils
;
import
org.h2.mvstore.MVMap
;
import
org.h2.mvstore.MVStore
;
import
org.h2.mvstore.Page
;
import
org.h2.mvstore.WriteBuffer
;
import
org.h2.mvstore.type.DataType
;
import
org.h2.mvstore.type.ObjectDataType
;
...
...
@@ -132,7 +133,9 @@ public class TransactionStore {
ArrayType
undoLogValueType
=
new
ArrayType
(
new
DataType
[]{
new
ObjectDataType
(),
dataType
,
oldValueType
});
undoLogBuilder
=
new
MVMap
.
Builder
<
Long
,
Object
[]>().
valueType
(
undoLogValueType
);
undoLogBuilder
=
new
MVMap
.
Builder
<
Long
,
Object
[]>()
.
singleWriter
()
.
valueType
(
undoLogValueType
);
}
/**
...
...
@@ -381,24 +384,16 @@ public class TransactionStore {
"is still open: {0}"
,
transactionId
);
}
undoLog
.
put
(
undoKey
,
undoLogRecord
);
undoLog
.
append
(
undoKey
,
undoLogRecord
);
return
undoKey
;
}
/**
* Remove an undo log entry.
* @param transactionId id of the transaction
* @param logId sequential number of the log record within transaction
*/
public
void
removeUndoLogRecord
(
int
transactionId
,
long
logId
)
{
Long
undoKey
=
getOperationId
(
transactionId
,
logId
);
Object
[]
old
=
undoLogs
[
transactionId
].
remove
(
undoKey
);
if
(
old
==
null
)
{
throw
DataUtils
.
newIllegalStateException
(
DataUtils
.
ERROR_TRANSACTION_ILLEGAL_STATE
,
"Transaction {0} was concurrently rolled back"
,
transactionId
);
}
void
removeUndoLogRecord
(
int
transactionId
)
{
undoLogs
[
transactionId
].
trimLast
();
}
/**
...
...
@@ -432,7 +427,9 @@ public class TransactionStore {
store
.
renameMap
(
undoLog
,
getUndoLogName
(
true
,
transactionId
));
}
try
{
Cursor
<
Long
,
Object
[]>
cursor
=
undoLog
.
cursor
(
null
);
MVMap
.
RootReference
rootReference
=
undoLog
.
flushAppendBuffer
();
Page
rootPage
=
rootReference
.
root
;
Cursor
<
Long
,
Object
[]>
cursor
=
new
Cursor
<>(
rootPage
,
null
);
while
(
cursor
.
hasNext
())
{
Long
undoKey
=
cursor
.
next
();
Object
[]
op
=
cursor
.
getValue
();
...
...
@@ -587,6 +584,7 @@ public class TransactionStore {
void
rollbackTo
(
Transaction
t
,
long
maxLogId
,
long
toLogId
)
{
int
transactionId
=
t
.
getId
();
MVMap
<
Long
,
Object
[]>
undoLog
=
undoLogs
[
transactionId
];
undoLog
.
flushAppendBuffer
();
RollbackDecisionMaker
decisionMaker
=
new
RollbackDecisionMaker
(
this
,
transactionId
,
toLogId
,
t
.
listener
);
for
(
long
logId
=
maxLogId
-
1
;
logId
>=
toLogId
;
logId
--)
{
Long
undoKey
=
getOperationId
(
transactionId
,
logId
);
...
...
@@ -608,6 +606,7 @@ public class TransactionStore {
final
long
toLogId
)
{
final
MVMap
<
Long
,
Object
[]>
undoLog
=
undoLogs
[
t
.
getId
()];
undoLog
.
flushAppendBuffer
();
return
new
Iterator
<
Change
>()
{
private
long
logId
=
maxLogId
-
1
;
...
...
This diff is collapsed.
Click to expand it.
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论