Return-Path: Delivered-To: apmail-couchdb-dev-archive@www.apache.org Received: (qmail 96232 invoked from network); 18 Oct 2010 00:32:55 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 18 Oct 2010 00:32:55 -0000 Received: (qmail 42667 invoked by uid 500); 18 Oct 2010 00:32:55 -0000 Delivered-To: apmail-couchdb-dev-archive@couchdb.apache.org Received: (qmail 42597 invoked by uid 500); 18 Oct 2010 00:32:55 -0000 Mailing-List: contact dev-help@couchdb.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@couchdb.apache.org Delivered-To: mailing list dev@couchdb.apache.org Received: (qmail 42589 invoked by uid 99); 18 Oct 2010 00:32:55 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 18 Oct 2010 00:32:55 +0000 X-ASF-Spam-Status: No, hits=1.7 required=10.0 tests=DATE_IN_PAST_03_06,MIME_QP_LONG_LINE,SPF_NEUTRAL X-Spam-Check-By: apache.org Received-SPF: neutral (athena.apache.org: local policy) Received: from [80.244.253.218] (HELO mail.traeumt.net) (80.244.253.218) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 18 Oct 2010 00:32:47 +0000 Received: from dahlia.fritz.box (brln-d9badac8.pool.mediaWays.net [217.186.218.200]) (using TLSv1 with cipher AES128-SHA (128/128 bits)) (No client certificate requested) by mail.traeumt.net (Postfix) with ESMTPSA id E34093C31D for ; Mon, 18 Oct 2010 02:32:14 +0200 (CEST) Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Apple Message framework v1081) Subject: Re: svn commit: r987084 - in /couchdb/trunk/src/couchdb: couch_httpd_db.erl couch_stream.erl From: Jan Lehnardt In-Reply-To: <20100819085511.3981623889ED@eris.apache.org> Date: Sun, 17 Oct 2010 21:30:06 +0200 Content-Transfer-Encoding: quoted-printable Message-Id: References: <20100819085511.3981623889ED@eris.apache.org> To: dev@couchdb.apache.org X-Mailer: Apple Mail (2.1081) On 19 Aug 2010, at 10:55, rnewson@apache.org wrote: > Author: rnewson > Date: Thu Aug 19 08:55:10 2010 > New Revision: 987084 >=20 > URL: http://svn.apache.org/viewvc?rev=3D987084&view=3Drev > Log: > Support Range header for all attachments, even without compaction = upgrade. It's just less efficient. How much "less"? Cheers Jan --=20 >=20 > Modified: > couchdb/trunk/src/couchdb/couch_httpd_db.erl > couchdb/trunk/src/couchdb/couch_stream.erl >=20 > Modified: couchdb/trunk/src/couchdb/couch_httpd_db.erl > URL: = http://svn.apache.org/viewvc/couchdb/trunk/src/couchdb/couch_httpd_db.erl?= rev=3D987084&r1=3D987083&r2=3D987084&view=3Ddiff > = =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D > --- couchdb/trunk/src/couchdb/couch_httpd_db.erl (original) > +++ couchdb/trunk/src/couchdb/couch_httpd_db.erl Thu Aug 19 08:55:10 = 2010 > @@ -883,7 +883,8 @@ db_attachment_req(#httpd{method=3D'GET',mo > Headers =3D [ > {"ETag", Etag}, > {"Cache-Control", "must-revalidate"}, > - {"Content-Type", binary_to_list(Type)} > + {"Content-Type", binary_to_list(Type)}, > + {"Accept-Ranges", "bytes"} > ] ++ case ReqAcceptsAttEnc of > true -> > [{"Content-Encoding", atom_to_list(Enc)}]; > @@ -925,22 +926,13 @@ db_attachment_req(#httpd{method=3D'GET',mo > AttFun(Att, fun(Seg, _) -> send_chunk(Resp, Seg) = end, {ok, Resp}), > last_chunk(Resp); > _ -> > - #att{data=3D{_,StreamInfo}} =3D Att, %% layering = violation > - SupportsRange =3D case StreamInfo of > - [{_,_}|_] -> true; > - _ -> false > - end, > Ranges =3D MochiReq:get(range), > HasSingleRange =3D case Ranges of > [_] -> true; > _ -> false > end, > - Headers1 =3D case SupportsRange of > - false ->[{<<"Accept-Ranges">>, <<"none">>}] = ++ Headers; > - true -> [{<<"Accept-Ranges">>, <<"bytes">>}] = ++ Headers > - end, > if > - Enc =3D=3D identity andalso SupportsRange =3D=3D= true andalso HasSingleRange =3D=3D true -> > + Enc =3D=3D identity andalso HasSingleRange =3D=3D= true -> > [{From, To}] =3D Ranges, > {From1, To1} =3D case {From, To} of > {none, To} -> > @@ -956,13 +948,13 @@ db_attachment_req(#httpd{method=3D'GET',mo > true -> > ok > end, > - Headers2 =3D [{<<"Content-Range">>, > + Headers1 =3D [{<<"Content-Range">>, > ?l2b(io_lib:format("bytes ~B-~B/~B", = [From1, To1, Len]))}] > - ++ Headers1, > - {ok, Resp} =3D start_response_length(Req, = 206, Headers2, To1 - From1 + 1), > + ++ Headers, > + {ok, Resp} =3D start_response_length(Req, = 206, Headers1, To1 - From1 + 1), > couch_doc:range_att_foldl(Att, From1, To1 = + 1, fun(Seg, _) -> send(Resp, Seg) end, {ok, Resp}); > true -> > - {ok, Resp} =3D start_response_length(Req, = 200, Headers1, Len), > + {ok, Resp} =3D start_response_length(Req, = 200, Headers, Len), > AttFun(Att, fun(Seg, _) -> send(Resp, Seg) = end, {ok, Resp}) > end > end >=20 > Modified: couchdb/trunk/src/couchdb/couch_stream.erl > URL: = http://svn.apache.org/viewvc/couchdb/trunk/src/couchdb/couch_stream.erl?re= v=3D987084&r1=3D987083&r2=3D987084&view=3Ddiff > = =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D > --- couchdb/trunk/src/couchdb/couch_stream.erl (original) > +++ couchdb/trunk/src/couchdb/couch_stream.erl Thu Aug 19 08:55:10 = 2010 > @@ -129,6 +129,9 @@ range_foldl(Fd, PosList, From, To, Fun,=20 >=20 > range_foldl(_Fd, _PosList, _From, To, Off, _Fun, Acc) when Off >=3D To = -> > Acc; > +range_foldl(Fd, [Pos|Rest], From, To, Off, Fun, Acc) when = is_integer(Pos) -> % old-style attachment > + {ok, Bin} =3D couch_file:pread_iolist(Fd, Pos), > + range_foldl(Fd, [{Pos, iolist_size(Bin)}] ++ Rest, From, To, Off, = Fun, Acc); > range_foldl(Fd, [{_Pos, Size}|Rest], From, To, Off, Fun, Acc) when = =46rom > Off + Size -> > range_foldl(Fd, Rest, From, To, Off + Size, Fun, Acc); > range_foldl(Fd, [{Pos, Size}|Rest], From, To, Off, Fun, Acc) -> >=20 >=20