|
33 | 33 |
|
34 | 34 | -include("folsom.hrl"). |
35 | 35 |
|
| 36 | +-define(WIDTH, 16). %% Keep this a power of two |
| 37 | + |
36 | 38 | new(Size) -> |
37 | 39 | Sample = #slide{window = Size}, |
38 | 40 | Pid = folsom_sample_slide_sup:start_slide_server(?MODULE, Sample#slide.reservoir, Sample#slide.window), |
39 | 41 | Sample#slide{server=Pid}. |
40 | 42 |
|
41 | 43 | update(#slide{reservoir = Reservoir} = Sample, Value) -> |
42 | 44 | Moment = moment(), |
43 | | - ets:insert(Reservoir, {Moment, Value}), |
| 45 | + X = erlang:system_info(scheduler_id), |
| 46 | + Rnd = X band (?WIDTH-1), |
| 47 | + ets:insert(Reservoir, {{Moment, Rnd}, Value}), |
44 | 48 | Sample. |
45 | 49 |
|
46 | 50 | get_values(#slide{window = Window, reservoir = Reservoir}) -> |
47 | 51 | Oldest = moment() - Window, |
48 | | - ets:select(Reservoir, [{{'$1','$2'},[{'>=', '$1', Oldest}],['$2']}]). |
| 52 | + ets:select(Reservoir, [{{{'$1','_'},'$2'},[{'>=', '$1', Oldest}],['$2']}]). |
49 | 53 |
|
50 | 54 | moment() -> |
51 | 55 | folsom_utils:now_epoch(). |
52 | 56 |
|
53 | 57 | trim(Reservoir, Window) -> |
54 | 58 | Oldest = moment() - Window, |
55 | | - ets:select_delete(Reservoir, [{{'$1','_'},[{'<', '$1', Oldest}],['true']}]). |
| 59 | + ets:select_delete(Reservoir, [{{{'$1','_'},'_'},[{'<', '$1', Oldest}],['true']}]). |
0 commit comments