Class CommitLog
- java.lang.Object
-
- org.apache.cassandra.db.commitlog.CommitLog
-
- All Implemented Interfaces:
CommitLogMBean
public class CommitLog extends java.lang.Object implements CommitLogMBean
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
CommitLog.Configuration
-
Field Summary
Fields Modifier and Type Field Description CommitLogArchiver
archiver
static CommitLog
instance
CommitLogMetrics
metrics
AbstractCommitLogSegmentManager
segmentManager
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description CommitLogPosition
add(Mutation mutation)
Add a Mutation to the commit log.void
discardCompletedSegments(TableId id, CommitLogPosition lowerBound, CommitLogPosition upperBound)
Modifies the per-CF dirty cursors of any commit log segments for the column family according to the position given.void
forceRecycleAllSegments()
Flushes all dirty CFs, waiting for them to free and recycle any segments they were retainingvoid
forceRecycleAllSegments(java.util.Collection<TableId> droppedTables)
Flushes all dirty CFs, waiting for them to free and recycle any segments they were retainingstatic long
freeDiskSpace()
long
getActiveContentSize()
long
getActiveOnDiskSize()
java.util.Map<java.lang.String,java.lang.Double>
getActiveSegmentCompressionRatios()
java.util.List<java.lang.String>
getActiveSegmentNames()
java.lang.String
getArchiveCommand()
Command to execute to archive a commitlog segment.java.util.List<java.lang.String>
getArchivingSegmentNames()
boolean
getCDCBlockWrites()
CommitLogPosition
getCurrentPosition()
java.lang.String
getRestoreCommand()
Command to execute to make an archived commitlog live againjava.lang.String
getRestoreDirectories()
Directory to scan the recovery files inlong
getRestorePointInTime()
Restore mutations created up to and including this timestamp in GMT Format: yyyy:MM:dd HH:mm:ss (2012:04:31 20:43:12) Recovery will continue through the segment when the first client-supplied timestamp greater than this time is encountered, but only mutations less than or equal to this timestamp will be applied.java.lang.String
getRestorePrecision()
get precision of the timestamp used in the restore (MILLISECONDS, MICROSECONDS, ...) to determine if passed the restore point in time.static boolean
handleCommitError(java.lang.String message, java.lang.Throwable t)
boolean
hasFilesToReplay()
boolean
isCDCOnRepairEnabled()
Returns true if internodes streaming of CDC data should go through write pathboolean
isStarted()
void
recover(java.lang.String path)
Perform recovery on a single commit log.int
recoverFiles(File... clogs)
Perform recovery on a list of commit log files.void
recoverPath(java.lang.String path)
int
recoverSegmentsOnDisk()
Perform recovery on commit logs located in the directory specified by the config file.void
requestExtraSync()
Preempts the CLExecutor, telling to to sync immediatelyvoid
resetConfiguration()
FOR TESTING PURPOSES.int
resetUnsafe(boolean deleteSegments)
FOR TESTING PURPOSESint
restartUnsafe()
FOR TESTING PURPOSESvoid
setCDCBlockWrites(boolean val)
void
setCDCOnRepairEnabled(boolean value)
Set whether enable write path for CDC data during internodes streaming, e.g.void
shutdownBlocking()
Shuts down the threads used by the commit log, blocking until completion.CommitLog
start()
Tries to start the CommitLog if not already started.void
stopUnsafe(boolean deleteSegments)
FOR TESTING PURPOSESvoid
sync(boolean flush)
Forces a disk flush on the commit log files that need it.
-
-
-
Field Detail
-
instance
public static final CommitLog instance
-
segmentManager
public final AbstractCommitLogSegmentManager segmentManager
-
archiver
public final CommitLogArchiver archiver
-
metrics
public final CommitLogMetrics metrics
-
-
Method Detail
-
start
public CommitLog start()
Tries to start the CommitLog if not already started.
-
isStarted
public boolean isStarted()
-
hasFilesToReplay
public boolean hasFilesToReplay()
-
recoverSegmentsOnDisk
public int recoverSegmentsOnDisk() throws java.io.IOException
Perform recovery on commit logs located in the directory specified by the config file.- Returns:
- the number of mutations replayed
- Throws:
java.io.IOException
-
recoverFiles
public int recoverFiles(File... clogs) throws java.io.IOException
Perform recovery on a list of commit log files.- Parameters:
clogs
- the list of commit log files to replay- Returns:
- the number of mutations replayed
- Throws:
java.io.IOException
-
recoverPath
public void recoverPath(java.lang.String path) throws java.io.IOException
- Throws:
java.io.IOException
-
recover
public void recover(java.lang.String path) throws java.io.IOException
Perform recovery on a single commit log. Kept w/sub-optimal name due to coupling w/MBean / JMX- Specified by:
recover
in interfaceCommitLogMBean
- Throws:
java.io.IOException
-
getCurrentPosition
public CommitLogPosition getCurrentPosition()
- Returns:
- a CommitLogPosition which, if
>= one
returned from add(), implies add() was started (but not necessarily finished) prior to this call
-
forceRecycleAllSegments
public void forceRecycleAllSegments(java.util.Collection<TableId> droppedTables)
Flushes all dirty CFs, waiting for them to free and recycle any segments they were retaining
-
forceRecycleAllSegments
public void forceRecycleAllSegments()
Flushes all dirty CFs, waiting for them to free and recycle any segments they were retaining
-
sync
public void sync(boolean flush) throws java.io.IOException
Forces a disk flush on the commit log files that need it. Blocking.- Throws:
java.io.IOException
-
requestExtraSync
public void requestExtraSync()
Preempts the CLExecutor, telling to to sync immediately
-
add
public CommitLogPosition add(Mutation mutation) throws CDCWriteException
Add a Mutation to the commit log. If CDC is enabled, this can fail.- Parameters:
mutation
- the Mutation to add to the log- Throws:
CDCWriteException
-
discardCompletedSegments
public void discardCompletedSegments(TableId id, CommitLogPosition lowerBound, CommitLogPosition upperBound)
Modifies the per-CF dirty cursors of any commit log segments for the column family according to the position given. Discards any commit log segments that are no longer used.- Parameters:
id
- the table that was flushedlowerBound
- the lowest covered replay position of the flushlowerBound
- the highest covered replay position of the flush
-
getArchiveCommand
public java.lang.String getArchiveCommand()
Description copied from interface:CommitLogMBean
Command to execute to archive a commitlog segment. Blank to disabled.- Specified by:
getArchiveCommand
in interfaceCommitLogMBean
-
getRestoreCommand
public java.lang.String getRestoreCommand()
Description copied from interface:CommitLogMBean
Command to execute to make an archived commitlog live again- Specified by:
getRestoreCommand
in interfaceCommitLogMBean
-
getRestoreDirectories
public java.lang.String getRestoreDirectories()
Description copied from interface:CommitLogMBean
Directory to scan the recovery files in- Specified by:
getRestoreDirectories
in interfaceCommitLogMBean
-
getRestorePointInTime
public long getRestorePointInTime()
Description copied from interface:CommitLogMBean
Restore mutations created up to and including this timestamp in GMT Format: yyyy:MM:dd HH:mm:ss (2012:04:31 20:43:12) Recovery will continue through the segment when the first client-supplied timestamp greater than this time is encountered, but only mutations less than or equal to this timestamp will be applied.- Specified by:
getRestorePointInTime
in interfaceCommitLogMBean
-
getRestorePrecision
public java.lang.String getRestorePrecision()
Description copied from interface:CommitLogMBean
get precision of the timestamp used in the restore (MILLISECONDS, MICROSECONDS, ...) to determine if passed the restore point in time.- Specified by:
getRestorePrecision
in interfaceCommitLogMBean
-
getActiveSegmentNames
public java.util.List<java.lang.String> getActiveSegmentNames()
- Specified by:
getActiveSegmentNames
in interfaceCommitLogMBean
- Returns:
- file names (not full paths) of active commit log segments (segments containing unflushed data)
-
getArchivingSegmentNames
public java.util.List<java.lang.String> getArchivingSegmentNames()
- Specified by:
getArchivingSegmentNames
in interfaceCommitLogMBean
- Returns:
- Files which are pending for archival attempt. Does NOT include failed archive attempts.
-
getActiveContentSize
public long getActiveContentSize()
- Specified by:
getActiveContentSize
in interfaceCommitLogMBean
- Returns:
- The size of the mutations in all active commit log segments (uncompressed).
-
getActiveOnDiskSize
public long getActiveOnDiskSize()
- Specified by:
getActiveOnDiskSize
in interfaceCommitLogMBean
- Returns:
- The space taken on disk by the commit log (compressed).
-
getActiveSegmentCompressionRatios
public java.util.Map<java.lang.String,java.lang.Double> getActiveSegmentCompressionRatios()
- Specified by:
getActiveSegmentCompressionRatios
in interfaceCommitLogMBean
- Returns:
- A map between active log segments and the compression ratio achieved for each.
-
getCDCBlockWrites
public boolean getCDCBlockWrites()
- Specified by:
getCDCBlockWrites
in interfaceCommitLogMBean
-
setCDCBlockWrites
public void setCDCBlockWrites(boolean val)
- Specified by:
setCDCBlockWrites
in interfaceCommitLogMBean
-
isCDCOnRepairEnabled
public boolean isCDCOnRepairEnabled()
Description copied from interface:CommitLogMBean
Returns true if internodes streaming of CDC data should go through write path- Specified by:
isCDCOnRepairEnabled
in interfaceCommitLogMBean
-
setCDCOnRepairEnabled
public void setCDCOnRepairEnabled(boolean value)
Description copied from interface:CommitLogMBean
Set whether enable write path for CDC data during internodes streaming, e.g. repair- Specified by:
setCDCOnRepairEnabled
in interfaceCommitLogMBean
-
shutdownBlocking
public void shutdownBlocking() throws java.lang.InterruptedException
Shuts down the threads used by the commit log, blocking until completion. TODO this should accept a timeout, and throw TimeoutException- Throws:
java.lang.InterruptedException
-
resetUnsafe
public int resetUnsafe(boolean deleteSegments) throws java.io.IOException
FOR TESTING PURPOSES- Returns:
- the number of files recovered
- Throws:
java.io.IOException
-
resetConfiguration
public void resetConfiguration()
FOR TESTING PURPOSES.
-
stopUnsafe
public void stopUnsafe(boolean deleteSegments)
FOR TESTING PURPOSES
-
restartUnsafe
public int restartUnsafe() throws java.io.IOException
FOR TESTING PURPOSES- Throws:
java.io.IOException
-
freeDiskSpace
public static long freeDiskSpace()
-
handleCommitError
public static boolean handleCommitError(java.lang.String message, java.lang.Throwable t)
-
-