public class FileReftableStack
extends java.lang.Object
implements java.lang.AutoCloseable
Modifier and Type | Class and Description |
---|---|
(package private) static class |
FileReftableStack.CompactionStats |
static class |
FileReftableStack.ReftableNumbersNotIncreasingException
Thrown if the update indices in the stack are not monotonic
|
(package private) static class |
FileReftableStack.Segment
A segment is a consecutive list of reftables of the same approximate
size.
|
private static class |
FileReftableStack.StackEntry |
static interface |
FileReftableStack.Writer
Writer is a callable that writes data to a reftable under construction.
|
Modifier and Type | Field and Description |
---|---|
private java.util.function.Supplier<Config> |
configSupplier |
private long |
lastNextUpdateIndex |
private MergedReftable |
mergedReftable |
private java.lang.Runnable |
onChange |
private static long |
OVERHEAD |
private java.io.File |
reftableDir |
private java.util.List<FileReftableStack.StackEntry> |
stack |
private java.io.File |
stackPath |
private FileReftableStack.CompactionStats |
stats |
Constructor and Description |
---|
FileReftableStack(java.io.File stackPath,
java.io.File reftableDir,
java.lang.Runnable onChange,
java.util.function.Supplier<Config> configSupplier)
Creates a stack corresponding to the list of reftables in the argument
|
Modifier and Type | Method and Description |
---|---|
boolean |
addReftable(FileReftableStack.Writer w)
Tries to add a new reftable to the stack.
|
private void |
autoCompact()
Heuristically tries to compact the stack if the stack has a suitable
shape.
|
private static java.util.Optional<FileReftableStack.Segment> |
autoCompactCandidate(long[] sizes) |
void |
close() |
(package private) void |
compactFully() |
private java.io.File |
compactLocked(int first,
int last)
Write the reftable for the given range into a temp file.
|
(package private) boolean |
compactRange(int first,
int last)
Compacts a range of the stack, following the file locking protocol
documented in the spec.
|
private java.lang.String |
filename(long low,
long high) |
MergedReftable |
getMergedReftable() |
(package private) FileReftableStack.CompactionStats |
getStats() |
(package private) boolean |
isUpToDate() |
(package private) static int |
log(long sz)
Calculate an approximate log2.
|
private long |
nextUpdateIndex() |
private java.util.List<java.lang.String> |
readTableNames() |
private ReftableConfig |
reftableConfig() |
(package private) void |
reload() |
private void |
reloadOnce(java.util.List<java.lang.String> names)
Reloads the stack, potentially reusing opened reftableReaders.
|
(package private) static java.util.List<FileReftableStack.Segment> |
segmentSizes(long[] sizes) |
private long[] |
tableSizes() |
private MergedReftable mergedReftable
private java.util.List<FileReftableStack.StackEntry> stack
private long lastNextUpdateIndex
private final java.io.File stackPath
private final java.io.File reftableDir
private final java.lang.Runnable onChange
private final java.util.function.Supplier<Config> configSupplier
private final FileReftableStack.CompactionStats stats
private static long OVERHEAD
public FileReftableStack(java.io.File stackPath, java.io.File reftableDir, @Nullable java.lang.Runnable onChange, java.util.function.Supplier<Config> configSupplier) throws java.io.IOException
stackPath
- the filename for the stack.reftableDir
- the dir holding the tables.onChange
- hook to call if we notice a new writeconfigSupplier
- Config supplierjava.io.IOException
- on I/O problemsFileReftableStack.CompactionStats getStats()
private void reloadOnce(java.util.List<java.lang.String> names) throws java.io.IOException, java.io.FileNotFoundException
names
- holds the names of the tables to load.java.io.FileNotFoundException
- load must be retried.java.io.IOException
- on other IO errors.void reload() throws java.io.IOException
java.io.IOException
public MergedReftable getMergedReftable()
private java.util.List<java.lang.String> readTableNames() throws java.io.IOException
java.io.IOException
boolean isUpToDate() throws java.io.IOException
java.io.IOException
- on IO problempublic void close()
close
in interface java.lang.AutoCloseable
private long nextUpdateIndex() throws java.io.IOException
java.io.IOException
private java.lang.String filename(long low, long high)
public boolean addReftable(FileReftableStack.Writer w) throws java.io.IOException
w
- writer to write data to a reftable under constructionjava.io.IOException
- on I/O problemsprivate ReftableConfig reftableConfig()
private java.io.File compactLocked(int first, int last) throws java.io.IOException
first
- index of first stack entry to be writtenlast
- index of last stack entry to be writtenjava.io.IOException
- on I/O problemboolean compactRange(int first, int last) throws java.io.IOException
first
- index of first stack entry to be considered in compactionlast
- index of last stack entry to be considered in compactionjava.io.IOException
- on I/O problemstatic int log(long sz)
sz
- static java.util.List<FileReftableStack.Segment> segmentSizes(long[] sizes)
private static java.util.Optional<FileReftableStack.Segment> autoCompactCandidate(long[] sizes)
private void autoCompact() throws java.io.IOException
java.io.IOException
private long[] tableSizes() throws java.io.IOException
java.io.IOException
void compactFully() throws java.io.IOException
java.io.IOException