[ 
https://issues.apache.org/jira/browse/COUCHDB-1340?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13152065#comment-13152065
 ] 

Filipe Manana commented on COUCHDB-1340:
----------------------------------------

Alex, that's great news :)
I found that the problem is mochiweb (our http server) doesn't allow request 
lines to exceed 8192 characters. We were accounting for this, but ignoring the 
extra characters account by "GET " and the trailing " HTTP/1.1\r\n" in the 
first request line. So my final patch is now this:

http://friendpaste.com/1TWqKb1Ac2hmKYh7VgNMLO


Index: src/couchdb/couch_rep_reader.erl
===================================================================
--- src/couchdb/couch_rep_reader.erl    (revision 1177549)
+++ src/couchdb/couch_rep_reader.erl    (working copy)
@@ -177,7 +177,7 @@
     hd(State#state.opened_seqs).
 
 split_revlist(Rev, {[CurrentAcc|Rest], BaseLength, Length}) ->
-    case Length+size(Rev)+3 > 8192 of
+    case Length+size(Rev)+3 >= 8192 of
     false ->
         {[[Rev|CurrentAcc] | Rest], BaseLength, Length+size(Rev)+3};
     true ->
@@ -214,7 +214,9 @@
     %% MochiWeb into multiple requests
     BaseQS = [{revs,true}, {latest,true}, {att_encoding_info,true}],
     BaseReq = DbS#http_db{resource=encode_doc_id(DocId), qs=BaseQS},
-    BaseLength = length(couch_rep_httpc:full_url(BaseReq) ++ "&open_revs=[]"),
+    BaseLength = length(
+        "GET " ++ couch_rep_httpc:full_url(BaseReq) ++
+        "&open_revs=[]" ++ " HTTP/1.1\r\n"),
 
     {RevLists, _, _} = lists:foldl(fun split_revlist/2,
         {[[]], BaseLength, BaseLength}, couch_doc:revs_to_strs(Revs)),


Thanks for testing and helping debug it. 
                
> Replication: Invalid JSON reported
> ----------------------------------
>
>                 Key: COUCHDB-1340
>                 URL: https://issues.apache.org/jira/browse/COUCHDB-1340
>             Project: CouchDB
>          Issue Type: Bug
>          Components: Replication
>    Affects Versions: 1.1.1
>         Environment: CentOS 5.6 x86_64, Couchdb 1.1.1 (Patched for 
> COUCHDB-1333), spidermonkey 1.8.5, curl 7.21, erlang 14b03
>            Reporter: Alex Markham
>              Labels: invalid, json
>         Attachments: 9c94ed0e23508f4ec3d18f8949c06a5b replicaton from 
> wireshark cut.txt, replication error wireshark.txt, source couch error.log, 
> target couch error.log
>
>
> It seems our replication has stopped, reporting an error
> [emulator] Error in process <0.21599.306> {{nocatch,{invalid_json,<<0 
> bytes>>}},[{couch_util,json_decode,1},{couch_rep_reader,'-open_doc_revs/3-lc$^1/1-1-',1},{couch_rep_reader,'-open_doc_revs/3-lc$^1/1-1-',1},{couch_rep_reader,open_doc_revs,3},{couch_rep_reader,'-spawn_document_request/4-fun-0-'...
>  
> It was all working until we upgraded some other couches in our replication 
> "web" from couch 1.0.3 to couch 1.1.1. We then set of database and view 
> compactions, and sometime overnight some of the replication links stopped.
> I have curled the command myself, both as a multipart message and a single 
> json response (with header "Accept:application/json" ) and it can be parsed 
> correctly by Python simplejson - I have attached it here aswell - called 
> "troublecurl-redacted.txt" - though it is 18.8mb. The request takes about 6 
> seconds.
> I don't quite understand why it is reported as invalid JSON? Other reports 
> similar to this that I googled mentioned blank document ids, but I can't see 
> any of these.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to