Hi,

There is a special test for file systems, it's probably easier and more
reliable to test a new file system implementation that way instead of using
the database engine to test it. The test class is
"org.h2.test.unit.TestFileSystem".

Registering a file system is usually done using a static "register" method,
as in FilePathZip2.register() (see the source code there).

Tell us if you need help!

By the way, Java 7 supports a file system abstraction, and my plan is to
use that in the future, when Java 6 no longer needs to be supported.

Regards,
Thomas

On Sunday, April 27, 2014, PN <[email protected]> wrote:

> Hi,
>
> I'm trying to run H2 off of a pluggable filesystem that I've written with
> some success so far.
>
> While I can issue a simple select query (such as, *"select * from
> INFORMATION_SCHEMA.tables"*) and get back the query results just fine,
> I'm observing a couple problem from H2's side (though not necessarily due
> to H2 squarely!).
>
>
> *Problem 1:* The size of the .h2.db file keeps increasing, in increments
> of 1 to 2MB, merely with a database connection-open and -close -- even
> without any select query involved. Here's the program I'm using:
>
> public class MyFilePath extends FilePath {
> // ...
> }
>  FileSystem fs = null;
> Connection conn = null;
> try {
> // <Setup 'env' here...>
> fs = (FooFileSystem) FileSystems.newFileSystem(URI.create("foo:/"), env);
>
> FilePath.register(new MyFilePath("foo:/"));
>
> *// Question: Btw, where do I register my FileBase subclass? *
>
> conn = DriverManager.getConnection("jdbc:h2:foo:/abc;CIPHER=AES", "user",
> "password");
> } catch(Exception x) {
> x.printStackTrace();
> } finally {
> if (conn != null) conn.close();
> if(fs != null) fs.close();
> }
>
>
> And here's the pattern of size-increases upon each run of the above
> program:
>
>
> ===================================================
> Run #:   Database file size (bytes)
> ===================================================
>           129024  (initial)
>   1      2226176  (increase by: 2097152, or 2 MB)
>   2      3274752  (increase by: 1048576, or 1 MB)
>   3      5371904  (increase by: 2097152, or 2 MB)
>   4      5371904  (increase by:       0, or 0 MB)
>   5      7469056  (increase by: 2097152, or 2 MB)
>   6      7469056  (increase by:       0, or 0 MB)
>   7     10614784  (increase by: 3145728, or 3 MB)
> ===================================================
>
>
>
>   *Question 1*: Could someone help narrow down the portion of H2 codebase
> that I should step through in the debugger to troubleshoot this problem?
> For example, knowing what H2 conceptually does during connection open
> and/or close would help. Note that, outside of H2 database access, I can
> copy regular files from/to this filesystem using Java API just fine, with
> the source and destination file sizes and contents always matching. Only
> that, I'm not sure what 'pattern' of Java API usage H2 is employing to be
> causing this problem to manifest!
>
>   *Question 2*: How and where do I register my FileBase subclass with H2?
> I didn't find this mentioned in the documentation (at
> http://www.h2database.com/html/advanced.html#file_system).
>
>
> *Problem 2:* At the time of connection close, I'm getting the following
> exception in the .trace.db file:
>
> 04-27 09:11:47 database: close
> org.h2.message.DbException: File corrupted while reading record: "wrong
> checksum". Possible solution: use the recovery tool [90030-174]
> at org.h2.message.DbException.get(DbException.java:172)
> at org.h2.message.DbException.get(DbException.java:149)
> at org.h2.store.PageStore.getPage(PageStore.java:746)
> at org.h2.store.PageStore.compact(PageStore.java:700)
> at org.h2.store.PageStore.compact(PageStore.java:528)
> at org.h2.engine.Database.closeOpenFilesAndUnlock(Database.java:1241)
> at org.h2.engine.Database.close(Database.java:1191)
> at org.h2.engine.Database.removeSession(Database.java:1069)
> at org.h2.engine.Session.close(Session.java:666)
> at org.h2.jdbc.JdbcConnection.close(JdbcConnection.java:366)
> at H2Test.main(H2Test.java:70)
> Caused by: org.h2.jdbc.JdbcSQLException: File corrupted while reading
> record: "wrong checksum". Possible solution: use the recovery tool
> [90030-174]
> at org.h2.message.DbException.getJdbcSQLException(DbException.java:332)
> ... 11 more
>
>   *Question 3*: Is there a quick and easy way to figure out what could
> possibly be causing this exception? Could Problem 2 (causing an improper
> database shutdown) be causing Problem 1?
>
>
> Many thanks,
> /PN
>
>  --
> You received this message because you are subscribed to the Google Groups
> "H2 Database" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to 
> [email protected]<javascript:_e(%7B%7D,'cvml','h2-database%[email protected]');>
> .
> To post to this group, send email to 
> [email protected]<javascript:_e(%7B%7D,'cvml','[email protected]');>
> .
> Visit this group at http://groups.google.com/group/h2-database.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups "H2 
Database" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/h2-database.
For more options, visit https://groups.google.com/d/optout.

Reply via email to