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 "Kathey Marsden (JIRA)" <de...@db.apache.org> on 2005/05/01 07:22:04 UTC

[jira] Created: (DERBY-255) Closing a resultset after retrieving a large > 32K value with Network Server does not release locks

Closing a resultset after retrieving a large > 32K value with Network Server does not release locks
---------------------------------------------------------------------------------------------------

         Key: DERBY-255
         URL: http://issues.apache.org/jira/browse/DERBY-255
     Project: Derby
        Type: Bug
    Reporter: Kathey Marsden
 Attachments: LargeDataLocks.java

Closing a resultset after retriving BLOB or CLOB data > 32K, does not release locks properly.   Network Server uses getClob, getBlob to retrieve the data even if the application uses getCharacteStream, etc, so holds locks to the end of the transaction.


To reproduce run attached repro
java LargeDataLocks derbynetclient
 
To see the difference with embedded
java LargeDataLocks derby




-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


[jira] Updated: (DERBY-255) Closing a resultset after retrieving a large > 32K value with Network Server does not release locks

Posted by "Kathey Marsden (JIRA)" <de...@db.apache.org>.
     [ http://issues.apache.org/jira/browse/DERBY-255?page=all ]

Kathey Marsden updated DERBY-255:
---------------------------------

    Component: Network Server

> Closing a resultset after retrieving a large > 32K value with Network Server does not release locks
> ---------------------------------------------------------------------------------------------------
>
>          Key: DERBY-255
>          URL: http://issues.apache.org/jira/browse/DERBY-255
>      Project: Derby
>         Type: Bug

>   Components: Network Server
>     Versions: 10.0.2.2, 10.0.2.0, 10.0.2.1, 10.1.1.0
>     Reporter: Kathey Marsden
>     Assignee: Kathey Marsden
>      Fix For: 10.1.1.0
>  Attachments: DERBY-255_irc_6_2_2005, LargeDataLocks.java, derby255.diff
>
> Closing a resultset after retriving BLOB or CLOB data > 32K, does not release locks properly.   Network Server uses getClob, getBlob to retrieve the data even if the application uses getCharacteStream, etc, so holds locks to the end of the transaction.
> To reproduce run attached repro
> java LargeDataLocks derbynetclient
>  
> To see the difference with embedded
> java LargeDataLocks derby

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


[jira] Closed: (DERBY-255) Closing a resultset after retrieving a large > 32K value with Network Server does not release locks

Posted by "Kathey Marsden (JIRA)" <de...@db.apache.org>.
     [ http://issues.apache.org/jira/browse/DERBY-255?page=all ]
     
Kathey Marsden closed DERBY-255:
--------------------------------


> Closing a resultset after retrieving a large > 32K value with Network Server does not release locks
> ---------------------------------------------------------------------------------------------------
>
>          Key: DERBY-255
>          URL: http://issues.apache.org/jira/browse/DERBY-255
>      Project: Derby
>         Type: Bug
>     Versions: 10.0.2.0, 10.0.2.1, 10.0.2.2, 10.1.0.0
>     Reporter: Kathey Marsden
>     Assignee: Kathey Marsden
>      Fix For: 10.1.0.0
>  Attachments: DERBY-255_irc_6_2_2005, LargeDataLocks.java, derby255.diff
>
> Closing a resultset after retriving BLOB or CLOB data > 32K, does not release locks properly.   Network Server uses getClob, getBlob to retrieve the data even if the application uses getCharacteStream, etc, so holds locks to the end of the transaction.
> To reproduce run attached repro
> java LargeDataLocks derbynetclient
>  
> To see the difference with embedded
> java LargeDataLocks derby

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


[jira] Updated: (DERBY-255) Closing a resultset after retrieving a large > 32K value with Network Server does not release locks

Posted by "Kathey Marsden (JIRA)" <de...@db.apache.org>.
     [ http://issues.apache.org/jira/browse/DERBY-255?page=all ]

Kathey Marsden updated DERBY-255:
---------------------------------

    Attachment: derby255.diff


This fixes DERBY-255 

Closing a resultset after retriving BLOB or CLOB data > 32K, does not release locks properly. 

Network server/client materializes the LOB on the client and cannot differentiate getBlob from getBytes or getBinaryStream. Previously, network server would always call getBlob/getClob for any lob related call. This change changes network server to use getBytes/getString and not  hold locks for any of the calls. 

The implementation adds a new class EXTDTAInputStream to network server to localize the stream handling for large objects.   This should make it easier to adjust in the future as improvements are made in the large object handling. Because we need a length in order to write a stream, EXTDTAInputStream currently call getBytes or getString to get the length and stream out that object. This is apparently required because we cannot reset the input stream after traversing it to get the length.


Future suggestions for changes to network server to handle this in a more complete way would be to:

1) Change DDMWriter.writeScalarStream to  not require a length and optimize EXTDTAObjectInputStream accordingly

2) Add support for lob locators with network server.  The getBlob, getClob calls would use the locators and would hold locks until the end of the transaction.



> Closing a resultset after retrieving a large > 32K value with Network Server does not release locks
> ---------------------------------------------------------------------------------------------------
>
>          Key: DERBY-255
>          URL: http://issues.apache.org/jira/browse/DERBY-255
>      Project: Derby
>         Type: Bug
>     Reporter: Kathey Marsden
>     Assignee: Kathey Marsden
>  Attachments: LargeDataLocks.java, derby255.diff
>
> Closing a resultset after retriving BLOB or CLOB data > 32K, does not release locks properly.   Network Server uses getClob, getBlob to retrieve the data even if the application uses getCharacteStream, etc, so holds locks to the end of the transaction.
> To reproduce run attached repro
> java LargeDataLocks derbynetclient
>  
> To see the difference with embedded
> java LargeDataLocks derby

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


[jira] Commented: (DERBY-255) Closing a resultset after retrieving a large > 32K value with Network Server does not release locks

Posted by "Kathey Marsden (JIRA)" <de...@db.apache.org>.
     [ http://issues.apache.org/jira/browse/DERBY-255?page=comments#action_66527 ]
     
Kathey Marsden commented on DERBY-255:
--------------------------------------

Checked this in with revision 179014.  

Sending        java\drda\org\apache\derby\impl\drda\DDMWriter.java
Sending        java\drda\org\apache\derby\impl\drda\DRDAConnThread.java
Adding         java\drda\org\apache\derby\impl\drda\EXTDTAInputStream.java
Sending        java\testing\org\apache\derbyTesting\functionTests\master\DerbyNet\blobclob4BLOB.out
Sending        java\testing\org\apache\derbyTesting\functionTests\master\DerbyNetClient\blobclob4BLOB.out
Sending        java\testing\org\apache\derbyTesting\functionTests\master\blobclob4BLOB.out
Sending        java\testing\org\apache\derbyTesting\functionTests\tests\jdbcapi\blobclob4BLOB.java
Transmitting file data .......
Committed revision 179014.



> Closing a resultset after retrieving a large > 32K value with Network Server does not release locks
> ---------------------------------------------------------------------------------------------------
>
>          Key: DERBY-255
>          URL: http://issues.apache.org/jira/browse/DERBY-255
>      Project: Derby
>         Type: Bug
>     Reporter: Kathey Marsden
>     Assignee: Kathey Marsden
>  Attachments: LargeDataLocks.java, derby255.diff
>
> Closing a resultset after retriving BLOB or CLOB data > 32K, does not release locks properly.   Network Server uses getClob, getBlob to retrieve the data even if the application uses getCharacteStream, etc, so holds locks to the end of the transaction.
> To reproduce run attached repro
> java LargeDataLocks derbynetclient
>  
> To see the difference with embedded
> java LargeDataLocks derby

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


[jira] Updated: (DERBY-255) Closing a resultset after retrieving a large > 32K value with Network Server does not release locks

Posted by "Kathey Marsden (JIRA)" <de...@db.apache.org>.
     [ http://issues.apache.org/jira/browse/DERBY-255?page=all ]

Kathey Marsden updated DERBY-255:
---------------------------------

    Attachment: DERBY-255_irc_6_2_2005

Sunitha and I chatted on IRC about DERBY-255. First transcript was lost but recapped in the second.

* Since we cannot traverse the stream twice to get length and then data Network Server currently does getBytes for Blob calls and needs sufficient JVM memory allocated.
* Real solution is 
   1) DERBY-326 to enable streaming without the length.
   2) DERBY-327 to use lob locators for performance and differentiation of client calls
      to getBlob vs getBinaryStream for locking.
* As an aside noted that the embedded  Blob.length() call could probably use available(), skip() to improve performance instead of reading the data.


> Closing a resultset after retrieving a large > 32K value with Network Server does not release locks
> ---------------------------------------------------------------------------------------------------
>
>          Key: DERBY-255
>          URL: http://issues.apache.org/jira/browse/DERBY-255
>      Project: Derby
>         Type: Bug
>     Versions: 10.0.2.0, 10.0.2.1, 10.0.2.2, 10.1.0.0
>     Reporter: Kathey Marsden
>     Assignee: Kathey Marsden
>      Fix For: 10.1.0.0
>  Attachments: DERBY-255_irc_6_2_2005, LargeDataLocks.java, derby255.diff
>
> Closing a resultset after retriving BLOB or CLOB data > 32K, does not release locks properly.   Network Server uses getClob, getBlob to retrieve the data even if the application uses getCharacteStream, etc, so holds locks to the end of the transaction.
> To reproduce run attached repro
> java LargeDataLocks derbynetclient
>  
> To see the difference with embedded
> java LargeDataLocks derby

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


[jira] Updated: (DERBY-255) Closing a resultset after retrieving a large > 32K value with Network Server does not release locks

Posted by "Samuel Andrew McIntyre (JIRA)" <de...@db.apache.org>.
     [ http://issues.apache.org/jira/browse/DERBY-255?page=all ]

Samuel Andrew McIntyre updated DERBY-255:
-----------------------------------------

        Version: 10.0.2.1
                 10.0.2.0
                 10.0.2.2
                 10.1.0.0
    Fix Version: 10.1.0.0
                     (was: 10.0.2.1)

> Closing a resultset after retrieving a large > 32K value with Network Server does not release locks
> ---------------------------------------------------------------------------------------------------
>
>          Key: DERBY-255
>          URL: http://issues.apache.org/jira/browse/DERBY-255
>      Project: Derby
>         Type: Bug
>     Versions: 10.0.2.1, 10.0.2.0, 10.0.2.2, 10.1.0.0
>     Reporter: Kathey Marsden
>     Assignee: Kathey Marsden
>      Fix For: 10.1.0.0
>  Attachments: LargeDataLocks.java, derby255.diff
>
> Closing a resultset after retriving BLOB or CLOB data > 32K, does not release locks properly.   Network Server uses getClob, getBlob to retrieve the data even if the application uses getCharacteStream, etc, so holds locks to the end of the transaction.
> To reproduce run attached repro
> java LargeDataLocks derbynetclient
>  
> To see the difference with embedded
> java LargeDataLocks derby

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


[jira] Resolved: (DERBY-255) Closing a resultset after retrieving a large > 32K value with Network Server does not release locks

Posted by "Kathey Marsden (JIRA)" <de...@db.apache.org>.
     [ http://issues.apache.org/jira/browse/DERBY-255?page=all ]
     
Kathey Marsden resolved DERBY-255:
----------------------------------

     Resolution: Fixed
    Fix Version: 10.0.2.1

Checked in svn 179017 + 179198 to resolve this issue.

> Closing a resultset after retrieving a large > 32K value with Network Server does not release locks
> ---------------------------------------------------------------------------------------------------
>
>          Key: DERBY-255
>          URL: http://issues.apache.org/jira/browse/DERBY-255
>      Project: Derby
>         Type: Bug
>     Reporter: Kathey Marsden
>     Assignee: Kathey Marsden
>      Fix For: 10.0.2.1
>  Attachments: LargeDataLocks.java, derby255.diff
>
> Closing a resultset after retriving BLOB or CLOB data > 32K, does not release locks properly.   Network Server uses getClob, getBlob to retrieve the data even if the application uses getCharacteStream, etc, so holds locks to the end of the transaction.
> To reproduce run attached repro
> java LargeDataLocks derbynetclient
>  
> To see the difference with embedded
> java LargeDataLocks derby

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


[jira] Updated: (DERBY-255) Closing a resultset after retrieving a large > 32K value with Network Server does not release locks

Posted by "Kathey Marsden (JIRA)" <de...@db.apache.org>.
     [ http://issues.apache.org/jira/browse/DERBY-255?page=all ]

Kathey Marsden updated DERBY-255:
---------------------------------

    Attachment: LargeDataLocks.java

repro for setCharacterStream holding locks after retrieving  BLOB/CLOB data greater than 32K

> Closing a resultset after retrieving a large > 32K value with Network Server does not release locks
> ---------------------------------------------------------------------------------------------------
>
>          Key: DERBY-255
>          URL: http://issues.apache.org/jira/browse/DERBY-255
>      Project: Derby
>         Type: Bug
>     Reporter: Kathey Marsden
>  Attachments: LargeDataLocks.java
>
> Closing a resultset after retriving BLOB or CLOB data > 32K, does not release locks properly.   Network Server uses getClob, getBlob to retrieve the data even if the application uses getCharacteStream, etc, so holds locks to the end of the transaction.
> To reproduce run attached repro
> java LargeDataLocks derbynetclient
>  
> To see the difference with embedded
> java LargeDataLocks derby

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


[jira] Assigned: (DERBY-255) Closing a resultset after retrieving a large > 32K value with Network Server does not release locks

Posted by "Kathey Marsden (JIRA)" <de...@db.apache.org>.
     [ http://issues.apache.org/jira/browse/DERBY-255?page=all ]

Kathey Marsden reassigned DERBY-255:
------------------------------------

    Assign To: Kathey Marsden

> Closing a resultset after retrieving a large > 32K value with Network Server does not release locks
> ---------------------------------------------------------------------------------------------------
>
>          Key: DERBY-255
>          URL: http://issues.apache.org/jira/browse/DERBY-255
>      Project: Derby
>         Type: Bug
>     Reporter: Kathey Marsden
>     Assignee: Kathey Marsden
>  Attachments: LargeDataLocks.java
>
> Closing a resultset after retriving BLOB or CLOB data > 32K, does not release locks properly.   Network Server uses getClob, getBlob to retrieve the data even if the application uses getCharacteStream, etc, so holds locks to the end of the transaction.
> To reproduce run attached repro
> java LargeDataLocks derbynetclient
>  
> To see the difference with embedded
> java LargeDataLocks derby

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira