36
36
dw ,
37
37
pw ,
38
38
rw ,
39
+ search_queries ,
40
+ query_step_interval ,
41
+ start_time ,
39
42
keylist_length ,
40
43
preloaded_keys ,
41
44
timeout_general ,
@@ -79,6 +82,8 @@ new(Id) ->
79
82
RW = basho_bench_config :get (riakc_pb_rw , Replies ),
80
83
PW = basho_bench_config :get (riakc_pb_pw , Replies ),
81
84
PR = basho_bench_config :get (riakc_pb_pr , Replies ),
85
+ SearchQs = basho_bench_config :get (riakc_pb_search_queries , []),
86
+ SearchQStepIval = basho_bench_config :get (query_step_interval , 60 ),
82
87
Bucket = basho_bench_config :get (riakc_pb_bucket , <<" test" >>),
83
88
KeylistLength = basho_bench_config :get (riakc_pb_keylist_length , 1000 ),
84
89
PreloadedKeys = basho_bench_config :get (
@@ -99,6 +104,9 @@ new(Id) ->
99
104
dw = DW ,
100
105
rw = RW ,
101
106
pw = PW ,
107
+ search_queries = SearchQs ,
108
+ query_step_interval = SearchQStepIval ,
109
+ start_time = erlang :now (),
102
110
keylist_length = KeylistLength ,
103
111
preloaded_keys = PreloadedKeys ,
104
112
timeout_general = get_timeout_general (),
@@ -230,6 +238,34 @@ run(listkeys, _KeyGen, _ValueGen, State) ->
230
238
{error , Reason } ->
231
239
{error , Reason , State }
232
240
end ;
241
+ run (search , _KeyGen , _ValueGen , # state {search_queries = SearchQs }= State ) ->
242
+ [{Index , Query , Options }|_ ] = SearchQs ,
243
+
244
+ NewState = State # state {search_queries = roll_list (SearchQs )},
245
+
246
+ case riakc_pb_socket :search (NewState # state .pid , Index , Query , Options , NewState # state .timeout_read ) of
247
+ {ok , _Results } ->
248
+ {ok , NewState };
249
+ {error , Reason } ->
250
+ {error , Reason , NewState }
251
+ end ;
252
+ run (search_interval , _KeyGen , _ValueGen , # state {search_queries = SearchQs , start_time = StartTime , query_step_interval = Interval }= State ) ->
253
+ [{Index , Query , Options }|_ ] = SearchQs ,
254
+
255
+ Now = erlang :now (),
256
+ case timer :now_diff (Now , StartTime ) of
257
+ _MicroSec when _MicroSec > (Interval * 1000000 ) ->
258
+ NewState = State # state {search_queries = roll_list (SearchQs ),start_time = Now };
259
+ _MicroSec ->
260
+ NewState = State
261
+ end ,
262
+
263
+ case riakc_pb_socket :search (NewState # state .pid , Index , Query , Options , NewState # state .timeout_read ) of
264
+ {ok , _Results } ->
265
+ {ok , NewState };
266
+ {error , Reason } ->
267
+ {error , Reason , NewState }
268
+ end ;
233
269
run (mr_bucket_erlang , _KeyGen , _ValueGen , State ) ->
234
270
mapred (State , State # state .bucket , ? ERLANG_MR );
235
271
run (mr_bucket_js , _KeyGen , _ValueGen , State ) ->
@@ -336,6 +372,9 @@ make_keylist(Bucket, KeyGen, Count) ->
336
372
[{Bucket , list_to_binary (KeyGen ())}
337
373
|make_keylist (Bucket , KeyGen , Count - 1 )].
338
374
375
+ roll_list (List ) ->
376
+ [lists :last (List ) | lists :sublist (List , length (List ) - 1 )].
377
+
339
378
mapred_valgen (_Id , MaxRand ) ->
340
379
fun () ->
341
380
list_to_binary (integer_to_list (random :uniform (MaxRand )))
0 commit comments