You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@kafka.apache.org by "Jun Rao (JIRA)" <ji...@apache.org> on 2015/12/08 06:19:10 UTC

[jira] [Commented] (KAFKA-2903) FileMessageSet's read method maybe has problem when start is not zero

    [ https://issues.apache.org/jira/browse/KAFKA-2903?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15046379#comment-15046379 ] 

Jun Rao commented on KAFKA-2903:
--------------------------------

Yes, the current logic is a bit confusing, but is correct. We create a FileMessageSet in two cases. The first case is when we create a LogSegment. In this case, FileMessageSet.start is always 0. The second case is when we want to generate a response to the fetch request. In this case, we are getting a slice from the FileMessageSet created in case one, which always has FileMessageSet.start as 0. That's why the code works. We never had a case that we need to create a slice from a FileMessageSet created in case (2). To make the code easier to understand, perhaps we can just get rid of this.start all together when calculating end. It would also be good to add a comment above FileMessageSet to make this clear. Do you want to submit a patch?

> FileMessageSet's read method maybe has problem when start is not zero
> ---------------------------------------------------------------------
>
>                 Key: KAFKA-2903
>                 URL: https://issues.apache.org/jira/browse/KAFKA-2903
>             Project: Kafka
>          Issue Type: Bug
>          Components: log
>    Affects Versions: 0.8.2.1, 0.9.0.0
>            Reporter: Pengwei
>            Assignee: Jay Kreps
>             Fix For: 0.9.1.0
>
>
> now the code is :
> def read(position: Int, size: Int): FileMessageSet = {
>    ..... 
>     new FileMessageSet(file,
>                        channel,
>                        start = this.start + position,
>                        end = math.min(this.start + position + size, sizeInBytes()))
>   }
> if this.start is not 0, the end is only the FileMessageSet's size, not the actually position of end position.
> the end parameter should be:
>  end = math.min(this.start + position + size, this.start+sizeInBytes())



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)