Class FileStore

  • Direct Known Subclasses:
    OffHeapStore

    public class FileStore
    extends java.lang.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 Summary

      Fields 
      Modifier and Type Field Description
      private java.nio.channels.FileChannel encryptedFile
      The encrypted file (if encryption is used).
      private java.nio.channels.FileChannel file
      The file.
      private java.nio.channels.FileLock fileLock
      The file lock.
      private java.lang.String fileName
      The file name.
      protected long fileSize
      The file size (cached).
      protected FreeSpaceBitSet freeSpace
      The free spaces between the chunks.
      protected java.util.concurrent.atomic.AtomicLong readBytes
      The number of read bytes.
      protected java.util.concurrent.atomic.AtomicLong readCount
      The number of read operations.
      private boolean readOnly
      Whether this store is read-only.
      protected java.util.concurrent.atomic.AtomicLong writeBytes
      The number of written bytes.
      protected java.util.concurrent.atomic.AtomicLong writeCount
      The number of write operations.
    • Constructor Summary

      Constructors 
      Constructor Description
      FileStore()  
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      (package private) long allocate​(int length, long reservedLow, long reservedHigh)
      Allocate a number of blocks and mark them as used.
      void clear()
      Mark the file as empty.
      void close()
      Close this store.
      void free​(long pos, int length)
      Mark the space as free.
      (package private) long getAfterLastBlock()  
      int getDefaultRetentionTime()
      Get the default retention time for this store in milliseconds.
      java.nio.channels.FileChannel getEncryptedFile()
      Get the encrypted file instance, if encryption is used.
      java.nio.channels.FileChannel getFile()
      Get the file instance in use.
      (package private) long getFileLengthInUse()  
      java.lang.String getFileName()
      Get the file name.
      int getFillRate()  
      (package private) long getFirstFree()  
      (package private) int getMovePriority​(int block)
      Calculates relative "priority" for chunk to be moved.
      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.
      long getReadBytes()
      Get the number of read bytes since this store was opened.
      long getReadCount()
      Get the number of read operations since this store was opened.
      long getWriteBytes()
      Get the number of written bytes since this store was opened.
      long getWriteCount()
      Get the number of write operations since this store was opened.
      (package private) boolean isFragmented()  
      boolean isReadOnly()  
      void markUsed​(long pos, int length)
      Mark the space as in use.
      void open​(java.lang.String fileName, boolean readOnly, char[] encryptionKey)
      Try to open the file.
      (package private) long predictAllocation​(int blocks, long reservedLow, long reservedHigh)
      Calculate starting position of the prospective allocation.
      java.nio.ByteBuffer readFully​(long pos, int len)
      Read from the file.
      long size()
      Get the file size.
      void sync()
      Flush all changes.
      java.lang.String toString()  
      void truncate​(long size)
      Truncate the file.
      void writeFully​(long pos, java.nio.ByteBuffer src)
      Write to the file.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Field Detail

      • readCount

        protected final java.util.concurrent.atomic.AtomicLong readCount
        The number of read operations.
      • readBytes

        protected final java.util.concurrent.atomic.AtomicLong readBytes
        The number of read bytes.
      • writeCount

        protected final java.util.concurrent.atomic.AtomicLong writeCount
        The number of write operations.
      • writeBytes

        protected final java.util.concurrent.atomic.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 java.lang.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 java.nio.channels.FileChannel file
        The file.
      • encryptedFile

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

        private java.nio.channels.FileLock fileLock
        The file lock.
    • Constructor Detail

      • FileStore

        public FileStore()
    • Method Detail

      • toString

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

        public java.nio.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,
                               java.nio.ByteBuffer src)
        Write to the file.
        Parameters:
        pos - the write position
        src - the source buffer
      • open

        public void open​(java.lang.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 java.nio.channels.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 java.nio.channels.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 java.lang.String getFileName()
        Get the file name.
        Returns:
        the file name