On Wed, Feb 15, 2012 at 4:26 PM, Heikki Linnakangas < heikki.linnakan...@enterprisedb.com> wrote:
> Actually, I think it made sense to simply do nothing if the buffer doesn't > exist. The algorithm doesn't require that all the buffers must exist at all > times. It is quite accidental that whenever we call > gistRelocateBuildBuffersOnSpli**t(), the page must already have its > buffer created (and as we found out, the assumption doesn't hold after a > root split, anyway). Also, we talked earlier that it would be good to > destroy buffers that become completely empty, to save memory. If we do > that, we'd have to remove that check anyway. > > So, I think we should go with your original fix and simply do nothing in > gistRelocateBuildBuffersOnSpli**t() if the page doesn't have a buffer. > Moreover, if the page has a buffer but it's empty, > gistRelocateBuildBuffersOnSpli**t() doesn't need to create buffers for > the new sibling pages. In the final emptying phase, that's a waste of time, > the buffers we create will never be used, and even before that I think it's > better to create the buffers lazily. I agree. ------ With best regards, Alexander Korotkov.