提交 5de4e30b authored 作者: Andrei Tokar's avatar Andrei Tokar

locking of the append buffer

上级 d6b7a8d9
...@@ -493,6 +493,16 @@ public abstract class Page implements Cloneable ...@@ -493,6 +493,16 @@ public abstract class Page implements Cloneable
return bKeys; return bKeys;
} }
abstract void expand(int extraKeyCount, Object[] extraKeys, Object[] extraValues);
final void expandKeys(int extraKeyCount, Object[] extraKeys) {
int keyCount = getKeyCount();
Object[] newKeys = createKeyStorage(keyCount + extraKeyCount);
System.arraycopy(keys, 0, newKeys, 0, keyCount);
System.arraycopy(extraKeys, 0, newKeys, keyCount, extraKeyCount);
keys = newKeys;
}
/** /**
* Get the total number of key-value pairs, including child pages. * Get the total number of key-value pairs, including child pages.
* *
...@@ -1012,6 +1022,11 @@ public abstract class Page implements Cloneable ...@@ -1012,6 +1022,11 @@ public abstract class Page implements Cloneable
return newPage; return newPage;
} }
@Override
public void expand(int keyCount, Object[] extraKys, Object[] extraValues) {
throw new UnsupportedOperationException();
}
@Override @Override
public long getTotalCount() { public long getTotalCount() {
assert !isComplete() || totalCount == calculateTotalCount() : assert !isComplete() || totalCount == calculateTotalCount() :
...@@ -1324,6 +1339,21 @@ public abstract class Page implements Cloneable ...@@ -1324,6 +1339,21 @@ public abstract class Page implements Cloneable
return newPage; return newPage;
} }
@Override
public void expand(int extraKeyCount, Object[] extraKeys, Object[] extraValues) {
int keyCount = getKeyCount();
expandKeys(extraKeyCount, extraKeys);
if(values != null) {
Object[] newValues = createValueStorage(keyCount + extraKeyCount);
System.arraycopy(values, 0, newValues, 0, keyCount);
System.arraycopy(extraValues, 0, newValues, keyCount, extraKeyCount);
values = newValues;
}
if(isPersistent()) {
recalculateMemory();
}
}
@Override @Override
public long getTotalCount() { public long getTotalCount() {
return getKeyCount(); return getKeyCount();
......
...@@ -577,7 +577,7 @@ public class Transaction { ...@@ -577,7 +577,7 @@ public class Transaction {
} }
private static String stateToString(long state) { private static String stateToString(long state) {
return STATUS_NAMES[getStatus(state)] + (hasRollback(state) ? "" : "!") + " " + getLogId(state); return STATUS_NAMES[getStatus(state)] + (hasRollback(state) ? "<" : "") + " " + getLogId(state);
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论