Class AbstractRemoteSegmentArchiveReader
- java.lang.Object
-
- org.apache.jackrabbit.oak.segment.remote.AbstractRemoteSegmentArchiveReader
-
- All Implemented Interfaces:
Closeable,AutoCloseable,SegmentArchiveReader
- Direct Known Subclasses:
AwsSegmentArchiveReader,AzureSegmentArchiveReader,AzureSegmentArchiveReaderV8
public abstract class AbstractRemoteSegmentArchiveReader extends Object implements SegmentArchiveReader
-
-
Constructor Summary
Constructors Constructor Description AbstractRemoteSegmentArchiveReader(IOMonitor ioMonitor)
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected abstract FilearchivePathAsFile()Returns the decoded file component of this archive.voidclose()Close the archive.protected abstract longcomputeArchiveIndexAndLength()Populates the archive index, summing up each entry's length.booleancontainsSegment(long msb, long lsb)Check if the segment exists.protected abstract BufferdoReadDataFile(String extension)Reads a data file inside the archive.protected abstract voiddoReadSegmentToBuffer(String segmentFileName, Buffer buffer)Reads the segment from the remote storage.@Nullable BuffergetBinaryReferences()Load binary references.intgetEntrySize(int size)Transforms the segment size in bytes into the effective size on disk for the given entry (eg.@NotNull SegmentGraphgetGraph()Load the segment graph.booleanisRemote()This method returnstrueif the storage is accessed via a network protocol, not tight to the traditional storage technology, for example, HTTP.List<SegmentArchiveEntry>listSegments()List all the segments, in the order as they have been written to the archive.BufferreadSegment(long msb, long lsb)Read the segment.-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.apache.jackrabbit.oak.segment.spi.persistence.SegmentArchiveReader
getName, length
-
-
-
-
Field Detail
-
ioMonitor
protected final IOMonitor ioMonitor
-
index
protected final Map<UUID,RemoteSegmentArchiveEntry> index
-
-
Constructor Detail
-
AbstractRemoteSegmentArchiveReader
public AbstractRemoteSegmentArchiveReader(IOMonitor ioMonitor) throws IOException
- Throws:
IOException
-
-
Method Detail
-
readSegment
public Buffer readSegment(long msb, long lsb) throws IOException
Description copied from interface:SegmentArchiveReaderRead the segment.- Specified by:
readSegmentin interfaceSegmentArchiveReader- Parameters:
msb- the most significant bits of the identifier of the segmentlsb- the least significant bits of the identifier of the segment- Returns:
- byte buffer containing the segment data or null if the segment doesn't exist
- Throws:
IOException
-
containsSegment
public boolean containsSegment(long msb, long lsb)Description copied from interface:SegmentArchiveReaderCheck if the segment exists.- Specified by:
containsSegmentin interfaceSegmentArchiveReader- Parameters:
msb- the most significant bits of the identifier of the segmentlsb- the least significant bits of the identifier of the segment- Returns:
trueif the segment exists
-
listSegments
public List<SegmentArchiveEntry> listSegments()
Description copied from interface:SegmentArchiveReaderList all the segments, in the order as they have been written to the archive.- Specified by:
listSegmentsin interfaceSegmentArchiveReader- Returns:
- segment list, ordered by their position in the archive
-
getGraph
@NotNull public @NotNull SegmentGraph getGraph() throws IOException
Description copied from interface:SegmentArchiveReaderLoad the segment graph.- Specified by:
getGraphin interfaceSegmentArchiveReader- Returns:
- segment graph instance
- Throws:
IOException
-
getBinaryReferences
@Nullable public @Nullable Buffer getBinaryReferences() throws IOException
Description copied from interface:SegmentArchiveReaderLoad binary references.- Specified by:
getBinaryReferencesin interfaceSegmentArchiveReader- Returns:
- byte buffer representing the binary references structure.
- Throws:
IOException
-
close
public void close()
Description copied from interface:SegmentArchiveReaderClose the archive.- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceCloseable- Specified by:
closein interfaceSegmentArchiveReader
-
getEntrySize
public int getEntrySize(int size)
Description copied from interface:SegmentArchiveReaderTransforms the segment size in bytes into the effective size on disk for the given entry (eg. by adding the number of padding bytes, header, etc.)- Specified by:
getEntrySizein interfaceSegmentArchiveReader- Parameters:
size- the segment size in bytes- Returns:
- the number of bytes effectively used on the storage to save the segment
-
computeArchiveIndexAndLength
protected abstract long computeArchiveIndexAndLength() throws IOExceptionPopulates the archive index, summing up each entry's length.- Returns:
- length, the total length of the archive
- Throws:
IOException
-
doReadSegmentToBuffer
protected abstract void doReadSegmentToBuffer(String segmentFileName, Buffer buffer) throws IOException
Reads the segment from the remote storage.- Parameters:
segmentFileName- , the name of the segment (msb + lsb) prefixed by its position in the archivebuffer- , the buffer to which to read- Throws:
IOException
-
doReadDataFile
protected abstract Buffer doReadDataFile(String extension) throws IOException
Reads a data file inside the archive. This entry is not a segment. Its full name is given by archive name + extension.- Parameters:
extension- , extension of the file- Returns:
- the buffer containing the data file bytes
- Throws:
IOException
-
archivePathAsFile
protected abstract File archivePathAsFile()
Returns the decoded file component of this archive.- Returns:
- the decoded file component of this archive.
-
isRemote
public boolean isRemote()
Description copied from interface:SegmentArchiveReaderThis method returnstrueif the storage is accessed via a network protocol, not tight to the traditional storage technology, for example, HTTP. Based on that info, for instance, calling classes can decide to update archive metadata (graph, binary references, index) more frequently, and not only when the archive is being closed. With that multiple Oak processes can access the storage simultaneously, with one process in read-write mode and one or more processes in read-only mode.- Specified by:
isRemotein interfaceSegmentArchiveReader- Returns:
-
-