Class FileStore

java.lang.Object
org.h2.mvstore.FileStore
Direct Known Subclasses:
OffHeapStore

public class FileStore extends Object
The default storage mechanism of the MVStore. This implementation persists data to a file. The file store is responsible to persist data and for free space management.
  • Field Details

    • readCount

      protected final AtomicLong readCount
      The number of read operations.
    • readBytes

      protected final AtomicLong readBytes
      The number of read bytes.
    • writeCount

      protected final AtomicLong writeCount
      The number of write operations.
    • writeBytes

      protected final AtomicLong writeBytes
      The number of written bytes.
    • freeSpace

      protected final FreeSpaceBitSet freeSpace
      The free spaces between the chunks. The first block to use is block 2 (the first two blocks are the store header).
    • fileName

      private String fileName
      The file name.
    • readOnly

      private boolean readOnly
      Whether this store is read-only.
    • fileSize

      protected long fileSize
      The file size (cached).
    • file

      private FileChannel file
      The file.
    • encryptedFile

      private FileChannel encryptedFile
      The encrypted file (if encryption is used).
    • fileLock

      private FileLock fileLock
      The file lock.
  • Constructor Details

    • FileStore

      public FileStore()
  • Method Details

    • toString

      public String toString()
      Overrides:
      toString in class Object
    • readFully

      public ByteBuffer readFully(long pos, int len)
      Read from the file.
      Parameters:
      pos - the write position
      len - the number of bytes to read
      Returns:
      the byte buffer
    • writeFully

      public void writeFully(long pos, ByteBuffer src)
      Write to the file.
      Parameters:
      pos - the write position
      src - the source buffer
    • open

      public void open(String fileName, boolean readOnly, char[] encryptionKey)
      Try to open the file.
      Parameters:
      fileName - the file name
      readOnly - whether the file should only be opened in read-only mode, even if the file is writable
      encryptionKey - the encryption key, or null if encryption is not used
    • close

      public void close()
      Close this store.
    • sync

      public void sync()
      Flush all changes.
    • size

      public long size()
      Get the file size.
      Returns:
      the file size
    • truncate

      public void truncate(long size)
      Truncate the file.
      Parameters:
      size - the new file size
    • getFile

      public FileChannel getFile()
      Get the file instance in use.

      The application may read from the file (for example for online backup), but not write to it or truncate it.

      Returns:
      the file
    • getEncryptedFile

      public FileChannel getEncryptedFile()
      Get the encrypted file instance, if encryption is used.

      The application may read from the file (for example for online backup), but not write to it or truncate it.

      Returns:
      the encrypted file, or null if encryption is not used
    • getWriteCount

      public long getWriteCount()
      Get the number of write operations since this store was opened. For file based stores, this is the number of file write operations.
      Returns:
      the number of write operations
    • getWriteBytes

      public long getWriteBytes()
      Get the number of written bytes since this store was opened.
      Returns:
      the number of write operations
    • getReadCount

      public long getReadCount()
      Get the number of read operations since this store was opened. For file based stores, this is the number of file read operations.
      Returns:
      the number of read operations
    • getReadBytes

      public long getReadBytes()
      Get the number of read bytes since this store was opened.
      Returns:
      the number of write operations
    • isReadOnly

      public boolean isReadOnly()
    • getDefaultRetentionTime

      public int getDefaultRetentionTime()
      Get the default retention time for this store in milliseconds.
      Returns:
      the retention time
    • markUsed

      public void markUsed(long pos, int length)
      Mark the space as in use.
      Parameters:
      pos - the position in bytes
      length - the number of bytes
    • allocate

      long allocate(int length, long reservedLow, long reservedHigh)
      Allocate a number of blocks and mark them as used.
      Parameters:
      length - the number of bytes to allocate
      reservedLow - start block index of the reserved area (inclusive)
      reservedHigh - end block index of the reserved area (exclusive), special value -1 means beginning of the infinite free area
      Returns:
      the start position in bytes
    • predictAllocation

      long predictAllocation(int blocks, long reservedLow, long reservedHigh)
      Calculate starting position of the prospective allocation.
      Parameters:
      blocks - the number of blocks to allocate
      reservedLow - start block index of the reserved area (inclusive)
      reservedHigh - end block index of the reserved area (exclusive), special value -1 means beginning of the infinite free area
      Returns:
      the starting block index
    • isFragmented

      boolean isFragmented()
    • free

      public void free(long pos, int length)
      Mark the space as free.
      Parameters:
      pos - the position in bytes
      length - the number of bytes
    • getFillRate

      public int getFillRate()
    • getProjectedFillRate

      public int getProjectedFillRate(int vacatedBlocks)
      Calculates a prospective fill rate, which store would have after rewrite of sparsely populated chunk(s) and evacuation of still live data into a new chunk.
      Parameters:
      vacatedBlocks - number of blocks vacated
      Returns:
      prospective fill rate (0 - 100)
    • getFirstFree

      long getFirstFree()
    • getFileLengthInUse

      long getFileLengthInUse()
    • getMovePriority

      int getMovePriority(int block)
      Calculates relative "priority" for chunk to be moved.
      Parameters:
      block - where chunk starts
      Returns:
      priority, bigger number indicate that chunk need to be moved sooner
    • getAfterLastBlock

      long getAfterLastBlock()
    • clear

      public void clear()
      Mark the file as empty.
    • getFileName

      public String getFileName()
      Get the file name.
      Returns:
      the file name