|
|||||||||
| Home >> All >> org >> apache >> derby >> impl >> store >> raw >> [ data overview ] | PREV CLASS NEXT CLASS | ||||||||
SUMMARY: JAVADOC | SOURCE | DOWNLOAD | NESTED | FIELD | CONSTR | METHOD |
DETAIL: FIELD | CONSTR | METHOD | ||||||||
org.apache.derby.impl.store.raw.data
Class AllocPage

java.lang.Objectorg.apache.derby.impl.store.raw.data.BasePage
org.apache.derby.impl.store.raw.data.CachedPage
org.apache.derby.impl.store.raw.data.StoredPage
org.apache.derby.impl.store.raw.data.AllocPage
- All Implemented Interfaces:
- org.apache.derby.iapi.services.cache.Cacheable, org.apache.derby.iapi.services.locks.Lockable, java.util.Observer, org.apache.derby.iapi.store.raw.Page, org.apache.derby.iapi.services.io.TypedFormat
- public class AllocPage
- extends StoredPage
An allocation page of the file container.
This class extends a normal Stored page, with the exception that a hunk of space may be 'borrowed' by the file container to store the file header.
The borrowed space is not visible to the alloc page even though it is present in the page data array. It is accessed directly by the FileContainer. Any change made to the borrowed space is not managed or seen by the allocation page.
Page Format
An allocation page extends a stored page, the on disk format is different
from a stored page in that N bytes are 'borrowed' by the container and the
page header of an allocation page will be slightly bigger than a normal
stored page. This N bytes are stored between the page header and the
record space.
The reason why this N bytes can't simply be a row is because it needs to be statically accessible by the container object to avoid a chicken and egg problem of the container object needing to instantiate an alloc page object before it can be objectified, and an alloc page object needing to instantiate a container object before it can be objectified. So this N bytes must be stored outside of the normal record interface yet it must be settable because only the first alloc page has this borrowed space. Other (non-first) alloc page have N == 0.
<-- borrowed ->
+----------+-------------+---+---------+-------------------+-------------+--------+
| FormatId | page header | N | N bytes | alloc extend rows | slot offset |checksum|
+----------+-------------+---+---------+-------------------+-------------+--------+
N is a byte that indicates the size of the borrowed space. Once an alloc
page is initialized, the value of N cannot change.
The maximum space that can be borrowed by the container is 256 bytes.
The allocation page are of the same page size as any other pages in the container. The first allocation page of the FileContainer starts at the first physical byte of the container. Subsequent allocation pages are chained via the nextAllocPageOffset. Each allocation page is expected to manage at least 1000 user pages (for 1K page size) so this chaining may not be a severe performance hit. The logical -> physical mapping of an allocation page is stored in the previous allocation page. The container object will need to maintain this mapping.
The following fields are stored in the page header
| Field Summary | |
protected static int |
ALLOC_PAGE_HEADER_OFFSET
constants |
protected static int |
ALLOC_PAGE_HEADER_SIZE
|
protected static int |
BORROWED_SPACE_LEN
|
protected static int |
BORROWED_SPACE_OFFSET
|
private int |
borrowedSpace
|
private AllocExtent |
extent
|
static int |
FORMAT_NUMBER
|
protected static int |
MAX_BORROWED_SPACE
|
private long |
nextAllocPageNumber
alloc page header |
private long |
nextAllocPageOffset
|
private long |
reserved1
|
private long |
reserved2
|
private long |
reserved3
|
private long |
reserved4
|
static java.lang.String |
TEST_MULTIPLE_ALLOC_PAGE
Extent Testing Use these strings to simulate error conditions for testing purposes. |
| Fields inherited from class org.apache.derby.impl.store.raw.data.StoredPage |
bh, CHECKSUM_SIZE, COLUMN_FIRST, COLUMN_LONG, COLUMN_NONE, freeSpace, LARGE_SLOT_SIZE, logicalDataOut, maxFieldSize, minimumRecordSize, OVERFLOW_POINTER_SIZE, OVERFLOW_PTR_FIELD_SIZE, PAGE_HEADER_OFFSET, PAGE_HEADER_SIZE, PAGE_VERSION_OFFSET, rawDataIn, rawDataOut, RECORD_SPACE_OFFSET, SMALL_SLOT_SIZE, spareSpace, totalSpace |
| Fields inherited from class org.apache.derby.impl.store.raw.data.CachedPage |
alreadyReadPage, containerCache, dataFactory, initialRowCount, isDirty, PAGE_FORMAT_ID_SIZE, pageCache, pageData, preDirty, WRITE_NO_SYNC, WRITE_SYNC |
| Fields inherited from class org.apache.derby.impl.store.raw.data.BasePage |
identity, inClean, INIT_PAGE_OVERFLOW, INIT_PAGE_REUSE, INIT_PAGE_REUSE_RECORDID, INVALID_PAGE, LOG_RECORD_DEFAULT, LOG_RECORD_FOR_PURGE, LOG_RECORD_FOR_UPDATE, owner, preLatch, VALID_PAGE |
| Fields inherited from interface org.apache.derby.iapi.store.raw.Page |
DIAG_BYTES_FREE, DIAG_BYTES_RESERVED, DIAG_MAXROWSIZE, DIAG_MINIMUM_REC_SIZE, DIAG_MINROWSIZE, DIAG_NUMOVERFLOWED, DIAG_PAGE_SIZE, DIAG_PAGEOVERHEAD, DIAG_RESERVED_SPACE, DIAG_ROWSIZE, DIAG_SLOTTABLE_SIZE, FIRST_SLOT_NUMBER, INSERT_CONDITIONAL, INSERT_DEFAULT, INSERT_FOR_SPLIT, INSERT_INITIAL, INSERT_OVERFLOW, INSERT_UNDO_WITH_PURGE, INVALID_SLOT_NUMBER |
| Constructor Summary | |
AllocPage()
|
|
| Method Summary | |
void |
addPage(FileContainer mycontainer,
long newPageNumber,
org.apache.derby.iapi.store.raw.xact.RawTransaction ntt,
BaseContainerHandle userHandle)
Add a page which is managed by this alloc page. |
boolean |
canAddFreePage(long lastAllocatedPage)
|
void |
chainNewAllocPage(BaseContainerHandle allocHandle,
long newAllocPageNum,
long newAllocPageOffset)
|
protected void |
chainNextAllocPage(org.apache.derby.iapi.store.raw.log.LogInstant instant,
long newAllocPageNum,
long newAllocPageOffset)
Chain the next page number and offset underneath a log record |
protected boolean |
compress(org.apache.derby.iapi.store.raw.xact.RawTransaction ntt,
FileContainer myContainer)
compress out empty pages at end of container. |
protected void |
compressSpace(org.apache.derby.iapi.store.raw.log.LogInstant instant,
int new_highest_page,
int num_pages_truncated)
Compress free pages. |
private AllocExtent |
createExtent(long pageNum,
int pageSize,
int pagesAlloced,
int availspace)
|
protected void |
createPage(org.apache.derby.iapi.store.raw.PageKey newIdentity,
int[] args)
Create a new alloc page. |
void |
deallocatePage(BaseContainerHandle userHandle,
long pageNumber)
|
protected AllocExtent |
getAllocExtent()
Return a copy of the allocExtent to be cached by the container. |
long |
getLastPagenum()
|
protected long |
getLastPreallocPagenum()
|
protected int |
getMaxFreeSpace()
The maximum free space on this page possible. |
long |
getMaxPagenum()
|
long |
getNextAllocPageNumber()
|
long |
getNextAllocPageOffset()
|
protected int |
getPageStatus(long pageNumber)
|
int |
getTypeFormatId()
Return my format identifier. |
protected void |
initFromData(FileContainer myContainer,
org.apache.derby.iapi.store.raw.PageKey newIdentity)
Initialize in memory structure using the buffer in pageData |
boolean |
isLast()
|
long |
nextFreePageNumber(long pnum)
Return the next free page number after given page number |
protected void |
preAllocatePage(FileContainer myContainer,
int preAllocThreshold,
int preAllocSize)
Preallocate user page if needed. |
private void |
readAllocPageHeader()
|
static void |
ReadContainerInfo(byte[] containerInfo,
byte[] epage)
Extract the container information from epage. |
private AllocExtent |
readExtent(int offset)
|
protected void |
setPageStatus(org.apache.derby.iapi.store.raw.log.LogInstant instant,
long pageNumber,
int newStatus)
Do the actual page allocation/deallocation/ree underneath a log operation. |
java.lang.String |
toString()
debugging, print this page |
protected void |
undoCompressSpace(org.apache.derby.iapi.store.raw.log.LogInstant instant,
int new_highest_page,
int num_pages_truncated)
Handle undo of compress space operation. |
private void |
updateAllocPageHeader()
|
protected void |
updateUnfilledPageInfo(AllocExtent inputExtent)
|
static void |
WriteContainerInfo(byte[] containerInfo,
byte[] epage,
boolean create)
Write the container information into the container information area. |
private void |
writeExtent(int offset)
|
protected void |
writePage(org.apache.derby.iapi.store.raw.PageKey identity)
Write the page out |
| Methods inherited from class org.apache.derby.impl.store.raw.data.CachedPage |
clean, clearIdentity, createIdentity, isActuallyDirty, isDirty, preDirty, setContainerRowCount, setDirty, setFactory, setIdentity, setPageArray |
| Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
| Methods inherited from interface org.apache.derby.iapi.services.cache.Cacheable |
getIdentity |
| Field Detail |
FORMAT_NUMBER
public static final int FORMAT_NUMBER
- See Also:
- Constant Field Values
nextAllocPageNumber
private long nextAllocPageNumber
- alloc page header
nextAllocPageOffset
private long nextAllocPageOffset
reserved1
private long reserved1
reserved2
private long reserved2
reserved3
private long reserved3
reserved4
private long reserved4
extent
private AllocExtent extent
borrowedSpace
private int borrowedSpace
ALLOC_PAGE_HEADER_OFFSET
protected static final int ALLOC_PAGE_HEADER_OFFSET
- constants
- See Also:
- Constant Field Values
ALLOC_PAGE_HEADER_SIZE
protected static final int ALLOC_PAGE_HEADER_SIZE
- See Also:
- Constant Field Values
BORROWED_SPACE_OFFSET
protected static final int BORROWED_SPACE_OFFSET
- See Also:
- Constant Field Values
BORROWED_SPACE_LEN
protected static final int BORROWED_SPACE_LEN
- See Also:
- Constant Field Values
MAX_BORROWED_SPACE
protected static final int MAX_BORROWED_SPACE
- See Also:
- Constant Field Values
TEST_MULTIPLE_ALLOC_PAGE
public static final java.lang.String TEST_MULTIPLE_ALLOC_PAGE
- Extent Testing
Use these strings to simulate error conditions for
testing purposes.
| Constructor Detail |
AllocPage
public AllocPage()
| Method Detail |
getTypeFormatId
public int getTypeFormatId()
- Return my format identifier.
- Specified by:
getTypeFormatIdin interfaceorg.apache.derby.iapi.services.io.TypedFormat- Overrides:
getTypeFormatIdin classStoredPage
getMaxFreeSpace
protected int getMaxFreeSpace()
- Description copied from class:
StoredPage - The maximum free space on this page possible.
The the maximum amount of space that can be used on the page for the records and the slot offset table. NOTE: subclass may have overwitten it to report less freeSpace
- Overrides:
getMaxFreeSpacein classStoredPage
createPage
protected void createPage(org.apache.derby.iapi.store.raw.PageKey newIdentity, int[] args) throws org.apache.derby.iapi.error.StandardException
- Create a new alloc page.
- Overrides:
createPagein classStoredPage
createExtent
private AllocExtent createExtent(long pageNum, int pageSize, int pagesAlloced, int availspace)
initFromData
protected void initFromData(FileContainer myContainer, org.apache.derby.iapi.store.raw.PageKey newIdentity) throws org.apache.derby.iapi.error.StandardException
- Initialize in memory structure using the buffer in pageData
- Overrides:
initFromDatain classStoredPage
writePage
protected void writePage(org.apache.derby.iapi.store.raw.PageKey identity) throws org.apache.derby.iapi.error.StandardException
- Write the page out
- Overrides:
writePagein classStoredPage
readAllocPageHeader
private void readAllocPageHeader()
throws java.io.IOException
updateAllocPageHeader
private void updateAllocPageHeader()
throws java.io.IOException
readExtent
private AllocExtent readExtent(int offset) throws java.io.IOException, java.lang.ClassNotFoundException
writeExtent
private void writeExtent(int offset)
throws java.io.IOException
WriteContainerInfo
public static void WriteContainerInfo(byte[] containerInfo,
byte[] epage,
boolean create)
throws org.apache.derby.iapi.error.StandardException
- Write the container information into the container information area.
ReadContainerInfo
public static void ReadContainerInfo(byte[] containerInfo,
byte[] epage)
- Extract the container information from epage.
nextFreePageNumber
public long nextFreePageNumber(long pnum)
- Return the next free page number after given page number
addPage
public void addPage(FileContainer mycontainer, long newPageNumber, org.apache.derby.iapi.store.raw.xact.RawTransaction ntt, BaseContainerHandle userHandle) throws org.apache.derby.iapi.error.StandardException
- Add a page which is managed by this alloc page.
Return the page number of the newly added page.
MT - thread aware (latched)
deallocatePage
public void deallocatePage(BaseContainerHandle userHandle, long pageNumber) throws org.apache.derby.iapi.error.StandardException
updateUnfilledPageInfo
protected void updateUnfilledPageInfo(AllocExtent inputExtent)
canAddFreePage
public boolean canAddFreePage(long lastAllocatedPage)
getNextAllocPageOffset
public long getNextAllocPageOffset()
chainNewAllocPage
public void chainNewAllocPage(BaseContainerHandle allocHandle, long newAllocPageNum, long newAllocPageOffset) throws org.apache.derby.iapi.error.StandardException
getNextAllocPageNumber
public long getNextAllocPageNumber()
isLast
public boolean isLast()
getLastPagenum
public long getLastPagenum()
getMaxPagenum
public long getMaxPagenum()
getLastPreallocPagenum
protected long getLastPreallocPagenum()
getPageStatus
protected int getPageStatus(long pageNumber)
setPageStatus
protected void setPageStatus(org.apache.derby.iapi.store.raw.log.LogInstant instant, long pageNumber, int newStatus) throws org.apache.derby.iapi.error.StandardException
- Do the actual page allocation/deallocation/ree underneath a log operation.
Change the page status to new status
chainNextAllocPage
protected void chainNextAllocPage(org.apache.derby.iapi.store.raw.log.LogInstant instant, long newAllocPageNum, long newAllocPageOffset) throws org.apache.derby.iapi.error.StandardException
- Chain the next page number and offset underneath a log record
compressSpace
protected void compressSpace(org.apache.derby.iapi.store.raw.log.LogInstant instant, int new_highest_page, int num_pages_truncated) throws org.apache.derby.iapi.error.StandardException
- Compress free pages.
Compress the free pages at the end of the range maintained by this allocation page. All pages being compressed should be FREE. Only pages in the last allocation page can be compressed.
undoCompressSpace
protected void undoCompressSpace(org.apache.derby.iapi.store.raw.log.LogInstant instant, int new_highest_page, int num_pages_truncated) throws org.apache.derby.iapi.error.StandardException
- Handle undo of compress space operation.
toString
public java.lang.String toString()
- Description copied from class:
StoredPage - debugging, print this page
- Overrides:
toStringin classStoredPage
getAllocExtent
protected AllocExtent getAllocExtent()
- Return a copy of the allocExtent to be cached by the container.
the container must take care to maintain its coherency by
invalidating the cache before any update.
preAllocatePage
protected void preAllocatePage(FileContainer myContainer, int preAllocThreshold, int preAllocSize)
- Preallocate user page if needed.
compress
protected boolean compress(org.apache.derby.iapi.store.raw.xact.RawTransaction ntt, FileContainer myContainer) throws org.apache.derby.iapi.error.StandardException
- compress out empty pages at end of container.
Call the extent to update the data structure make the bit map look like contiguous free pages at the end of the extent no longer exist. Similar to preallocate do the operation unlogged, need to force the change to the extent before actually removing the space from the file.
The sequence is: 1) update extent data structure 2) force extent changes to disk 3) truncate pages If the system crashes between 1 and 2 then no changes are on disk. If the system crashes between 2 and 3 then there are extra pages in the file that extent does not know about, this is the same case as preallocation which the code already handes. It will handle any set of pages from 0 to all of the intended pages being truncated. The next allocate looks at actual size of file as does the right thing.
|
|||||||||
| Home >> All >> org >> apache >> derby >> impl >> store >> raw >> [ data overview ] | PREV CLASS NEXT CLASS | ||||||||
SUMMARY: JAVADOC | SOURCE | DOWNLOAD | NESTED | FIELD | CONSTR | METHOD |
DETAIL: FIELD | CONSTR | METHOD | ||||||||
JAVADOC