You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by ro...@apache.org on 2015/02/03 16:13:15 UTC

[08/50] [abbrv] couchdb-mango git commit: Allow the specification of w=3

Allow the specification of w=3

We removed the hardcoded w=3 but still want to use it for tests. This
enables us to specify w=3 for creating and deleting indexes and updates
the tests to use it.


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

Branch: refs/heads/master
Commit: c33efa3205b4405a3ac24bb4a3e8cc903d5ad399
Parents: 116227c
Author: Paul J. Davis <pa...@gmail.com>
Authored: Tue Jun 24 15:51:36 2014 -0500
Committer: Paul J. Davis <pa...@gmail.com>
Committed: Tue Jun 24 15:51:36 2014 -0500

----------------------------------------------------------------------
 src/mango_httpd.erl | 25 +++++++++++++++++++++++--
 src/mango_opts.erl  |  2 +-
 test/mango.py       |  5 +++--
 3 files changed, 27 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/couchdb-mango/blob/c33efa32/src/mango_httpd.erl
----------------------------------------------------------------------
diff --git a/src/mango_httpd.erl b/src/mango_httpd.erl
index 68bced0..fa6817f 100644
--- a/src/mango_httpd.erl
+++ b/src/mango_httpd.erl
@@ -49,7 +49,8 @@ handle_index_req(#httpd{method='POST', path_parts=[_, _]}=Req, Db) ->
         {ok, DDoc} ->
             <<"exists">>;
         {ok, NewDDoc} ->
-            case mango_crud:insert(Db, NewDDoc, Opts) of
+            CreateOpts = get_idx_create_opts(Opts),
+            case mango_crud:insert(Db, NewDDoc, CreateOpts) of
                 {ok, [{RespProps}]} ->
                     case lists:keyfind(error, 1, RespProps) of
                         {error, Reason} ->
@@ -91,7 +92,8 @@ handle_index_req(#httpd{method='DELETE',
                 _ ->
                     NewDDoc
             end,
-            case mango_crud:insert(Db, FinalDDoc, []) of
+            DelOpts = get_idx_del_opts(Req),
+            case mango_crud:insert(Db, FinalDDoc, DelOpts) of
                 {ok, _} ->
                     chttpd:send_json(Req, {[{ok, true}]});
                 _ ->
@@ -120,6 +122,25 @@ set_user_ctx(#httpd{user_ctx=Ctx}, Db) ->
     Db#db{user_ctx=Ctx}.
 
 
+get_idx_create_opts(Opts) ->
+    case lists:keyfind(w, 1, Opts) of
+        {w, N} when is_integer(N), N > 0 ->
+            [{w, integer_to_list(N)}];
+        _ ->
+            [{w, "2"}]
+    end.
+
+
+get_idx_del_opts(Req) ->
+    try
+        WStr = chttpd:qs_value(Req, "w", "2"),
+        _ = list_to_integer(WStr),
+        [{w, WStr}]
+    catch _:_ ->
+        [{w, "2"}]
+    end.
+
+
 start_find_resp(Req) ->
     chttpd:start_delayed_json_response(Req, 200, [], "{\"docs\":[").
 

http://git-wip-us.apache.org/repos/asf/couchdb-mango/blob/c33efa32/src/mango_opts.erl
----------------------------------------------------------------------
diff --git a/src/mango_opts.erl b/src/mango_opts.erl
index 9affbd0..cb42011 100644
--- a/src/mango_opts.erl
+++ b/src/mango_opts.erl
@@ -51,7 +51,7 @@ validate_idx_create({Props}) ->
             {tag, w},
             {optional, true},
             {default, 2},
-            {validator, fun is_non_neg_integer/1}
+            {validator, fun is_pos_integer/1}
         ]}
     ],
     validate(Props, Opts).

http://git-wip-us.apache.org/repos/asf/couchdb-mango/blob/c33efa32/test/mango.py
----------------------------------------------------------------------
diff --git a/test/mango.py b/test/mango.py
index 92c2a2c..fc201d6 100644
--- a/test/mango.py
+++ b/test/mango.py
@@ -65,7 +65,8 @@ class Database(object):
             "index": {
                 "fields": fields
             },
-            "type": idx_type
+            "type": idx_type,
+            "w": 3
         }
         if name is not None:
             body["name"] = name
@@ -83,7 +84,7 @@ class Database(object):
 
     def delete_index(self, ddocid, name, idx_type="json"):
         path = ["_index", ddocid, idx_type, name]
-        r = self.sess.delete(self.path(path))
+        r = self.sess.delete(self.path(path), params={"w":"3"})
         r.raise_for_status()
 
     def find(self, selector, limit=25, skip=0, sort=None, fields=None,