提交 33431a00 authored 作者: christian.peter.io's avatar christian.peter.io

Server-less multi-connection mode: try to delete log files if switching between…

Server-less multi-connection mode: try to delete log files if switching between read/write operations.
上级 6f2502ba
......@@ -23,6 +23,7 @@ Change Log
</li><li>H2 Console: data that is too long is now abbreviated as follows: text... (100000 characters).
A large binary is abbreviated as follows: abcdef... (100000 bytes).
</li><li>Faster data conversion from BIGINT or INT to DECIMAL.
</li><li>Server-less multi-connection mode: try to delete log files if switching between read/write operations.
</li></ul>
<h2>Version 1.2.126 (2009-12-18)</h2>
......
......@@ -1902,6 +1902,7 @@ public class Database implements DataHandler {
if (fileLockMethod == FileLock.LOCK_SERIALIZED) {
// need to truncate the file, because another process could keep it open
FileUtils.setLength(fileName, 0);
FileUtils.tryDelete(fileName);
} else {
if (writer != null) {
writer.deleteLogFileLater(fileName);
......
......@@ -561,7 +561,7 @@ public class LogSystem {
/**
* Flush all data to the transaction log files as well as to the data files
* and and switch log files.
* and switch log files.
*/
public void checkpoint() throws SQLException {
if (readOnly || database == null) {
......
......@@ -6,6 +6,7 @@
*/
package org.h2.test.unit;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.sql.Connection;
......@@ -14,6 +15,8 @@ import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Arrays;
import java.util.List;
import org.h2.jdbc.JdbcConnection;
import org.h2.test.TestBase;
import org.h2.util.SortedProperties;
......@@ -33,6 +36,8 @@ public class TestFileLockSerialized extends TestBase {
}
public void test() throws Exception {
println("testLeftLogFiles");
testLeftLogFiles();
println("testWrongDatabaseInstanceOnReconnect");
testWrongDatabaseInstanceOnReconnect();
println("testCache()");
......@@ -486,5 +491,44 @@ public class TestFileLockSerialized extends TestBase {
}
deleteDb("fileLockSerialized");
}
private void testLeftLogFiles() throws Exception {
deleteDb("fileLockSerialized");
// without serialized
String url = "jdbc:h2:" + baseDir + "/fileLockSerialized;PAGE_STORE=FALSE";
Connection conn = DriverManager.getConnection(url);
Statement stat = conn.createStatement();
stat.execute("create table test(id int)");
stat.execute("insert into test values(0)");
conn.close();
List filesWithoutSerialized = Arrays.asList(new File(baseDir).list());
deleteDb("fileLockSerialized");
// with serialized
url = "jdbc:h2:" + baseDir + "/fileLockSerialized;FILE_LOCK=SERIALIZED;PAGE_STORE=FALSE";
conn = DriverManager.getConnection(url);
stat = conn.createStatement();
stat.execute("create table test(id int)");
Thread.sleep(500);
stat.execute("insert into test values(0)");
conn.close();
List filesWithSerialized = Arrays.asList(new File(baseDir).list());
if (filesWithoutSerialized.size() != filesWithSerialized.size()) {
for (int i = 0; i < filesWithoutSerialized.size(); i++) {
if (!filesWithSerialized.contains(filesWithoutSerialized.get(i))) {
System.out.println("File left from 'without serialized' mode: " + filesWithoutSerialized.get(i));
}
}
for (int i = 0; i < filesWithSerialized.size(); i++) {
if (!filesWithoutSerialized.contains(filesWithSerialized.get(i))) {
System.out.println("File left from 'with serialized' mode: " + filesWithSerialized.get(i));
}
}
fail("With serialized it must create the same files than without serialized");
}
deleteDb("fileLockSerialized");
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论