@Thomas Mueller - You mentioned that file corruption may take place if 
"copy the database file while it is in use, without using the online backup 
command". Can you please elaborate?

Do note that we do make a file copy while DB is in use, but we make a call 
to "SET EXCLUSIVE 1" before. What would be "online backup command" ? We 
want to have a full copy of the DB "as is", ready to go for backup/restore 
and even replicate it for HA. Is there a better way to achieve this?

I am hitting the same corruption issue. We were using 1.4.96 and not 
upgraded to 1.4.99. With 1.4.96, once hit, all threads failed and database 
was unusable. See exception we're hitting below:

org.hibernate.exception.GenericJDBCException: could not execute statement
at 
org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54)
 
~[factory.jar:1.4]
at 
org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126)
 
~[factory.jar:1.4]
at 
org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:112)
 
~[factory.jar:1.4]
at 
org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:211)
 
~[factory.jar:1.4]
at 
org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:3285)
 
~[factory.jar:1.4]
at 
org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:3183)
 
~[factory.jar:1.4]
at 
org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:3525)
 
~[factory.jar:1.4]
at 
org.hibernate.action.internal.EntityUpdateAction.execute(EntityUpdateAction.java:159)
 
~[factory.jar:1.4]
at 
org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:465) 
~[factory.jar:1.4]
at 
org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:351) 
~[factory.jar:1.4]
at 
org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:350)
 
~[factory.jar:1.4]
at 
org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:56)
 
~[factory.jar:1.4]
at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1258) 
~[factory.jar:1.4]
at 
com.shieldxnetworks.factory.util.db.TransactionRunner.commit(TransactionRunner.java:129)
 
~[factory.jar:1.4]
at 
com.shieldxnetworks.factory.util.db.TransactionRunner.commitIntent(TransactionRunner.java:202)
 
~[factory.jar:1.4]
at 
com.shieldxnetworks.factory.manager.chassis.task.vmware.VmwareCreateMicroSegmentNetworkTask.executeTransaction(VmwareCreateMicroSegmentNetworkTask.java:98)
 
~[factory.jar:1.4]
at 
com.shieldxnetworks.factory.job.task.TransactionalTask$1.run(TransactionalTask.java:48)
 
~[factory.jar:1.4]
at 
com.shieldxnetworks.factory.util.db.TransactionRunner.exec(TransactionRunner.java:81)
 
~[factory.jar:1.4]
at 
com.shieldxnetworks.factory.util.db.TransactionRunner.exec(TransactionRunner.java:73)
 
~[factory.jar:1.4]
at 
com.shieldxnetworks.factory.job.task.TransactionalTask.lambda$execute$0(TransactionalTask.java:53)
 
~[factory.jar:1.4]
at 
com.shieldxnetworks.factory.util.db.TransactionRetrier.tryAttempts(TransactionRetrier.java:49)
 
~[factory.jar:1.4]
at 
com.shieldxnetworks.factory.util.db.TransactionRetrier.tryAttempts(TransactionRetrier.java:42)
 
~[factory.jar:1.4]
at 
com.shieldxnetworks.factory.job.task.TransactionalTask.execute(TransactionalTask.java:41)
 
~[factory.jar:1.4]
at com.shieldxnetworks.factory.job.TaskNode.run(TaskNode.java:270) 
[factory.jar:1.4]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
[?:1.8.0_152]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_152]
at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 
[?:1.8.0_152]
at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 
[?:1.8.0_152]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_152]
Caused by: org.h2.jdbc.JdbcSQLNonTransientException: IO Exception: 
"retry:/var/lib/factory/shieldxdb.mv.db"; SQL statement:
update port set version=?, cloud_object_id=?, connected=?, 
inspection_port_type=?, lb_fk=?, mac_address=?, micro_segment_network_fk=?, 
name=?, network_fk=?, original_network_fk=?, type=?, vm_fk=? where id=? and 
version=? [90028-199]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:502) 
~[factory.jar:1.4]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:427) 
~[factory.jar:1.4]
at org.h2.message.DbException.get(DbException.java:194) ~[factory.jar:1.4]
at 
org.h2.mvstore.db.MVTableEngine$Store.convertIllegalStateException(MVTableEngine.java:197)
 
