Issue
I/A Series G3 Enterprise Network Server output window displays the following error: java.io.IOException: Negative seek offset.
java.io.IOException: Negative seek offset
at java.io.RandomAccessFile.seek(Native Method)
at com.tridium.history.io.FileRandomAccess.seek(FileRandomAccess.java:118)
at com.tridium.history.file.recstore.RecordStore.writePage(RecordStore.java:561)
at com.tridium.history.file.recstore.RecordStore.newLastPage(RecordStore.java:631)
at com.tridium.history.file.recstore.RecordStore.getWritePage(RecordStore.java:606)
at com.tridium.history.file.recstore.RecordStore.append(RecordStore.java:222)
at com.tridium.history.file.recstore.BRecordStoreHistoryTable.doAppend(BRecordStoreHistoryTable.java:175)
at com.tridium.history.file.BFileHistoryTable.append(BFileHistoryTable.java:803)
at com.tridium.history.db.TableHandle.append(TableHandle.java:203)
at com.tridium.history.db.BLocalDbHistory.append(BLocalDbHistory.java:393)
at com.tridium.driver.file.history.BDelimitedFileImport.appendToHistory(BDelimitedFileImport.java:796)
at com.tridium.driver.file.history.BCsvFileImport.executeFileImport(BCsvFileImport.java:212)
at javax.baja.driver.file.history.BFileHistoryImport.doExecute(BFileHistoryImport.java:90)
at auto.com_tridium_driver_file_history_BExcelCsvFileImport.invoke(AutoGenerated)
at com.tridium.sys.schema.ComponentSlotMap.invoke(ComponentSlotMap.java:1217)
at com.tridium.sys.engine.EngineUtil.doInvoke(EngineUtil.java:49)
at javax.baja.sys.BComponent.doInvoke(BComponent.java:1046)
at javax.baja.util.Invocation.run(Invocation.java:46)
at javax.baja.util.Worker.process(Worker.java:161)
at javax.baja.util.Worker$Processor.run(Worker.java:134)
at java.lang.Thread.run(Thread.java:619)
Environment
I/A Series G3 Enterprise Network Server (versions prior to 3.4.54)
Cause
The error indicates that a history has become too large where the source .hdb file has exceeded 2GB making the history become inaccessible. Versions prior to 3.4.54 used a Java integer as the offset into the page file of a history and the negative seek offset error is caused by a math rollover calculating a negative number.
Resolution
Two options to correct:
- Review the current size of the audit histories, log histories and any string logs to see which one is at the 2GB limit and perform some history database maintenance to trim the size down.
- Upgrade to the latest maintenance build of I/A Series G3 (3.4.54 or higher) where Java long calculations are used for the offset.