diff options
author | Peng Hui Jiang <jiangphcn@apache.org> | 2018-08-30 22:29:34 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-08-30 22:29:34 +0800 |
commit | 9ab30104ea4f7d7704b85b8539656e26aad54b51 (patch) | |
tree | af35418927d99f3fc585eb762d9b4277d518a88a | |
parent | a4f3ca3c4868beee9992aa5b2d66bb9dc0b54e98 (diff) | |
parent | 271235008ea087985e085b808ee845a18ca5763d (diff) | |
download | couchdb-9ab30104ea4f7d7704b85b8539656e26aad54b51.tar.gz |
Merge pull request #31 from cloudant-labs/109229-improve-blacklist
Improve search blacklist
-rw-r--r-- | src/dreyfus_fabric_group1.erl | 2 | ||||
-rw-r--r-- | src/dreyfus_fabric_group2.erl | 2 | ||||
-rw-r--r-- | src/dreyfus_fabric_info.erl | 2 | ||||
-rw-r--r-- | src/dreyfus_fabric_search.erl | 2 | ||||
-rw-r--r-- | src/dreyfus_util.erl | 4 | ||||
-rw-r--r-- | test/dreyfus_blacklist_request_test.erl | 13 |
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]), |