~[factory.jar:1.4]
at org.h2.mvstore.db.MVTable.convertException(MVTable.java:725) 
~[factory.jar:1.4]
at org.h2.mvstore.db.MVSecondaryIndex.remove(MVSecondaryIndex.java:239) 
~[factory.jar:1.4]
at org.h2.mvstore.db.MVTable.removeRow(MVTable.java:514) ~[factory.jar:1.4]
at org.h2.table.Table.updateRows(Table.java:506) ~[factory.jar:1.4]
at org.h2.command.dml.Update.update(Update.java:203) ~[factory.jar:1.4]
at org.h2.command.CommandContainer.update(CommandContainer.java:133) 
~[factory.jar:1.4]
at org.h2.command.Command.executeUpdate(Command.java:267) ~[factory.jar:1.4]
at 
org.h2.jdbc.JdbcPreparedStatement.executeUpdateInternal(JdbcPreparedStatement.java:200)
 
~[factory.jar:1.4]
at 
org.h2.jdbc.JdbcPreparedStatement.executeUpdate(JdbcPreparedStatement.java:154) 
~[factory.jar:1.4]
at 
org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:208)
 
~[factory.jar:1.4]
... 25 more
Caused by: java.lang.IllegalStateException: Reading from 
retry:/var/lib/factory/shieldxdb.mv.db failed; file length 607985664 read 
length 192 at 523398200 [1.4.199/1]
at org.h2.mvstore.DataUtils.newIllegalStateException(DataUtils.java:883) 
~[factory.jar:1.4]
at org.h2.mvstore.DataUtils.readFully(DataUtils.java:420) ~[factory.jar:1.4]
at org.h2.mvstore.FileStore.readFully(FileStore.java:98) ~[factory.jar:1.4]
at org.h2.mvstore.MVStore.readBufferForPage(MVStore.java:1048) 
~[factory.jar:1.4]
at org.h2.mvstore.MVStore.readPage(MVStore.java:2186) ~[factory.jar:1.4]
at org.h2.mvstore.MVMap.readPage(MVMap.java:554) ~[factory.jar:1.4]
at org.h2.mvstore.Page$NonLeaf.getChildPage(Page.java:1086) 
~[factory.jar:1.4]
at org.h2.mvstore.MVMap.traverseDown(MVMap.java:1877) ~[factory.jar:1.4]
at org.h2.mvstore.MVMap.operate(MVMap.java:1664) ~[factory.jar:1.4]
at org.h2.mvstore.tx.TransactionMap.set(TransactionMap.java:306) 
~[factory.jar:1.4]
at org.h2.mvstore.tx.TransactionMap.set(TransactionMap.java:289) 
~[factory.jar:1.4]
at org.h2.mvstore.tx.TransactionMap.remove(TransactionMap.java:209) 
~[factory.jar:1.4]
at org.h2.mvstore.db.MVSecondaryIndex.remove(MVSecondaryIndex.java:232) 
~[factory.jar:1.4]
at org.h2.mvstore.db.MVTable.removeRow(MVTable.java:514) ~[factory.jar:1.4]
at org.h2.table.Table.updateRows(Table.java:506) ~[factory.jar:1.4]
at org.h2.command.dml.Update.update(Update.java:203) ~[factory.jar:1.4]
at org.h2.command.CommandContainer.update(CommandContainer.java:133) 
~[factory.jar:1.4]
at org.h2.command.Command.executeUpdate(Command.java:267) ~[factory.jar:1.4]
at 
org.h2.jdbc.JdbcPreparedStatement.executeUpdateInternal(JdbcPreparedStatement.java:200)
 
