diff options
author | Adam Kocoloski <kocolosk@apache.org> | 2009-03-08 18:18:08 +0000 |
---|---|---|
committer | Adam Kocoloski <kocolosk@apache.org> | 2009-03-08 18:18:08 +0000 |
commit | dd79e85bc9e4849df904498ca25ec56304440b5f (patch) | |
tree | 6196200629dd9ee5e4acc4655f1b52a8fa22116d /src/couchdb/couch_httpd_misc_handlers.erl | |
parent | b4d54393f6a549b0d2c057b6646727fb99b15904 (diff) |
beefier fault tolerance in the replicator
- trap exits (enumerator and attachment streamers are linked)
- retry by respawning enumerator with last known good source seq
- checkpoint replication record on every flush of document buffer
- reformat nicer error messages to listeners if we need to exit
git-svn-id: https://svn.apache.org/repos/asf/couchdb/trunk@751491 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/couchdb/couch_httpd_misc_handlers.erl')
-rw-r--r-- | src/couchdb/couch_httpd_misc_handlers.erl | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/couchdb/couch_httpd_misc_handlers.erl b/src/couchdb/couch_httpd_misc_handlers.erl index be9e0033..583a87c2 100644 --- a/src/couchdb/couch_httpd_misc_handlers.erl +++ b/src/couchdb/couch_httpd_misc_handlers.erl @@ -92,8 +92,14 @@ handle_replicate_req(#httpd{user_ctx=UserCtx,method='POST'}=Req) -> [{headers, TgtHeaders}, {user_ctx, UserCtx}]} | Options], - {ok, {JsonResults}} = couch_rep:replicate(Source, Target, Options2), - send_json(Req, {[{ok, true} | JsonResults]}); + case couch_rep:replicate(Source, Target, Options2) of + {ok, {JsonResults}} -> + send_json(Req, {[{ok, true} | JsonResults]}); + {error, {Type, Details}} -> + send_json(Req, 500, {[{error, Type}, {reason, Details}]}); + {error, Reason} -> + send_json(Req, 500, {[{error, Reason}]}) + end; handle_replicate_req(Req) -> send_method_not_allowed(Req, "POST"). |