Return-Path: X-Original-To: apmail-couchdb-dev-archive@www.apache.org Delivered-To: apmail-couchdb-dev-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 0AE78480E for ; Wed, 11 May 2011 23:41:35 +0000 (UTC) Received: (qmail 28246 invoked by uid 500); 11 May 2011 23:41:34 -0000 Delivered-To: apmail-couchdb-dev-archive@couchdb.apache.org Received: (qmail 28215 invoked by uid 500); 11 May 2011 23:41:34 -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 28207 invoked by uid 99); 11 May 2011 23:41:34 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 11 May 2011 23:41:34 +0000 X-ASF-Spam-Status: No, hits=-0.7 required=5.0 tests=FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,RFC_ABUSE_POST,SPF_PASS,T_TO_NO_BRKTS_FREEMAIL X-Spam-Check-By: apache.org Received-SPF: pass (nike.apache.org: domain of fdmanana@gmail.com designates 209.85.212.176 as permitted sender) Received: from [209.85.212.176] (HELO mail-px0-f176.google.com) (209.85.212.176) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 11 May 2011 23:41:26 +0000 Received: by pxi11 with SMTP id 11so765397pxi.35 for ; Wed, 11 May 2011 16:41:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:sender:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:content-type :content-transfer-encoding; bh=b1+NYt3bJC9lV3fFKoJTGRC0lnzLtHSXT0fjN5aIUE8=; b=vd+JfMSLy7+Y7giiZRe111BFqYBSlDfTtn8QhUMC+VIPDltfKKk66viaOgyS7LZLsn EWy9VaftRTzK3V3E+70CxwGiQgqcFxd6wSovMB+DPAeRLvg7kMbVffwemIBzV5GCc3ta 4a9yowdI1K+xDoqkj3aUZUULfQ46KTriEE9Kg= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:sender:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:content-type :content-transfer-encoding; b=K1McVHFhf+aOPuNy0oJYZGMIJWArtR9TTfGjV6NqGR65e335bD8HlwR6XaakFyrIoz zGuu6V/lU528DN6ApUtkoN5XXspQMRkgBEIZQDS1hCgWELukTqyCPleVlECo7VQeu94I iMJ/yqfOTyxtrwSu3h43LaKmW7W3Hq2UH6xG8= MIME-Version: 1.0 Received: by 10.68.24.201 with SMTP id w9mr10343408pbf.262.1305157264913; Wed, 11 May 2011 16:41:04 -0700 (PDT) Sender: fdmanana@gmail.com Received: by 10.68.62.9 with HTTP; Wed, 11 May 2011 16:41:04 -0700 (PDT) In-Reply-To: <20110511233919.EFC5423889E2@eris.apache.org> References: <20110511233919.EFC5423889E2@eris.apache.org> Date: Thu, 12 May 2011 00:41:04 +0100 X-Google-Sender-Auth: eqTq4JapIIIvHvZGOZX8OF0peoI Message-ID: Subject: Re: svn commit: r1102137 - in /couchdb/trunk: src/couchdb/couch_view_group.erl test/etap/200-view-group-no-db-leaks.t From: Filipe David Manana To: dev@couchdb.apache.org Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Virus-Checked: Checked by ClamAV on apache.org On no objection, I would apply this to the branches 1.0.x and 1.1.x as well= . Please review. On Thu, May 12, 2011 at 12:39 AM, wrote: > Author: fdmanana > Date: Wed May 11 23:39:19 2011 > New Revision: 1102137 > > URL: http://svn.apache.org/viewvc?rev=3D1102137&view=3Drev > Log: > Make sure view group shutdowns when database is deleted or dies > > Added more assertions to test 200-view-group-no-db-leaks.t to ensure > this doesn't happen anymore. > > > Modified: > =C2=A0 =C2=A0couchdb/trunk/src/couchdb/couch_view_group.erl > =C2=A0 =C2=A0couchdb/trunk/test/etap/200-view-group-no-db-leaks.t > > Modified: couchdb/trunk/src/couchdb/couch_view_group.erl > URL: http://svn.apache.org/viewvc/couchdb/trunk/src/couchdb/couch_view_gr= oup.erl?rev=3D1102137&r1=3D1102136&r2=3D1102137&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_view_group.erl (original) > +++ couchdb/trunk/src/couchdb/couch_view_group.erl Wed May 11 23:39:19 20= 11 > @@ -84,6 +84,7 @@ init({{_, DbName, _} =3D InitArgs, ReturnP > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ReturnPid ! {Ref, self(), {erro= r, invalid_view_seq}}, > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ignore; > =C2=A0 =C2=A0 =C2=A0 =C2=A0 _ -> > + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0couch_db:monitor(Db), > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 couch_db:close(Db), > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 {ok, RefCounter} =3D couch_ref_= counter:start([Fd]), > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 {ok, #group_state{ > @@ -339,7 +340,11 @@ handle_info({'EXIT', FromPid, {{nocatch, > > =C2=A0handle_info({'EXIT', FromPid, Reason}, State) -> > =C2=A0 =C2=A0 ?LOG_DEBUG("Exit from linked pid: ~p", [{FromPid, Reason}])= , > - =C2=A0 =C2=A0{stop, Reason, State}. > + =C2=A0 =C2=A0{stop, Reason, State}; > + > +handle_info({'DOWN',_,_,_,_}, State) -> > + =C2=A0 =C2=A0?LOG_INFO("Shutting down view group server, monitored db i= s closing.", []), > + =C2=A0 =C2=A0{stop, normal, reply_all(State, shutdown)}. > > > =C2=A0terminate(Reason, #group_state{updater_pid=3DUpdate, compactor_pid= =3DCompact}=3DS) -> > > Modified: couchdb/trunk/test/etap/200-view-group-no-db-leaks.t > URL: http://svn.apache.org/viewvc/couchdb/trunk/test/etap/200-view-group-= no-db-leaks.t?rev=3D1102137&r1=3D1102136&r2=3D1102137&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/test/etap/200-view-group-no-db-leaks.t (original) > +++ couchdb/trunk/test/etap/200-view-group-no-db-leaks.t Wed May 11 23:39= :19 2011 > @@ -67,7 +67,7 @@ ddoc_name() -> <<"foo">>. > =C2=A0main(_) -> > =C2=A0 =C2=A0 test_util:init_code_path(), > > - =C2=A0 =C2=A0etap:plan(11), > + =C2=A0 =C2=A0etap:plan(18), > =C2=A0 =C2=A0 case (catch test()) of > =C2=A0 =C2=A0 =C2=A0 =C2=A0 ok -> > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 etap:end_tests(); > @@ -89,12 +89,20 @@ test() -> > > =C2=A0 =C2=A0 create_docs(), > =C2=A0 =C2=A0 create_design_doc(), > + > + =C2=A0 =C2=A0ViewGroup =3D couch_view:get_group_server( > + =C2=A0 =C2=A0 =C2=A0 =C2=A0test_db_name(), <<"_design/", (ddoc_name())/= binary>>), > + =C2=A0 =C2=A0etap:is(is_pid(ViewGroup), true, "got view group pid"), > + =C2=A0 =C2=A0etap:is(is_process_alive(ViewGroup), true, "view group pid= is alive"), > + > =C2=A0 =C2=A0 query_view(), > =C2=A0 =C2=A0 check_db_ref_count(), > + =C2=A0 =C2=A0etap:is(is_process_alive(ViewGroup), true, "view group pid= is alive"), > > =C2=A0 =C2=A0 create_new_doc(<<"doc1000">>), > =C2=A0 =C2=A0 query_view(), > =C2=A0 =C2=A0 check_db_ref_count(), > + =C2=A0 =C2=A0etap:is(is_process_alive(ViewGroup), true, "view group pid= is alive"), > > =C2=A0 =C2=A0 Ref1 =3D get_db_ref_counter(), > =C2=A0 =C2=A0 compact_db(), > @@ -102,15 +110,27 @@ test() -> > =C2=A0 =C2=A0 Ref2 =3D get_db_ref_counter(), > =C2=A0 =C2=A0 etap:isnt(Ref1, Ref2, =C2=A0"DB ref counter changed"), > =C2=A0 =C2=A0 etap:is(false, is_process_alive(Ref1), "old DB ref counter = is not alive"), > + =C2=A0 =C2=A0etap:is(is_process_alive(ViewGroup), true, "view group pid= is alive"), > > =C2=A0 =C2=A0 compact_view_group(), > =C2=A0 =C2=A0 check_db_ref_count(), > =C2=A0 =C2=A0 Ref3 =3D get_db_ref_counter(), > =C2=A0 =C2=A0 etap:is(Ref3, Ref2, =C2=A0"DB ref counter didn't change"), > + =C2=A0 =C2=A0etap:is(is_process_alive(ViewGroup), true, "view group pid= is alive"), > > =C2=A0 =C2=A0 create_new_doc(<<"doc1001">>), > =C2=A0 =C2=A0 query_view(), > =C2=A0 =C2=A0 check_db_ref_count(), > + =C2=A0 =C2=A0etap:is(is_process_alive(ViewGroup), true, "view group pid= is alive"), > + > + =C2=A0 =C2=A0MonRef =3D erlang:monitor(process, ViewGroup), > + =C2=A0 =C2=A0ok =3D couch_server:delete(test_db_name(), []), > + =C2=A0 =C2=A0receive > + =C2=A0 =C2=A0{'DOWN', MonRef, _, _, _} -> > + =C2=A0 =C2=A0 =C2=A0 =C2=A0etap:diag("view group is dead after DB delet= ion") > + =C2=A0 =C2=A0after 5000 -> > + =C2=A0 =C2=A0 =C2=A0 =C2=A0etap:bail("view group did not die after DB d= eletion") > + =C2=A0 =C2=A0end, > > =C2=A0 =C2=A0 ok =3D timer:sleep(1000), > =C2=A0 =C2=A0 delete_db(), > > > --=20 Filipe David Manana, fdmanana@gmail.com, fdmanana@apache.org "Reasonable men adapt themselves to the world. =C2=A0Unreasonable men adapt the world to themselves. =C2=A0That's why all progress depends on unreasonable men."