[ https://issues.apache.org/jira/browse/COUCHDB-1651?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13579479#comment-13579479 ]
Christopher Bonhage commented on COUCHDB-1651: ---------------------------------------------- Alright, I've figured out what's going on! I added some logging to couch_httpd_rewrite:handle_rewrite_req/3: MaxRewritesList = couch_config:get("httpd", "rewrite_limit", "100"), MaxRewrites = list_to_integer(MaxRewritesList), RewriteCount = case get(couch_rewrite_count) of undefined -> 0; Count -> Count end, ?LOG_INFO("rewrite recursion depth ~B/~B", [RewriteCount, MaxRewrites]), case RewriteCount of NumRewrites when NumRewrites < MaxRewrites -> put(couch_rewrite_count, NumRewrites + 1); _ -> throw({bad_request, <<"Exceeded rewrite recursion limit">>}) end, I noticed the problem immediately: CouchDB is reusing request processes, but not clearing the couch_rewrite_count in the process dictionary! Apache CouchDB has started. Time to relax. [info] [<0.36.0>] Apache CouchDB has started on http://0.0.0.0:5984/ [info] [<0.36.0>] Apache CouchDB has started on https://0.0.0.0:6984/ [info] [<0.134.0>] rewrite recursion depth 0/100 [info] [<0.134.0>] 127.0.0.1 - - GET /testdb/testapp/apps/testapp.html 200 [info] [<0.134.0>] rewrite recursion depth 1/100 [info] [<0.134.0>] 127.0.0.1 - - GET /testdb/testapp/stylesheets/testapp/screen.css 200 [info] [<0.134.0>] rewrite recursion depth 2/100 [info] [<0.134.0>] 127.0.0.1 - - GET /testapp/_design/testapp/_list/image_json/images?_=1360958246705 200 [info] [<0.134.0>] rewrite recursion depth 3/100 [info] [<0.134.0>] 127.0.0.1 - - GET /testapp/396/images/1.jpg?key=396&file=1.jpg 200 [info] [<0.134.0>] rewrite recursion depth 4/100 [info] [<0.134.0>] 127.0.0.1 - - GET /testdb/testapp/apps/testapp.html 200 [info] [<0.134.0>] rewrite recursion depth 5/100 [info] [<0.134.0>] 127.0.0.1 - - GET /testdb/testapp/stylesheets/testapp/screen.css 304 [info] [<0.134.0>] rewrite recursion depth 6/100 [info] [<0.134.0>] 127.0.0.1 - - GET /testapp/_design/testapp/_list/image_json/images?_=1360958261344 200 [info] [<0.134.0>] rewrite recursion depth 7/100 [info] [<0.134.0>] 127.0.0.1 - - GET /testapp/_design/testapp/_list/value_json/all?startkey=%5B%5D&endkey=%5B%7B%7D%5D 304 [info] [<0.134.0>] rewrite recursion depth 8/100 [info] [<0.134.0>] 127.0.0.1 - - GET /testapp/245/images/1.jpg?key=245&file=1.jpg 200 [info] [<0.134.0>] rewrite recursion depth 9/100 [info] [<0.134.0>] 127.0.0.1 - - GET /testapp/389/images/2.jpg?key=389&file=2.jpg 200 [info] [<0.134.0>] rewrite recursion depth 10/100 [info] [<0.134.0>] 127.0.0.1 - - GET /testapp/389/images/1.jpg?key=389&file=1.jpg 200 A quick search through the codebase confirms this: Searching 130 files for "couch_rewrite_count" (case sensitive) couchdb/src/couchdb/couch_httpd_rewrite.erl: 123 MaxRewritesList = couch_config:get("httpd", "rewrite_limit", "100"), 124 MaxRewrites = list_to_integer(MaxRewritesList), 125: case get(couch_rewrite_count) of 126 undefined -> 127: put(couch_rewrite_count, 1); 128 NumRewrites when NumRewrites < MaxRewrites -> 129: put(couch_rewrite_count, NumRewrites + 1); 130 _ -> 131 throw({bad_request, <<"Exceeded rewrite recursion limit">>}) 3 matches in 1 file > Server responds 400 "Exceeded rewrite recursion limit" indefinitely > ------------------------------------------------------------------- > > Key: COUCHDB-1651 > URL: https://issues.apache.org/jira/browse/COUCHDB-1651 > Project: CouchDB > Issue Type: Bug > Components: HTTP Interface > Reporter: Paul Frazee > > Running 1.2.1 on Windows 7 as a service. > hosts file includes "127.0.0.1 grimwire.local" > CouchDB conf includes vhosts entries: > grimwire.local:5984 /grimwire/_design/grimwire/_rewrite > grimwire.local:5984/local /grimwire/_design/local/_rewrite > 'grimwire' design doc rewrites: > [ > { > "from": "", > "to": "index.html", > "method": "GET" > }, > { > "from": "*", > "to": "*" > } > ] > 'local' design doc rewrites: > [ > { > "from":"", > "to":"index.html", > "method":"GET" > }, > { > "from":"/posts", > "to":"_list/wallpost/wallpost-by-created_at", > "method":"GET" > }, > { > "from":"/posts", > "to":"_update/wallpost", > "method":"POST" > }, > { > "from":"/posts/:id", > "to":"_show/wallpost/:id", > "method":"GET" > }, > { > "from":"/posts/:id", > "to":"_update/wallpost/:id", > "method":"PUT" > }, > { > "from":"*", > "to":"*" > } > ] > Problem: > The requests work as expected for some unknown period, then begin to respond > with a 400 status and the "Exceeded rewrite recursion limit" error message. > Changing the rewrites rules for both applications, including setting them to > empty arrays, had no effect. > The problem was solved by restarting the CouchDB service. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira