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] Updated: (DERBY-3116) totalSpace not properly initialized in AllocPage
Date Fri, 04 Apr 2008 07:39:24 GMT

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

Knut Anders Hatlen updated DERBY-3116:

    Attachment: d3116-2.diff

Uploading a new patch which resolves a conflict with a recent commit. The new patch also contains
an assert which exposes the bug in the lack of a test for it.

 - Without the fixes, the assert will cause database creation to fail.
 - With the fix in AllocPage.createPage(), unit/T_RawStoreFactory.unit will fail when an AllocPage
is evicted from the page cache to make room for an AllocPage with a different borrowedSpace
 - With the fix in CachedPage.setPageArray(), unit/T_RawStoreFactory.unit passes.

I'm re-running derbyall and suites.All now. Since there were no more comments on the previous
patch, I intend to commit the updated patch to trunk and 10.4 if all the tests pass.

> totalSpace not properly initialized in AllocPage
> ------------------------------------------------
>                 Key: DERBY-3116
>                 URL: https://issues.apache.org/jira/browse/DERBY-3116
>             Project: Derby
>          Issue Type: Bug
>          Components: Store
>    Affects Versions:
>            Reporter: Knut Anders Hatlen
>            Assignee: Knut Anders Hatlen
>            Priority: Minor
>         Attachments: d3116-1.diff, d3116-2.diff
> There are some problems with the initialization of totalSpace in AllocPage. It is initialized
in StoredPage.initSpace() which is again called from StoredPage.usePageBuffer(), and it is
set to the value returned from AllocPage.getMaxFreeSpace(). The problems are:
>   1) The calculation in getMaxFreeSpace() uses borrowedSpace, but when createIdentity()
is called on an AllocPage, borrowedSpace has not been initialized when getMaxFreeSpace() is
called and the calculated size is wrong.
>   2) When a page object is reused, usePageBuffer() is only called if a new byte array
must be allocated (because the new page has a different size than the old page). This means
that the totalSize field gets the same value as in the old page if their sizes are equal,
which is not necessarily correct.

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

View raw message