Merge branch 'COUCHDB-3298-improve-couch-btree-chunkify'
diff --git a/src/couch_btree.erl b/src/couch_btree.erl
index e9ff7f5..adbc92b 100644
--- a/src/couch_btree.erl
+++ b/src/couch_btree.erl
@@ -342,11 +342,9 @@
% it's probably really inefficient.
chunkify(InList) ->
- BaseChunkSize = get_chunk_size(),
+ ChunkThreshold = get_chunk_size(),
case ?term_size(InList) of
- Size when Size > BaseChunkSize ->
- NumberOfChunksLikely = ((Size div BaseChunkSize) + 1),
- ChunkThreshold = Size div NumberOfChunksLikely,
+ Size when Size > ChunkThreshold ->
chunkify(InList, ChunkThreshold, [], 0, []);
_Else ->
[InList]
@@ -354,6 +352,9 @@
chunkify([], _ChunkThreshold, [], 0, OutputChunks) ->
lists:reverse(OutputChunks);
+chunkify([], _ChunkThreshold, [Item], _OutListSize, [PrevChunk | RestChunks]) ->
+ NewPrevChunk = PrevChunk ++ [Item],
+ lists:reverse(RestChunks, [NewPrevChunk]);
chunkify([], _ChunkThreshold, OutList, _OutListSize, OutputChunks) ->
lists:reverse([lists:reverse(OutList) | OutputChunks]);
chunkify([InElement | RestInList], ChunkThreshold, OutList, OutListSize, OutputChunks) ->