From c203e2ee065260a1f20227bab9f84330320c8b9e Mon Sep 17 00:00:00 2001 From: martinsumner Date: Fri, 17 Mar 2017 10:47:20 +0000 Subject: [PATCH] Range queries - pass out as binaries Avoid converting to erlang temr wihtin the FSM and then requiring a copy outside of the FSM - pass out as a binary --- src/leveled_sst.erl | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/leveled_sst.erl b/src/leveled_sst.erl index 498e043..c662583 100644 --- a/src/leveled_sst.erl +++ b/src/leveled_sst.erl @@ -196,9 +196,15 @@ sst_get(Pid, LedgerKey, Hash) -> gen_fsm:sync_send_event(Pid, {get_kv, LedgerKey, Hash}, infinity). sst_getkvrange(Pid, StartKey, EndKey, ScanWidth) -> - gen_fsm:sync_send_event(Pid, - {get_kvrange, StartKey, EndKey, ScanWidth}, - infinity). + Reply = gen_fsm:sync_send_event(Pid, + {get_kvrange, StartKey, EndKey, ScanWidth}, + infinity), + FetchFun = + fun({SlotBin, SK, EK}, Acc) -> + Acc ++ binaryslot_trimmedlist(SlotBin, SK, EK) + end, + {SlotsToFetchBinList, SlotsToPoint} = Reply, + lists:foldl(FetchFun, [], SlotsToFetchBinList) ++ SlotsToPoint. sst_getslots(Pid, SlotList) -> SlotBins = gen_fsm:sync_send_event(Pid, {get_slots, SlotList}, infinity), @@ -493,12 +499,7 @@ fetch_range(StartKey, EndKey, ScanWidth, State) -> end, SlotsToFetchBinList = read_slots(Handle, SlotsToFetch), - - FetchFun = - fun({SlotBin, SK, EK}, Acc) -> - Acc ++ binaryslot_trimmedlist(SlotBin, SK, EK) - end, - lists:foldl(FetchFun, [], SlotsToFetchBinList) ++ SlotsToPoint. + {SlotsToFetchBinList, SlotsToPoint}. write_file(RootPath, Filename, SummaryBin, SlotsBin) ->