Class FlashJournalRM.JournalFile

  • All Implemented Interfaces:
    Disposable, AutoCloseable
    Enclosing class:
    FlashJournalRM

    protected class FlashJournalRM.JournalFile
    extends AbstractJournalRM.JournalFile
    A JournalFile is created for each OS file used to store the journal contents. It is created in an initial "append" mode -- which may be interrupted from time to time by a "congested" mode if writes are falling too far behind, it then transitions to a "full" mode, and once enough of its storage has been released it transitions to an "evacuating" mode, which (once evacuated) becomes "garbage" and (upon deletion) is "discarded".
    • Field Detail

      • m_file

        protected final File m_file
        The file. Immutable field.
      • m_channelRead

        protected FileChannel m_channelRead
        A random access FileChannel for read purposes.
      • m_channelWrite

        protected final FileChannel m_channelWrite
        A FileOutputStream FileChannel for append purposes.
      • m_abOv

        protected final byte[] m_abOv
        Random overlay data.
      • m_ofNextFlush

        protected long m_ofNextFlush
        The offset of the next Binary to clean out of the map (ie "flush" out of memory).
    • Constructor Detail

      • JournalFile

        public JournalFile​(int nFile)
        Construct a Journal File.
        Parameters:
        nFile - the file number in the range 0-511 (inclusive)
    • Method Detail

      • enqueue

        public long enqueue​(Binary bin)
        Enqueue a Binary value to be written to this file, returning a ticket, or return 0L if this file is full and the append has to occur to a new file.
        Specified by:
        enqueue in class AbstractJournalRM.JournalFile
        Parameters:
        bin - the value to append to the journal file
        Returns:
        a ticket if the Binary has successfully been enqueued, or 0L if the file is full
      • release

        public void release​(int cbValue)
        Release the specified number of bytes from this journal file.
        Overrides:
        release in class AbstractJournalRM.JournalFile
        Parameters:
        cbValue - the number of bytes that are being released
      • getFile

        public File getFile()
        Obtain the File that this JournalFile object represents.
        Returns:
        a File object representing the OS file that this JournalFile writes and reads to and from
      • getReadChannel

        public FileChannel getReadChannel()
        Obtain the FileChannel used for reading from the JournalFile.
        Returns:
        a random access FileChannel
      • getWriteChannel

        public FileChannel getWriteChannel()
        Obtain the FileChannel used for appending to the JournalFile.
        Returns:
        an appending FileChannel
      • touch

        public void touch()
        This method is called periodically by the collector daemon to indicate that the file is still being used.
        Overrides:
        touch in class AbstractJournalRM.JournalFile
      • notifyWriteOccurred

        public void notifyWriteOccurred​(int cbWritten)
        Called by the WriterDaemon to indicate that more data has been flushed from the write-behind queue to disk.
        Parameters:
        cbWritten - the number of additional bytes written
      • notifyWriteBehindCompleted

        public void notifyWriteBehindCompleted()
        Called by the WriterDaemon to indicate that all the data for the JournalFile has been flushed.
      • dispose

        public void dispose()
        Invoked when all resources owned by the implementer can safely be released.

        Once disposed of the object should no longer be considered to be usable.

        Note the Disposable interface is compatible with try-with-resources which will automatically invoke this method.

        Specified by:
        dispose in interface Disposable
        Specified by:
        dispose in class AbstractJournalRM.JournalFile
      • congestionCheck

        protected void congestionCheck​(int cbDelta)
        Check if a change to the backlog causes a change to the congestion state.
        Parameters:
        cbDelta - number of bytes added to or removed from the backlog
      • allocateBuffer

        public FlashJournalRM.Buffer allocateBuffer()
        Allocate a Buffer to use with this JournalFile.
        Returns:
        a new (or pooled) Buffer