Hi,

That's interesting, I didn't know. I believe the MVStore (the 1.4 version
of H2) no longer relies on the space to be filled with zeroes.

For your file system implementation, what I would do is provide a
compatibility flag that fills the space with zeroes.

Regards,
Thomas



On Wed, May 14, 2014 at 2:36 PM, PN
<[email protected]<javascript:_e(%7B%7D,'cvml','[email protected]');>
> wrote:

> I believe, I've found out the cause of the problem.
>
> When H2 seeks beyond the current file-size and tries to write at the new
> channel position, it creates a hole in the file. So far, so good.
>
> However, it then erroneously assumes (in its page-allocation internals
> somewhere) that this hole would always be initialized to zero's, which may
> or may not be the case, especially for custom file-systems like the one I'm
> dealing with right now. For sake of efficiency, this file-system does not
> -- and similarly many others may not -- initialize this hole to zero.
>
> Even the Java 7 spec on FileChannel.position(long)
> <http://docs.oracle.com/javase/7/docs/api/java/nio/channels/FileChannel.html#position(long)>has
> this to say:
>
>        * "Setting the position to a value that is greater than the file's
> current size is legal but does not change the size of the file. A later
> attempt to read bytes at such a position will immediately return an
> end-of-file indication. A later attempt to write bytes at such a position
> will cause the file to be grown to accommodate the new bytes; the values of
> any bytes between the previous end-of-file and the newly-written bytes are
> unspecified."*
>
> I have verified now...
>     1. that the default file/channel implementation in Java 7 does indeed
> initialize this hole to zero's, This could cease being the case in future.
>     2. that when I initialize this hole to zero's in my file-system code,
> both the corruption and the file-increase problems do indeed disappear.
>
> So, H2 is reading some junk in this hole as valid data and (rightly)
> throwing corruption-exception.
>
> I am aware by now that H2 uses its own channel and does not use the Java 7
> semantics but... Do you agree with the above? If yes, would a fix for
> this be available soon?
>
> Regards,
> /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