[
https://issues.apache.org/jira/browse/DERBY-3116?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12534795
]
Knut Anders Hatlen commented on DERBY-3116:
-------------------------------------------
Thanks for looking at the patch, Jørgen!
> it seems a little overkill to always reinitiate the byte[] in StoredPage.
Note that setPageBuffer() doesn't reallocate the byte array, it only sets the
reference to the byte array and refreshes some of the instance variables. I
think the cost of these operations is negligible compared to the cost of
evicting the old page and initializing the new one.
> Could you achieve the same thing by moving the initSpace call from
> StoredPage#usePageBuffer to StoredPage#createPage?
That might be possible, but then I think we would also have to move it into
StoredPage.initFromData() as the same problem may occur if you read an alloc
page from disk instead of creating a new one. It also seems like initSpace()
depends on other variables initialized in usePageBuffer() (slotEntrySize in
particular) so we'd probably end up with moving most of the code in
usePageBuffer() into initSpace() anyway.
> Another bug? In StoredPage#initSpace, slotEntrySize is used when setting
> maxFieldSize. However, initSpace is called before slotEntrySize has been
> updated in usePageBuffer.
This is supposed to be fixed in the current trunk (see DERBY-3099). But thanks
for verifiying that it in fact is a bug! :)
> Not related to your patch: There is a problem with the Javadoc in AllocPage
> (unclosed paragraph "<p"). Fixing that would show more javadoc in the html
> files.
Good catch! I fixed the tag and checked it in. Now I see one more line in the
javadoc, but still there's much of it that doesn't show up. Perhaps there's a
problem with the custom javadoc tags (format_id, purpose, etc)?
> 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: 10.4.0.0
> 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.