Uploaded image for project: 'Derby'
  1. Derby
  2. DERBY-7158

ArrayIndexOutOfBoundsException when connecting to Embedded Derby

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Resolved
    • 10.14.2.0
    • 10.14.2.0
    • None
    • None
    • Data corruption

    Description

      Hello,

      our project is using Embedded Derby 10.14.2 with Java 11. A client recently complained they can't connect to the DB and it seems the DB is corrupted. At the time the issue happened they said the only change they made was to increase the memory. When the application is trying to connect to the DB, it throws the following exception:

      Caused by: java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 28
          at org.apache.derby.impl.store.raw.data.BasePage.getHeaderAtSlot(Unknown Source) ~[derby-10.14.2.jar:?]
          at org.apache.derby.impl.store.raw.data.BasePage.setDeleteStatus(Unknown Source) ~[derby-10.14.2.jar:?]
          at org.apache.derby.impl.store.raw.data.CachedPage.setDeleteStatus(Unknown Source) ~[derby-10.14.2.jar:?]
          at org.apache.derby.impl.store.raw.data.StoredPage.setDeleteStatus(Unknown Source) ~[derby-10.14.2.jar:?]
          at org.apache.derby.impl.store.raw.data.InsertOperation.undoMe(Unknown Source) ~[derby-10.14.2.jar:?]
          at org.apache.derby.impl.store.raw.data.LogicalUndoOperation.doMe(Unknown Source) ~[derby-10.14.2.jar:?]
          at org.apache.derby.impl.store.raw.log.FileLogger.logAndUndo(Unknown Source) ~[derby-10.14.2.jar:?]
          at org.apache.derby.impl.store.raw.xact.Xact.logAndUndo(Unknown Source) ~[derby-10.14.2.jar:?]
          at org.apache.derby.impl.store.raw.log.FileLogger.undo(Unknown Source) ~[derby-10.14.2.jar:?]
          at org.apache.derby.impl.store.raw.xact.Xact.abort(Unknown Source) ~[derby-10.14.2.jar:?]
          at org.apache.derby.impl.store.raw.xact.XactFactory.rollbackAllTransactions(Unknown Source) ~[derby-10.14.2.jar:?]
          at org.apache.derby.impl.store.raw.log.LogToFile.recover(Unknown Source) ~[derby-10.14.2.jar:?]
          at org.apache.derby.impl.store.raw.RawStore.boot(Unknown Source) ~[derby-10.14.2.jar:?]
          at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown Source) ~[derby-10.14.2.jar:?]
          at org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown Source) ~[derby-10.14.2.jar:?]
          at org.apache.derby.impl.services.monitor.BaseMonitor.startModule(Unknown Source) ~[derby-10.14.2.jar:?]
          at org.apache.derby.impl.services.monitor.FileMonitor.startModule(Unknown Source) ~[derby-10.14.2.jar:?]
          at org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Unknown Source) ~[derby-10.14.2.jar:?]
          at org.apache.derby.impl.store.access.RAMAccessManager$5.run(Unknown Source) ~[derby-10.14.2.jar:?]
          at java.security.AccessController.doPrivileged(Native Method) ~[?:?]
          at org.apache.derby.impl.store.access.RAMAccessManager.bootServiceModule(Unknown Source) ~[derby-10.14.2.jar:?]
          at org.apache.derby.impl.store.access.RAMAccessManager.boot(Unknown Source) ~[derby-10.14.2.jar:?]
          at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown Source) ~[derby-10.14.2.jar:?]
          at org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown Source) ~[derby-10.14.2.jar:?]
          at org.apache.derby.impl.services.monitor.BaseMonitor.startModule(Unknown Source) ~[derby-10.14.2.jar:?]
          at org.apache.derby.impl.services.monitor.FileMonitor.startModule(Unknown Source) ~[derby-10.14.2.jar:?]
          at org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Unknown Source) ~[derby-10.14.2.jar:?]
          at org.apache.derby.impl.db.BasicDatabase$5.run(Unknown Source) ~[derby-10.14.2.jar:?]
          at java.security.AccessController.doPrivileged(Native Method) ~[?:?]
          at org.apache.derby.impl.db.BasicDatabase.bootServiceModule(Unknown Source) ~[derby-10.14.2.jar:?]
          at org.apache.derby.impl.db.BasicDatabase.bootStore(Unknown Source) ~[derby-10.14.2.jar:?]
          at org.apache.derby.impl.db.BasicDatabase.boot(Unknown Source) ~[derby-10.14.2.jar:?]
          at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown Source) ~[derby-10.14.2.jar:?]
          at org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown Source) ~[derby-10.14.2.jar:?]
          at org.apache.derby.impl.services.monitor.BaseMonitor.bootService(Unknown Source) ~[derby-10.14.2.jar:?]
          at org.apache.derby.impl.services.monitor.BaseMonitor.startProviderService(Unknown Source) ~[derby-10.14.2.jar:?]
          at org.apache.derby.impl.services.monitor.BaseMonitor.findProviderAndStartService(Unknown Source) ~[derby-10.14.2.jar:?]
          at org.apache.derby.impl.services.monitor.BaseMonitor.startPersistentService(Unknown Source) ~[derby-10.14.2.jar:?]
          at org.apache.derby.iapi.services.monitor.Monitor.startPersistentService(Unknown Source) ~[derby-10.14.2.jar:?]
          at org.apache.derby.impl.jdbc.EmbedConnection$4.run(Unknown Source) ~[derby-10.14.2.jar:?]
          at org.apache.derby.impl.jdbc.EmbedConnection$4.run(Unknown Source) ~[derby-10.14.2.jar:?]
          at java.security.AccessController.doPrivileged(Native Method) ~[?:?]
          at org.apache.derby.impl.jdbc.EmbedConnection.startPersistentService(Unknown Source) ~[derby-10.14.2.jar:?]
          at org.apache.derby.impl.jdbc.EmbedConnection.bootDatabase(Unknown Source) ~[derby-10.14.2.jar:?]
          at org.apache.derby.impl.jdbc.EmbedConnection.<init>(Unknown Source) ~[derby-10.14.2.jar:?]
          at org.apache.derby.jdbc.InternalDriver$1.run(Unknown Source) ~[derby-10.14.2.jar:?]
          at org.apache.derby.jdbc.InternalDriver$1.run(Unknown Source) ~[derby-10.14.2.jar:?]
          at java.security.AccessController.doPrivileged(Native Method) ~[?:?]
          at org.apache.derby.jdbc.InternalDriver.getNewEmbedConnection(Unknown Source) ~[derby-10.14.2.jar:?]
          at org.apache.derby.jdbc.InternalDriver.connect(Unknown Source) ~[derby-10.14.2.jar:?]
          at org.apache.derby.jdbc.InternalDriver.connect(Unknown Source) ~[derby-10.14.2.jar:?]
          at org.apache.derby.jdbc.EmbeddedDriver.connect(Unknown Source) ~[derby-10.14.2.jar:?]
          at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:346) ~[org.apache.tomcat.jdbc_8.5.85.jar:?]
          at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:227) ~[org.apache.tomcat.jdbc_8.5.85.jar:?]
          at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:763) ~[org.apache.tomcat.jdbc_8.5.85.jar:?]
          at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:691) ~[org.apache.tomcat.jdbc_8.5.85.jar:?]
          at org.apache.tomcat.jdbc.pool.ConnectionPool.getConnection(ConnectionPool.java:197) ~[org.apache.tomcat.jdbc_8.5.85.jar:?]
          at org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:134) ~[org.apache.tomcat.jdbc_8.5.85.jar:?]
          at org.eclipse.persistence.sessions.JNDIConnector.connect(JNDIConnector.java:138) ~[eclipselink-2.7.10.jar:2.7.10.v20211216-fe64cd39c3]
          at org.eclipse.persistence.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.java:172) ~[eclipselink-2.7.10.jar:2.7.10.v20211216-fe64cd39c3]
          at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.setOrDetectDatasource(DatabaseSessionImpl.java:225) ~[eclipselink-2.7.10.jar:2.7.10.v20211216-fe64cd39c3]
          at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.loginAndDetectDatasource(DatabaseSessionImpl.java:809) ~[eclipselink-2.7.10.jar:2.7.10.v20211216-fe64cd39c3]
          at org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:261) ~[eclipselink-2.7.10.jar:2.7.10.v20211216-fe64cd39c3]
          at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:773) ~[eclipselink-2.7.10.jar:2.7.10.v20211216-fe64cd39c3]
          ... 23 more 

      Using the shared Java class from https://issues.apache.org/jira/browse/DERBY-5201 with option "-v" I was able to see there are two .dat files with INVALID_PAGE flag in the page header. One of them is for our custom table and the other is for SYSSTATISTICS. 

      I saw in the documentation that if backup is created and with logs, the DB could be restored, but unfortunately we don't have backup.
       

      Is it still possible to connect to the DB somehow?

      Also could increasing the memory interfere with the Derby DB and corrupt it? 

      Regards,
      Yuliana

      Attachments

        Activity

          People

            Unassigned Unassigned
            ygan Yuliana Ganchevska
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: