Unverified 提交 fb08a1fa authored 作者: Evgenij Ryazanov's avatar Evgenij Ryazanov 提交者: GitHub

Merge pull request #1150 from katzyn/check2

Get rid of SysProperties.CHECK2
...@@ -83,7 +83,7 @@ See also <a href="build.html#providing_patches">Providing Patches</a>. ...@@ -83,7 +83,7 @@ See also <a href="build.html#providing_patches">Providing Patches</a>.
</li><li>Find a tool to view large text file (larger than 100 MB), with find, page up and down (like less), truncate before / after. </li><li>Find a tool to view large text file (larger than 100 MB), with find, page up and down (like less), truncate before / after.
</li><li>Implement, test, document XAConnection and so on. </li><li>Implement, test, document XAConnection and so on.
</li><li>Pluggable data type (for streaming, hashing, compression, validation, conversion, encryption). </li><li>Pluggable data type (for streaming, hashing, compression, validation, conversion, encryption).
</li><li>CHECK: find out what makes CHECK=TRUE slow, move to CHECK2. </li><li>CHECK: find out what makes CHECK=TRUE slow, move to assertions.
</li><li>Drop with invalidate views (so that source code is not lost). Check what other databases do exactly. </li><li>Drop with invalidate views (so that source code is not lost). Check what other databases do exactly.
</li><li>Index usage for (ID, NAME)=(1, 'Hi'); document. </li><li>Index usage for (ID, NAME)=(1, 'Hi'); document.
</li><li>Set a connection read only (Connection.setReadOnly) or using a connection parameter. </li><li>Set a connection read only (Connection.setReadOnly) or using a connection parameter.
......
...@@ -91,9 +91,27 @@ public class Database implements DataHandler { ...@@ -91,9 +91,27 @@ public class Database implements DataHandler {
private static int initialPowerOffCount; private static int initialPowerOffCount;
private static final ThreadLocal<Session> META_LOCK_DEBUGGING = new ThreadLocal<>(); private static final boolean ASSERT;
private static final ThreadLocal<Database> META_LOCK_DEBUGGING_DB = new ThreadLocal<>();
private static final ThreadLocal<Throwable> META_LOCK_DEBUGGING_STACK = new ThreadLocal<>(); private static final ThreadLocal<Session> META_LOCK_DEBUGGING;
private static final ThreadLocal<Database> META_LOCK_DEBUGGING_DB;
private static final ThreadLocal<Throwable> META_LOCK_DEBUGGING_STACK;
static {
boolean a = false;
// Intentional side-effect
assert a = true;
ASSERT = a;
if (a) {
META_LOCK_DEBUGGING = new ThreadLocal<>();
META_LOCK_DEBUGGING_DB = new ThreadLocal<>();
META_LOCK_DEBUGGING_STACK = new ThreadLocal<>();
} else {
META_LOCK_DEBUGGING = null;
META_LOCK_DEBUGGING_DB = null;
META_LOCK_DEBUGGING_STACK = null;
}
}
/** /**
* The default name of the system user. This name is only used as long as * The default name of the system user. This name is only used as long as
...@@ -208,9 +226,11 @@ public class Database implements DataHandler { ...@@ -208,9 +226,11 @@ public class Database implements DataHandler {
private RowFactory rowFactory = RowFactory.DEFAULT; private RowFactory rowFactory = RowFactory.DEFAULT;
public Database(ConnectionInfo ci, String cipher) { public Database(ConnectionInfo ci, String cipher) {
META_LOCK_DEBUGGING.set(null); if (ASSERT) {
META_LOCK_DEBUGGING_DB.set(null); META_LOCK_DEBUGGING.set(null);
META_LOCK_DEBUGGING_STACK.set(null); META_LOCK_DEBUGGING_DB.set(null);
META_LOCK_DEBUGGING_STACK.set(null);
}
String name = ci.getName(); String name = ci.getName();
this.dbSettings = ci.getDbSettings(); this.dbSettings = ci.getDbSettings();
this.reconnectCheckDelayNs = TimeUnit.MILLISECONDS.toNanos(dbSettings.reconnectCheckDelay); this.reconnectCheckDelayNs = TimeUnit.MILLISECONDS.toNanos(dbSettings.reconnectCheckDelay);
...@@ -919,7 +939,7 @@ public class Database implements DataHandler { ...@@ -919,7 +939,7 @@ public class Database implements DataHandler {
if (meta == null) { if (meta == null) {
return true; return true;
} }
if (SysProperties.CHECK2) { if (ASSERT) {
// If we are locking two different databases in the same stack, just ignore it. // If we are locking two different databases in the same stack, just ignore it.
// This only happens in TestLinkedTable where we connect to another h2 DB in the // This only happens in TestLinkedTable where we connect to another h2 DB in the
// same process. // same process.
...@@ -961,7 +981,7 @@ public class Database implements DataHandler { ...@@ -961,7 +981,7 @@ public class Database implements DataHandler {
* @param session the session * @param session the session
*/ */
public void unlockMetaDebug(Session session) { public void unlockMetaDebug(Session session) {
if (SysProperties.CHECK2) { if (ASSERT) {
if (META_LOCK_DEBUGGING.get() == session) { if (META_LOCK_DEBUGGING.get() == session) {
META_LOCK_DEBUGGING.set(null); META_LOCK_DEBUGGING.set(null);
META_LOCK_DEBUGGING_DB.set(null); META_LOCK_DEBUGGING_DB.set(null);
...@@ -1405,7 +1425,7 @@ public class Database implements DataHandler { ...@@ -1405,7 +1425,7 @@ public class Database implements DataHandler {
unlockMeta(pageStore.getPageStoreSession()); unlockMeta(pageStore.getPageStoreSession());
} }
} catch (DbException e) { } catch (DbException e) {
if (SysProperties.CHECK2) { if (ASSERT) {
int code = e.getErrorCode(); int code = e.getErrorCode();
if (code != ErrorCode.DATABASE_IS_CLOSED && if (code != ErrorCode.DATABASE_IS_CLOSED &&
code != ErrorCode.LOCK_TIMEOUT_1 && code != ErrorCode.LOCK_TIMEOUT_1 &&
...@@ -1415,7 +1435,7 @@ public class Database implements DataHandler { ...@@ -1415,7 +1435,7 @@ public class Database implements DataHandler {
} }
trace.error(e, "close"); trace.error(e, "close");
} catch (Throwable t) { } catch (Throwable t) {
if (SysProperties.CHECK2) { if (ASSERT) {
t.printStackTrace(); t.printStackTrace();
} }
trace.error(t, "close"); trace.error(t, "close");
......
...@@ -722,12 +722,7 @@ public class Session extends SessionWithState implements TransactionStore.Rollba ...@@ -722,12 +722,7 @@ public class Session extends SessionWithState implements TransactionStore.Rollba
} }
private void removeTemporaryLobs(boolean onTimeout) { private void removeTemporaryLobs(boolean onTimeout) {
if (SysProperties.CHECK2) { assert this != getDatabase().getLobSession() || Thread.holdsLock(this) || Thread.holdsLock(getDatabase());
if (this == getDatabase().getLobSession()
&& !Thread.holdsLock(this) && !Thread.holdsLock(getDatabase())) {
throw DbException.throwInternalError();
}
}
if (temporaryLobs != null) { if (temporaryLobs != null) {
for (Value v : temporaryLobs) { for (Value v : temporaryLobs) {
if (!v.isLinkedToTable()) { if (!v.isLinkedToTable()) {
......
...@@ -95,18 +95,11 @@ public class SysProperties { ...@@ -95,18 +95,11 @@ public class SysProperties {
/** /**
* System property <code>h2.check</code> * System property <code>h2.check</code>
* (default: true for JDK/JRE, false for Android).<br /> * (default: true for JDK/JRE, false for Android).<br />
* Assertions in the database engine. * Optional additional checks in the database engine.
*/ */
public static final boolean CHECK = public static final boolean CHECK =
Utils.getProperty("h2.check", !"0.9".equals(Utils.getProperty("java.specification.version", null))); Utils.getProperty("h2.check", !"0.9".equals(Utils.getProperty("java.specification.version", null)));
/**
* System property <code>h2.check2</code> (default: false).<br />
* Additional assertions in the database engine.
*/
public static final boolean CHECK2 =
Utils.getProperty("h2.check2", false);
/** /**
* System property <code>h2.clientTraceDirectory</code> (default: * System property <code>h2.clientTraceDirectory</code> (default:
* trace.db/).<br /> * trace.db/).<br />
......
...@@ -491,11 +491,7 @@ public class PageDataLeaf extends PageData { ...@@ -491,11 +491,7 @@ public class PageDataLeaf extends PageData {
} }
data.writeByte((byte) type); data.writeByte((byte) type);
data.writeShortInt(0); data.writeShortInt(0);
if (SysProperties.CHECK2) { assert data.length() == START_PARENT;
if (data.length() != START_PARENT) {
DbException.throwInternalError();
}
}
data.writeInt(parentPageId); data.writeInt(parentPageId);
data.writeVarInt(index.getId()); data.writeVarInt(index.getId());
data.writeVarInt(columnCount); data.writeVarInt(columnCount);
......
...@@ -351,11 +351,7 @@ public class PageDataNode extends PageData { ...@@ -351,11 +351,7 @@ public class PageDataNode extends PageData {
data.reset(); data.reset();
data.writeByte((byte) Page.TYPE_DATA_NODE); data.writeByte((byte) Page.TYPE_DATA_NODE);
data.writeShortInt(0); data.writeShortInt(0);
if (SysProperties.CHECK2) { assert data.length() == START_PARENT;
if (data.length() != START_PARENT) {
DbException.throwInternalError();
}
}
data.writeInt(parentPageId); data.writeInt(parentPageId);
data.writeVarInt(index.getId()); data.writeVarInt(index.getId());
data.writeInt(rowCountStored); data.writeInt(rowCountStored);
......
...@@ -705,13 +705,8 @@ public class Data { ...@@ -705,13 +705,8 @@ public class Data {
} }
DbException.throwInternalError("type=" + v.getType()); DbException.throwInternalError("type=" + v.getType());
} }
if (SysProperties.CHECK2) { assert pos - start == getValueLen(v, handler)
if (pos - start != getValueLen(v, handler)) { : "value size error: got " + (pos - start) + " expected " + getValueLen(v, handler);
throw DbException.throwInternalError(
"value size error: got " + (pos - start) +
" expected " + getValueLen(v, handler));
}
}
} }
/** /**
......
...@@ -36,6 +36,15 @@ public class FileStore { ...@@ -36,6 +36,15 @@ public class FileStore {
private static final String HEADER = private static final String HEADER =
"-- H2 0.5/B -- ".substring(0, Constants.FILE_BLOCK_SIZE - 1) + "\n"; "-- H2 0.5/B -- ".substring(0, Constants.FILE_BLOCK_SIZE - 1) + "\n";
private static final boolean ASSERT;
static {
boolean a = false;
// Intentional side-effect
assert a = true;
ASSERT = a;
}
/** /**
* The file name. * The file name.
*/ */
...@@ -371,20 +380,20 @@ public class FileStore { ...@@ -371,20 +380,20 @@ public class FileStore {
public long length() { public long length() {
try { try {
long len = fileLength; long len = fileLength;
if (SysProperties.CHECK2) { if (ASSERT) {
len = file.size(); len = file.size();
if (len != fileLength) { if (len != fileLength) {
DbException.throwInternalError( DbException.throwInternalError(
"file " + name + " length " + len + " expected " + fileLength); "file " + name + " length " + len + " expected " + fileLength);
} }
} if (len % Constants.FILE_BLOCK_SIZE != 0) {
if (SysProperties.CHECK2 && len % Constants.FILE_BLOCK_SIZE != 0) { long newLength = len + Constants.FILE_BLOCK_SIZE -
long newLength = len + Constants.FILE_BLOCK_SIZE - (len % Constants.FILE_BLOCK_SIZE);
(len % Constants.FILE_BLOCK_SIZE); file.truncate(newLength);
file.truncate(newLength); fileLength = newLength;
fileLength = newLength; DbException.throwInternalError(
DbException.throwInternalError( "unaligned file length " + name + " len " + len);
"unaligned file length " + name + " len " + len); }
} }
return len; return len;
} catch (IOException e) { } catch (IOException e) {
...@@ -398,7 +407,7 @@ public class FileStore { ...@@ -398,7 +407,7 @@ public class FileStore {
* @return the location * @return the location
*/ */
public long getFilePointer() { public long getFilePointer() {
if (SysProperties.CHECK2) { if (ASSERT) {
try { try {
if (file.position() != filePos) { if (file.position() != filePos) {
DbException.throwInternalError(file.position() + " " + filePos); DbException.throwInternalError(file.position() + " " + filePos);
......
...@@ -249,11 +249,7 @@ public class LobStorageBackend implements LobStorageInterface { ...@@ -249,11 +249,7 @@ public class LobStorageBackend implements LobStorageInterface {
* @return the prepared statement * @return the prepared statement
*/ */
PreparedStatement prepare(String sql) throws SQLException { PreparedStatement prepare(String sql) throws SQLException {
if (SysProperties.CHECK2) { assert Thread.holdsLock(database);
if (!Thread.holdsLock(database)) {
throw DbException.throwInternalError();
}
}
PreparedStatement prep = prepared.remove(sql); PreparedStatement prep = prepared.remove(sql);
if (prep == null) { if (prep == null) {
prep = conn.prepareStatement(sql); prep = conn.prepareStatement(sql);
...@@ -268,11 +264,7 @@ public class LobStorageBackend implements LobStorageInterface { ...@@ -268,11 +264,7 @@ public class LobStorageBackend implements LobStorageInterface {
* @param prep the prepared statement * @param prep the prepared statement
*/ */
void reuse(String sql, PreparedStatement prep) { void reuse(String sql, PreparedStatement prep) {
if (SysProperties.CHECK2) { assert Thread.holdsLock(database);
if (!Thread.holdsLock(database)) {
throw DbException.throwInternalError();
}
}
prepared.put(sql, prep); prepared.put(sql, prep);
} }
......
...@@ -465,7 +465,6 @@ java org.h2.test.TestAll timer ...@@ -465,7 +465,6 @@ java org.h2.test.TestAll timer
System.setProperty("h2.maxMemoryRows", "100"); System.setProperty("h2.maxMemoryRows", "100");
System.setProperty("h2.check2", "true");
System.setProperty("h2.delayWrongPasswordMin", "0"); System.setProperty("h2.delayWrongPasswordMin", "0");
System.setProperty("h2.delayWrongPasswordMax", "0"); System.setProperty("h2.delayWrongPasswordMax", "0");
System.setProperty("h2.useThreadContextClassLoader", "true"); System.setProperty("h2.useThreadContextClassLoader", "true");
...@@ -513,7 +512,6 @@ kill -9 `jps -l | grep "org.h2.test." | cut -d " " -f 1` ...@@ -513,7 +512,6 @@ kill -9 `jps -l | grep "org.h2.test." | cut -d " " -f 1`
test.testAll(); test.testAll();
} else if ("reopen".equals(args[0])) { } else if ("reopen".equals(args[0])) {
System.setProperty("h2.delayWrongPasswordMin", "0"); System.setProperty("h2.delayWrongPasswordMin", "0");
System.setProperty("h2.check2", "false");
System.setProperty("h2.analyzeAuto", "100"); System.setProperty("h2.analyzeAuto", "100");
System.setProperty("h2.pageSize", "64"); System.setProperty("h2.pageSize", "64");
System.setProperty("h2.reopenShift", "5"); System.setProperty("h2.reopenShift", "5");
......
...@@ -34,7 +34,6 @@ public class TestTempTableCrash { ...@@ -34,7 +34,6 @@ public class TestTempTableCrash {
Statement stat; Statement stat;
System.setProperty("h2.delayWrongPasswordMin", "0"); System.setProperty("h2.delayWrongPasswordMin", "0");
System.setProperty("h2.check2", "false");
FilePathRec.register(); FilePathRec.register();
System.setProperty("reopenShift", "4"); System.setProperty("reopenShift", "4");
TestReopen reopen = new TestReopen(); TestReopen reopen = new TestReopen();
......
...@@ -45,7 +45,6 @@ public class TestPageStore extends TestBase { ...@@ -45,7 +45,6 @@ public class TestPageStore extends TestBase {
* @param a ignored * @param a ignored
*/ */
public static void main(String... a) throws Exception { public static void main(String... a) throws Exception {
System.setProperty("h2.check2", "true");
TestBase.createCaller().init().test(); TestBase.createCaller().init().test();
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论