Class AllocExtent

java.lang.Object
org.apache.derby.impl.store.raw.data.AllocExtent
All Implemented Interfaces:
Externalizable, Serializable

public class AllocExtent extends Object implements 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:
  • Field Details

    • extentOffset

      private long extentOffset
    • extentStart

      private long extentStart
    • extentEnd

      private long extentEnd
    • extentLength

      private int extentLength
    • extentStatus

      int extentStatus
    • preAllocLength

      private int preAllocLength
    • reserved1

      private int reserved1
    • reserved2

      private long reserved2
    • reserved3

      private long reserved3
    • HAS_DEALLOCATED

      private static final int HAS_DEALLOCATED
      See Also:
    • HAS_FREE

      private static final int HAS_FREE
      See Also:
    • ALL_FREE

      private static final int ALL_FREE
      See Also:
    • HAS_UNFILLED_PAGES

      private static final int HAS_UNFILLED_PAGES
      See Also:
    • KEEP_UNFILLED_PAGES

      private static final int KEEP_UNFILLED_PAGES
      See Also:
    • NO_DEALLOC_PAGE_MAP

      private static final int NO_DEALLOC_PAGE_MAP
      See Also:
    • RETIRED

      private static final int RETIRED
      See Also:
    • ALLOCATED_PAGE

      protected static final int ALLOCATED_PAGE
      public Per Page status
      See Also:
    • DEALLOCATED_PAGE

      protected static final int DEALLOCATED_PAGE
      See Also:
    • FREE_PAGE

      protected static final int FREE_PAGE
      See Also:
    • freePages

      FormatableBitSet freePages
    • unFilledPages

      FormatableBitSet unFilledPages
  • Constructor Details

    • AllocExtent

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

      protected AllocExtent(AllocExtent original)
    • AllocExtent

      public AllocExtent()
  • Method Details

    • 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(ObjectOutput out) throws IOException
      Specified by:
      writeExternal in interface Externalizable
      Throws:
      IOException
    • readExternal

      public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException
      Specified by:
      readExternal in interface Externalizable
      Throws:
      IOException
      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 String toDebugString()