~[factory.jar:1.4]
at 
org.h2.jdbc.JdbcPreparedStatement.executeUpdate(JdbcPreparedStatement.java:154) 
~[factory.jar:1.4]
at 
org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:208)
 
~[factory.jar:1.4]
... 25 more
Caused by: java.io.EOFException
at org.h2.mvstore.DataUtils.readFully(DataUtils.java:408) ~[factory.jar:1.4]
at org.h2.mvstore.FileStore.readFully(FileStore.java:98) ~[factory.jar:1.4]
at org.h2.mvstore.MVStore.readBufferForPage(MVStore.java:1048) 
~[factory.jar:1.4]
at org.h2.mvstore.MVStore.readPage(MVStore.java:2186) ~[factory.jar:1.4]
at org.h2.mvstore.MVMap.readPage(MVMap.java:554) ~[factory.jar:1.4]
at org.h2.mvstore.Page$NonLeaf.getChildPage(Page.java:1086) 
~[factory.jar:1.4]
at org.h2.mvstore.MVMap.traverseDown(MVMap.java:1877) ~[factory.jar:1.4]
at org.h2.mvstore.MVMap.operate(MVMap.java:1664) ~[factory.jar:1.4]
at org.h2.mvstore.tx.TransactionMap.set(TransactionMap.java:306) 
~[factory.jar:1.4]
at org.h2.mvstore.tx.TransactionMap.set(TransactionMap.java:289) 
~[factory.jar:1.4]
at org.h2.mvstore.tx.TransactionMap.remove(TransactionMap.java:209) 
~[factory.jar:1.4]
at org.h2.mvstore.db.MVSecondaryIndex.remove(MVSecondaryIndex.java:232) 
~[factory.jar:1.4]
at org.h2.mvstore.db.MVTable.removeRow(MVTable.java:514) ~[factory.jar:1.4]
at org.h2.table.Table.updateRows(Table.java:506) ~[factory.jar:1.4]
at org.h2.command.dml.Update.update(Update.java:203) ~[factory.jar:1.4]
at org.h2.command.CommandContainer.update(CommandContainer.java:133) 
~[factory.jar:1.4]
at org.h2.command.Command.executeUpdate(Command.java:267) ~[factory.jar:1.4]
at 
org.h2.jdbc.JdbcPreparedStatement.executeUpdateInternal(JdbcPreparedStatement.java:200)
 
~[factory.jar:1.4]
at 
org.h2.jdbc.JdbcPreparedStatement.executeUpdate(JdbcPreparedStatement.java:154) 
~[factory.jar:1.4]
at 
org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:208)
 
~[factory.jar:1.4]
... 25 more

We do actually make a copy of the file, but we call SET EXCLUSIVE 1 before 
we do that. 



On Monday, May 4, 2015 at 10:45:59 PM UTC-7, Thomas Mueller wrote:
>
> Hi,
>
> That's strange. The last part of the file is missing.
>
> Looking at the H2 source code, the file truncate code is very simple and 
> conservative (MVStore.shrinkFileIfPossible, which is calling 
> getFileLengthInUse). It looks unlikely that there is a bug in this area.
>
> Could you describe what you did to get into this state? One possible way 
> to get into this situation is to copy the database file while it is in use, 
> without using the online backup command. Or truncate the file in some other 
> way. Other than that, I wouldn't know a way. Do you have a reproducible 
> test case?
>
> Regards
> Thomas
>
> On Thursday, April 30, 2015, Osvaldas Ziukas <[email protected] 
> <javascript:>> wrote:
>
>> Hello here is db file 
>>>
>>> -- 
>> 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 view this discussion on the web visit 
https://groups.google.com/d/msgid/h2-database/35429ef9-75aa-428d-b141-ad79e7647b84%40googlegroups.com.

Reply via email to