I have also encountered another situation that produces the same error once
the database is restarted but for this situation the database was run with
option DB_CLOSE_ON_EXIT=FALSE because without the option I get an exception
that says that the database is already closed (and suggest to use the
option DB_CLOSE_ON_EXIT).
I forgot to mention that in both cases Hibernate is configured to use
HikariCP for connection pooling.
Below the exception that suggests to use option DB_CLOSE_ON_EXIT=FALSE but
produces "Block not found" error once the database is restarted:
org.h2.jdbc.JdbcSQLException: Database is already closed (to disable
> automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db
> URL) [90121-176]
at
> org.h2.message.DbException.getJdbcSQLException(DbException.java:344)
at org.h2.message.DbException.get(DbException.java:178)
at org.h2.message.DbException.get(DbException.java:154)
at org.h2.message.DbException.get(DbException.java:143)
at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1468)
at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1443)
at org.h2.jdbc.JdbcConnection.clearWarnings(JdbcConnection.java:633)
at
> com.zaxxer.hikari.proxy.ConnectionProxy.close(ConnectionProxy.java:195)
at
> org.hibernate.hikaricp.internal.HikariCPConnectionProvider.closeConnection(HikariCPConnectionProvider.java:97)
at
> org.hibernate.internal.AbstractSessionImpl$NonContextualJdbcConnectionAccess.releaseConnection(AbstractSessionImpl.java:391)
at
> org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.releaseConnection(LogicalConnectionImpl.java:255)
at
> org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.close(LogicalConnectionImpl.java:182)
at
> org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.close(JdbcCoordinatorImpl.java:205)
at
> org.hibernate.engine.transaction.internal.TransactionCoordinatorImpl.close(TransactionCoordinatorImpl.java:297)
at org.hibernate.internal.SessionImpl.close(SessionImpl.java:369)
at
> org.ow2.proactive.scheduler.core.db.TransactionHelper.runWithoutTransaction(TransactionHelper.java:103)
...
Regards,
Laurent
On Thursday, July 23, 2015 at 8:14:12 PM UTC+2, Laurent Pellegrino wrote:
>
> Part of my test (including the database) runs in a forked process created
> using ProcessBuilder. I call Process#destroy to destroy the JVM that runs
> the database. It seems that the destroy call triggers a SIGTERM, which is
> not as abrupt as I was thinking.
>
> Regards,
>
> Laurent
>
>
> On Thursday, July 23, 2015 at 7:31:28 PM UTC+2, Thomas Mueller wrote:
>>
>> Hi,
>>
>> How do you kill the database?
>>
>> Regards,
>> Thomas
>>
>>
>> On Thu, Jul 23, 2015 at 5:21 PM, Laurent Pellegrino <
>> [email protected]> wrote:
>>
>>> Hello,
>>>
>>> I am using H2 version 1.4.187 along with Hibernate in order to persist
>>> some data for test. These data contain some BLOBs which are inserted in the
>>> DB using transactions. Once transactions are finished, the database is
>>> killed abruptly and then restarted.
>>>
>>> Unfortunately, when the database is restarted, if I execute a query that
>>> access to some BLOB data I get an exception.
>>>
>>> Is it a known issue ? is there a workaround while still using MVCC ? is
>>> a fix planned soon ?
>>>
>>> Below is a copy of the exception mentioned previously:
>>>
>>> [Scheduler output]: Caused by: org.hibernate.HibernateException:
>>>> IOException occurred reading a binary value
>>>
>>> [Scheduler output]: at
>>>> org.hibernate.type.descriptor.java.DataHelper.extractBytes(DataHelper.java:191)
>>>
>>> [Scheduler output]: at
>>>> org.hibernate.type.descriptor.java.SerializableTypeDescriptor.wrap(SerializableTypeDescriptor.java:137)
>>>
>>> [Scheduler output]: at
>>>> org.hibernate.type.descriptor.java.SerializableTypeDescriptor.wrap(SerializableTypeDescriptor.java:44)
>>>
>>> [Scheduler output]: at
>>>> org.hibernate.type.descriptor.sql.BlobTypeDescriptor$1.doExtract(BlobTypeDescriptor.java:65)
>>>
>>> [Scheduler output]: at
>>>> org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:64)
>>>
>>> [Scheduler output]: at
>>>> org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:267)
>>>
>>> [Scheduler output]: at
>>>> org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:263)
>>>
>>> [Scheduler output]: at
>>>> org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:253)
>>>
>>> [Scheduler output]: at
>>>> org.hibernate.type.AbstractStandardBasicType.hydrate(AbstractStandardBasicType.java:338)
>>>
>>> [Scheduler output]: at
>>>> org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2969)
>>>
>>> [Scheduler output]: at
>>>> org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1696)
>>>
>>> [Scheduler output]: at
>>>> org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1628)
>>>
>>> [Scheduler output]: at
>>>> org.hibernate.loader.Loader.getRow(Loader.java:1515)
>>>
>>> [Scheduler output]: at
>>>> org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:726)
>>>
>>> [Scheduler output]: at
>>>> org.hibernate.loader.Loader.processResultSet(Loader.java:953)
>>>
>>> [Scheduler output]: at
>>>> org.hibernate.loader.Loader.doQuery(Loader.java:921)
>>>
>>> [Scheduler output]: at
>>>> org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:355)
>>>
>>> [Scheduler output]: at
>>>> org.hibernate.loader.Loader.doList(Loader.java:2554)
>>>
>>> [Scheduler output]: at
>>>> org.hibernate.loader.Loader.doList(Loader.java:2540)
>>>
>>> [Scheduler output]: at
>>>> org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2370)
>>>
>>> [Scheduler output]: at
>>>> org.hibernate.loader.Loader.list(Loader.java:2365)
>>>
>>> [Scheduler output]: at
>>>> org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:497)
>>>
>>> [Scheduler output]: at
>>>> org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:387)
>>>
>>> [Scheduler output]: at
>>>> org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:236)
>>>
>>> [Scheduler output]: at
>>>> org.hibernate.internal.SessionImpl.list(SessionImpl.java:1300)
>>>
>>> [Scheduler output]: at
>>>> org.hibernate.internal.QueryImpl.list(QueryImpl.java:103)
>>>
>>> [Scheduler output]: at
>>>> org.ow2.proactive.scheduler.core.db.SchedulerDBManager.loadJobResult(SchedulerDBManager.java:1297)
>>>
>>> [Scheduler output]: at
>>>> org.ow2.proactive.scheduler.core.db.SchedulerDBManager.access$1700(SchedulerDBManager.java:76)
>>>
>>> [Scheduler output]: at
>>>> org.ow2.proactive.scheduler.core.db.SchedulerDBManager$29.executeWork(SchedulerDBManager.java:1227)
>>>
>>> [Scheduler output]: at
>>>> org.ow2.proactive.scheduler.core.db.SchedulerDBManager$29.executeWork(SchedulerDBManager.java:1203)
>>>
>>> [Scheduler output]: at
>>>> org.ow2.proactive.scheduler.core.db.TransactionHelper.runWithoutTransaction(TransactionHelper.java:95)
>>>
>>> [Scheduler output]: ... 8 more
>>>
>>> [Scheduler output]: Caused by: java.io.IOException: Block not found in
>>>> id [1, -30, 7, 5] [1.4.187/50]
>>>
>>> [Scheduler output]: at
>>>> org.h2.mvstore.StreamStore$Stream.read(StreamStore.java:466)
>>>
>>> [Scheduler output]: at java.io.InputStream.read(InputStream.java:101)
>>>
>>> [Scheduler output]: at
>>>> org.hibernate.type.descriptor.java.DataHelper.extractBytes(DataHelper.java:183)
>>>
>>> [Scheduler output]: ... 38 more
>>>
>>> [Scheduler output]: Caused by: java.lang.IllegalStateException: Block 5
>>>> not found [1.4.187/50]
>>>
>>> [Scheduler output]: at
>>>> org.h2.mvstore.DataUtils.newIllegalStateException(DataUtils.java:773)
>>>
>>> [Scheduler output]: at
>>>> org.h2.mvstore.StreamStore.getBlock(StreamStore.java:388)
>>>
>>> [Scheduler output]: at
>>>> org.h2.mvstore.StreamStore$Stream.nextBuffer(StreamStore.java:503)
>>>
>>> [Scheduler output]: at
>>>> org.h2.mvstore.StreamStore$Stream.read(StreamStore.java:460)
>>>
>>> [Scheduler output]: ... 40 more
>>>
>>> --
>>> 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.
>>>
>>
>>
--
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.