Package org.apache.cassandra.io.sstable
Class SSTableRewriter
java.lang.Object
org.apache.cassandra.utils.concurrent.Transactional.AbstractTransactional
org.apache.cassandra.io.sstable.SSTableRewriter
- All Implemented Interfaces:
AutoCloseable,Transactional
Wraps one or more writers as output for rewriting one or more readers: every sstable_preemptive_open_interval
we look in the summary we're collecting for the latest writer for the penultimate key that we know to have been fully
flushed to the index file, and then double check that the key is fully present in the flushed data file.
Then we move the starts of each reader forwards to that point, replace them in the Tracker, and attach a runnable
for on-close (i.e. when all references expire) that drops the page cache prior to that key position
hard-links are created for each partially written sstable so that readers opened against them continue to work past
renaming of the temporary file, which is deleted once all readers against the hard-link have been closed.
If for any reason the writer is rolled over, we immediately rename and fully expose the completed file in the Tracker.
On abort, we restore the original lower bounds to the existing readers and delete any temporary files we had in progress,
but leave any hard-links in place for the readers we opened, and clean-up when the readers finish as we would do
if we had finished successfully.
-
Nested Class Summary
Nested classes/interfaces inherited from class org.apache.cassandra.utils.concurrent.Transactional.AbstractTransactional
Transactional.AbstractTransactional.StateNested classes/interfaces inherited from interface org.apache.cassandra.utils.concurrent.Transactional
Transactional.AbstractTransactional -
Field Summary
Fields -
Constructor Summary
ConstructorsConstructorDescriptionSSTableRewriter(ILifecycleTransaction transaction, long maxAge, long preemptiveOpenInterval, boolean keepOriginals) Deprecated.See CASSANDRA-11148 -
Method Summary
Modifier and TypeMethodDescriptionappend(UnfilteredRowIterator partition) longstatic SSTableRewriterconstruct(ColumnFamilyStore cfs, ILifecycleTransaction transaction, boolean keepOriginals, long maxAge) static SSTableRewriterconstructKeepingOriginals(ILifecycleTransaction transaction, boolean keepOriginals, long maxAge) static SSTableRewriterconstructWithoutEarlyOpening(ILifecycleTransaction transaction, boolean keepOriginals, long maxAge) protected Throwableprotected Throwableprotected voidDo any preparatory work prior to commit.finish()Finishes the new file(s) Creates final files, adds the new files to the Tracker (via replaceReader).finished()voidsetRepairedAt(long repairedAt) voidswitchWriter(SSTableWriter newWriter) voidthrowDuringPrepare(boolean earlyException) tryAppend(UnfilteredRowIterator partition) Methods inherited from class org.apache.cassandra.utils.concurrent.Transactional.AbstractTransactional
abort, abort, close, commit, commit, doPostCleanup, doPreCleanup, prepareToCommit, stateMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.apache.cassandra.utils.concurrent.Transactional
abort, close, commit, prepareToCommit
-
Field Details
-
disableEarlyOpeningForTests
public static boolean disableEarlyOpeningForTests
-
-
Constructor Details
-
SSTableRewriter
@Deprecated(since="3.4") public SSTableRewriter(ILifecycleTransaction transaction, long maxAge, long preemptiveOpenInterval, boolean keepOriginals) Deprecated.See CASSANDRA-11148
-
-
Method Details
-
constructKeepingOriginals
public static SSTableRewriter constructKeepingOriginals(ILifecycleTransaction transaction, boolean keepOriginals, long maxAge) -
constructWithoutEarlyOpening
public static SSTableRewriter constructWithoutEarlyOpening(ILifecycleTransaction transaction, boolean keepOriginals, long maxAge) -
construct
public static SSTableRewriter construct(ColumnFamilyStore cfs, ILifecycleTransaction transaction, boolean keepOriginals, long maxAge) -
currentWriter
-
bytesWritten
public long bytesWritten() -
forEachWriter
-
append
-
tryAppend
-
doAbort
- Specified by:
doAbortin classTransactional.AbstractTransactional
-
doCommit
- Specified by:
doCommitin classTransactional.AbstractTransactional
-
switchWriter
-
setRepairedAt
- Parameters:
repairedAt- the repair time, -1 if we should use the time we supplied when we created the SSTableWriter (and called rewriter.switchWriter(..)), actual time if we want to override the repair time.
-
finish
Finishes the new file(s) Creates final files, adds the new files to the Tracker (via replaceReader). We add them to the tracker to be able to get rid of the tmpfiles It is up to the caller to do the compacted sstables replacement gymnastics (ie, call Tracker#markCompactedSSTablesReplaced(..))- Overrides:
finishin classTransactional.AbstractTransactional
-
finished
-
doPrepare
protected void doPrepare()Description copied from class:Transactional.AbstractTransactionalDo any preparatory work prior to commit. This method should throw any exceptions that can be encountered during the finalization of the behaviour.- Specified by:
doPreparein classTransactional.AbstractTransactional
-
throwDuringPrepare
public void throwDuringPrepare(boolean earlyException)
-