Return-Path: Delivered-To: apmail-couchdb-commits-archive@www.apache.org Received: (qmail 55233 invoked from network); 3 Jan 2011 21:46:08 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 3 Jan 2011 21:46:08 -0000 Received: (qmail 37909 invoked by uid 500); 3 Jan 2011 21:46:08 -0000 Delivered-To: apmail-couchdb-commits-archive@couchdb.apache.org Received: (qmail 37786 invoked by uid 500); 3 Jan 2011 21:46:08 -0000 Mailing-List: contact commits-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 commits@couchdb.apache.org Received: (qmail 37779 invoked by uid 99); 3 Jan 2011 21:46:08 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 03 Jan 2011 21:46:08 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 03 Jan 2011 21:46:08 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 4C17223888E7; Mon, 3 Jan 2011 21:45:48 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1054784 - /couchdb/branches/1.0.x/src/couchdb/couch_view_compactor.erl Date: Mon, 03 Jan 2011 21:45:48 -0000 To: commits@couchdb.apache.org From: kocolosk@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20110103214548.4C17223888E7@eris.apache.org> Author: kocolosk Date: Mon Jan 3 21:45:47 2011 New Revision: 1054784 URL: http://svn.apache.org/viewvc?rev=1054784&view=rev Log: Crash if duplicates are detected during view compaction, COUCHDB-999 Modified: couchdb/branches/1.0.x/src/couchdb/couch_view_compactor.erl Modified: couchdb/branches/1.0.x/src/couchdb/couch_view_compactor.erl URL: http://svn.apache.org/viewvc/couchdb/branches/1.0.x/src/couchdb/couch_view_compactor.erl?rev=1054784&r1=1054783&r2=1054784&view=diff ============================================================================== --- couchdb/branches/1.0.x/src/couchdb/couch_view_compactor.erl (original) +++ couchdb/branches/1.0.x/src/couchdb/couch_view_compactor.erl Mon Jan 3 21:45:47 2011 @@ -48,18 +48,22 @@ compact_group(Group, EmptyGroup) -> TaskName = <>, couch_task_status:add_task(<<"View Group Compaction">>, TaskName, <<"">>), - Fun = fun(KV, {Bt, Acc, TotalCopied}) -> + Fun = fun({DocId, _ViewIdKeys} = KV, {Bt, Acc, TotalCopied, LastId}) -> + if DocId =:= LastId -> % COUCHDB-999 + Msg = "Duplicates of ~s detected in ~s ~s - rebuild required", + exit(io_lib:format(Msg, [DocId, DbName, GroupId])); + true -> ok end, if TotalCopied rem 10000 =:= 0 -> couch_task_status:update("Copied ~p of ~p Ids (~p%)", [TotalCopied, Count, (TotalCopied*100) div Count]), {ok, Bt2} = couch_btree:add(Bt, lists:reverse([KV|Acc])), - {ok, {Bt2, [], TotalCopied+1}}; + {ok, {Bt2, [], TotalCopied+1, DocId}}; true -> - {ok, {Bt, [KV|Acc], TotalCopied+1}} + {ok, {Bt, [KV|Acc], TotalCopied+1, DocId}} end end, - {ok, _, {Bt3, Uncopied, _Total}} = couch_btree:foldl(IdBtree, Fun, - {EmptyIdBtree, [], 0}), + {ok, _, {Bt3, Uncopied, _Total, _LastId}} = couch_btree:foldl(IdBtree, Fun, + {EmptyIdBtree, [], 0, nil}), {ok, NewIdBtree} = couch_btree:add(Bt3, lists:reverse(Uncopied)), NewViews = lists:map(fun({View, EmptyView}) ->