Problem when writing larger than 4kb file headers -------------------------------------------------
Key: COUCHDB-800 URL: https://issues.apache.org/jira/browse/COUCHDB-800 Project: CouchDB Issue Type: Bug Components: Database Core Affects Versions: 0.11 Reporter: Damien Katz Assignee: Damien Katz Fix For: 0.11.1, 0.12 >From Andrey Somov: Hi, while reading the CouchDB source I found a question in couch_file.erl, I am not sure whether it is a bug or not. Lines 297-311: handle_call({write_header, Bin}, _From, #file{fd=Fd, eof=Pos}=File) -> BinSize = size(Bin), case Pos rem ?SIZE_BLOCK of 0 -> Padding = <<>>; BlockOffset -> Padding = <<0:(8*(?SIZE_BLOCK-BlockOffset))>> end, FinalBin = [Padding, <<1, BinSize:32/integer>> | make_blocks(1, [Bin])], case file:write(Fd, FinalBin) of ok -> {reply, ok, File#file{eof=Pos+iolist_size(FinalBin)}}; Error -> {reply, Error, File} end; Because <<1, BinSize:32/integer>> occupies 5 bytes make_blocks() shall use offset=5, but the offset is only 1. (it should be make_blocks(5, [Bin])) Since the header is smaller then 4k there is no difference and it works (the tests succeed with both 1 and 5). But it makes it more difficult to understand the code for those who study the source to understand how it works. - Thank you, Andrey -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.