Issue #621: EOFException

Type: Bug ReoprtVersion: 2.3.3Priority: CriticalStatus: FixedReplies: 2
#1

Not sure if you'll be able to help with this but I've had an application get into a state where it cannot access anything from the database - queries fail with the following exception:

[ObjectDB 2.3.3_06] javax.persistence.PersistenceException
Failed to read from file 'F:\calculationservice\objectdb\dbs\workflow\uatsrtlonw242-WSAgent-2-Graphs.odb' (error 117)
at com.objectdb.jpa.JpaQuery.getResultList(JpaQuery.java:675)
at rbccm.felix.objectdb.workflow.ObjectDbGraphContainer.find(Unknown Source)
at rbccm.felix.objectdb.workflow.ObjectDbGraphContainer.get(Unknown Source)
at rbccm.digest2.execution.Workflow2Runner.processWorkflows(Unknown Source)
at rbccm.digest2.execution.Workflow2Runner.processWorkflow(Unknown Source)
at rbccm.digest2.execution.Workflow2Runner.workflowCompleteForSomeTasks(Unknown Source)
at rbccm.felix.gridservice.workflow.WorkflowService.process(Unknown Source)
at rbccm.felix.gridservice.workflow.WorkflowService.process(Unknown Source)
at rbccm.felix.gridservice.workflow.WorkflowService.process(Unknown Source)
at rbccm.felix.framework.service.ServiceRunner.run(Unknown Source)
at java.lang.Thread.run(Thread.java:662)
Caused by: com.objectdb.o.UserException: Failed to read from file 'F:\calculationservice\objectdb\dbs\workflow\uatsrtlonw242-WSAgent-2-Graphs.odb'
at com.objectdb.o.MSG.d(MSG.java:74)
at com.objectdb.o.LFL.T(LFL.java:1059)
at com.objectdb.o.PAG.am(PAG.java:818)
at com.objectdb.o.PGC.w(PGC.java:237)
at com.objectdb.o.SNP.B(SNP.java:366)
at com.objectdb.o.OBI.v(OBI.java:430)
at com.objectdb.o.OBI.<init>(OBI.java:199)
at com.objectdb.o.PBI.<init>(PBI.java:56)
at com.objectdb.o.MST.aX(MST.java:789)
at com.objectdb.o.BQI.Ut(BQI.java:123)
at com.objectdb.o.PRG.ae(PRG.java:637)
at com.objectdb.o.PRG.ad(PRG.java:539)
at com.objectdb.o.QRM.U4(QRM.java:259)
at com.objectdb.o.MST.U4(MST.java:947)
at com.objectdb.o.WRA.U4(WRA.java:290)
at com.objectdb.o.WSM.U4(WSM.java:113)
at com.objectdb.o.QRR.g(QRR.java:232)
at com.objectdb.o.QRR.b(QRR.java:151)
at com.objectdb.jpa.JpaQuery.getResultList(JpaQuery.java:666)
... 10 more
Caused by: java.io.EOFException
at java.io.RandomAccessFile.readFully(RandomAccessFile.java:399)
at com.objectdb.o.LFL.T(LFL.java:1056)
... 27 more

Before this error I was getting a large number of EntityNotFoundExceptions:

[ObjectDB 2.3.3_06] javax.persistence.EntityNotFoundException
Entity is not found: rbccm.digest.workflow.execution.WorkflowInstance#'e8bc02bc-ac4c-49c4-a87a-0fcc65a71778' (error 631)
at rbccm.digest.workflow.execution.WorkflowInstance.__odbGet_taskInstances(Unknown Source)
at rbccm.digest.workflow.execution.WorkflowInstance.setGlobalError(Unknown Source)
at rbccm.digest2.execution.Workflow2Runner.cancelWorkflow(Unknown Source)
at rbccm.digest2.execution.Workflow2Runner.cancelWorkflow(Unknown Source)
at rbccm.digest2.execution.Workflow2Runner.workflowCompleteForSomeTasks(Unknown Source)
at rbccm.felix.gridservice.workflow.WorkflowService.process(Unknown Source)
at rbccm.felix.gridservice.workflow.WorkflowService.process(Unknown Source)
at rbccm.felix.gridservice.workflow.WorkflowService.process(Unknown Source)
at rbccm.felix.framework.service.ServiceRunner.run(Unknown Source)
at java.lang.Thread.run(Thread.java:662)

These were unexpected as the objects should be eager loaded and existed on persistance.

I've attached the database in question. ObjectDbDoctor finds a number of errors in it (output attached) but I'm not sure if it will be of much use to you.

#2

The database file that you uploaded is corrupted and you must repair it using the ObjectDB Doctor before you can use it. Otherwise, many different exceptions (including EOF) are expected.

Following is a list of possible causes:

  • Hardware failure (e.g. a physical disk failure).
  • Software failure (e.g. a bug of the Operating System, Java or ObjectDB).
  • Copying a database file while it is open and in use.
  • Network or I/O failure when copying, moving or transferring a database file.
  • Transferring a database file over FTP in ASCII mode (BINARY mode should be used).
  • Deleting an ObjectDB database recovery file or recording directory if it exists, or copying, moving or transferring an ObjectDB database file without its recovery file or recording directory.
  • Power failure when the database is being updated - if recovery file is disabled.
  • Using the database file simultaneously by two instances of the ObjectDB engine (not using one server process), thus bypassing ObjectDB internal file lock protection.
  • Modifying the database file externally not through ObjectDB (e.g. by malicious software such as a computer virus).

Maybe you can provide more details:

  • What hardware are you using?
  • Which JVM?
  • What is the recovery configuration?
  • Where is the database file located - on a local drive or on a shared network drive?
  • Is accessing the database from multiple processes possible (more than one ObjectDB application or another utility that manages files, including the database file while it is open by ObjectDB)?
  • Any special event before that failure (e.g. power failure? shutdown? process kill?)
  • Any other suspicious activity.
ObjectDB Support
#3

The stack trace reflects a bug that was reproduced and fixed using the test in issue #625.

ObjectDB Support

Reply