summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorRobert Newson <robert.newson@cloudant.com>2011-11-09 13:08:49 +0000
committerRobert Newson <robert.newson@cloudant.com>2011-11-09 14:47:39 +0000
commit6ad4258c2f2ca158ae311931d348941e74f01b89 (patch)
tree4b102373cc25ca231f3d027c4e5a5f0f03e35ef6 /apps
parent4216ca260c305ea3b39b2a45a8dd2e6d5cdb529f (diff)
Conditionally apply JSON encoding to update_seq values
BigCouch 0.3 cannot parse requests of the form /db/_changes?since="123-foo" so the recent ?JSON_ENCODE addition to Since in two places causes 0.3 <-> 0.4 replication to fail with json_encode/badterm errors. This patch applies JSON encoding only when the Since value is not already a binary (i.e, when it's a [integer(), binary()]) and interop is restored. BugzID: 12833
Diffstat (limited to 'apps')
-rw-r--r--apps/couch/src/couch_rep.erl3
-rw-r--r--apps/couch/src/couch_rep_changes_feed.erl3
2 files changed, 4 insertions, 2 deletions
diff --git a/apps/couch/src/couch_rep.erl b/apps/couch/src/couch_rep.erl
index 8f2508f5..82b69bc9 100644
--- a/apps/couch/src/couch_rep.erl
+++ b/apps/couch/src/couch_rep.erl
@@ -834,7 +834,8 @@ ensure_full_commit(#http_db{headers = Headers} = Source, RequiredSeq) ->
Req = Source#http_db{
resource = "_ensure_full_commit",
method = post,
- qs = [{seq, iolist_to_binary(?JSON_ENCODE(RequiredSeq))}],
+ qs = [{seq, case RequiredSeq of Bin when is_binary(Bin) -> Bin;
+ Else -> iolist_to_binary(?JSON_ENCODE(Else)) end}],
headers = Headers1
},
{ResultProps} = couch_rep_httpc:request(Req),
diff --git a/apps/couch/src/couch_rep_changes_feed.erl b/apps/couch/src/couch_rep_changes_feed.erl
index 70db52a0..651069fb 100644
--- a/apps/couch/src/couch_rep_changes_feed.erl
+++ b/apps/couch/src/couch_rep_changes_feed.erl
@@ -64,7 +64,8 @@ init([Parent, #http_db{headers = Headers0} = Source, Since, PostProps]) ->
BaseQS = [
{"style", all_docs},
{"heartbeat", 10000},
- {"since", iolist_to_binary(?JSON_ENCODE(Since))},
+ {"since", case Since of Bin when is_binary(Bin) -> Bin;
+ Else -> iolist_to_binary(?JSON_ENCODE(Else)) end},
{"feed", Feed}
],
{QS, Method, Body, Headers} = case get_value(<<"doc_ids">>, PostProps) of