Issue Details (XML | Word | Printable)

Key: DERBY-3571
Type: Bug Bug
Status: Closed Closed
Resolution: Fixed
Priority: Major Major
Assignee: Kristian Waagan
Reporter: Kristian Waagan
Votes: 0
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
Derby

LOB locators are not released if the LOB columns are not accessed by the client

Created: 26/Mar/08 04:02 PM   Updated: 04/May/09 06:22 PM
Return to search
Component/s: JDBC, Network Client
Affects Version/s: 10.3.2.1, 10.4.1.3, 10.5.1.1
Fix Version/s: 10.3.3.0, 10.4.1.3, 10.5.1.1

Time Tracking:
Not Specified

File Attachments:
  Size
File Licensed for inclusion in ASF works derby-3571-1a-client_track_lob_fix.diff 2008-03-26 04:26 PM Kristian Waagan 16 kB
File Licensed for inclusion in ASF works derby-3571-1a-client_track_lob_fix.stat 2008-03-26 04:26 PM Kristian Waagan 0.5 kB
File Licensed for inclusion in ASF works derby-3571-1b-client_track_lob_fix.diff 2008-03-27 04:16 PM Kristian Waagan 19 kB
File Licensed for inclusion in ASF works derby-3571-1c-client_track_lob_fix.diff 2008-03-28 10:08 AM Kristian Waagan 19 kB
File Licensed for inclusion in ASF works derby-3571-1d-client_track_lob_fix.diff 2008-03-31 11:03 AM Kristian Waagan 22 kB
File Licensed for inclusion in ASF works derby-3571-1e-client_track_lob_fix.diff 2008-03-31 12:42 PM Kristian Waagan 22 kB
File Licensed for inclusion in ASF works derby-3571-2a-simple_release.diff 2008-04-01 08:21 PM Kristian Waagan 34 kB
File Licensed for inclusion in ASF works derby-3571-2a-simple_release.stat 2008-04-01 08:21 PM Kristian Waagan 0.6 kB
Issue Links:
Reference
 

Resolution Date: 07/Apr/08 10:12 AM


 Description  « Hide
If the client creates a result set containing LOB locator columns and iterates through it without actually accessing the LOB columns, the locators are not released.
The amount of locators and their associated LOB objects causes the server to consume large amounts of memory and it eventually gets an OOME.

There are a few workarounds for this bug:
 a) Access and/or properly close the LOBs (i.e. Blob.free).
    This is partly dependent on DERBY-2892.
 b) Invoke Connection.commit (or rollback) periodically, which causes all locators on the connection to be released.

 All   Comments   Work Log   Change History   Subversion Commits      Sort Order: Ascending order - Click to sort in descending order
Repository Revision Date User Message
ASF #643819 Wed Apr 02 09:40:04 UTC 2008 kristwaa DERBY-3571: LOB locators are not released if the LOB columns are not accessed by the client.
Added a release mechanism for LOBs. The client will keep track of locators and release them when the result set position is changed, or the result set closed. Locators are released one by one with individual stored procedure calls. This is rather ineffective and should be optimized (for instance by piggybacking).
Also enabled a new test as part of the derbynet suite.
Patch file: DERBY-3571-2a-simple_release.diff
Files Changed
MODIFY /db/derby/code/trunk/java/client/org/apache/derby/client/net/NetCursor.java
MODIFY /db/derby/code/trunk/java/client/org/apache/derby/client/am/Connection.java
MODIFY /db/derby/code/trunk/java/client/org/apache/derby/client/am/Statement.java
MODIFY /db/derby/code/trunk/java/client/org/apache/derby/client/am/Cursor.java
MODIFY /db/derby/code/trunk/java/client/org/apache/derby/client/net/NetConnection.java
MODIFY /db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/derbynet/_Suite.java
ADD /db/derby/code/trunk/java/client/org/apache/derby/client/am/LOBStateTracker.java
ADD /db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/derbynet/LOBLocatorReleaseTest.java
MODIFY /db/derby/code/trunk/java/client/org/apache/derby/client/am/ResultSet.java

Repository Revision Date User Message
ASF #645438 Mon Apr 07 10:03:01 UTC 2008 kristwaa DERBY-3571: LOB locators are not released if the LOB columns are not accessed by the client.
Merge from trunk revision 643819 (DERBY-3571-2a-simple_release.diff).
The patch added the client side LOB state tracking, used to release LOB locators in a timely manner.
Files Changed
MODIFY /db/derby/code/branches/10.4/java/client/org/apache/derby/client/am/Connection.java
MODIFY /db/derby/code/branches/10.4/java/client/org/apache/derby/client/net/NetCursor.java
MODIFY /db/derby/code/branches/10.4/java/client/org/apache/derby/client/am/Statement.java
MODIFY /db/derby/code/branches/10.4/java/client/org/apache/derby/client/net/NetConnection.java
MODIFY /db/derby/code/branches/10.4/java/client/org/apache/derby/client/am/Cursor.java
MODIFY /db/derby/code/branches/10.4/java/testing/org/apache/derbyTesting/functionTests/tests/derbynet/_Suite.java
ADD /db/derby/code/branches/10.4/java/client/org/apache/derby/client/am/LOBStateTracker.java (from /db/derby/code/trunk/java/client/org/apache/derby/client/am/LOBStateTracker.java)
ADD /db/derby/code/branches/10.4/java/testing/org/apache/derbyTesting/functionTests/tests/derbynet/LOBLocatorReleaseTest.java (from /db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/derbynet/LOBLocatorReleaseTest.java)
MODIFY /db/derby/code/branches/10.4/java/client/org/apache/derby/client/am/ResultSet.java

Repository Revision Date User Message
ASF #651631 Fri Apr 25 15:46:58 UTC 2008 kmarsden DERBY-2892 Closing a resultset after retrieving a large > 32665 bytes value with Network Server does not release locks

DERBY-3571 LOB locators are not released if the LOB columns are not accessed by the client

port from trunk revisions, 642974,643819,646255,647680
patches contributed by Kristian Waagan (Kristian dot Waagan at Sun dot com)
Files Changed
MODIFY /db/derby/code/branches/10.3/java/client/org/apache/derby/client/am/Statement.java
MODIFY /db/derby/code/branches/10.3/java/client/org/apache/derby/client/am/Connection.java
MODIFY /db/derby/code/branches/10.3/java/client/org/apache/derby/client/net/NetCursor.java
MODIFY /db/derby/code/branches/10.3/java/client/org/apache/derby/client/am/Blob.java
MODIFY /db/derby/code/branches/10.3/java/client/org/apache/derby/client/am/Clob.java
MODIFY /db/derby/code/branches/10.3/java/testing/org/apache/derbyTesting/functionTests/tests/derbynet/_Suite.java
MODIFY /db/derby/code/branches/10.3/java/client/org/apache/derby/client/net/NetConnection.java
ADD /db/derby/code/branches/10.3/java/client/org/apache/derby/client/am/LOBStateTracker.java (from /db/derby/code/trunk/java/client/org/apache/derby/client/am/LOBStateTracker.java)
MODIFY /db/derby/code/branches/10.3/java/client/org/apache/derby/client/am/UpdateSensitiveLOBLocatorInputStream.java
MODIFY /db/derby/code/branches/10.3/java/client/org/apache/derby/client/am/Cursor.java
MODIFY /db/derby/code/branches/10.3/java/client/org/apache/derby/client/am/ResultSet.java
ADD /db/derby/code/branches/10.3/java/testing/org/apache/derbyTesting/functionTests/tests/derbynet/LOBLocatorReleaseTest.java (from /db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/derbynet/LOBLocatorReleaseTest.java)
MODIFY /db/derby/code/branches/10.3/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/LargeDataLocksTest.java