You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by ja...@apache.org on 2010/02/28 03:41:52 UTC
svn commit: r917098 - in /couchdb/trunk: THANKS
share/www/script/test/show_documents.js src/couchdb/couch_httpd_show.erl
src/couchdb/couch_rep_att.erl src/couchdb/couch_rep_changes_feed.erl
Author: jan
Date: Sun Feb 28 02:41:52 2010
New Revision: 917098
URL: http://svn.apache.org/viewvc?rev=917098&view=rev
Log:
Merge branch 'show-deleted-docs' into trunk
* show-deleted-docs:
treat deleted docs as nonexistant docs
Revert "Avoid replication task crashes by imporoving timeout handling."
Modified:
couchdb/trunk/THANKS
couchdb/trunk/share/www/script/test/show_documents.js
couchdb/trunk/src/couchdb/couch_httpd_show.erl
couchdb/trunk/src/couchdb/couch_rep_att.erl
couchdb/trunk/src/couchdb/couch_rep_changes_feed.erl
Modified: couchdb/trunk/THANKS
URL: http://svn.apache.org/viewvc/couchdb/trunk/THANKS?rev=917098&r1=917097&r2=917098&view=diff
==============================================================================
--- couchdb/trunk/THANKS (original)
+++ couchdb/trunk/THANKS Sun Feb 28 02:41:52 2010
@@ -50,6 +50,5 @@
* Joel Clark <un...@yahoo.com>
* Matt Lyon <ma...@flowerpowered.com>
* mikeal <mi...@gmail.com>
- * Randall Leeds <ra...@gmail.com>
For a list of authors see the `AUTHORS` file.
Modified: couchdb/trunk/share/www/script/test/show_documents.js
URL: http://svn.apache.org/viewvc/couchdb/trunk/share/www/script/test/show_documents.js?rev=917098&r1=917097&r2=917098&view=diff
==============================================================================
--- couchdb/trunk/share/www/script/test/show_documents.js (original)
+++ couchdb/trunk/share/www/script/test/show_documents.js Sun Feb 28 02:41:52 2010
@@ -54,6 +54,13 @@
json : req
}
}),
+ "show-deleted" : stringFun(function(doc, req) {
+ if(doc) {
+ return doc._id;
+ } else {
+ return "No doc " + req.id;
+ }
+ }),
"render-error" : stringFun(function(doc, req) {
return noSuchVariable;
}),
@@ -393,5 +400,15 @@
T(xhr.responseText == "Hey Dude");
TEquals("Yeah", xhr.getResponseHeader("X-Couch-Test-Header"), "header should be cool");
TEquals("Oh Yeah!", xhr.getResponseHeader("X-Couch-Test-Header-Awesome"), "header should be cool");
+
+ // test deleted docs
+ var doc = {_id:"testdoc",foo:1};
+ db.save(doc);
+ var xhr = CouchDB.request("GET", "/test_suite_db/_design/template/_show/show-deleted/testdoc");
+ TEquals("testdoc", xhr.responseText, "should return 'testdoc'");
+
+ db.deleteDoc(doc);
+ var xhr = CouchDB.request("GET", "/test_suite_db/_design/template/_show/show-deleted/testdoc");
+ TEquals("No doc testdoc", xhr.responseText, "should return 'no doc testdoc'");
};
Modified: couchdb/trunk/src/couchdb/couch_httpd_show.erl
URL: http://svn.apache.org/viewvc/couchdb/trunk/src/couchdb/couch_httpd_show.erl?rev=917098&r1=917097&r2=917098&view=diff
==============================================================================
--- couchdb/trunk/src/couchdb/couch_httpd_show.erl (original)
+++ couchdb/trunk/src/couchdb/couch_httpd_show.erl Sun Feb 28 02:41:52 2010
@@ -31,6 +31,7 @@
maybe_open_doc(Db, DocId) ->
case catch couch_httpd_db:couch_doc_open(Db, DocId, nil, [conflicts]) of
{not_found, missing} -> nil;
+ {not_found,deleted} -> nil;
Doc -> Doc
end.
handle_doc_show_req(#httpd{
Modified: couchdb/trunk/src/couchdb/couch_rep_att.erl
URL: http://svn.apache.org/viewvc/couchdb/trunk/src/couchdb/couch_rep_att.erl?rev=917098&r1=917097&r2=917098&view=diff
==============================================================================
--- couchdb/trunk/src/couchdb/couch_rep_att.erl (original)
+++ couchdb/trunk/src/couchdb/couch_rep_att.erl Sun Feb 28 02:41:52 2010
@@ -25,11 +25,7 @@
qs = [{rev, couch_doc:rev_to_str({Pos,RevId})}]
},
Ref = make_ref(),
- RcvFun = fun() ->
- Bin = attachment_receiver(Ref, Request),
- cleanup(),
- Bin
- end,
+ RcvFun = fun() -> attachment_receiver(Ref, Request) end,
Attachment#att{data=RcvFun}.
cleanup() ->
@@ -38,8 +34,6 @@
%% TODO maybe log, didn't expect to have data here
cleanup();
{ibrowse_async_response_end, _} ->
- cleanup();
- {ibrowse_async_headers, _, _, _} ->
cleanup()
after 0 ->
erase(),
@@ -49,27 +43,13 @@
% internal funs
attachment_receiver(Ref, Request) ->
- try case get(Ref) of
+ case get(Ref) of
undefined ->
{ReqId, ContentEncoding} = start_http_request(Request),
put(Ref, {ReqId, ContentEncoding}),
receive_data(Ref, ReqId, ContentEncoding);
{ReqId, ContentEncoding} ->
receive_data(Ref, ReqId, ContentEncoding)
- end
- catch
- throw:{attachment_request_failed, timeout} ->
- case {Request#http_db.retries, Request#http_db.pause} of
- {0, _} ->
- ?LOG_INFO("request for ~p failed", [Request#http_db.resource]),
- throw({attachment_request_failed, max_retries_reached});
- {N, Pause} when N > 0 ->
- ?LOG_INFO("request for ~p timed out, retrying in ~p seconds",
- [Request#http_db.resource, Pause/1000]),
- timer:sleep(Pause),
- cleanup(),
- attachment_receiver(Ref, Request#http_db{retries = N-1})
- end
end.
receive_data(Ref, ReqId, ContentEncoding) ->
@@ -91,8 +71,6 @@
{ibrowse_async_response_end, ReqId} ->
?LOG_ERROR("streaming att. ended but more data requested ~p", [ReqId]),
throw({attachment_request_failed, premature_end})
- after 31000 ->
- throw({attachment_request_failed, timeout})
end.
start_http_request(Req) ->
@@ -106,8 +84,6 @@
{ok, ContentEncoding, NewReqId} ->
{NewReqId, ContentEncoding}
end
- after 10000 ->
- throw({attachment_request_failed, timeout})
end.
validate_headers(_Req, 200, Headers) ->
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=917098&r1=917097&r2=917098&view=diff
==============================================================================
--- couchdb/trunk/src/couchdb/couch_rep_changes_feed.erl (original)
+++ couchdb/trunk/src/couchdb/couch_rep_changes_feed.erl Sun Feb 28 02:41:52 2010
@@ -83,7 +83,8 @@
resource = "_changes",
qs = QS,
conn = Pid,
- options = [{stream_to, {self(), once}}, {response_format, binary}],
+ options = [{stream_to, {self(), once}}, {response_format, binary},
+ {inactivity_timeout, 31000}], % miss 3 heartbeats, assume death
headers = Source#http_db.headers -- [{"Accept-Encoding", "gzip"}]
},
{ibrowse_req_id, ReqId} = couch_rep_httpc:request(Req),
@@ -202,9 +203,6 @@
?LOG_ERROR("changes_loop died with reason ~p", [Reason]),
{stop, changes_loop_died, State};
-handle_info({'EXIT', _From, normal}, State) ->
- {noreply, State};
-
handle_info(Msg, State) ->
?LOG_DEBUG("unexpected message at changes_feed ~p", [Msg]),
{noreply, State}.