[Date Prev][Date Next] [Chronological] [Thread] [Top]

Re: (ITS#6507) backglue and paged results issue

Le 08/04/2010 19:26, masarati@aero.polimi.it a écrit :
>> Ah yes, just saw this. Sorry, my email seems to be slow today (weird).
>> Similar to my patch, but I'm unsure about the second part:
>> } else if ( op->o_bd != gi->gi_n[0].gn_be ) {
>>       /* if cookie not empty, it's again this database's turn */
>>       op->o_conn->c_pagedresults_state.ps_be = op->o_bd;
>> }
>> If the cookie is not empty, then it should again be this database's
>> turn, even it this is this last database.
>> This makes a search that stops in the middle of results from last
>> database with a valid cookie fall back to the first database on
>> continuation, and thus loop forever.
>> Would you consider removing the else if?
> Well, it's not that simple.  The fact is that paged results state is being
> handled in two ways: when the database is back-bdb/hdb, the cookie is an
> ID, and it's stored in ps_cookie; otherwise (e.g. back-ldap), it's a
> berval, stored in ps_cookieval.  I need to handle both cases.  I think I
> made it.
> Now, ps_cookie in c_pagedresults_state is initialized to NOID; back-bdb
> will set it to 0 first, and then to whatever value it needs.  Other
> backends, that use ps_cookieval, will not touch it.  So when ps_cookie ==
> NOID one needs to look at ps_cookieval (and parse it as needed), otherwise
> ps_cookie suffices.  You'll need to update backglue.c, controls.c and
> back-bdb/search.c.
> Now it passes all cases I checked, both with local glued databases and
> with back-null/back-ldap as in your example.

Right - I'd missed that, regarding this difference between hdb/bdb 
databases and others. Thanks for the explanation!

Just tested your lasted patch set, and it all works great for me, in 
various different scenarios. Thanks a lot.

Jonathan Clarke - jonathan@phillipoux.net
Ldap Synchronization Connector (LSC) - http://lsc-project.org