You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by be...@apache.org on 2014/07/13 14:34:16 UTC

[01/10] couch-httpd commit: updated refs/heads/1994-merge-rcouch to 82e454a

Repository: couchdb-couch-httpd
Updated Branches:
  refs/heads/1994-merge-rcouch e0ba70fea -> 82e454a9d


correctly pass timeout and heartbeat options.


Project: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/commit/697f5f05
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/tree/697f5f05
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/diff/697f5f05

Branch: refs/heads/1994-merge-rcouch
Commit: 697f5f05d248350fc2c50dd8c666d20559a26a52
Parents: 68bc4a2
Author: benoitc <bc...@gmail.com>
Authored: Wed Jul 2 11:00:49 2014 +0200
Committer: benoitc <bc...@gmail.com>
Committed: Sun Jul 13 14:33:19 2014 +0200

----------------------------------------------------------------------
 src/couch_httpd_changes.erl | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/blob/697f5f05/src/couch_httpd_changes.erl
----------------------------------------------------------------------
diff --git a/src/couch_httpd_changes.erl b/src/couch_httpd_changes.erl
index 4f2bd83..af21792 100644
--- a/src/couch_httpd_changes.erl
+++ b/src/couch_httpd_changes.erl
@@ -176,13 +176,18 @@ handle_view_changes(#db{name=DbName}=Db0, DDocId, VName, ViewOptions,
     #changes_args{
         feed = ResponseType,
         since = Since,
-        db_open_options = DbOptions} = ChangesArgs,
+        db_open_options = DbOptions,
+        heartbeat=Heartbeat,
+        timeout=Timeout} = ChangesArgs,
 
     Refresh = refresh_option(Req),
 
     Options0 = [{since, Since},
                 {view_options, ViewOptions},
-                {refresh, Refresh}],
+                {refresh, Refresh},
+                {heartbeat, Heartbeat},
+                {timeout, Timeout}],
+
     Options = case ResponseType of
         "continuous" -> [stream | Options0];
         "eventsource" -> [stream | Options0];


[08/10] couch-httpd commit: updated refs/heads/1994-merge-rcouch to 82e454a

Posted by be...@apache.org.
add multi view queries support


Project: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/commit/393c5337
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/tree/393c5337
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/diff/393c5337

Branch: refs/heads/1994-merge-rcouch
Commit: 393c5337ffd8e3361b1359054c1366df40f33531
Parents: d4705bf
Author: benoitc <bc...@gmail.com>
Authored: Sun Jul 6 01:21:03 2014 +0200
Committer: benoitc <bc...@gmail.com>
Committed: Sun Jul 13 14:33:20 2014 +0200

----------------------------------------------------------------------
 src/couch_httpd_changes.erl | 40 ++++++++++++++++++++++++++++++----------
 1 file changed, 30 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/blob/393c5337/src/couch_httpd_changes.erl
----------------------------------------------------------------------
diff --git a/src/couch_httpd_changes.erl b/src/couch_httpd_changes.erl
index 01a71fe..24dfe11 100644
--- a/src/couch_httpd_changes.erl
+++ b/src/couch_httpd_changes.erl
@@ -132,23 +132,42 @@ handle_changes(ChangesArgs, Req, Db) ->
 %% while couch_mrview_changes:handle_changes/6 is returning tha view
 %% changes this function return docs corresponding to the changes
 %% instead so it can be used to replace the _view filter.
