[
https://issues.apache.org/jira/browse/COUCHDB-1651?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13579774#comment-13579774
]
Benoit Chesneau commented on COUCHDB-1651:
------------------------------------------
Initial version wasn't using the process dictionary but was added because some
didn't want to have an extra header.
I don't think this is the problem there, correctly handling the routes
resolving is the path to go. Say instead of doing (in pseudo code):
handle_request(Req) ->
if path =:= "_rewrite" ->
handle_rewrite(Req)
else
do something
handle_rewrite(Req) ->
NewReq = handle_routes(Req),
handle_request(NewReq).
we could have:
handle_rewrite(Req) ->
Path = Req#path,
NewPath = resolve_route(Path, []),
resolve_route(Path, Resolved) ->
Rules = get_rules(Path),
NewPath = bind_path(Path, Rules),
if need_rewrite(NewPath) ->
if is_member(NewPath, Resolved) ->
throw({infinite_loop, ...})
else
resolve_route(Path, [NewPath | Resolved])
else:
Path
Of course we can here calculate the recursion count and see if we get over the
limit etc.
> 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
> Attachments: resolve_spurious_rewrite_limit_errors.patch
>
>
> 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