summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeng Hui Jiang <jiangphcn@apache.org>2018-08-30 22:29:34 +0800
committerGitHub <noreply@github.com>2018-08-30 22:29:34 +0800
commit9ab30104ea4f7d7704b85b8539656e26aad54b51 (patch)
treeaf35418927d99f3fc585eb762d9b4277d518a88a
parenta4f3ca3c4868beee9992aa5b2d66bb9dc0b54e98 (diff)
parent271235008ea087985e085b808ee845a18ca5763d (diff)
downloadcouchdb-9ab30104ea4f7d7704b85b8539656e26aad54b51.tar.gz
Merge pull request #31 from cloudant-labs/109229-improve-blacklist
Improve search blacklist
-rw-r--r--src/dreyfus_fabric_group1.erl2
-rw-r--r--src/dreyfus_fabric_group2.erl2
-rw-r--r--src/dreyfus_fabric_info.erl2
-rw-r--r--src/dreyfus_fabric_search.erl2
-rw-r--r--src/dreyfus_util.erl4
-rw-r--r--test/dreyfus_blacklist_request_test.erl13
6 files changed, 24 insertions, 1 deletions
diff --git a/src/dreyfus_fabric_group1.erl b/src/dreyfus_fabric_group1.erl
index a0b488737..2d530ca7e 100644
--- a/src/dreyfus_fabric_group1.erl
+++ b/src/dreyfus_fabric_group1.erl
@@ -36,6 +36,8 @@ go(DbName, GroupId, IndexName, QueryArgs) when is_binary(GroupId) ->
go(DbName, DDoc, IndexName, QueryArgs);
go(DbName, DDoc, IndexName, #index_query_args{}=QueryArgs) ->
+ DesignName = dreyfus_util:get_design_docid(DDoc),
+ dreyfus_util:maybe_deny_index(DbName, DesignName, IndexName),
Shards = dreyfus_util:get_shards(DbName, QueryArgs),
Workers = fabric_util:submit_jobs(Shards, dreyfus_rpc, group1, [DDoc,
IndexName, dreyfus_util:export(QueryArgs)]),
diff --git a/src/dreyfus_fabric_group2.erl b/src/dreyfus_fabric_group2.erl
index 33e099281..1239f8b74 100644
--- a/src/dreyfus_fabric_group2.erl
+++ b/src/dreyfus_fabric_group2.erl
@@ -38,6 +38,8 @@ go(DbName, GroupId, IndexName, QueryArgs) when is_binary(GroupId) ->
go(DbName, DDoc, IndexName, QueryArgs);
go(DbName, DDoc, IndexName, #index_query_args{}=QueryArgs) ->
+ DesignName = dreyfus_util:get_design_docid(DDoc),
+ dreyfus_util:maybe_deny_index(DbName, DesignName, IndexName),
Shards = dreyfus_util:get_shards(DbName, QueryArgs),
Workers = fabric_util:submit_jobs(Shards, dreyfus_rpc, group2,
[DDoc, IndexName, dreyfus_util:export(QueryArgs)]),
diff --git a/src/dreyfus_fabric_info.erl b/src/dreyfus_fabric_info.erl
index 6c5dd9af3..27eec8065 100644
--- a/src/dreyfus_fabric_info.erl
+++ b/src/dreyfus_fabric_info.erl
@@ -27,6 +27,8 @@ go(DbName, DDocId, IndexName, InfoLevel) when is_binary(DDocId) ->
go(DbName, DDoc, IndexName, InfoLevel);
go(DbName, DDoc, IndexName, InfoLevel) ->
+ DesignName = dreyfus_util:get_design_docid(DDoc),
+ dreyfus_util:maybe_deny_index(DbName, DesignName, IndexName),
Shards = mem3:shards(DbName),
Workers = fabric_util:submit_jobs(Shards, dreyfus_rpc, InfoLevel, [DDoc, IndexName]),
RexiMon = fabric_util:create_monitors(Shards),
diff --git a/src/dreyfus_fabric_search.erl b/src/dreyfus_fabric_search.erl
index 7a208012d..acf7a83ec 100644
--- a/src/dreyfus_fabric_search.erl
+++ b/src/dreyfus_fabric_search.erl
@@ -37,6 +37,8 @@ go(DbName, GroupId, IndexName, QueryArgs) when is_binary(GroupId) ->
go(DbName, DDoc, IndexName, QueryArgs);
go(DbName, DDoc, IndexName, #index_query_args{bookmark=nil}=QueryArgs) ->
+ DesignName = dreyfus_util:get_design_docid(DDoc),
+ dreyfus_util:maybe_deny_index(DbName, DesignName, IndexName),
Shards = dreyfus_util:get_shards(DbName, QueryArgs),
Workers = fabric_util:submit_jobs(Shards, dreyfus_rpc, search,
[DDoc, IndexName, dreyfus_util:export(QueryArgs)]),
diff --git a/src/dreyfus_util.erl b/src/dreyfus_util.erl
index d6dffa9a6..82e4292b4 100644
--- a/src/dreyfus_util.erl
+++ b/src/dreyfus_util.erl
@@ -21,6 +21,7 @@
-export([get_shards/2, sort/2, upgrade/1, export/1, time/2]).
-export([in_black_list/1, in_black_list/3, maybe_deny_index/3]).
+-export([get_design_docid/1]).
get_shards(DbName, #index_query_args{stale=ok}) ->
mem3:ushards(DbName);
@@ -194,6 +195,9 @@ maybe_deny_index(DbName, GroupId, IndexName) ->
ok
end.
+get_design_docid(#doc{id = <<"_design/", DesignName/binary>>}) ->
+ DesignName.
+
-ifdef(TEST).
-include_lib("eunit/include/eunit.hrl").
diff --git a/test/dreyfus_blacklist_request_test.erl b/test/dreyfus_blacklist_request_test.erl
index faf8b747f..8e5598ae1 100644
--- a/test/dreyfus_blacklist_request_test.erl
+++ b/test/dreyfus_blacklist_request_test.erl
@@ -12,6 +12,7 @@
-module(dreyfus_blacklist_request_test).
+-include_lib("couch/include/couch_db.hrl").
-include_lib("couch_log/include/couch_log.hrl").
-include_lib("dreyfus/include/dreyfus.hrl").
-include_lib("eunit/include/eunit.hrl").
@@ -55,6 +56,8 @@ dreyfus_blacklist_request_test_() ->
deny_fabric_requests() ->
Reason = <<"Index <mydb, myddocid, myindexname>, is BlackListed">>,
QueryArgs = #index_query_args{},
+ IndexQueryArgs = #index_query_args{},
+ DDoc = #doc{id = <<"_design/myddocid">>},
Denied = "mydb.myddocid.myindexname",
config:set("dreyfus_blacklist", Denied, "true"),
dreyfus_test_util:wait_config_change(Denied, "true"),
@@ -65,7 +68,15 @@ deny_fabric_requests() ->
?assertThrow({bad_request, Reason}, dreyfus_fabric_group2:go(<<"mydb">>,
<<"myddocid">>, <<"myindexname">>, QueryArgs)),
?assertThrow({bad_request, Reason}, dreyfus_fabric_info:go(<<"mydb">>,
- <<"myddocid">>, <<"myindexname">>, QueryArgs)).
+ <<"myddocid">>, <<"myindexname">>, QueryArgs)),
+ ?assertThrow({bad_request, Reason}, dreyfus_fabric_search:go(<<"mydb">>,
+ DDoc, <<"myindexname">>, IndexQueryArgs)),
+ ?assertThrow({bad_request, Reason}, dreyfus_fabric_group1:go(<<"mydb">>,
+ DDoc, <<"myindexname">>, IndexQueryArgs)),
+ ?assertThrow({bad_request, Reason}, dreyfus_fabric_group2:go(<<"mydb">>,
+ DDoc, <<"myindexname">>, IndexQueryArgs)),
+ ?assertThrow({bad_request, Reason}, dreyfus_fabric_info:go(<<"mydb">>,
+ DDoc, <<"myindexname">>, IndexQueryArgs)).
allow_fabric_request() ->
ok = meck:new(dreyfus_fabric_search, [passthrough]),