提交 ad794494 authored 作者: Evgenij Ryazanov's avatar Evgenij Ryazanov

Fix incorrect reads from the undo log

上级 2f95302e
......@@ -1286,7 +1286,12 @@ public class TransactionStore {
// transaction (possibly one with the same id)
data = map.get(key);
} else {
data = (VersionedValue) d[2];
if (map.getId() == (int) d[0]) {
data = (VersionedValue) d[2];
} else {
// this entry does not belong to this map, try again
data = map.get(key);
}
}
}
}
......
......@@ -12,6 +12,7 @@ import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import org.h2.jdbc.JdbcSQLException;
import org.h2.message.DbException;
import org.h2.test.TestBase;
import org.h2.util.IOUtils;
......@@ -80,9 +81,11 @@ public class TestMvccMultiThreaded2 extends TestBase {
@SuppressWarnings("unused")
int minProcessed = Integer.MAX_VALUE, maxProcessed = 0, totalProcessed = 0;
boolean allOk = true;
for (SelectForUpdate sfu : threads) {
// make sure all threads have stopped by joining with them
sfu.join();
allOk &= sfu.ok;
totalProcessed += sfu.iterationsProcessed;
if (sfu.iterationsProcessed > maxProcessed) {
maxProcessed = sfu.iterationsProcessed;
......@@ -102,6 +105,8 @@ public class TestMvccMultiThreaded2 extends TestBase {
IOUtils.closeSilently(conn);
deleteDb(getTestName());
assertTrue(allOk);
}
/**
......@@ -111,6 +116,8 @@ public class TestMvccMultiThreaded2 extends TestBase {
public int iterationsProcessed;
public boolean ok;
SelectForUpdate() {
}
......@@ -149,11 +156,13 @@ public class TestMvccMultiThreaded2 extends TestBase {
}
} catch (SQLException e) {
TestBase.logError("SQL error from thread "+getName(), e);
throw DbException.convert(e);
} catch (Exception e) {
TestBase.logError("General error from thread "+getName(), e);
throw e;
}
IOUtils.closeSilently(conn);
ok = true;
}
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论