-handle_view_changes(ChangesArgs, Req, Db) ->
+handle_view_changes(ChangesArgs, #httpd{method=Method}=Req, Db) ->
     %% parse view parameter
     {DDocId, VName} = parse_view_param(Req),
 
     %% get view options
-    {Query, NoIndex, JsonReq} = case Req of
+    {Query, Queries, NoIndex, JsonReq} = case Req of
         {json_req, {Props}} ->
             {Q} = couch_util:get_value(<<"query">>, Props, {[]}),
+            Queries1 = couch_util:get_value(<<"queries">>, Props,
+                                            undefined),
             NoIndex1 = (couch_util:get_value(<<"use_index">>, Q,
                                             <<"yes">>) =:= <<"no">>),
-            {Q, NoIndex1, true};
+            {Q, Queries1, NoIndex1, true};
         _ ->
+            Q = couch_httpd:qs(Req),
+            Queries1 = case Method of
+                'POST' ->
+                    {Props} = couch_httpd:json_body_obj(Req),
+                    couch_util:get_value(<<"queries">>, Props, undefined);
+                _ -> undefined
+            end,
             NoIndex1 = couch_httpd:qs_value(Req, "use_index", "yes") =:= "no",
-            {couch_httpd:qs(Req), NoIndex1, false}
+            {Q, Queries1, NoIndex1, false}
     end,
     ViewOptions = parse_view_options(Query, JsonReq, []),
 
+
+    QueriesOptions = case Queries of
+        undefined -> undefined;
+        _ ->
+            lists:foldl(fun({Options}, Acc) ->
+                    ViewOpts = parse_view_options(Options, true, []),
+                    [ViewOpts | Acc]
+            end, [], lists:reverse(Queries))
+    end,
+
     {ok, Infos} = couch_mrview:get_info(Db, DDocId),
     IsIndexed = lists:member(<<"seq_indexed">>,
                              proplists:get_value(update_options, Infos,
@@ -156,12 +175,12 @@ handle_view_changes(ChangesArgs, Req, Db) ->
 
     case {IsIndexed, NoIndex} of
         {true, false} ->
-            handle_view_changes(Db, DDocId, VName, ViewOptions, ChangesArgs,
-                                Req);
-        {true, true} when ViewOptions /= [] ->
+            handle_view_changes(Db, DDocId, VName, ViewOptions,
+                                QueriesOptions, ChangesArgs, Req);
+        {true, true} when ViewOptions /= [] orelse QueriesOptions /= [] ->
             ?LOG_ERROR("Tried to filter a non sequence indexed view~n",[]),
             throw({bad_request, seqs_not_indexed});
-        {false, _} when ViewOptions /= [] ->
+        {false, _} when ViewOptions /= [] orelse QueriesOptions /= [] ->
             ?LOG_ERROR("Tried to filter a non sequence indexed view~n",[]),
             throw({bad_request, seqs_not_indexed});
         {_, _} ->
@@ -172,7 +191,7 @@ handle_view_changes(ChangesArgs, Req, Db) ->
     end.
 
 handle_view_changes(#db{name=DbName}=Db0, DDocId, VName, ViewOptions,
-                    ChangesArgs, Req) ->
+                    QueriesOptions, ChangesArgs, Req) ->
     #changes_args{
         feed = ResponseType,
         since = Since,
@@ -184,6 +203,7 @@ handle_view_changes(#db{name=DbName}=Db0, DDocId, VName, ViewOptions,
 
     Options0 = [{since, Since},
                 {view_options, ViewOptions},
+                {queries, QueriesOptions},
                 {refresh, Refresh},
                 {heartbeat, Heartbeat},
                 {timeout, Timeout}],
@@ -376,7 +396,7 @@ parse_view_param1(ViewParam) ->
             throw({bad_request, "Invalid `view` parameter."})
     end.
 
-parse_view_options([], JsonReq, Acc) ->
+parse_view_options([], _JsonReq, Acc) ->
     Acc;
 parse_view_options([{K, V} | Rest], JsonReq, Acc) ->
     Acc1 = case couch_util:to_binary(K) of


[06/10] couch-httpd commit: updated refs/heads/1994-merge-rcouch to 82e454a

Posted by be...@apache.org.
view changes: distinct deleted document from removed keys


Project: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/commit/d4705bff
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/tree/d4705bff
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/diff/d4705bff

Branch: refs/heads/1994-merge-rcouch
Commit: d4705bff8465f0d81bc406743b2602291a3ac7d1
Parents: 3ca63eb
Author: benoitc <bc...@gmail.com>
Authored: Thu Jul 3 13:07:33 2014 +0200
Committer: benoitc <bc...@gmail.com>
Committed: Sun Jul 13 14:33:20 2014 +0200

----------------------------------------------------------------------
 src/couch_httpd_changes.erl | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/blob/d4705bff/src/couch_httpd_changes.erl
----------------------------------------------------------------------
diff --git a/src/couch_httpd_changes.erl b/src/couch_httpd_changes.erl
index 9548e30..01a71fe 100644
--- a/src/couch_httpd_changes.erl
+++ b/src/couch_httpd_changes.erl
@@ -281,9 +281,9 @@ view_change_row(Db, DocInfo, Args, Removed) ->
                 || #rev_info{rev=R} <- Revs]
     end,
 
-    Del = case {Removed, Del0} of
-        {true, _} -> true;
-        {false, true} -> true;
+    Del = case {Del0, Removed} of
+        {true, _} -> deleted;
+        {false, true} -> removed;
         _ -> false
     end,
 
@@ -454,5 +454,6 @@ parse_json(V, false) when is_list(V) ->
 parse_json(V, _) ->
     V.
 
-deleted_item(true) -> [{<<"deleted">>, true}];
+deleted_item(deleted) -> [{<<"deleted">>, true}];
+deleted_item(removed) -> [{<<"removed">>, true}];
 deleted_item(_) -> [].


[05/10] couch-httpd commit: updated refs/heads/1994-merge-rcouch to 82e454a

Posted by be...@apache.org.
fix view changes filter check


Project: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/commit/ffd029b3
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/tree/ffd029b3
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/diff/ffd029b3

Branch: refs/heads/1994-merge-rcouch
Commit: ffd029b3bf2f7b1886cbbde9942cc44e38eb6b6d
Parents: 393c533
Author: benoitc <bc...@gmail.com>
Authored: Sun Jul 6 09:10:19 2014 +0200
Committer: benoitc <bc...@gmail.com>
Committed: Sun Jul 13 14:33:20 2014 +0200

----------------------------------------------------------------------
 src/couch_httpd_changes.erl | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/blob/ffd029b3/src/couch_httpd_changes.erl
----------------------------------------------------------------------
diff --git a/src/couch_httpd_changes.erl b/src/couch_httpd_changes.erl
index 24dfe11..ad99ae7 100644
--- a/src/couch_httpd_changes.erl
+++ b/src/couch_httpd_changes.erl
@@ -177,10 +177,10 @@ handle_view_changes(ChangesArgs, #httpd{method=Method}=Req, Db) ->
         {true, false} ->
             handle_view_changes(Db, DDocId, VName, ViewOptions,
                                 QueriesOptions, ChangesArgs, Req);
-        {true, true} when ViewOptions /= [] orelse QueriesOptions /= [] ->
+        {true, true} when ViewOptions /= [] orelse QueriesOptions /= undefined ->
             ?LOG_ERROR("Tried to filter a non sequence indexed view~n",[]),
             throw({bad_request, seqs_not_indexed});
-        {false, _} when ViewOptions /= [] orelse QueriesOptions /= [] ->
+        {false, _} when ViewOptions /= [] orelse QueriesOptions /= undefined ->
             ?LOG_ERROR("Tried to filter a non sequence indexed view~n",[]),
             throw({bad_request, seqs_not_indexed});
         {_, _} ->


[03/10] couch-httpd commit: updated refs/heads/1994-merge-rcouch to 82e454a

Posted by be...@apache.org.
wrap the chunk fun so rcouch-couch doesn't depends on mochiweb


Project: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/commit/b897545a
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/tree/b897545a
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/diff/b897545a

Branch: refs/heads/1994-merge-rcouch
Commit: b897545ac25bd314056a1accee8283bb8c6fc475
Parents: ffd029b
Author: benoitc <bc...@gmail.com>
Authored: Tue Jul 8 11:10:59 2014 +0200
Committer: benoitc <bc...@gmail.com>
Committed: Sun Jul 13 14:33:20 2014 +0200

----------------------------------------------------------------------
 src/couch_httpd_changes.erl |  2 +-
 src/couch_httpd_db.erl      | 12 +++++++++++-
 2 files changed, 12 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/blob/b897545a/src/couch_httpd_changes.erl
----------------------------------------------------------------------
diff --git a/src/couch_httpd_changes.erl b/src/couch_httpd_changes.erl
index ad99ae7..28f9523 100644
--- a/src/couch_httpd_changes.erl
+++ b/src/couch_httpd_changes.erl
@@ -145,7 +145,7 @@ handle_view_changes(ChangesArgs, #httpd{method=Method}=Req, Db) ->
             NoIndex1 = (couch_util:get_value(<<"use_index">>, Q,
                                             <<"yes">>) =:= <<"no">>),
             {Q, Queries1, NoIndex1, true};
-        _ ->
+        #httpd{}=Req ->
             Q = couch_httpd:qs(Req),
             Queries1 = case Method of
                 'POST' ->

http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/blob/b897545a/src/couch_httpd_db.erl
----------------------------------------------------------------------
diff --git a/src/couch_httpd_db.erl b/src/couch_httpd_db.erl
index 0d1e0f8..c63e74d 100644
--- a/src/couch_httpd_db.erl
+++ b/src/couch_httpd_db.erl
@@ -945,8 +945,18 @@ db_attachment_req(#httpd{method=Method,mochi_req=MochiReq}=Req, Db, DocId, FileN
                         exit({unknown_transfer_encoding, Unknown});
                     chunked ->
                         fun(MaxChunkSize, ChunkFun, InitState) ->
+                            ChunkFunWrapper = fun
+                                ({0, Footers}, Acc) ->
+                                    F = mochiweb_headers:from_binary(Footers),
+                                    Md5 = mochiweb_headers:get_value(
+                                            "Content-MD5", F),
+                                    ChunkFun(Md5, Acc);
+                                (Else, Acc) ->
+                                    ChunkFun(Else, Acc)
+                            end,
+
                             couch_httpd:recv_chunked(Req, MaxChunkSize,
-                                ChunkFun, InitState)
+                                ChunkFunWrapper, InitState)
                         end;
                     0 ->
                         <<"">>;


[04/10] couch-httpd commit: updated refs/heads/1994-merge-rcouch to 82e454a

Posted by be...@apache.org.
view changes: fix json_req parsing


Project: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/commit/3ca63eb3
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/tree/3ca63eb3
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/diff/3ca63eb3

Branch: refs/heads/1994-merge-rcouch
Commit: 3ca63eb30cdb8a4947756191d0374e0c755aba3c
Parents: 1709879
Author: benoitc <bc...@gmail.com>
Authored: Thu Jul 3 11:31:17 2014 +0200
Committer: benoitc <bc...@gmail.com>
Committed: Sun Jul 13 14:33:20 2014 +0200

----------------------------------------------------------------------
 src/couch_httpd_changes.erl | 32 +++++++++++++++++---------------
 1 file changed, 17 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/blob/3ca63eb3/src/couch_httpd_changes.erl
----------------------------------------------------------------------
diff --git a/src/couch_httpd_changes.erl b/src/couch_httpd_changes.erl
index a6d50c3..9548e30 100644
--- a/src/couch_httpd_changes.erl
+++ b/src/couch_httpd_changes.erl
@@ -137,17 +137,17 @@ handle_view_changes(ChangesArgs, Req, Db) ->
     {DDocId, VName} = parse_view_param(Req),
 
     %% get view options
-    {Query, NoIndex} = case Req of
+    {Query, NoIndex, JsonReq} = case Req of
         {json_req, {Props}} ->
             {Q} = couch_util:get_value(<<"query">>, Props, {[]}),
             NoIndex1 = (couch_util:get_value(<<"use_index">>, Q,
                                             <<"yes">>) =:= <<"no">>),
-            {Q, NoIndex1};
+            {Q, NoIndex1, true};
         _ ->
             NoIndex1 = couch_httpd:qs_value(Req, "use_index", "yes") =:= "no",
-            {couch_httpd:qs(Req), NoIndex1}
+            {couch_httpd:qs(Req), NoIndex1, false}
     end,
-    ViewOptions = parse_view_options(Query, []),
+    ViewOptions = parse_view_options(Query, JsonReq, []),
 
     {ok, Infos} = couch_mrview:get_info(Db, DDocId),
     IsIndexed = lists:member(<<"seq_indexed">>,
@@ -376,29 +376,29 @@ parse_view_param1(ViewParam) ->
             throw({bad_request, "Invalid `view` parameter."})
     end.
 
-parse_view_options([], Acc) ->
+parse_view_options([], JsonReq, Acc) ->
     Acc;
-parse_view_options([{K, V} | Rest], Acc) ->
+parse_view_options([{K, V} | Rest], JsonReq, Acc) ->
     Acc1 = case couch_util:to_binary(K) of
         <<"reduce">> ->
             [{reduce, couch_mrview_http:parse_boolean(V)}];
         <<"key">> ->
-            V1 = parse_json(V),
+            V1 = parse_json(V, JsonReq),
             [{start_key, V1}, {end_key, V1} | Acc];
         <<"keys">> ->
-            [{keys, parse_json(V)} | Acc];
+            [{keys, parse_json(V, JsonReq)} | Acc];
         <<"startkey">> ->
-            [{start_key, parse_json(V)} | Acc];
+            [{start_key, parse_json(V, JsonReq)} | Acc];
         <<"start_key">> ->
-            [{start_key, parse_json(V)} | Acc];
+            [{start_key, parse_json(V, JsonReq)} | Acc];
         <<"startkey_docid">> ->
             [{start_key_docid, couch_util:to_binary(V)} | Acc];
         <<"start_key_docid">> ->
             [{start_key_docid, couch_util:to_binary(V)} | Acc];
         <<"endkey">> ->
-            [{end_key, parse_json(V)} | Acc];
+            [{end_key, parse_json(V, JsonReq)} | Acc];
         <<"end_key">> ->
-            [{end_key, parse_json(V)} | Acc];
+            [{end_key, parse_json(V, JsonReq)} | Acc];
         <<"endkey_docid">> ->
             [{start_key_docid, couch_util:to_binary(V)} | Acc];
         <<"end_key_docid">> ->
@@ -436,7 +436,7 @@ parse_view_options([{K, V} | Rest], Acc) ->
         _ ->
             Acc
     end,
-    parse_view_options(Rest, Acc1).
+    parse_view_options(Rest, JsonReq, Acc1).
 
 refresh_option({json_req, {Props}}) ->
     {Query} = couch_util:get_value(<<"query">>, Props),
@@ -447,9 +447,11 @@ refresh_option(Req) ->
         _ -> true
     end.
 
-parse_json(V) when is_list(V) ->
+parse_json(V, true) when is_binary(V) ->
     ?JSON_DECODE(V);
-parse_json(V) ->
+parse_json(V, false) when is_list(V) ->
+    ?JSON_DECODE(V);
+parse_json(V, _) ->
     V.
 
 deleted_item(true) -> [{<<"deleted">>, true}];


[02/10] couch-httpd commit: updated refs/heads/1994-merge-rcouch to 82e454a

Posted by be...@apache.org.
fix typo


Project: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/commit/68bc4a25
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/tree/68bc4a25
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/diff/68bc4a25

Branch: refs/heads/1994-merge-rcouch
Commit: 68bc4a25f9dd189a23dc1a68cc4917d710b223d3
Parents: e0ba70f
Author: benoitc <bc...@gmail.com>
Authored: Tue Jul 1 12:00:46 2014 +0200
Committer: benoitc <bc...@gmail.com>
Committed: Sun Jul 13 14:33:19 2014 +0200

----------------------------------------------------------------------
 src/couch_httpd_changes.erl | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/blob/68bc4a25/src/couch_httpd_changes.erl
----------------------------------------------------------------------
diff --git a/src/couch_httpd_changes.erl b/src/couch_httpd_changes.erl
index 6cb0b16..4f2bd83 100644
--- a/src/couch_httpd_changes.erl
+++ b/src/couch_httpd_changes.erl
@@ -232,7 +232,7 @@ view_changes_cb({{Seq, _Key, DocId}, Val},
     Db = case Db0#db.update_seq >= Seq of
         true -> Db0;
         false ->
-            {ok, Db1} = couch_db:reopen_db(Db0),
+            {ok, Db1} = couch_db:reopen(Db0),
             Db1
     end,
 


[10/10] couch-httpd commit: updated refs/heads/1994-merge-rcouch to 82e454a

Posted by be...@apache.org.
add maintainance handler


Project: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/commit/f26c6689
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/tree/f26c6689
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/diff/f26c6689

Branch: refs/heads/1994-merge-rcouch
Commit: f26c6689fd78ffb77fd5c07f826308eb86db63f8
Parents: b897545
Author: benoitc <bc...@gmail.com>
Authored: Tue Jul 8 13:17:42 2014 +0200
Committer: benoitc <bc...@gmail.com>
Committed: Sun Jul 13 14:33:20 2014 +0200

----------------------------------------------------------------------
 src/couch_httpd_misc_handlers.erl | 17 ++++++++++++++---
 1 file changed, 14 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/blob/f26c6689/src/couch_httpd_misc_handlers.erl
----------------------------------------------------------------------
diff --git a/src/couch_httpd_misc_handlers.erl b/src/couch_httpd_misc_handlers.erl
index 293ef00..26fd75c 100644
--- a/src/couch_httpd_misc_handlers.erl
+++ b/src/couch_httpd_misc_handlers.erl
@@ -13,9 +13,10 @@
 -module(couch_httpd_misc_handlers).
 
 -export([handle_welcome_req/2,handle_favicon_req/2,handle_utils_dir_req/2,
-    handle_all_dbs_req/1,handle_restart_req/1,
-    handle_uuids_req/1,handle_config_req/1,handle_log_req/1,
-    handle_task_status_req/1, handle_file_req/2]).
+         handle_all_dbs_req/1,handle_restart_req/1,
+         handle_uuids_req/1,handle_config_req/1,handle_log_req/1,
+         handle_task_status_req/1, handle_file_req/2,
+         handle_up_req/1]).
 
 -export([increment_update_seq_req/2]).
 
@@ -316,3 +317,13 @@ handle_log_req(#httpd{method='POST'}=Req) ->
     end;
 handle_log_req(Req) ->
     send_method_not_allowed(Req, "GET,POST").
+
+handle_up_req(#httpd{method='GET'} = Req) ->
+    case couch_config:get("couchdb", "maintenance_mode") of
+        "true" ->
+            couch_httpd:send_json(Req, 404, {[{status, maintenance_mode}]});
+        _ ->
+            couch_httpd:send_json(Req, 200, {[{status, ok}]})
+    end;
+handle_up_req(Req) ->
+    couch_httpd:send_method_not_allowed(Req, "GET,HEAD").


[09/10] couch-httpd commit: updated refs/heads/1994-merge-rcouch to 82e454a

Posted by be...@apache.org.
expose couch_httpd:send_error


Project: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/commit/82e454a9
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/tree/82e454a9
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/diff/82e454a9

Branch: refs/heads/1994-merge-rcouch
Commit: 82e454a9d8021d85b7340895125c0bd3baaa47ec
Parents: f26c668
Author: benoitc <bc...@gmail.com>
Authored: Tue Jul 8 14:27:42 2014 +0200
Committer: benoitc <bc...@gmail.com>
Committed: Sun Jul 13 14:33:20 2014 +0200

----------------------------------------------------------------------
 src/couch_httpd.erl | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/blob/82e454a9/src/couch_httpd.erl
----------------------------------------------------------------------
diff --git a/src/couch_httpd.erl b/src/couch_httpd.erl
index 29f9db0..5d9552c 100644
--- a/src/couch_httpd.erl
+++ b/src/couch_httpd.erl
@@ -26,7 +26,8 @@
 -export([start_chunked_response/3,send_chunk/2,log_request/2]).
 -export([start_response_length/4, start_response/3, send/2]).
 -export([start_json_response/2, start_json_response/3, end_json_response/1]).
--export([send_response/4,send_method_not_allowed/2,send_error/4, send_redirect/2,send_chunked_error/2]).
+-export([send_response/4,send_method_not_allowed/2,send_error/2,
+        send_error/4,send_error/5, send_error/6, send_redirect/2,send_chunked_error/2]).
 -export([send_json/2,send_json/3,send_json/4,last_chunk/1,parse_multipart_request/3]).
 -export([accepted_encodings/1,handle_request_int/5,validate_referer/1,validate_ctype/2]).
 -export([http_1_0_keep_alive/2]).
@@ -887,6 +888,16 @@ send_error(Req, Code, Headers, ErrorStr, ReasonStr) ->
         {[{<<"error">>,  ErrorStr},
          {<<"reason">>, ReasonStr}]}).
 
+
+send_error(Req, Code, Headers, ErrorStr, ReasonStr, Stack) ->
+    send_json(Req, Code, Headers,
+        {[{<<"error">>, ErrorStr},
+        {<<"reason">>, ReasonStr} |
+        case Stack of [] -> []; _ -> [{stack, Stack}] end
+    ]}).
+
+
+
 % give the option for list functions to output html or other raw errors
 send_chunked_error(Resp, {_Error, {[{<<"body">>, Reason}]}}) ->
     send_chunk(Resp, Reason),


[07/10] couch-httpd commit: updated refs/heads/1994-merge-rcouch to 82e454a

Posted by be...@apache.org.
display deleted keys change


Project: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/commit/1709879a
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/tree/1709879a
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/diff/1709879a

Branch: refs/heads/1994-merge-rcouch
Commit: 1709879ad91b8f3d7891fc2fc4b25875b39e7a6a
Parents: 697f5f0
Author: benoitc <bc...@gmail.com>
Authored: Thu Jul 3 10:23:57 2014 +0200
Committer: benoitc <bc...@gmail.com>
Committed: Sun Jul 13 14:33:20 2014 +0200

----------------------------------------------------------------------
 src/couch_httpd_changes.erl | 41 ++++++++++++++++++++--------------------
 1 file changed, 20 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/couchdb-couch-httpd/blob/1709879a/src/couch_httpd_changes.erl
----------------------------------------------------------------------
diff --git a/src/couch_httpd_changes.erl b/src/couch_httpd_changes.erl
index af21792..a6d50c3 100644
--- a/src/couch_httpd_changes.erl
+++ b/src/couch_httpd_changes.erl
@@ -244,24 +244,17 @@ view_changes_cb({{Seq, _Key, DocId}, Val},
     case couch_db:get_doc_info(Db, DocId) of
         {ok, DocInfo} ->
             %% get change row
-            {Deleted, ChangeRow} = view_change_row(Db, DocInfo, Args),
+            ChangeRow = view_change_row(Db, DocInfo, Args, Removed),
 
-            case Removed of
-                true when Deleted /= true ->
-                    %% the key has been removed from the view but the
-                    %% document hasn't been deleted so ignore it.
-                    {ok, Acc};
-                _ ->
-                    %% emit change row
-                    Callback({change, ChangeRow, Prepend}, ResponseType),
-
-                    %% if we achieved the limit, stop here, else continue.
-                    NewLimit = OldLimit + 1,
-                    if Limit > NewLimit ->
-                            {ok, {<<",\n">>, NewLimit, Db, Callback, Args}};
-                        true ->
-                            {stop, {<<"">>, NewLimit, Db, Callback, Args}}
-                    end
+            %% emit change row
+            Callback({change, ChangeRow, Prepend}, ResponseType),
+
+            %% if we achieved the limit, stop here, else continue.
+            NewLimit = OldLimit + 1,
+            if Limit > NewLimit ->
+                    {ok, {<<",\n">>, NewLimit, Db, Callback, Args}};
+                true ->
+                    {stop, {<<"">>, NewLimit, Db, Callback, Args}}
             end;
         {error, not_found} ->
             %% doc not found, continue
@@ -271,9 +264,9 @@ view_changes_cb({{Seq, _Key, DocId}, Val},
     end.
 
 
-view_change_row(Db, DocInfo, Args) ->
+view_change_row(Db, DocInfo, Args, Removed) ->
     #doc_info{id = Id, high_seq = Seq, revs = Revs} = DocInfo,
-    [#rev_info{rev=Rev, deleted=Del} | _] = Revs,
+    [#rev_info{rev=Rev, deleted=Del0} | _] = Revs,
 
     #changes_args{style=Style,
                   include_docs=InDoc,
@@ -288,7 +281,13 @@ view_change_row(Db, DocInfo, Args) ->
                 || #rev_info{rev=R} <- Revs]
     end,
 
-    {Del, {[{<<"seq">>, Seq}, {<<"id">>, Id}, {<<"changes">>, Changes}] ++
+    Del = case {Removed, Del0} of
+        {true, _} -> true;
+        {false, true} -> true;
+        _ -> false
+    end,
+
+    {[{<<"seq">>, Seq}, {<<"id">>, Id}, {<<"changes">>, Changes}] ++
      deleted_item(Del) ++ case InDoc of
             true ->
                 Opts = case Conflicts of
@@ -304,7 +303,7 @@ view_change_row(Db, DocInfo, Args) ->
                 end;
             false ->
                 []
-    end}}.
+    end}.
 
 parse_changes_query(Req, Db) ->
     ChangesArgs = lists:foldl(fun({Key, Value}, Args) ->