db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Knut Anders Hatlen (JIRA)" <j...@apache.org>
Subject [jira] Commented: (DERBY-4122) ClassCastException in SQLClob when running in soft upgrade mode (10.4.2.0 -> 10.5.1.0)
Date Thu, 02 Apr 2009 08:20:12 GMT

    [ https://issues.apache.org/jira/browse/DERBY-4122?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12694908#action_12694908
] 

Knut Anders Hatlen commented on DERBY-4122:
-------------------------------------------

I agree that it sounds better to remove the bytesPeekedAt code since we are able to control
which streams are passed in and can make sure that they implement one of the reset interfaces.

I haven't reviewed the full patch yet, only the ReaderToUTF8Stream part. Here are my comments:

- Since the buffer is not of constant size, I think we should remove the BUFSIZE constant
so that no one incorrectly uses it instead of buffer.length. In fact, I think the available()
method will return the wrong result now because it uses BUFSIZE.

- Do we need to separate between MARK_UNSET and EXCEEDED_MARK_LIMIT? Seems like we can get
away with using MARK_UNSET in both cases and get slightly simpler code, and one less error
message to internationalize (the message for the new IOException should be internationalized,
shouldn't it?)

- I think I would have removed the shrink logic in fillBuffer(). It's probably going to end
up as code that's never called, so I don't think the benefit (potentially release memory earlier
if mark() is called with a really large argument) justifies the extra code.

- Should there be a comment and/or constant for the magic number 6 in fillBuffer()? I see
that there is a comment in the existing code, but it is further down, so I scratched my head
for a while trying to understand it before I got to that comment.

- One potential optimization (not needed in the first increment, but it's so simple that it's
probably worth adding it later): When we allocate a new buffer, we could check if buffer.length
<= (readAheadLimit + 6), and if it is, we can just reuse the old buffer. If oldBuf and
buffer point to the same array, the call to arraycopy() will just shift the bytes to the left
and free space at the right side of the array.

> ClassCastException in SQLClob when running in soft upgrade mode (10.4.2.0 -> 10.5.1.0)
> --------------------------------------------------------------------------------------
>
>                 Key: DERBY-4122
>                 URL: https://issues.apache.org/jira/browse/DERBY-4122
>             Project: Derby
>          Issue Type: Bug
>          Components: Regression Test Failure
>    Affects Versions: 10.5.1.0
>         Environment: Windows Vista 64, Sun JDK 1.6.0_10, Junit 3.8.2
>            Reporter: Suran Jayathilaka
>            Assignee: Kristian Waagan
>            Priority: Blocker
>         Attachments: derby-4122-1a-incorrect_stream_positioning.diff, derby-4122-2a-bc4btest.diff,
derby-4122-3a-classcast_fix.diff, derby-4122-3b-classcast_fix.diff, derby-4122-4a-classcast_fix_mark_reset.diff
>
>
> This bug was found when doing soft upgrade testing from Derby version 10.4.2.0 to 10.5.1.0
(RC1)
> Steps followed are as follows.
> 1. Run setEmbeddedCP.bat from version 10.4.2.0's bin folder
> 2. In a test folder run ij
> 3. create system/wombat database.
>     ij> connect 'jdbc:derby:system/wombat;create=true';
> 4. exit ij
> 5. Copy the 10.5.1.0 derby jars (from lib folder) and the derbyTesting.jar from 10.4.2.0
to the test folder and set classpath with them (including junit and ORO)
> 6. Run suites.All 
>      java -Xmx512M -Xms512M -Dderby.tests.trace=true junit.textui.TestRunner org.apache.derbyTesting.functionTests.suites.All
> Result:
> Tests run: 10479,  Failures: 56,  Errors: 34
> The exception stack trace from a failed test follows.
> -------------------------------------------------------------------------------------------------------------
> 3) testClobInTriggerTable(org.apache.derbyTesting.functionTests.tests.lang.TriggerTest)java.sql.SQLException:
Java exception: 'org.apache.derby.iapi.types.ReaderToUTF8Stream cannot be cast to org.apache.derby.iapi.types.Resetable:
java.lang.ClassCastException'.
> 	at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown Source)
> 	at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Unknown Source)
> 	at org.apache.derby.impl.jdbc.Util.javaException(Unknown Source)
> 	at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(Unknown Source)
> 	at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Unknown Source)
> 	at org.apache.derby.impl.jdbc.EmbedConnection.handleException(Unknown Source)
> 	at org.apache.derby.impl.jdbc.ConnectionChild.handleException(Unknown Source)
> 	at org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(Unknown Source)
> 	at org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeStatement(Unknown Source)
> 	at org.apache.derby.impl.jdbc.EmbedPreparedStatement.execute(Unknown Source)
> 	at org.apache.derbyTesting.functionTests.tests.lang.TriggerTest.testClobInTriggerTable(TriggerTest.java:529)
> 	at org.apache.derbyTesting.functionTests.tests.lang.TriggerTest.testClobInTriggerTable(TriggerTest.java:451)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> 	at org.apache.derbyTesting.junit.BaseTestCase.runBare(BaseTestCase.java:102)
> 	at junit.extensions.TestDecorator.basicRun(TestDecorator.java:24)
> 	at junit.extensions.TestSetup$1.protect(TestSetup.java:21)
> 	at junit.extensions.TestSetup.run(TestSetup.java:25)
> 	at org.apache.derbyTesting.junit.BaseTestSetup.run(BaseTestSetup.java:57)
> Caused by: java.sql.SQLException: Java exception: 'org.apache.derby.iapi.types.ReaderToUTF8Stream
cannot be cast to org.apache.derby.iapi.types.Resetable: java.lang.ClassCastException'.
> 	at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
> 	at org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(Unknown
Source)
> 	... 39 more
> Caused by: java.lang.ClassCastException: org.apache.derby.iapi.types.ReaderToUTF8Stream
cannot be cast to org.apache.derby.iapi.types.Resetable
> 	at org.apache.derby.iapi.types.SQLClob.rewindStream(Unknown Source)
> 	at org.apache.derby.iapi.types.SQLClob.readExternal(Unknown Source)
> 	at org.apache.derby.iapi.types.SQLChar.getString(Unknown Source)
> 	at org.apache.derby.iapi.types.SQLChar.loadStream(Unknown Source)
> 	at org.apache.derby.impl.sql.execute.UpdateResultSet.objectifyStream(Unknown Source)
> 	at org.apache.derby.impl.sql.execute.UpdateResultSet.collectAffectedRows(Unknown Source)
> 	at org.apache.derby.impl.sql.execute.UpdateResultSet.open(Unknown Source)
> 	at org.apache.derby.impl.sql.GenericPreparedStatement.executeStmt(Unknown Source)
> 	at org.apache.derby.impl.sql.GenericPreparedStatement.execute(Unknown Source)
> 	... 32 more
> ------------------------------------------------------------------------------------------------------------------
> When looking at the SVN revisions for SQLClob with Kathey Marsden, we found the following
statement in revision # 738408, related to DERBY-3907, which might be related to this issue.
> "NOTE: Databases created with this revision (or later) containing Clobs, cannot be accessed
by earlier trunk revisions."
> Patch file: derby-3907-7a3-use_new_header_format.diff
>       

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message