[
https://issues.apache.org/jira/browse/DERBY-6314?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13748479#comment-13748479
]
Knut Anders Hatlen commented on DERBY-6314:
-------------------------------------------
Although setting a serialVersionUID may fix the problem, I'm not sure it's the
correct way to fix it. I'm currently trying to find the answer to these
questions:
- Is it correct to store these objects with Java serialization instead of using
Derby's Formatable logic?
- TypeDescriptorImpl's serialVersionUID has changed many times before. Why does
upgrade only fail now?
- TypeDescriptorImpl's serialVersionUID did not change between 10.9 and 10.10.
Still, upgrade from 10.9 to trunk does not fail. What changed in 10.10?
- It looks like it's deserialization of the CONSTANTSTATE column in
SYS.SYSSTATEMENTS that fails. That is, the stored prepared statement for a
meta-data query. I recall that we at some point changed the upgrade logic to
prevent it from deserializing that column, because the format of the stored
plan is not guaranteed to be stable. Why is it attempting to read it now?
> Upgrade from 10.10 fails with ClassCastException
> ------------------------------------------------
>
> Key: DERBY-6314
> URL: https://issues.apache.org/jira/browse/DERBY-6314
> Project: Derby
> Issue Type: Bug
> Components: Services
> Affects Versions: 10.11.0.0
> Reporter: Knut Anders Hatlen
>
> I noticed that after running the SignatureChecker tool on a database with
> version 10.10.1.1, I could not boot it with trunk (neither hard nor soft
> upgrade worked).
> To reproduce, create a database and run SignatureChecker with 10.10:
> $ java -jar /code/derby/oldreleases/10.10.1.1/derbyrun.jar SignatureChecker
> 'jdbc:derby:db;create=true'
> Then, try to boot that database with trunk:
> $ java -Dderby.database.allowPreReleaseUpgrade=true -jar
> /code/derby/trunk/jars/sane/derbyrun.jar SignatureChecker 'jdbc:derby:db'
>
> java.lang.reflect.InvocationTargetException
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:606)
> at
> org.apache.derby.tools.SignatureChecker.getJ2SEConnection(SignatureChecker.java:445)
> at
> org.apache.derby.tools.SignatureChecker.execute(SignatureChecker.java:140)
> at
> org.apache.derby.tools.SignatureChecker.main(SignatureChecker.java:121)
> at org.apache.derby.iapi.tools.run.main(run.java:61)
> Caused by: java.sql.SQLException: Failed to start database 'db' with class
> loader sun.misc.Launcher$AppClassLoader@7e820d53, see the next exception for
> details.
> at
> org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java:103)
> at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Util.java:137)
> at org.apache.derby.impl.jdbc.Util.seeNextException(Util.java:310)
> at
> org.apache.derby.impl.jdbc.EmbedConnection.bootDatabase(EmbedConnection.java:2841)
> at
> org.apache.derby.impl.jdbc.EmbedConnection.<init>(EmbedConnection.java:404)
> at
> org.apache.derby.jdbc.InternalDriver.getNewEmbedConnection(InternalDriver.java:628)
> at org.apache.derby.jdbc.InternalDriver.connect(InternalDriver.java:282)
> at org.apache.derby.jdbc.InternalDriver.connect(InternalDriver.java:913)
> at
> org.apache.derby.jdbc.AutoloadedDriver.connect(AutoloadedDriver.java:147)
> at java.sql.DriverManager.getConnection(DriverManager.java:571)
> at java.sql.DriverManager.getConnection(DriverManager.java:233)
> ... 8 more
> Caused by: java.sql.SQLException: Failed to start database 'db' with class
> loader sun.misc.Launcher$AppClassLoader@7e820d53, see the next exception for
> details.
> at
> org.apache.derby.impl.jdbc.SQLExceptionFactory.wrapArgsForTransportAcrossDRDA(SQLExceptionFactory.java:141)
> at
> org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java:73)
> ... 18 more
> Caused by: java.sql.SQLException: Exception during restore of a serializable
> or SQLData object of class
> at
> org.apache.derby.impl.jdbc.SQLExceptionFactory.wrapArgsForTransportAcrossDRDA(SQLExceptionFactory.java:141)
> at
> org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java:73)
> at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Util.java:288)
> at
> org.apache.derby.impl.jdbc.EmbedConnection.bootDatabase(EmbedConnection.java:2835)
> ... 15 more
> Caused by: ERROR XSDA8: Exception during restore of a serializable or SQLData
> object of class
> at
> org.apache.derby.iapi.error.StandardException.newException(StandardException.java:265)
> at
> org.apache.derby.impl.store.raw.data.StoredPage.readRecordFromArray(StoredPage.java:5827)
> at
> org.apache.derby.impl.store.raw.data.StoredPage.restoreRecordFromSlot(StoredPage.java:1514)
> at
> org.apache.derby.impl.store.raw.data.BasePage.fetchFromSlot(BasePage.java:441)
> at
> org.apache.derby.impl.store.raw.data.CachedPage.fetchFromSlot(CachedPage.java:53)
> at
> org.apache.derby.impl.store.access.conglomerate.GenericConglomerateController.fetch(GenericConglomerateController.java:299)
> at
> org.apache.derby.impl.sql.catalog.TabInfoImpl.deleteRows(TabInfoImpl.java:725)
> at
> org.apache.derby.impl.sql.catalog.TabInfoImpl.deleteRow(TabInfoImpl.java:570)
> at
> org.apache.derby.impl.sql.catalog.DataDictionaryImpl.dropSPSDescriptor(DataDictionaryImpl.java:4673)
> at
> org.apache.derby.impl.sql.catalog.DataDictionaryImpl.dropSPSDescriptor(DataDictionaryImpl.java:4647)
> at
> org.apache.derby.impl.sql.catalog.DataDictionaryImpl.dropJDBCMetadataSPSes(DataDictionaryImpl.java:14121)
> at
> org.apache.derby.impl.sql.catalog.DataDictionaryImpl.updateMetadataSPSes(DataDictionaryImpl.java:14135)
> at
> org.apache.derby.impl.sql.catalog.DD_Version.handleMinorRevisionChange(DD_Version.java:539)
> at
> org.apache.derby.impl.sql.catalog.DD_Version.upgradeIfNeeded(DD_Version.java:238)
> at
> org.apache.derby.impl.sql.catalog.DataDictionaryImpl.loadDictionaryTables(DataDictionaryImpl.java:7984)
> at
> org.apache.derby.impl.sql.catalog.DataDictionaryImpl.boot(DataDictionaryImpl.java:818)
> at
> org.apache.derby.impl.services.monitor.BaseMonitor.boot(BaseMonitor.java:1991)
> at
> org.apache.derby.impl.services.monitor.TopService.bootModule(TopService.java:334)
> at
> org.apache.derby.impl.services.monitor.BaseMonitor.startModule(BaseMonitor.java:541)
> at
> org.apache.derby.impl.services.monitor.FileMonitor.startModule(FileMonitor.java:44)
> at
> org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Monitor.java:423)
> at org.apache.derby.impl.db.BasicDatabase.boot(BasicDatabase.java:196)
> at
> org.apache.derby.impl.services.monitor.BaseMonitor.boot(BaseMonitor.java:1991)
> at
> org.apache.derby.impl.services.monitor.TopService.bootModule(TopService.java:334)
> at
> org.apache.derby.impl.services.monitor.BaseMonitor.bootService(BaseMonitor.java:1819)
> at
> org.apache.derby.impl.services.monitor.BaseMonitor.startProviderService(BaseMonitor.java:1685)
> at
> org.apache.derby.impl.services.monitor.BaseMonitor.findProviderAndStartService(BaseMonitor.java:1569)
> at
> org.apache.derby.impl.services.monitor.BaseMonitor.startPersistentService(BaseMonitor.java:988)
> at
> org.apache.derby.iapi.services.monitor.Monitor.startPersistentService(Monitor.java:546)
> at
> org.apache.derby.impl.jdbc.EmbedConnection.bootDatabase(EmbedConnection.java:2802)
> ... 15 more
> Caused by: java.io.StreamCorruptedException: java.lang.ClassCastException:
> java.io.ObjectInputStream cannot be cast to
> org.apache.derby.iapi.services.io.ErrorInfo
> at
> org.apache.derby.iapi.services.io.FormatIdInputStream.readObject(FormatIdInputStream.java:139)
> at
> org.apache.derby.iapi.services.io.ArrayUtil.readArrayItems(ArrayUtil.java:180)
> at
> org.apache.derby.impl.sql.GenericStorablePreparedStatement.readExternal(GenericStorablePreparedStatement.java:232)
> at
> org.apache.derby.iapi.services.io.FormatIdInputStream.readObject(FormatIdInputStream.java:125)
> at org.apache.derby.iapi.types.UserType.readExternal(UserType.java:299)
> at
> org.apache.derby.impl.store.raw.data.StoredPage.readRecordFromArray(StoredPage.java:5684)
> ... 43 more
> Caused by: java.lang.ClassCastException: java.io.ObjectInputStream cannot be
> cast to org.apache.derby.iapi.services.io.ErrorInfo
> at
> org.apache.derby.iapi.services.io.FormatIdInputStream.readObject(FormatIdInputStream.java:97)
> ... 48 more
> Could not get a connection.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira