[
https://issues.apache.org/jira/browse/SOLR-8933?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15231700#comment-15231700
]
Uwe Schindler edited comment on SOLR-8933 at 4/8/16 6:17 AM:
-
Hi,
bq. Doesn't matter that we don't use the extra APIs, the type signature of
ServletRequest::getInputStream still demands a ServletInputStream so that is
what we have to return when wrapping the request object.
Yeah, I see you are wrapping the whole ServletRequest.
In any case, I skimmed through the patch: There is one problem. You don't close
ContentStream's InputStream anymore. But there are cases in Solr, where the
ContentStream does not come from a Request, but from somewhere else: It could
also be the "virtual" stream from the URL param (OK this one does not need to
be closed), but it could also be a remote stream e.g,, if you pass a stream.url
parameter to the servlet. In that case it is never closed.
This would then be a bug!!! I'd suggest to do the following: Always wrap with
CloseShield in DispatchFilter and ignore the close without logging anything
(for safety with non-Jetty or later Jetty versions) and revert all other
changes in Solr. To me it is unnatural to not close a stream after you have
consumed it. I'd also change the consumers to try-with-resources.
The ContentStream tests are using remote streams (actually a file:// URL for
testing). So on Windows, tests should fail with a resource leak there.
was (Author: thetaphi):
Hi,
bq. Doesn't matter that we don't use the extra APIs, the type signature of
ServletRequest::getInputStream still demands a ServletInputStream so that is
what we have to return when wrapping the request object.
Yeah, I see you are wrapping the whole ServletRequest.
In any case, I skimmed through the patch: There is one problem. You don't close
ContentStream's InputStream anymore. But there are cases in Solr, where the
ContentStream does not come from a Request, but from somewhere else: It could
also be the "virtual" stream from the URL param (OK this one does not need to
be closed), but it could also be a remote stream e.g,, if you pass a stream.url
parameter to the servlet. In that case it is never closed.
This would then be a bug!!! I'd suggest to do the following: Always wrap with
CloseShield and ignore the close (for safety with non-Jetty or later Jetty
versions) and revert all changes in Solr. To me it is unnatural to not close a
stream after you have consumed it.
The ContentStream tests are using remote streams (actually a file:// URL for
testing). So on Windows, tests should fail with a resource leak there.
> SolrDispatchFilter::consumeInput logs "Stream Closed" IOException
> -
>
> Key: SOLR-8933
> URL: https://issues.apache.org/jira/browse/SOLR-8933
> Project: Solr
> Issue Type: Bug
>Affects Versions: 4.10.3
>Reporter: Mike Drob
>Assignee: Mark Miller
> Attachments: SOLR-8933.patch, SOLR-8933.patch, SOLR-8933.patch,
> SOLR-8933.patch
>
>
> After SOLR-8453 we started seeing some IOExceptions coming out of
> SolrDispatchFilter with "Stream Closed" messages.
> It looks like we are indeed closing the request stream in several places when
> we really need to be letting the web container handle their life cycle. I've
> got a preliminary patch ready and am working on testing it to make sure there
> are no regressions.
> A very strange piece of this is that I have been entirely unable to reproduce
> it on a unit test, but have seen it on cluster deployment quite consistently.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
-
To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: dev-h...@lucene.apache.org