Genezzo::SpaceMan::SMFile.pm - File Space Management
Maintain a block header for each file with information on space usage. Each file is composed of *extents*, groups of contiguous blocks. The free extent list is composed of a number of blocknumber/extent length pairs, e.g. the row:
FreeExtents 39:12 19:2
indicates that the current file has free space starting at block 39 of 12 contiguous blocks, plus space of 2 contiguous block starting at block 19.
When an object requests space, SMFile tries to find an exact match in the free list. If it cannot, it carves the requested size from a larger free extent.
return the current active block (insert high water mark) for an object
- firstblock, nextblock
iterate over the set of *used* blocks for an object. Ignores unused blocks in last extent
count of all blocks associated with the object. Includes allocated, *unused* blocks, plus empty blocks (i.e. blocks with no rows).
check if block is associated with an object
return all of an object's blocks to the freelist
write the contents of block zero to disk. Need to handle case of extent lists spread over multiple blocks.
- read_only database support
- support for non-table objects like indexes - done?
- freetable: when last object is freed, need to update _tsfiles as UNUSED
- need to coalesce adjacent free extents
- maintain multiple free lists for performance
- better indexing scheme - maybe a btree
- chain the block header if necessary -- allocate a new block to hold additional free list information, append extent allocation to HEADER row (after 0:1)
- check status everywhere where update rows
- maintain free extents list for each object, so can re-use extents (especially important for updates of large multi-block rows)
Jeffrey I. Cohen, email@example.com
Copyright (c) 2003-2007 Jeffrey I Cohen. All rights reserved.
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Address bug reports and comments to: firstname.lastname@example.org
For more information, please visit the Genezzo homepage at http://www.genezzo.com