Class AllocExtent

  • All Implemented Interfaces:
    java.io.Externalizable, java.io.Serializable

    public class AllocExtent
    extends java.lang.Object
    implements java.io.Externalizable
    An allocation extent row manages the page status of page in the extent. AllocExtent is externalizable and is written to the AllocPage directly, without being converted to a row first.

    See Also:
    AllocPage, Serialized Form
    • Constructor Detail

      • AllocExtent

        protected AllocExtent​(long offset,
                              long start,
                              int length,
                              int pagesize,
                              int maxlength)
      • AllocExtent

        protected AllocExtent​(AllocExtent original)
      • AllocExtent

        public AllocExtent()
    • Method Detail

      • MAX_RANGE

        protected static int MAX_RANGE​(int availspace)
        Statically calculates how many pages this extent can manage given the availspace number of bytes to store this extent in if read/writeExternal changes, this must change too
      • writeExternal

        public void writeExternal​(java.io.ObjectOutput out)
                           throws java.io.IOException
        Specified by:
        writeExternal in interface java.io.Externalizable
        Throws:
        java.io.IOException
      • readExternal

        public void readExternal​(java.io.ObjectInput in)
                          throws java.io.IOException,
                                 java.lang.ClassNotFoundException
        Specified by:
        readExternal in interface java.io.Externalizable
        Throws:
        java.io.IOException
        java.lang.ClassNotFoundException
      • allocPage

        protected void allocPage​(long pagenum)
                          throws StandardException
        Allocate this page - this is called underneath the log record
        Throws:
        StandardException - Standard Derby error policy
      • deallocPage

        protected void deallocPage​(long pagenum)
                            throws StandardException
        Deallocate logical page pagenum - this is called underneath the log record. pagenum must be a page managed by this extent and it must be valid
        Throws:
        StandardException - Standard Derby error policy
      • compress

        protected int compress​(BaseContainerHandle owner,
                               RawTransaction ntt,
                               AllocPage alloc_page)
                        throws StandardException
        Compress free pages at end of this extent.

        Search backward from end of extent and prepare data structures to return pages at end of extent to the OS. Returns the lowest page that can be returned to the OS.

        Returns:
        Return bit of page where all pages that follow can be returned to the OS.
        Throws:
        StandardException
      • compressPages

        protected void compressPages​(int new_highest_page,
                                     int num_pages_truncated)
      • undoCompressPages

        protected void undoCompressPages​(int new_highest_page,
                                         int num_pages_truncated)
        Undo the compress space operation.

        Undo of this operation doesn't really "undo" the operation, it just makes sure the data structures are ok after the undo. We are guaranteed at the point of the transaction doing the Undo of the compress space operation fixes up the bit maps to only point at pages within the new_highest_page range.

        Prior to logging the compress space operation all pages greater than There are only 2 possibilities at this point: 1) the truncate of pages greater than new_highest_page happened before the abort took place. W 2)

      • getExtentEnd

        protected long getExtentEnd()
      • getFreePageNumber

        protected long getFreePageNumber​(long pnum)
        Get a page number that is free
      • getPageOffset

        protected long getPageOffset​(long pagenum,
                                     int pagesize,
                                     boolean deallocOK)
                              throws StandardException
        Get the physical offset of pagenum. If deallocOK is true, then even if pagenum is deallocated, it is OK. If deallocOK is false, then an exception is thrown if pagenum is deallocated. An exception is always thrown if pagenum is a free page
        Throws:
        StandardException - Standard Derby error policy
      • isRetired

        protected boolean isRetired()
        Return the status of this extent
      • mayHaveFreePage

        private boolean mayHaveFreePage()
      • setExtentFreePageStatus

        private void setExtentFreePageStatus​(boolean hasFree)
      • canAddFreePage

        protected boolean canAddFreePage​(long lastAllocatedPage)
      • getPageStatus

        protected int getPageStatus​(long pagenum)
        Return the status of a particular page
      • getFirstPagenum

        protected long getFirstPagenum()
        Get the first logical page number managed by this extent.
      • getLastPagenum

        protected long getLastPagenum()
        Get the last logical page number managed by this extent.
      • getPagenum

        protected long getPagenum​(int bit_pos)
        translate bit position in map to page number.

        Returns:
        The page number of this "bit" in the extent map.
      • getLastPreallocPagenum

        protected long getLastPreallocPagenum()
        get the last preallocated pagenumber managed by this alloc page
      • setLastPreallocPagenum

        protected void setLastPreallocPagenum​(long preAllocPagenum)
        preallocated N pages, passed in the last preallocated page number.
      • getNextValidPageNumber

        protected long getNextValidPageNumber​(long prevPageNumber)
      • getLastValidPageNumber

        protected long getLastValidPageNumber()
      • checkInRange

        private void checkInRange​(long pagenum)
      • updateUnfilledPageInfo

        protected void updateUnfilledPageInfo​(AllocExtent inputExtent)
      • trackUnfilledPage

        protected boolean trackUnfilledPage​(long pagenumber,
                                            boolean unfilled)
      • getUnfilledPageNumber

        protected long getUnfilledPageNumber​(long pagenum)
        Get a page number that is unfilled, pagenum is the last page that was rejected.
      • getAllocatedPageCount

        protected int getAllocatedPageCount()
        Get the number of used page in this extent
      • getUnfilledPageCount

        protected int getUnfilledPageCount()
        Get the number of unfilled pages in this extent
      • getTotalPageCount

        protected int getTotalPageCount()
        Get the total number of pages in this extent
      • toDebugString

        protected java.lang.String toDebugString()