[ https://issues.apache.org/jira/browse/DERBY-2017?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Mayuresh Nirhali updated DERBY-2017: ------------------------------------ Attachment: derby2017_try1.diff This is a HIGH VALUE FIX CANDIDATE. I did some more investigation to understand the exact difference in client behavior compared to the embedded. In embedded mode, the stream is checked for its data by ReadertoUTF8Stream to see if the length specified is matching with the number of characters in the stream. An exception is raised if the length is not matched, hence we see the exception in the repro. Client does not check for stream data before hand and reads the stream data only when that is needed to pass onto to the server. So, by the time the lenght matching errors are caught, the DSS header and the full/partial data is sent to the server. I tried a different approach (attached patch) to fix this bug. The stream is read (like in embedded mode) to validate the length much before the DSS header is sent to the server. The patch is not ready for commit, but it solves the problem. I feel, validation of stream should be done even before the place in attached patch, something like in LocatorStream which is under development. Like in embedded, a new method 'checkSufficientData' should be implemented in a class that is equivalent to ReaderToUTF8Stream in embedded. I would like to see comments on this approach from experts. > Client driver can insert and commit partial data when a LOB stream throws > IOException or does not match the specified length > ---------------------------------------------------------------------------------------------------------------------------- > > Key: DERBY-2017 > URL: https://issues.apache.org/jira/browse/DERBY-2017 > Project: Derby > Issue Type: Bug > Components: JDBC, Network Client > Affects Versions: 10.2.1.6 > Reporter: Knut Anders Hatlen > Attachments: derby2017_try1.diff, Derby_2017_v1.diff, > Derby_2017_v1.stat, StreamErrRepro.java > > > When a LOB stream throws an exception or does not match the specified length, > the client driver does not raise an exception until it has finished executing > the statement. Therefore, the statement will be executed (and possibly > committed) on the server even though the client reports that the statement > failed. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.