I've debugged the problem to an infinite loop when trying to set the Via 
header on the request that the proxy sends to the back-end server. This 
infinite loop is not triggered when Redirector removes the headers 
becuase HttpInboundRequest.getRecipientsInfo() has a "getHeaders() != 
null" check.

I've captured the stack trace below when when the loop has gone through 
three cycles between setRecipientsInfo and getRecipientsInfo using 
restlet 2.1.4. Is this a bug in HttpInboundRequest or are we doing 
something wrong?

Daemon Thread [Restlet-21015178] (Suspended)
***** loop break point *****
     HttpInboundRequest.getRecipientsInfo() line: 579
HttpInboundRequest(Message).setRecipientsInfo(List<RecipientInfo>) line: 
426
     HttpInboundRequest.setRecipientsInfo(List<RecipientInfo>) line: 804
     HttpInboundRequest.getRecipientsInfo() line: 579
HttpInboundRequest(Message).setRecipientsInfo(List<RecipientInfo>) line: 
426
     HttpInboundRequest.setRecipientsInfo(List<RecipientInfo>) line: 804
     HttpInboundRequest.getRecipientsInfo() line: 579
HttpInboundRequest(Message).setRecipientsInfo(List<RecipientInfo>) line: 
426
     HttpInboundRequest.setRecipientsInfo(List<RecipientInfo>) line: 804
     HttpInboundRequest.getRecipientsInfo() line: 579
***** loop start ******
     HeaderUtils.addGeneralHeaders(Message, Series<Header>) line: 264
     ClientAdapter.toSpecific(HttpClientHelper, Request) line: 163
     HttpClientHelper(HttpClientHelper).handle(Request, Response) line: 111
     Client.handle(Request, Response) line: 180
     ClientRoute(Filter).doHandle(Request, Response) line: 159
     ClientRoute(Filter).handle(Request, Response) line: 206
     ClientRouter(Router).doHandle(Restlet, Request, Response) line: 431
     ClientRouter(Router).handle(Request, Response) line: 648
     ComponentClientDispatcher.doHandle(Request, Response) line: 140
     ComponentClientDispatcher(Filter).handle(Request, Response) line: 206
     ChildClientDispatcher.parentHandle(Request, Response) line: 148
     ChildClientDispatcher.doHandle(Request, Response) line: 121
     ChildClientDispatcher(Filter).handle(Request, Response) line: 206
     ChildClientDispatcher.parentHandle(Request, Response) line: 148
     ChildClientDispatcher.doHandle(Request, Response) line: 121
     ChildClientDispatcher(Filter).handle(Request, Response) line: 206
     Decoder(Filter).doHandle(Request, Response) line: 159
     Decoder(Filter).handle(Request, Response) line: 206
     CustomRedirector.serverRedirect(Restlet, Reference, Request, 
Response) line: 53
     CustomRedirector(Redirector).outboundServerRedirect(Reference, 
Request, Response) line: 352
     CustomRedirector(Redirector).handle(Request, Response) line: 295
     TemplateRoute(Filter).doHandle(Request, Response) line: 159
     TemplateRoute(Filter).handle(Request, Response) line: 206
     Router.doHandle(Restlet, Request, Response) line: 431
     Router.handle(Request, Response) line: 648
     RangeFilter(Filter).doHandle(Request, Response) line: 159
     RangeFilter(Filter).handle(Request, Response) line: 206
     Decoder(Filter).doHandle(Request, Response) line: 159
     Decoder(Filter).handle(Request, Response) line: 206
     StatusFilter(Filter).doHandle(Request, Response) line: 159
     StatusFilter.doHandle(Request, Response) line: 155
     StatusFilter(Filter).handle(Request, Response) line: 206
     TunnelFilter(Filter).doHandle(Request, Response) line: 159
     TunnelFilter(Filter).handle(Request, Response) line: 206
     ApplicationHelper(CompositeHelper<T>).handle(Request, Response) 
line: 211
     ApplicationHelper.handle(Request, Response) line: 84
     TransparentReverseProxyApp(Application).handle(Request, Response) 
line: 381
     VirtualHost$1(Filter).doHandle(Request, Response) line: 159
     VirtualHost$1(Filter).handle(Request, Response) line: 206
     VirtualHost(Router).doHandle(Restlet, Request, Response) line: 431
     VirtualHost(Router).handle(Request, Response) line: 648
     HostRoute(Filter).doHandle(Request, Response) line: 159
     HostRoute(Filter).handle(Request, Response) line: 206
     ServerRouter(Router).doHandle(Restlet, Request, Response) line: 431
     ServerRouter(Router).handle(Request, Response) line: 648
     StatusFilter(Filter).doHandle(Request, Response) line: 159
     StatusFilter.doHandle(Request, Response) line: 155
     StatusFilter(Filter).handle(Request, Response) line: 206
     LogFilter(Filter).doHandle(Request, Response) line: 159
     LogFilter(Filter).handle(Request, Response) line: 206
     ComponentHelper(CompositeHelper<T>).handle(Request, Response) line: 
211
     Component.handle(Request, Response) line: 392
     Server.handle(Request, Response) line: 516
     HttpServerHelper(ServerConnectionHelper).handle(Request, Response) 
line: 257
HttpServerHelper(ServerConnectionHelper).doHandleInbound(Response) line: 
186
     BaseHelper$2.run() line: 593
     ThreadPoolExecutor.runWorker(ThreadPoolExecutor$Worker) line: 1145
     ThreadPoolExecutor$Worker.run() line: 615
     Thread.run() line: 744

------------------------------------------------------
http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=3076700

Reply via email to