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 classCommitLog.Configuration
-
Field Summary
Fields Modifier and Type Field Description CommitLogArchiverarchiverstatic CommitLoginstanceCommitLogMetricsmetricsAbstractCommitLogSegmentManagersegmentManager
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description CommitLogPositionadd(Mutation mutation)Add a Mutation to the commit log.voiddiscardCompletedSegments(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.voidforceRecycleAllSegments()Flushes all dirty CFs, waiting for them to free and recycle any segments they were retainingvoidforceRecycleAllSegments(java.util.Collection<TableId> droppedTables)Flushes all dirty CFs, waiting for them to free and recycle any segments they were retainingstatic longfreeDiskSpace()longgetActiveContentSize()longgetActiveOnDiskSize()java.util.Map<java.lang.String,java.lang.Double>getActiveSegmentCompressionRatios()java.util.List<java.lang.String>getActiveSegmentNames()java.lang.StringgetArchiveCommand()Command to execute to archive a commitlog segment.java.util.List<java.lang.String>getArchivingSegmentNames()booleangetCDCBlockWrites()CommitLogPositiongetCurrentPosition()java.lang.StringgetRestoreCommand()Command to execute to make an archived commitlog live againjava.lang.StringgetRestoreDirectories()Directory to scan the recovery files inlonggetRestorePointInTime()Restore mutations created up to and including this timestamp in GMT There are only three different formats to express three time precisions: Seconds, Milliseconds, and Microseconds.java.lang.StringgetRestorePrecision()get precision of the timestamp used in the restore (MILLISECONDS, MICROSECONDS, ...) to determine if passed the restore point in time.File[]getUnmanagedFiles()static booleanhandleCommitError(java.lang.String message, java.lang.Throwable t)booleanhasFilesToReplay()booleanisCDCOnRepairEnabled()Returns true if internodes streaming of CDC data should go through write pathbooleanisStarted()voidrecover(java.lang.String path)Perform recovery on a single commit log.intrecoverFiles(File... clogs)Perform recovery on a list of commit log files.voidrecoverPath(java.lang.String path)intrecoverSegmentsOnDisk()Perform recovery on commit logs located in the directory specified by the config file.voidrequestExtraSync()Preempts the CLExecutor, telling to to sync immediatelyvoidresetConfiguration()FOR TESTING PURPOSES.intresetUnsafe(boolean deleteSegments)FOR TESTING PURPOSESintrestartUnsafe()FOR TESTING PURPOSESvoidsetCDCBlockWrites(boolean val)voidsetCDCOnRepairEnabled(boolean value)Set whether enable write path for CDC data during internodes streaming, e.g.voidsetCommitlogArchiver(CommitLogArchiver archiver)voidshutdownBlocking()Shuts down the threads used by the commit log, blocking until completion.CommitLogstart()Tries to start the CommitLog if not already started.voidstopUnsafe(boolean deleteSegments)FOR TESTING PURPOSESvoidsync(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 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()
-
getUnmanagedFiles
public File[] getUnmanagedFiles()
-
recoverSegmentsOnDisk
public int recoverSegmentsOnDisk() throws java.io.IOExceptionPerform 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.IOExceptionPerform recovery on a single commit log. Kept w/sub-optimal name due to coupling w/MBean / JMX- Specified by:
recoverin interfaceCommitLogMBean- Throws:
java.io.IOException
-
getCurrentPosition
public CommitLogPosition getCurrentPosition()
- Returns:
- a CommitLogPosition which, if
>= onereturned 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.IOExceptionForces 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:CommitLogMBeanCommand to execute to archive a commitlog segment. Blank to disabled.- Specified by:
getArchiveCommandin interfaceCommitLogMBean
-
getRestoreCommand
public java.lang.String getRestoreCommand()
Description copied from interface:CommitLogMBeanCommand to execute to make an archived commitlog live again- Specified by:
getRestoreCommandin interfaceCommitLogMBean
-
getRestoreDirectories
public java.lang.String getRestoreDirectories()
Description copied from interface:CommitLogMBeanDirectory to scan the recovery files in- Specified by:
getRestoreDirectoriesin interfaceCommitLogMBean
-
getRestorePointInTime
public long getRestorePointInTime()
Description copied from interface:CommitLogMBeanRestore mutations created up to and including this timestamp in GMT There are only three different formats to express three time precisions: Seconds, Milliseconds, and Microseconds. Seconds format: yyyy:MM:dd HH:mm:ss (2012:04:31 20:43:12) Milliseconds format: yyyy:MM:dd HH:mm:ss.SSS (2012:04:31 20:43:12.633) Microseconds format: yyyy:MM:dd HH:mm:ss.SSSSSS (2012:04:31 20:43:12.633222) 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:
getRestorePointInTimein interfaceCommitLogMBean
-
getRestorePrecision
public java.lang.String getRestorePrecision()
Description copied from interface:CommitLogMBeanget precision of the timestamp used in the restore (MILLISECONDS, MICROSECONDS, ...) to determine if passed the restore point in time.- Specified by:
getRestorePrecisionin interfaceCommitLogMBean
-
setCommitlogArchiver
public void setCommitlogArchiver(CommitLogArchiver archiver)
-
getActiveSegmentNames
public java.util.List<java.lang.String> getActiveSegmentNames()
- Specified by:
getActiveSegmentNamesin 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:
getArchivingSegmentNamesin interfaceCommitLogMBean- Returns:
- Files which are pending for archival attempt. Does NOT include failed archive attempts.
-
getActiveContentSize
public long getActiveContentSize()
- Specified by:
getActiveContentSizein interfaceCommitLogMBean- Returns:
- The size of the mutations in all active commit log segments (uncompressed).
-
getActiveOnDiskSize
public long getActiveOnDiskSize()
- Specified by:
getActiveOnDiskSizein 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:
getActiveSegmentCompressionRatiosin interfaceCommitLogMBean- Returns:
- A map between active log segments and the compression ratio achieved for each.
-
getCDCBlockWrites
public boolean getCDCBlockWrites()
- Specified by:
getCDCBlockWritesin interfaceCommitLogMBean
-
setCDCBlockWrites
public void setCDCBlockWrites(boolean val)
- Specified by:
setCDCBlockWritesin interfaceCommitLogMBean
-
isCDCOnRepairEnabled
public boolean isCDCOnRepairEnabled()
Description copied from interface:CommitLogMBeanReturns true if internodes streaming of CDC data should go through write path- Specified by:
isCDCOnRepairEnabledin interfaceCommitLogMBean
-
setCDCOnRepairEnabled
public void setCDCOnRepairEnabled(boolean value)
Description copied from interface:CommitLogMBeanSet whether enable write path for CDC data during internodes streaming, e.g. repair- Specified by:
setCDCOnRepairEnabledin interfaceCommitLogMBean
-
shutdownBlocking
public void shutdownBlocking() throws java.lang.InterruptedExceptionShuts 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.IOExceptionFOR 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.IOExceptionFOR TESTING PURPOSES- Throws:
java.io.IOException
-
freeDiskSpace
public static long freeDiskSpace()
-
handleCommitError
public static boolean handleCommitError(java.lang.String message, java.lang.Throwable t)
-
-