Class BufferManagingRebufferer

java.lang.Object
org.apache.cassandra.io.util.BufferManagingRebufferer
All Implemented Interfaces:
AutoCloseable, ReaderFileProxy, Rebufferer, Rebufferer.BufferHolder
Direct Known Subclasses:
BufferManagingRebufferer.Aligned, BufferManagingRebufferer.Unaligned

public abstract class BufferManagingRebufferer extends Object implements Rebufferer, Rebufferer.BufferHolder
Buffer manager used for reading from a ChunkReader when cache is not in use. Instances of this class are reader-specific and thus do not need to be thread-safe since the reader itself isn't. The instances reuse themselves as the BufferHolder to avoid having to return a new object for each rebuffer call.
  • Field Details

    • source

      protected final ChunkReader source
    • buffer

      protected final ByteBuffer buffer
    • offset

      protected long offset
  • Constructor Details

    • BufferManagingRebufferer

      protected BufferManagingRebufferer(ChunkReader wrapped)
  • Method Details

    • closeReader

      public void closeReader()
      Description copied from interface: Rebufferer
      Called when a reader is closed. Should clean up reader-specific data.
      Specified by:
      closeReader in interface Rebufferer
    • close

      public void close()
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface ReaderFileProxy
    • channel

      public ChannelProxy channel()
      Specified by:
      channel in interface ReaderFileProxy
    • fileLength

      public long fileLength()
      Specified by:
      fileLength in interface ReaderFileProxy
    • rebuffer

      public Rebufferer.BufferHolder rebuffer(long position)
      Description copied from interface: Rebufferer
      Rebuffer (move on or seek to) a given position, and return a buffer that can be used there. The only guarantee about the size of the returned data is that unless rebuffering at the end of the file, the buffer will not be empty and will contain the requested position, i.e. offset <= position < offset + bh.buffer().limit(), but the buffer will not be positioned there.
      Specified by:
      rebuffer in interface Rebufferer
    • getCrcCheckChance

      public double getCrcCheckChance()
      Description copied from interface: ReaderFileProxy
      Needed for tests. Returns the table's CRC check chance, which is only set for compressed tables.
      Specified by:
      getCrcCheckChance in interface ReaderFileProxy
    • toString

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

      public ByteBuffer buffer()
      Description copied from interface: Rebufferer.BufferHolder
      Returns a useable buffer (i.e. one whose position and limit can be freely modified). Its limit will be set to the size of the available data in the buffer. The buffer must be treated as read-only.
      Specified by:
      buffer in interface Rebufferer.BufferHolder
    • offset

      public long offset()
      Description copied from interface: Rebufferer.BufferHolder
      Position in the file of the start of the buffer.
      Specified by:
      offset in interface Rebufferer.BufferHolder
    • release

      public void release()
      Description copied from interface: Rebufferer.BufferHolder
      To be called when this buffer is no longer in use. Must be called for all BufferHolders, or ChunkCache will not be able to free blocks.
      Specified by:
      release in interface Rebufferer.BufferHolder