Norval Hope wrote:
Hi,

I don't know the core code like you, but given my current
understanding (pardon me if my understanding is woefully inadequate
:-) I'm not sure your option 2 is really viable. After the first page
is returned, how are you going to initialize the cursor for the next
page?
You have to store some session information in any case. So assuming we implement the second option, we just store the number of entries we already transmitted.
 Wouldn't you have to remember where you were up to (using some
sort of unique per-result key) and rerun the search, skipping results
up to this key value (if so then it's unworkable no?).
Yes, this is exactly what I have in mind :)
BTW Is there
guaranteed to be a stable sorting order for search results internally,
and is the sort control supported by AD so that it may be posed
externally etc.
There are no such guarantee, either with option 1 or option 2, as stated by RFC 2696 : "A client may safely assume that all entries that satisfy a given search query are returned once and only once during the set of paged Search requests/responses necessary to enumerate the entire result set, unless the result set for that query has changed since the searchRequest starting the request/response sequence was processed."
At any rate I don't think keeping a cursor open is that big a deal,
although there probably needs to be a server-side timeout so that if
the cursor is not accessed for a long time (say an hour for argument)
it is automatically closed. Well behaved clients should explicitly
close their NamingEnumerations which I would hope would allow the
cursor to be discarded immediately.
The problem is certainly not well behaved client. but there are many case when even a well behaved client might be troublesome. Typically, Apache Studio (a well behaved client, that's for sure :), when it comes to load thousands of entries, uses this control to get the entries little by little. It present the entries in a list of N sub-entries, and when you open a block, then a new search is sent to the server. Another possibility is to design a cursored presentation of data, with, say, 20 entries per page. The client click on 'next' or 'prev' to get the next 20 entries. As it's interactive, we may have some long period of time between two interactions.

So sure, we will have to implement a timeout (but we already have a session timeout), which is a bit painfull, as you need a thread to manage it.

But anyway, I think this is the way to go too... It's just that it's painful ! :-]

--
--
cordialement, regards,
Emmanuel Lécharny
www.iktek.com
directory.apache.org


Reply via email to