[ https://issues.apache.org/jira/browse/SOLR-11692?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16273647#comment-16273647 ] Jeff Miller edited comment on SOLR-11692 at 12/1/17 4:48 PM: ------------------------------------------------------------- [~markrmiller@gmail.com] Can you comment on this patch? The idea being we wrap the closeshield for the request/response only in the context of SolrDispatchFilter and if we have to pass it up to chain or forward it we pass the original was (Author: millerjeff0): [~markrmiller@gmail.com] Can you comment on this patch? The idea being we wrap the closeshield for the request/response only in the context of SolrDispatchFilter and if we have to pass it up to chain or forward it we pass the original diff --git a/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java b/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java index fa7eb56..dd27820 100644 --- a/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java +++ b/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java @@ -352,8 +352,7 @@ public class SolrDispatchFilter extends BaseSolrFilter { request = wrappedRequest.get(); } - request = closeShield(request, retry); - response = closeShield(response, retry); + if (cores.getAuthenticationPlugin() != null) { log.debug("User principal: {}", ((HttpServletRequest) request).getUserPrincipal()); @@ -376,7 +375,9 @@ public class SolrDispatchFilter extends BaseSolrFilter { } } - HttpSolrCall call = getHttpSolrCall((HttpServletRequest) request, (HttpServletResponse) response, retry); + ServletRequest shieldedRequest = closeShield(request, retry); + ServletResponse shieldedResponse = closeShield(response, retry); + HttpSolrCall call = getHttpSolrCall((HttpServletRequest) shieldedRequest, (HttpServletResponse) shieldedResponse, retry); ExecutorUtil.setServerThreadFlag(Boolean.TRUE); try { Action result = call.call(); > SolrDispatchFilter.closeShield passes the shielded response object back to jetty making the stream unclose able > --------------------------------------------------------------------------------------------------------------- > > Key: SOLR-11692 > URL: https://issues.apache.org/jira/browse/SOLR-11692 > Project: Solr > Issue Type: Bug > Security Level: Public(Default Security Level. Issues are Public) > Components: Response Writers > Affects Versions: 7.1 > Environment: Linux/Mac tested > Reporter: Jeff Miller > Priority: Minor > Labels: dispatchlayer, jetty, newbie, streams > Attachments: SOLR-11692.patch > > Original Estimate: 3h > Remaining Estimate: 3h > > In test mode we trigger closeShield code in SolrDispatchFilter, however there are code paths where we passthrough the objects to the DefaultHandler which can no longer close the response. > Example stack trace: > java.lang.AssertionError: Attempted close of response output stream. > at org.apache.solr.servlet.SolrDispatchFilter$2$1.close(SolrDispatchFilter.java:528) > at org.eclipse.jetty.server.Dispatcher.commitResponse(Dispatcher.java:315) > at org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:279) > at org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:103) > at org.eclipse.jetty.servlet.DefaultServlet.doGet(DefaultServlet.java:566) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:734) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) > at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:684) > at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1448) > at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:385) > at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:326) > at searchserver.filter.SfdcDispatchFilter.doFilter(SfdcDispatchFilter.java:204) > at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1419) > at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:455) > at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137) > at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:557) > at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231) > at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1075) > at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:384) > at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193) > at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1009) > at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135) > at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:255) > at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:154) > at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116) > at org.eclipse.jetty.server.Server.handle(Server.java:370) > at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:489) > at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:949) > at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:1011) > at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:644) > at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235) > at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82) > at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:668) > at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52) > at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608) > at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543) > at java.lang.Thread.run(Thread.java:745) > Related JIRA: SOLR-8933 -- This message was sent by Atlassian JIRA (v6.4.14#64029) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscribe@lucene.apache.org For additional commands, e-mail: dev-help@lucene.apache.org