couchdb-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Damien Katz (JIRA)" <>
Subject [jira] Created: (COUCHDB-800) Problem when writing larger than 4kb file headers
Date Tue, 15 Jun 2010 18:53:23 GMT
Problem when writing larger than 4kb file headers

                 Key: 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:

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))>>
   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}

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,

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

View raw message