summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Vatamaniuc <vatamane@apache.org>2017-05-31 18:17:17 -0400
committerNick Vatamaniuc <vatamane@apache.org>2017-06-01 03:55:13 -0400
commit2fb36939ee3c2d7e3c862954e7b036a5616eed65 (patch)
tree11760cf3d26c7f1599c75300eda62a74dc880c39
parentcd42e0303c871e70455d9213d5e6fc57d03ed7dc (diff)
downloadcouchdb-COUCHDB-3287-pluggable-storage-engines-use-integers-for-local-revs.tar.gz
Fix compatibility with master local document revisionsCOUCHDB-3287-pluggable-storage-engines-use-integers-for-local-revs
Previously local doc revisions were integers. Keep them that way to allow downgrading back to previous CouchDB version.
-rw-r--r--src/couch/src/couch_bt_engine.erl15
-rw-r--r--src/couch/src/couch_db_updater.erl8
-rw-r--r--src/couch/src/test_engine_util.erl6
3 files changed, 14 insertions, 15 deletions
diff --git a/src/couch/src/couch_bt_engine.erl b/src/couch/src/couch_bt_engine.erl
index ca98d017b..5aa4de8f9 100644
--- a/src/couch/src/couch_bt_engine.erl
+++ b/src/couch/src/couch_bt_engine.erl
@@ -594,26 +594,25 @@ seq_tree_reduce(rereduce, Reds) ->
lists:sum(Reds).
-local_tree_split(#doc{} = Doc) ->
+local_tree_split(#doc{revs = {0, [Rev]}} = Doc) when is_binary(Rev) ->
#doc{
id = Id,
- revs = {0, [Rev]},
body = BodyData
} = Doc,
- {Id, {Rev, BodyData}}.
-
+ {Id, {binary_to_integer(Rev), BodyData}};
-local_tree_join(Id, {Rev, BodyData}) when is_binary(Rev) ->
+local_tree_split(#doc{revs = {0, [Rev]}} = Doc) when is_integer(Rev) ->
#doc{
id = Id,
- revs = {0, [Rev]},
body = BodyData
- };
+ } = Doc,
+ {Id, {Rev, BodyData}}.
+
local_tree_join(Id, {Rev, BodyData}) when is_integer(Rev) ->
#doc{
id = Id,
- revs = {0, [list_to_binary(integer_to_list(Rev))]},
+ revs = {0, [integer_to_binary(Rev)]},
body = BodyData
}.
diff --git a/src/couch/src/couch_db_updater.erl b/src/couch/src/couch_db_updater.erl
index 4b591b323..7577fe53e 100644
--- a/src/couch/src/couch_db_updater.erl
+++ b/src/couch/src/couch_db_updater.erl
@@ -645,17 +645,17 @@ update_local_doc_revs(Docs) ->
} = NewDoc,
case PrevRevs of
[RevStr | _] ->
- PrevRev = list_to_integer(?b2l(RevStr));
+ PrevRev = binary_to_integer(RevStr);
[] ->
PrevRev = 0
end,
NewRev = case Delete of
false ->
- ?l2b(integer_to_list(PrevRev + 1));
+ PrevRev + 1;
true ->
- <<"0">>
+ 0
end,
- send_result(Client, NewDoc, {ok, {0, NewRev}}),
+ send_result(Client, NewDoc, {ok, {0, integer_to_binary(NewRev)}}),
NewDoc#doc{
revs = {0, [NewRev]}
}
diff --git a/src/couch/src/test_engine_util.erl b/src/couch/src/test_engine_util.erl
index d19b7f1a9..c81acd03d 100644
--- a/src/couch/src/test_engine_util.erl
+++ b/src/couch/src/test_engine_util.erl
@@ -161,13 +161,13 @@ gen_local_write(Engine, St, {Action, {DocId, Body}}) ->
[#doc{revs = {0, []}}] ->
0;
[#doc{revs = {0, [RevStr | _]}}] ->
- list_to_integer(binary_to_list(RevStr))
+ binary_to_integer(RevStr)
end,
{RevId, Deleted} = case Action of
Action when Action == create; Action == update ->
- {list_to_binary(integer_to_list(PrevRev + 1)), false};
+ {PrevRev + 1, false};
delete ->
- {<<"0">>, true}
+ {0, true}
end,
#doc{
id = DocId,