[ https://issues.apache.org/jira/browse/KAFKA-7278?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16577484#comment-16577484 ]
Ismael Juma commented on KAFKA-7278: ------------------------------------ Can you please clarify which part of the code is the problem? {code} private def asyncDeleteSegment(segment: LogSegment) { segment.changeFileSuffixes("", Log.DeletedFileSuffix) def deleteSeg() { info(s"Deleting segment ${segment.baseOffset}") maybeHandleIOException(s"Error while deleting segments for $topicPartition in dir ${dir.getParent}") { segment.deleteIfExists() } } scheduler.schedule("delete-file", deleteSeg _, delay = config.fileDeleteDelayMs) } {code} `segment.deleteIfExists()` should not throw an exception if the file doesn't exist (this is the code that I changed some time ago). There rest executes with the lock held. That's why I suspected you were seeing an issue that has since been fixed. But I might be missing something. > replaceSegments() should not call asyncDeleteSegment() for segments which > have been removed from segments list > -------------------------------------------------------------------------------------------------------------- > > Key: KAFKA-7278 > URL: https://issues.apache.org/jira/browse/KAFKA-7278 > Project: Kafka > Issue Type: Improvement > Reporter: Dong Lin > Assignee: Dong Lin > Priority: Major > > Currently Log.replaceSegments() will call `asyncDeleteSegment(...)` for every > segment listed in the `oldSegments`. oldSegments should be constructed from > Log.segments and only contain segments listed in Log.segments. > However, Log.segments may be modified between the time oldSegments is > determined to the time Log.replaceSegments() is called. If there are > concurrent async deletion of the same log segment file, Log.replaceSegments() > will call asyncDeleteSegment() for a segment that does not exist and Kafka > server may shutdown the log directory due to NoSuchFileException. > This is likely the root cause of > https://issues.apache.org/jira/browse/KAFKA-6188. > Given the understanding of the problem, we should be able to fix the issue by > only deleting segment if the segment can be found in Log.segments. > > -- This message was sent by Atlassian JIRA (v7.6.3#76005)