[ http://issues.apache.org/jira/browse/DERBY-210?page=all ]

Deepa Remesh updated DERBY-210:
-------------------------------

     Other Info: [Patch available]
    Description: 
Network server will not garbage collect prepared statements that are not 
explicitly closed by the user.  So  a loop like this will leak.

...
PreparedStatement ps;

 for (int i = 0 ; i  < numPs; i++)
        {

         ps = conn.prepareStatement(selTabSql);
         rs =ps.executeQuery();

         while (rs.next())
        {
            rs.getString(1);
        }
        rs.close();
        // I'm a sloppy java programmer
        //ps.close();

        }
                        
To reproduce run the attached program 
java derbyStress

Both client and server will grow until the connection is closed.

 
It is likely that the fix for this will have to be in the client.  The client 
does not send protocol to close the prepared statement, but rather reuses the 
PKGNAMCSN on the PRPSQLSTT request once the prepared statement has been closed. 
This is how the server knows to close the old statement and create a new one.

  was:
Network server will not garbage collect prepared statements that are not 
explicitly closed by the user.  So  a loop like this will leak.

...
PreparedStatement ps;

 for (int i = 0 ; i  < numPs; i++)
        {

         ps = conn.prepareStatement(selTabSql);
         rs =ps.executeQuery();

         while (rs.next())
        {
            rs.getString(1);
        }
        rs.close();
        // I'm a sloppy java programmer
        //ps.close();

        }
                        
To reproduce run the attached program 
java derbyStress

Both client and server will grow until the connection is closed.

 
It is likely that the fix for this will have to be in the client.  The client 
does not send protocol to close the prepared statement, but rather reuses the 
PKGNAMCSN on the PRPSQLSTT request once the prepared statement has been closed. 
This is how the server knows to close the old statement and create a new one.

    Environment: 

'derby-210-patch4-v2.diff' is available for review.  Please take a look at this 
patch.

Status of attached patches:

* Patches already committed: derby-210-patch1.diff, derby-210-patch2.diff

* Patches which should not be committed: derby-210-v2-draft.diff, 
derby-210-patch3.diff (problem solved in derby-614)

* Patch available for review: derby-210-patch4-v2.diff

> Network Server will leak prepared statements if not explicitly closed by the 
> user until the connection is closed
> ----------------------------------------------------------------------------------------------------------------
>
>          Key: DERBY-210
>          URL: http://issues.apache.org/jira/browse/DERBY-210
>      Project: Derby
>         Type: Bug
>   Components: Network Client
>     Reporter: Kathey Marsden
>     Assignee: Deepa Remesh
>  Attachments: DOTS_ATCJ2_Derby-noPatch.png, DOTS_ATCJ2_Derby-withPatch.png, 
> derby-210-patch1.diff, derby-210-patch2.diff, derby-210-patch2.status, 
> derby-210-patch3.diff, derby-210-patch4-v2.diff, derby-210-patch4-v2.status, 
> derby-210-v2-draft.diff, derby-210-v2-draft.status, derbyStress.java
>
> Network server will not garbage collect prepared statements that are not 
> explicitly closed by the user.  So  a loop like this will leak.
> ...
> PreparedStatement ps;
>  for (int i = 0 ; i  < numPs; i++)
>       {
>        ps = conn.prepareStatement(selTabSql);
>        rs =ps.executeQuery();
>        while (rs.next())
>       {
>           rs.getString(1);
>       }
>       rs.close();
>       // I'm a sloppy java programmer
>       //ps.close();
>       }
>                       
> To reproduce run the attached program 
> java derbyStress
> Both client and server will grow until the connection is closed.
>  
> It is likely that the fix for this will have to be in the client.  The client 
> does not send protocol to close the prepared statement, but rather reuses the 
> PKGNAMCSN on the PRPSQLSTT request once the prepared statement has been 
> closed. This is how the server knows to close the old statement and create a 
> new one.

-- 
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

Reply via email to