Return-Path: Delivered-To: apmail-couchdb-commits-archive@www.apache.org Received: (qmail 76484 invoked from network); 18 Jul 2009 02:17:55 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 18 Jul 2009 02:17:55 -0000 Received: (qmail 75900 invoked by uid 500); 18 Jul 2009 02:19:01 -0000 Delivered-To: apmail-couchdb-commits-archive@couchdb.apache.org Received: (qmail 75801 invoked by uid 500); 18 Jul 2009 02:19:01 -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 75786 invoked by uid 99); 18 Jul 2009 02:19:01 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 18 Jul 2009 02:19:01 +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; Sat, 18 Jul 2009 02:18:58 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id A69542388999; Sat, 18 Jul 2009 02:18:38 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r795297 - /couchdb/trunk/src/couchdb/couch_rep_changes_feed.erl Date: Sat, 18 Jul 2009 02:18:38 -0000 To: commits@couchdb.apache.org From: kocolosk@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20090718021838.A69542388999@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: kocolosk Date: Sat Jul 18 02:18:38 2009 New Revision: 795297 URL: http://svn.apache.org/viewvc?rev=795297&view=rev Log: listen for local update notifications when continuous=true Modified: couchdb/trunk/src/couchdb/couch_rep_changes_feed.erl Modified: couchdb/trunk/src/couchdb/couch_rep_changes_feed.erl URL: http://svn.apache.org/viewvc/couchdb/trunk/src/couchdb/couch_rep_changes_feed.erl?rev=795297&r1=795296&r2=795297&view=diff ============================================================================== --- couchdb/trunk/src/couchdb/couch_rep_changes_feed.erl (original) +++ couchdb/trunk/src/couchdb/couch_rep_changes_feed.erl Sat Jul 18 02:18:38 2009 @@ -1,12 +1,12 @@ % Licensed under the Apache License, Version 2.0 (the "License"); you may not -% use this file except in compliance with the License. You may obtain a copy of +% use this file except in compliance with the License. You may obtain a copy of % the License at % % http://www.apache.org/licenses/LICENSE-2.0 % % Unless required by applicable law or agreed to in writing, software % distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the % License for the specific language governing permissions and limitations under % the License. @@ -222,6 +222,18 @@ decode_row(Row) -> ?JSON_DECODE(Row). +flush_updated_messages() -> + receive updated -> flush_updated_messages() + after 0 -> ok + end. + +local_update_notification(Self, DbName, {updated, DbName}) -> + Self ! updated; +local_update_notification(Self, DbName, {updated, DbName}) -> + Self ! deleted; +local_update_notification(_, _, _) -> + ok. + maybe_stream_next(false, Count, Id) when Count < ?MIN_BUFFER_SIZE -> ?LOG_DEBUG("~p reqid ~p streaming next chunk", [?MODULE, Id]), ibrowse:stream_next(Id); @@ -230,8 +242,11 @@ ok. send_local_changes_forever(Server, DbName, Since) -> + Self = self(), + {ok, _} = couch_db_update_notifier:start_link( + fun(Msg) -> local_update_notification(Self, DbName, Msg) end), {ok, NewSeq} = send_local_changes_once(Server, DbName, Since), - timer:sleep(5000), + ok = wait_db_updated(), send_local_changes_forever(Server, DbName, NewSeq). send_local_changes_once(Server, DbName, Since) -> @@ -268,3 +283,12 @@ {ibrowse_req_id, Id} = ibrowse:send_req_direct(Pid, RawUrl, [], get, [], Opts, infinity), {Pid, Id}. + +wait_db_updated() -> + receive deleted -> + exit(deleted) + after 0 -> + receive updated -> + flush_updated_messages() + end + end.