org.apache.cassandra.io.util

## Class SegmentedFile

- java.lang.Object
- - org.apache.cassandra.utils.concurrent.SharedCloseableImpl
  - - org.apache.cassandra.io.util.SegmentedFile

All Implemented Interfaces:
  java.lang.AutoCloseable, SharedCloseable

Direct Known Subclasses:
  BufferedSegmentedFile, CompressedSegmentedFile, MmappedSegmentedFile, PoolingSegmentedFile

    public abstract class SegmentedFile
    extends SharedCloseableImpl

Abstracts a read-only file that has been split into segments, each of which can be represented by an independent FileDataInput. Allows for iteration over the FileDataInputs, or random access to the FileDataInput for a given position. The JVM can only map up to 2GB at a time, so each segment is at most that size when using mmap i/o. If a segment would need to be longer than 2GB, that segment will not be mmap'd, and a new RandomAccessFile will be created for each access to that segment.

### Nested Class Summary

Nested Classes
`static class` `SegmentedFile.Builder` Collects potential segmentation points in an underlying file, and builds a SegmentedFile to represent it.
`protected static class` `SegmentedFile.Cleanup`

### Field Summary

Fields
`ChannelProxy` `channel`
`long` `length`
`long` `onDiskLength`

### Constructor Summary

Constructors
`protected` `SegmentedFile(SegmentedFile.Cleanup cleanup, ChannelProxy channel, long length, long onDiskLength)`
`` `SegmentedFile(SegmentedFile copy)`

### Method Summary

All Methods Static Methods Instance Methods Abstract Methods Concrete Methods
`long[]` `copyReadableBounds()` Retrieve the readable bounds if any so they can be cloned into other files such as when downsampling an index summary.
`RandomAccessReader` `createReader()`
`RandomAccessReader` `createThrottledReader(com.google.common.util.concurrent.RateLimiter limiter)`
`void` `dropPageCache(long before)`
`static SegmentedFile.Builder` `getBuilder(Config.DiskAccessMode mode, boolean compressed)`
`static SegmentedFile.Builder` `getCompressedBuilder(CompressedSequentialWriter writer)`
`FileDataInput` `getSegment(long position)`
`java.util.Iterator<FileDataInput>` `iterator(long position)`
`java.lang.String` `path()`
`abstract SegmentedFile` `sharedCopy()`
`java.lang.String` `toString()`

### Methods inherited from class org.apache.cassandra.utils.concurrent.SharedCloseableImpl

`close, close, isCleanedUp`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

### Field Detail

#### channel

    public final ChannelProxy channel

#### length

    public final long length

#### onDiskLength

    public final long onDiskLength

### Constructor Detail

#### SegmentedFile

    protected SegmentedFile(SegmentedFile.Cleanup cleanup,
                            ChannelProxy channel,
                            long length,
                            long onDiskLength)

#### SegmentedFile

    public SegmentedFile(SegmentedFile copy)

### Method Detail

#### path

    public java.lang.String path()

#### sharedCopy

    public abstract SegmentedFile sharedCopy()

Returns:
  a new instance of the object representing the same state and backed by the same underlying resources. Coordinates with the original (and other instances) when the underlying resource should be closed. Throws an exception if the shared resource has already been closed.

#### createReader

    public RandomAccessReader createReader()

#### createThrottledReader

    public RandomAccessReader createThrottledReader(com.google.common.util.concurrent.RateLimiter limiter)

#### getSegment

    public FileDataInput getSegment(long position)

#### dropPageCache

    public void dropPageCache(long before)

#### getBuilder

    public static SegmentedFile.Builder getBuilder(Config.DiskAccessMode mode,
                                                   boolean compressed)

Returns:
  A SegmentedFile.Builder.

#### getCompressedBuilder

    public static SegmentedFile.Builder getCompressedBuilder(CompressedSequentialWriter writer)

#### iterator

    public java.util.Iterator<FileDataInput> iterator(long position)

Returns:
  An Iterator over segments, beginning with the segment containing the given position: each segment must be closed after use.

#### copyReadableBounds

    public long[] copyReadableBounds()

Retrieve the readable bounds if any so they can be cloned into other files such as when downsampling an index summary. Readable bounds are in between record locations in a file that are good positions for mapping the file such that records don't cross mappings.

#### toString

    public java.lang.String toString()

Overrides:
  `toString` in class `java.lang.Object`