mirror of https://github.com/apache/kafka.git
KAFKA-3330; Truncate log cleaner offset checkpoint if the log is truncated
becketqin Can you take a look? Author: Dong Lin <lindong28@gmail.com> Reviewers: Ismael Juma <ismael@juma.me.uk>, Jun Rao <junrao@gmail.com> Closes #1009 from lindong28/KAFKA-3330
This commit is contained in:
parent
61281f5c53
commit
579d473ce9
|
|
@ -133,6 +133,13 @@ class LogCleaner(val config: CleanerConfig,
|
|||
cleanerManager.updateCheckpoints(dataDir, update=None)
|
||||
}
|
||||
|
||||
/**
|
||||
* Truncate cleaner offset checkpoint for the given partition if its checkpointed offset is larger than the given offset
|
||||
*/
|
||||
def maybeTruncateCheckpoint(dataDir: File, topicAndPartition: TopicAndPartition, offset: Long) {
|
||||
cleanerManager.maybeTruncateCheckpoint(dataDir, topicAndPartition, offset)
|
||||
}
|
||||
|
||||
/**
|
||||
* Abort the cleaning of a particular partition if it's in progress, and pause any future cleaning of this partition.
|
||||
* This call blocks until the cleaning of the partition is aborted and paused.
|
||||
|
|
|
|||
|
|
@ -210,6 +210,18 @@ private[log] class LogCleanerManager(val logDirs: Array[File], val logs: Pool[To
|
|||
}
|
||||
}
|
||||
|
||||
def maybeTruncateCheckpoint(dataDir: File, topicAndPartition: TopicAndPartition, offset: Long) {
|
||||
inLock(lock) {
|
||||
if (logs.get(topicAndPartition).config.compact) {
|
||||
val checkpoint = checkpoints(dataDir)
|
||||
val existing = checkpoint.read()
|
||||
|
||||
if (existing.getOrElse(topicAndPartition, 0L) > offset)
|
||||
checkpoint.write(existing + (topicAndPartition -> offset))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Save out the endOffset and remove the given log from the in-progress set, if not aborted.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -286,8 +286,10 @@ class LogManager(val logDirs: Array[File],
|
|||
if (needToStopCleaner && cleaner != null)
|
||||
cleaner.abortAndPauseCleaning(topicAndPartition)
|
||||
log.truncateTo(truncateOffset)
|
||||
if (needToStopCleaner && cleaner != null)
|
||||
if (needToStopCleaner && cleaner != null) {
|
||||
cleaner.maybeTruncateCheckpoint(log.dir.getParentFile, topicAndPartition, log.activeSegment.baseOffset)
|
||||
cleaner.resumeCleaning(topicAndPartition)
|
||||
}
|
||||
}
|
||||
}
|
||||
checkpointRecoveryPointOffsets()
|
||||
|
|
@ -305,8 +307,10 @@ class LogManager(val logDirs: Array[File],
|
|||
if (cleaner != null)
|
||||
cleaner.abortAndPauseCleaning(topicAndPartition)
|
||||
log.truncateFullyAndStartAt(newOffset)
|
||||
if (cleaner != null)
|
||||
if (cleaner != null) {
|
||||
cleaner.maybeTruncateCheckpoint(log.dir.getParentFile, topicAndPartition, log.activeSegment.baseOffset)
|
||||
cleaner.resumeCleaning(topicAndPartition)
|
||||
}
|
||||
}
|
||||
checkpointRecoveryPointOffsets()
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue