You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-dev@db.apache.org by "Dag H. Wanvik (JIRA)" <ji...@apache.org> on 2010/01/22 15:03:21 UTC

[jira] Issue Comment Edited: (DERBY-4477) Selecting / projecting a column whose value is represented by a stream more than once fails

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

Dag H. Wanvik edited comment on DERBY-4477 at 1/22/10 2:02 PM:
---------------------------------------------------------------

BinaryToRawStream qua FilterInputStream.close merely closes the passed in InputStream, in our case
this is a FormatIdInputStream, which again wraps a  OverflowInputStream which fails to take any action on close. This explains why no error was seen initially for the DERBY-3646 repro. This is unfortunate and I think we should override the close method somewhere, maybe in BinaryToRawStream to avoid allowing reading after close.


      was (Author: dagw):
    BinaryToRawStream qua FilterInputStream.close mere closes the passed in InputStream, in our case
this is a FormatIdInputStream, which again wraps a  OverflowInputStream which fails to take any action on close. This explains why no error was seen initially for the DERBY-3646 repro. This is unfortunate and I think we should override the close method somewhere, maybe in BinaryToRawStream to avoid allowing reading after close.

  
> Selecting / projecting a column whose value is represented by a stream more than once fails
> -------------------------------------------------------------------------------------------
>
>                 Key: DERBY-4477
>                 URL: https://issues.apache.org/jira/browse/DERBY-4477
>             Project: Derby
>          Issue Type: Bug
>          Components: Store
>    Affects Versions: 10.3.3.0, 10.4.2.0, 10.5.3.0
>            Reporter: Kristian Waagan
>            Assignee: Kristian Waagan
>         Attachments: derby-4477-0a-prototype.diff, derby-4477-partial.diff, derby-4477-partial.stat
>
>
> Selecting / projecting a column whose value is represented as a stream more than once crashes Derby, i.e.:
> ResultSet rs = stmt.executeQuery("SELECT clobValue AS clobOne, clobValue AS clobTwo FROM mytable");
> rs.getString(1);
> rs.getString(2);
> After having looked at the class of bugs having to do with reuse of stream data types, I now have a possible fix. It fixes DERBY-3645, DERBY-3646 and DERBY-2349 (there may be more Jiras).
> The core of the fix is cloning certain DVDs being selected/projected in multiple columns. There are two types of cloning:
>  A) materializing clone
>  B) stream clone
> (A) can be implemented already, (B) requires code to clone a stream without materializing it. Note that the streams I'm talking about are streams originating from the store.
> Testing revealed the following:
>  - the cost of the checks performed to figure out if cloning is required seems acceptable (negligible?)
>  - in some cases (A) has better performance than (B) because the raw data only has to be decoded once
>  - stream clones are preferred when the data value is above a certain size for several reasons:
>     * avoids potential out-of-memory errors (and in case of a server environment, it lowers the memory pressure)
>     * avoids decoding the whole value if the JDBC streaming APIs are used to access only parts of the value
>     * avoids decoding overall in cases where the value isn't accessed by the client / user
>        (this statement conflicts with the performance observation above)
> We don't always know the size of a value, and since the fix code deals with all kinds of data types, it is slightly more costly to try to obtain the size.
> What do people think about the following goal statement?
> Goals:
> ----- Phase 1
>  1) No crashes or wrong results due to stream reuse when executing duplicate column selections (minus goal 4)
>  2) Minimal performance degradation for non-duplicate column selections
>  3) Only a minor performance degradation for duplicate [[LONG] VAR]CHAR [FOR BIT DATA] column selections
> ----- Phase 2
>  4) No out-of-memory exceptions during execution of duplicate column selections of BLOB/CLOB
>  5) Optimize BLOB/CLOB cloning
> I think phase 1 can proceed by reviewing and discussing the prototype patch. Phase 2 requires more discussion and work (see DERBY-3650).
> A note about the bug behavior facts:
> Since this issue is the underlying cause for several other reported issues, I have decided to be liberal when setting the bug behavior facts. Depending on where the duplicate column selection is used, it can cause both crashes, wrong results and data corruption.

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