[ 
https://issues.apache.org/jira/browse/DERBY-2017?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Kristian Waagan updated DERBY-2017:
-----------------------------------

    Attachment: derby-2017-3b-fix.diff

Hi Knut Anders,

Here's another version. 3a had a bug in the checkState-method (I removed some 
functionality I thought was unnecessary), which is why Derby2017LayerATest 
failed.
I have also made some additional changes in DRDAConnThread (refactoring). See 
DRDAConnThread.convertAsByteArrayInputStream for the use of the exception 
suppress mechanism in the streaming classes.
Added some more JavaDoc to the methods in Request.

I also made the change you suggested - to implement read() using read(byte[], 
int, int). It does reduce the complexity, and I know that the normal access 
pattern for these stream classes is to read data into a buffer (we're currently 
using a 8 KB buffer). I considered keeping the one-byte array as an instance 
variable, but chose not to.

I just started the regression tests, and will report back later with the 
results.
More tests are coming (using setBinaryStream).

Patch 3b ready for further review.

> 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
>            Assignee: Kristian Waagan
>         Attachments: derby-2017-2a-regression_test.diff, 
> derby-2017-2b-regression-test.diff, derby-2017-3a-fix.diff, 
> derby-2017-3a-fix.stat, derby-2017-3b-fix.diff, 
> derby-2017-stream_status_preview.diff, 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.

Reply via email to