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 Mon, 08 Oct 2007 14:26:50 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-1.diff

I haven't run any tests on it yet, but this patch seems to make totalSpace have the correct
value for all pages created in unit/T_RawStoreFactory.unit (verified by printing and comparing
totalSpace to getMaxFreeSpace()). Will start a full run of regression tests and report back.
I'll also see if I can add some asserts (since I know of no other way to expose the bug).

What this patch does, is:

  - in AllocPage.createPage(), set borrowedSpace before super.createPage() is called so that
getMaxFreeSpace() returns the correct value when totalSpace is initialized

  - in CachedPage.setPageArray(), call usePageBuffer() also when the old buffer is reused.
This ensures that totalSpace is recalculated when a page object is reused.

> 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
>            Priority: Minor
>         Attachments: d3116-1.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