You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by va...@apache.org on 2017/09/19 01:19:48 UTC

[couchdb] 01/01: Skip compression for EMSort data

This is an automated email from the ASF dual-hosted git repository.

vatamane pushed a commit to branch compactor-optimize-emsort-skip-compression
in repository https://gitbox.apache.org/repos/asf/couchdb.git

commit b9206094f32d60a9cbe000e443909726e8e93715
Author: Nick Vatamaniuc <va...@apache.org>
AuthorDate: Mon Sep 18 17:59:55 2017 -0400

    Skip compression for EMSort data
    
    EMSort data is either FDIs or {{Id, Seq}, Loc} KVs and using the default snappy
    compression on it is wasteful. snappy is a NIF so no matter how small the data
    there a cost associated with jumping to C and back.
    
    Since snappy is always the default for append_term(s)/2 even if user explicitly
    picks the default compression as something else in config files, have to
    explicitly pass the option to skip compression in each function call.
---
 src/couch/src/couch_db_updater.erl | 3 ++-
 src/couch/src/couch_emsort.erl     | 9 ++++++---
 2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/src/couch/src/couch_db_updater.erl b/src/couch/src/couch_db_updater.erl
index 4786ee7..f8cf764 100644
--- a/src/couch/src/couch_db_updater.erl
+++ b/src/couch/src/couch_db_updater.erl
@@ -1342,7 +1342,8 @@ copy_docs(Db, #db{fd = DestFd} = NewDb, MixedInfos, Retry) ->
             NewDb#db.seq_tree, NewInfos, RemoveSeqs),
 
     EMSortFd = couch_emsort:get_fd(NewDb#db.id_tree),
-    {ok, LocSizes} = couch_file:append_terms(EMSortFd, NewInfos),
+    EMOpts = [{compression, none}],
+    {ok, LocSizes} = couch_file:append_terms(EMSortFd, NewInfos, EMOpts),
     EMSortEntries = lists:zipwith(fun(FDI, {Loc, _}) ->
         #full_doc_info{
             id = Id,
diff --git a/src/couch/src/couch_emsort.erl b/src/couch/src/couch_emsort.erl
index 2a25a23..80edcbd 100644
--- a/src/couch/src/couch_emsort.erl
+++ b/src/couch/src/couch_emsort.erl
@@ -216,7 +216,8 @@ write_kvs(Ems, KVs) ->
     lists:foldr(fun(KV, Acc) ->
         append_item(Ems, Acc, KV, Ems#ems.chain_chunk)
     end, {[], nil}, lists:sort(KVs)),
-    {ok, Final, _} = couch_file:append_term(Ems#ems.fd, {LastKVs, LastPos}),
+    {ok, Final, _} = couch_file:append_term(Ems#ems.fd, {LastKVs, LastPos},
+        [{compression, none}]),
     Final.
 
 
@@ -263,7 +264,8 @@ merge_chains(Ems, Choose, BB) ->
 
 
 merge_chains(Ems, _Choose, [], ChainAcc) ->
-    {ok, CPos, _} = couch_file:append_term(Ems#ems.fd, ChainAcc),
+    {ok, CPos, _} = couch_file:append_term(Ems#ems.fd, ChainAcc,
+        [{compression, none}]),
     CPos;
 merge_chains(#ems{chain_chunk=CC}=Ems, Choose, Chains, Acc) ->
     {KV, RestChains} = choose_kv(Choose, Ems, Chains),
@@ -311,7 +313,8 @@ ins_big_chain(Rest, Chain, Acc) ->
 
 
 append_item(Ems, {List, Prev}, Pos, Size) when length(List) >= Size ->
-    {ok, PrevList, _} = couch_file:append_term(Ems#ems.fd, {List, Prev}),
+    {ok, PrevList, _} = couch_file:append_term(Ems#ems.fd, {List, Prev},
+        [{compression, none}]),
     {[Pos], PrevList};
 append_item(_Ems, {List, Prev}, Pos, _Size) ->
     {[Pos | List], Prev}.

-- 
To stop receiving notification emails like this one, please contact
"commits@couchdb.apache.org" <co...@couchdb.apache.org>.