Skip to content

Commit 1f0e618

Browse files
authored
knife fix when the rows in wild search exceeds 10k. (#3951)
Fix knife search issue with morethan 10K nodes. Signed-off-by: talktovikas <vikas.yadav@progress.com>
1 parent d3edd31 commit 1f0e618

10 files changed

Lines changed: 50 additions & 0 deletions

File tree

docs-chef-io/content/server/config_rb_server_optional_settings.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2023,6 +2023,11 @@ This configuration file has the following settings for `opscode-erchef`:
20232023

20242024
Default value: `127.0.0.1`.
20252025

2026+
`opscode_erchef['track_total_hits']`
2027+
2028+
: Whether to return how many documents matched the query.
2029+
2030+
Default value: `false`.
20262031

20272032
### opscode-expander
20282033

oc-chef-pedant/spec/running_configs/basic_config_spec.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,10 @@
142142
expect(config['opscode-erchef']['solr_http_max_age'].to_s).not_to eq ''
143143
end
144144

145+
it "opscode-erchef/track_total_hits" do
146+
expect(config['opscode-erchef']['track_total_hits'].to_s).not_to eq ''
147+
end
148+
145149
it "opscode-erchef/solr_http_max_connection_duration" do
146150
expect(config['opscode-erchef']['solr_http_max_connection_duration'].to_s).not_to eq ''
147151
end

omnibus/files/server-ctl-cookbooks/infra-server/attributes/default.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -344,6 +344,7 @@
344344
default['private_chef']['opscode-erchef']['search_batch_max_size'] = '5000000'
345345
default['private_chef']['opscode-erchef']['search_batch_max_wait'] = '10'
346346
default['private_chef']['opscode-erchef']['search_auth_username'] = 'opensearch_user'
347+
default['private_chef']['opscode-erchef']['track_total_hits'] = false
347348
# default['private_chef']['opscode-erchef']['search_auth_password'] = "admin"
348349
# solr_service configuration for erchef. These are used to configure an opscoderl_httpc pool
349350
# of HTTP connecton workers.

omnibus/files/server-ctl-cookbooks/infra-server/templates/default/oc_erchef.config.erb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,7 @@
189189
{solr_elasticsearch_major_version, <%= @solr_elasticsearch_major_version %>},
190190
{search_auth_username, "<%= node['private_chef']['opscode-erchef']['search_auth_username'] %>"},
191191
{search_auth_password, "<%= @helper.search_auth_password() %>"},
192+
{track_total_hits, <%= node['private_chef']['opscode-erchef']['track_total_hits'] -%>},
192193
{solr_service, [
193194
{root_url, "<%= @helper.search_engine_url() %>"},
194195
{timeout, <%= @solr_timeout %>},

src/oc_erchef/apps/chef_index/src/chef_index_query.erl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ from_params(Provider, ObjType, QueryString, Start, Rows) ->
3030
search_provider = Provider,
3131
start = decode({nonneg_int, "start"}, Start, 0),
3232
rows = decode({nonneg_int, "rows"}, Rows, 1000),
33+
track_total_hits = envy:get(chef_index, track_total_hits, false, boolean),
3334
sort = "X_CHEF_id_CHEF_X asc",
3435
index = index_type(ObjType)}.
3536

src/oc_erchef/apps/chef_index/src/chef_opensearch.erl

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,21 +103,54 @@ query_body(#chef_solr_query{
103103
query_string = Query,
104104
filter_query = undefined,
105105
start = Start,
106+
track_total_hits = true,
106107
rows = Rows}) ->
107108
jiffy:encode({[{fields_tag(), <<"_id">>},
108109
{<<"from">>, Start},
109110
{<<"size">>, Rows},
111+
{<<"track_total_hits">>,true},
110112
{<<"query">>, {[query_string_query_ejson(Query)]}}
111113
]});
114+
query_body(#chef_solr_query{
115+
query_string = Query,
116+
filter_query = undefined,
117+
start = Start,
118+
track_total_hits = false,
119+
rows = Rows}) ->
120+
jiffy:encode({[{fields_tag(), <<"_id">>},
121+
{<<"from">>, Start},
122+
{<<"size">>, Rows},
123+
{<<"query">>, {[query_string_query_ejson(Query)]}}
124+
]});
125+
126+
query_body(#chef_solr_query{
127+
query_string = Query,
128+
filter_query = FilterQuery,
129+
start = Start,
130+
track_total_hits = false,
131+
rows = Rows}) ->
132+
chef_index_query:assert_org_id_filter(FilterQuery),
133+
jiffy:encode({[{ fields_tag(), <<"_id">>},
134+
{<<"from">>, Start},
135+
{<<"size">>, Rows},
136+
{<<"sort">>, [{[{<<"X_CHEF_id_CHEF_X">>, {[{<<"order">>, <<"asc">>}]}}]}]},
137+
{<<"query">>, {[
138+
{<<"bool">>,{[
139+
{<<"must">>, {[query_string_query_ejson(Query)]}},
140+
{<<"filter">>, {[query_string_query_ejson(FilterQuery)]}}
141+
]}}]}
142+
}]});
112143
query_body(#chef_solr_query{
113144
query_string = Query,
114145
filter_query = FilterQuery,
115146
start = Start,
147+
track_total_hits = true,
116148
rows = Rows}) ->
117149
chef_index_query:assert_org_id_filter(FilterQuery),
118150
jiffy:encode({[{ fields_tag(), <<"_id">>},
119151
{<<"from">>, Start},
120152
{<<"size">>, Rows},
153+
{<<"track_total_hits">>,true},
121154
{<<"sort">>, [{[{<<"X_CHEF_id_CHEF_X">>, {[{<<"order">>, <<"asc">>}]}}]}]},
122155
{<<"query">>, {[
123156
{<<"bool">>,{[

src/oc_erchef/apps/chef_index/test/chef_index_query_tests.erl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ query_from_params_test_() ->
4040
sort = "X_CHEF_id_CHEF_X asc",
4141
start = 2,
4242
rows = 5,
43+
track_total_hits=false,
4344
index = node},
4445
?assertEqual(Expect, Query)
4546
end},
@@ -57,6 +58,7 @@ query_from_params_test_() ->
5758
sort = "X_CHEF_id_CHEF_X asc",
5859
start = 0,
5960
rows = 1000,
61+
track_total_hits=false,
6062
index = role},
6163
?assertEqual(Expect, Query)
6264
end},

src/oc_erchef/habitat/config/sys.config

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,7 @@
173173
{search_batch_max_wait, 10},
174174
{reindex_sleep_min_ms, 500},
175175
{reindex_sleep_max_ms, 2000},
176+
{track_total_hits, {{track_total_hits}} },
176177
{reindex_item_retries, 3},
177178
{solr_elasticsearch_major_version, 5},
178179
{solr_service, [

src/oc_erchef/habitat/default.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ keygen_timeout=5000
3030
[chef_db]
3131

3232
[chef_index]
33+
track_total_hits=false
3334

3435
[chef_objects]
3536

src/oc_erchef/include/chef_solr.hrl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
search_provider = solr :: 'solr' | 'elasticsearch' | 'opensearch',
2222
start :: integer() | undefined,
2323
rows :: integer() | undefined,
24+
track_total_hits :: boolean() |undefined,
2425
sort :: string() | undefined,
2526
index :: 'node'
2627
| 'role'

0 commit comments

Comments
 (0)