db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Knut Anders Hatlen (JIRA)" <j...@apache.org>
Subject [jira] Closed: (DERBY-4083) BTreeScan.delete() throws AM_RECORD_NOT_FOUND if record is found
Date Mon, 07 Jun 2010 08:10:06 GMT

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

Knut Anders Hatlen closed DERBY-4083.
-------------------------------------

    Issue & fix info: [Repro attached]  (was: [Patch Available, Repro attached])
       Fix Version/s: 10.7.0.0
          Resolution: Fixed

Committed revision 952131.

I don't think this code path can be reached without using the store API directly, so I'm not
planning to back-port the fix for now. Closing the issue.

> BTreeScan.delete() throws AM_RECORD_NOT_FOUND if record is found
> ----------------------------------------------------------------
>
>                 Key: DERBY-4083
>                 URL: https://issues.apache.org/jira/browse/DERBY-4083
>             Project: Derby
>          Issue Type: Bug
>          Components: Store
>    Affects Versions: 10.4.2.0
>            Reporter: Knut Anders Hatlen
>            Assignee: Knut Anders Hatlen
>            Priority: Minor
>             Fix For: 10.7.0.0
>
>         Attachments: derby-4083-1a.diff, test.diff
>
>
> The code below is from BTreeScan.delete(). If the call to reposition() manages to position
on the row, an exception is raised indicating that the row could not be found. If the row
is not found, no exception is raised, but code later in the method will probably throw a NullPointerException
because scan_position.current_leaf is set to null by reposition(). I believe that "if (reposition(...))"
should be changed to "if (!reposition(...))". According to the test coverage reports, this
code is not exercised by any of the existing tests.
>                 if (latch_released)
>                 {
>                     // lost latch on page in order to wait for row lock.
>                     // Because we have scan lock on page, we need only
>                     // call reposition() which will use the saved record
>                     // handle to reposition to the same spot on the page.
>                     // We don't have to search the
>                     // tree again, as we have the a scan lock on the page
>                     // which means the current_rh is valid to reposition on.
>                     if (reposition(scan_position, false))
>                     {
>                         throw StandardException.newException(
>                                 SQLState.AM_RECORD_NOT_FOUND,
>                                 new Long(err_containerid),
>                                 new Long(scan_position.current_rh.getId()));
>                     }
>                 }
>             }

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


Mime
View raw message