CouchDB
  1. CouchDB
  2. COUCHDB-822

body_too_large error for external processes, when body is 3MB

    Details

    • Type: Bug Bug
    • Status: Resolved
    • Priority: Minor Minor
    • Resolution: Fixed
    • Affects Version/s: 0.11
    • Fix Version/s: 1.3
    • Component/s: HTTP Interface
    • Labels:
      None
    • Environment:

      CouchDB 0.11 on Ubuntu 10.04,

    • Skill Level:
      Regular Contributors Level (Easy to Medium)

      Description

      I have a photo which is around 3 MB that I'm trying to PUT to an external process on the CouchDB database. The external process is called "_upload".
      I get an uncaught error "{exit,{body_too_large,content_length}}" in the logs when trying this. Smaller photos (around 60 kB) seem to work just fine.
      This just happens with external processes. I can upload the photo as an attachment directly to a document, with no problems.

      The error is similar to an earlier bug in the mochiweb library that was fixed around Feb 2009, where mochiweb never used the "max_document_size" setting that was provided when calling mochiweb_request:recv_body.

      I believe, supported by the stack trace below, that the cause for this bug is that in couch_httpd_external:json_req_obj the function mochiweb_request:recv_body/0 is called, which uses the mochiweb default value on MaxBody, which is 1 MB.
      I think that couch_httpd_external:json_req_obj should call mochiweb_request:recv_body/1 instead, with the "max_document_size" setting as the argument.

      Here are the error logs from one of my attempts:

      [Thu, 08 Jul 2010 18:49:53 GMT] [debug] [<0.3738.0>] 'PUT' /pillowfight/_upload/6b1908c352129ddda396fa69ac003d11

      {1,1}

      Headers: [

      {'Accept',"*/*"}

      ,

      {'Content-Length',"3093976"}

      ,

      {'Content-Type',"image/jpg"}

      ,

      {"Expect","100-continue"}

      ,

      {'Host',"localhost:5984"}

      ,

      {'User-Agent',"curl/7.19.7 (i486-pc-linux-gnu) libcurl/7.19.7 OpenSSL/0.9.8k zlib/1.2.3.3 libidn/1.15"}

      ]

      [Thu, 08 Jul 2010 18:49:53 GMT] [debug] [<0.3738.0>] OAuth Params: []

      [Thu, 08 Jul 2010 18:49:53 GMT] [error] [<0.3738.0>] Uncaught error in HTTP request: {exit,{body_too_large,content_length}}

      [Thu, 08 Jul 2010 18:49:53 GMT] [info] [<0.3738.0>] Stacktrace: [

      {mochiweb_request,stream_body,5}

      ,

      {mochiweb_request,recv_body,2}

      ,

      {couch_httpd_external,json_req_obj,3}

      ,

      {couch_httpd_external,process_external_req,3}

      ,

      {couch_httpd_db,do_db_req,2}

      ,

      {couch_httpd,handle_request_int,5}

      ,

      {mochiweb_http,headers,5}

      ,

      {proc_lib,init_p_do_apply,3}

      ]

        Activity

        Erik Edin created issue -
        Erik Edin made changes -
        Field Original Value New Value
        Description I have a photo which is around 3 MB that I'm trying to PUT to an external process on the CouchDB database. The external process is called "_upload".
        I get an uncaught error "{exit,{body_too_large,content_length}}" in the logs when trying this. Smaller photos (around 60 kB) seem to work just fine.
        This just happens with external processes. I can upload the photo as an attachment directly to a document, with no problems.

        The error is similar to an earlier bug in the mochiweb library that was fixed around Feb 2009, where mochiweb never used the "max_document_size" setting that was provided when calling mochiweb_request:recv_body.

        I believe, supported by the stack trace below, that the cause for this bug is that in couch_httpd_external:json_req_obj the function mochiweb_request:recv_body/0 is called, which uses the mochiweb default value on MaxBody, which is 1 MB.
        I think that couch_httpd_external:json_req_obj should call mochiweb_request:recv_body/1 instead, with the "max_document_size" setting as the argument.

        Unfortunately I was unable to patch it myself directly, probably due to my rusty Erlang skills.

        Here are the error logs from one of my attempts:

        [Thu, 08 Jul 2010 18:49:53 GMT] [debug] [<0.3738.0>] 'PUT' /pillowfight/_upload/6b1908c352129ddda396fa69ac003d11 {1,1}
        Headers: [{'Accept',"*/*"},
                  {'Content-Length',"3093976"},
                  {'Content-Type',"image/jpg"},
                  {"Expect","100-continue"},
                  {'Host',"localhost:5984"},
                  {'User-Agent',"curl/7.19.7 (i486-pc-linux-gnu) libcurl/7.19.7 OpenSSL/0.9.8k zlib/1.2.3.3 libidn/1.15"}]

        [Thu, 08 Jul 2010 18:49:53 GMT] [debug] [<0.3738.0>] OAuth Params: []

        [Thu, 08 Jul 2010 18:49:53 GMT] [error] [<0.3738.0>] Uncaught error in HTTP request: {exit,{body_too_large,content_length}}

        [Thu, 08 Jul 2010 18:49:53 GMT] [info] [<0.3738.0>] Stacktrace: [{mochiweb_request,stream_body,5},
                     {mochiweb_request,recv_body,2},
                     {couch_httpd_external,json_req_obj,3},
                     {couch_httpd_external,process_external_req,3},
                     {couch_httpd_db,do_db_req,2},
                     {couch_httpd,handle_request_int,5},
                     {mochiweb_http,headers,5},
                     {proc_lib,init_p_do_apply,3}]
        I have a photo which is around 3 MB that I'm trying to PUT to an external process on the CouchDB database. The external process is called "_upload".
        I get an uncaught error "{exit,{body_too_large,content_length}}" in the logs when trying this. Smaller photos (around 60 kB) seem to work just fine.
        This just happens with external processes. I can upload the photo as an attachment directly to a document, with no problems.

        The error is similar to an earlier bug in the mochiweb library that was fixed around Feb 2009, where mochiweb never used the "max_document_size" setting that was provided when calling mochiweb_request:recv_body.

        I believe, supported by the stack trace below, that the cause for this bug is that in couch_httpd_external:json_req_obj the function mochiweb_request:recv_body/0 is called, which uses the mochiweb default value on MaxBody, which is 1 MB.
        I think that couch_httpd_external:json_req_obj should call mochiweb_request:recv_body/1 instead, with the "max_document_size" setting as the argument.

        Here are the error logs from one of my attempts:

        [Thu, 08 Jul 2010 18:49:53 GMT] [debug] [<0.3738.0>] 'PUT' /pillowfight/_upload/6b1908c352129ddda396fa69ac003d11 {1,1}
        Headers: [{'Accept',"*/*"},
                  {'Content-Length',"3093976"},
                  {'Content-Type',"image/jpg"},
                  {"Expect","100-continue"},
                  {'Host',"localhost:5984"},
                  {'User-Agent',"curl/7.19.7 (i486-pc-linux-gnu) libcurl/7.19.7 OpenSSL/0.9.8k zlib/1.2.3.3 libidn/1.15"}]

        [Thu, 08 Jul 2010 18:49:53 GMT] [debug] [<0.3738.0>] OAuth Params: []

        [Thu, 08 Jul 2010 18:49:53 GMT] [error] [<0.3738.0>] Uncaught error in HTTP request: {exit,{body_too_large,content_length}}

        [Thu, 08 Jul 2010 18:49:53 GMT] [info] [<0.3738.0>] Stacktrace: [{mochiweb_request,stream_body,5},
                     {mochiweb_request,recv_body,2},
                     {couch_httpd_external,json_req_obj,3},
                     {couch_httpd_external,process_external_req,3},
                     {couch_httpd_db,do_db_req,2},
                     {couch_httpd,handle_request_int,5},
                     {mochiweb_http,headers,5},
                     {proc_lib,init_p_do_apply,3}]
        Paul Joseph Davis made changes -
        Skill Level Regular Contributors Level (Easy to Medium)
        Robert Newson made changes -
        Status Open [ 1 ] Resolved [ 5 ]
        Assignee Robert Newson [ rnewson ]
        Fix Version/s 1.2 [ 12315198 ]
        Resolution Fixed [ 1 ]
        Benoit Chesneau made changes -
        Resolution Fixed [ 1 ]
        Status Resolved [ 5 ] Reopened [ 4 ]
        Jan Lehnardt made changes -
        Fix Version/s 1.3 [ 12318350 ]
        Fix Version/s 1.2 [ 12315198 ]
        Robert Newson made changes -
        Status Reopened [ 4 ] Resolved [ 5 ]
        Resolution Fixed [ 1 ]

          People

          • Assignee:
            Robert Newson
            Reporter:
            Erik Edin
          • Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development