felix-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Balazs Zsoldos (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (FELIX-4840) Asynchronous IO fails in webconsole plugin
Date Thu, 02 Apr 2015 09:51:52 GMT

    [ https://issues.apache.org/jira/browse/FELIX-4840?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14392473#comment-14392473

Balazs Zsoldos commented on FELIX-4840:

I am not sure HTTPService implementation should be changed at all. It is up to the servlet
if async is supported or not. In case of WebConsole, there are two different situations:

*A full page is rendered*

In this case async is not supported. I do not think async is an issue as plugins would not
want to (and cannot) render their fragments asynchronously.

*The request is simply dispatched to the plugin*

This happens if the end of the uri neither ends with extension nor the extension is _.html_.
When such a request comes, Webconsole should not call any function on the response By calling
_flushBuffer()_, webconsole horns in on the lifecycle of the response although it should not.

> Asynchronous IO fails in webconsole plugin
> ------------------------------------------
>                 Key: FELIX-4840
>                 URL: https://issues.apache.org/jira/browse/FELIX-4840
>             Project: Felix
>          Issue Type: Bug
>          Components: Web Console
>    Affects Versions: webconsole-4.2.8
>            Reporter: Balazs Zsoldos
> *Issue*
> The following function call always returns with true:
> {code:java}
> ServletRequest.isAsyncSupported()
> {code}
> However, async calls fail even if the webconsole plugin tries to provide some resource
(with some special extension on the end of the URI).
> *Reason*
> In the end of the _OSGiManager.service(ServletRequest, ServletResponse)_ function, there
is the following:
> {code:java}
>         // ensure response has been sent back and response is committed
>         // (we are authorative for our URL space and no other servlet should interfere)
>         res.flushBuffer();
> {code}
> Due to the reason that _flushBuffer()_ function is called, any asynchronous handling
will fail with an exception.
> *Proposed solution*
>  - In case the webconsole plugin is rendered (the path ends with / or .html), the _request.isAsyncSupported()_
method call should return false
>  - In case a custom resource is provided by the webconsole plugin (any extension but
html on the end of the path) the _flushBuffer()_ method should not be called
> At least the second part of the fix should be implemented as if a plugin wants to provide
bigger files (like a dump), async support can be useful. Also, by the time more and more libraries
will support asynchronous IO to provide resources and if a webconsole plugin uses such library,
it will fail.

This message was sent by Atlassian JIRA

View raw message