[
https://issues.apache.org/jira/browse/DIRSERVER-1161?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Norval Hope updated DIRSERVER-1161:
-----------------------------------
Attachment: installers_1.5.1_streaming.patch
mina_1.1_trunk_streaming.patch
apacheds_1.5.1_streaming.patch
Ok, these attached files represent a patch to ApacheDS 1.5.1 (release tag
http://svn.apache.org/repos/asf/directory/apacheds/releases/1.5.1) and latest
MINA 1.1 trunk (http://svn.apache.org/repos/asf/mina/branches/1.1 at 647053)
which passes the "mvn -Dintegration test" on AD and as well my own test suites
working at a higher level).
The changes are discussed in early comments / attachments this issue but are
summarized again here:
1. The major problem is that no data is streamed to the JNDI client
(and consequently the queue on the ExecutorFilter.SessionBuffer grows
in an unbounded fashion) until SearchHandler.messageRecieved()
returns. Hence it needs to return as soon as a NamingEnumeration over
the results to be returned is available, meaning a separate thread
needs to be used to drain the SearchResponseIterator asynchronously. Another
solution mentioned by Emmanuel would be to force the session to be drained by
the client for each result, but I think forcing the server and client to move
in such strict lock-step would not be the best approach scalability-wise (and
would be harder to implement too).
2. The next problem is the potential for a difference in the client
/ server speed. My patch uses a
LinkedBlockingQueue and this approach worked fine. The problems / notes are:
a. I did my patching against MINA 1.1 trunk (1.1.7-SNAPSHOT) so I
could get Trustin's feedback, but I gather you guys are aiming at
1.1.6 for your upcoming AD 1.5.2 release
b. given Trustin's feedback I'm not sure how "onboard" he is going
to be this the blocking queue approach, but it seems a simple and
clean solution to me
c. configuring the size of the blocking queue (or using a
non-blocking queue if this needs be kept as an
option for other MINA usages) is difficult as SessionBuffer is a static class in
ExecutorFilter and therefore can't be configured via ExecutorFilter's
constructor. I have used a system property as the best solution I can
think of at this stage.
> search results are not streamed to the client until final done response is
> queued
> ---------------------------------------------------------------------------------
>
> Key: DIRSERVER-1161
> URL: https://issues.apache.org/jira/browse/DIRSERVER-1161
> Project: Directory ApacheDS
> Issue Type: Bug
> Components: core
> Affects Versions: 1.0
> Environment: JDK 1.5.0_11
> Reporter: Norval Hope
> Attachments: apacheds_1.5.1_streaming.patch,
> apacheds_1.5.1_streaming.patch, apacheds_1.5.1_streaming_log_output.txt,
> installers_1.5.1_streaming.patch, installers_1.5.1_streaming.patch,
> mina_1.1.2_streaming.patch, mina_1.1_trunk_streaming.patch, pom.xml,
> streaming_log_output.txt, streaming_logging.patch
>
> Original Estimate: 120h
> Remaining Estimate: 120h
>
> Search results accumulate in Events on the SessionBuffer.eventQueue within
> ExecutorFilter.fireEvent() until final done response for the search is
> written to the session and then all results for the search (possibly millions
> depending on the search and state of the directory) are written out at once.
> This is a big problem for scalability and I gather from previous
> correspondence with Alex that this behaviour is unexpected.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.