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

Re: HEAD back-ldbm

Howard, I recently changed bdb_referral() (and ldbm_back_referral())
because a LDAP_OTHER was being returned while correctly setting rs->sr_err
to LDAP_REFERRAL, because the return of the function was causing troubles
to overlays.  You may try reverting the patch, which for bdb is trivial:

diff -u -r1.37 -r1.38
--- servers/slapd/back-bdb/referral.c	2005/01/01 19:49:53	1.37
+++ servers/slapd/back-bdb/referral.c	2005/01/10 23:38:04	1.38
@@ -103,7 +103,7 @@

 		if( rs->sr_ref != NULL ) {
 			/* send referrals */
-			rs->sr_err = LDAP_REFERRAL;
+			rc = rs->sr_err = LDAP_REFERRAL;
 			send_ldap_result( op, rs );
 			ber_bvarray_free( rs->sr_ref );
 			rs->sr_ref = NULL;

For back-ldbm the change is diff -u -r1.25 -r1.26, where I did some more
cleanup; maybe this is the cause of the problem?  I'll recheck it right
now.  In case, note that I already applied the fix to bdb to re22.  Note
that I tested the chain overlay (test032) with all the databases with
success; I confirm that back-ldbm doesn't pass test002 on my machines as

Ciao, p.

> Howard Chu wrote:
>> back-ldbm in HEAD appears to be rather unstable at the moment, and I'm
>> afraid that my changes in connection management are part of the
>> problem. I notice that if I turn the debug level up high, test002
>> fails. Looking at the slapd.1.log, it appears that Add operations are
>> still in progress when the final ldapsearch is done to retrieve the
>> full database contents. This is really puzzling, it means that the
>> ldapadd command exited successfully already, but the operations it
>> submitted hadn't completed yet. With lower debug levels, the Adds
>> complete quickly enough to finish before the ldapsearch finishes.
>> Otherwise, one to three entries from the tail of the Add are missing
>> from the search result.
>> This also seems to be causing test008 to fail. Also in test008, there
>> is garbage text appearing in the LDAP error text fields. I don't know
>> what it's leftover from...
>> The big problem here seems to be that back-ldbm calls
>> send_ldap_result() to tell the client its status before it actually
>> finishes its internal operations. So it can be in the middle of
>> completing a cache update by the time a new request arrives; this
>> seems to explain what I'm seeing in test002 at least.
> Looking more closely at the logs, there appears to be a bug in with
> ldbm_back_referral and most likely in bdb_referral as well. A referral
> is being sent for every Add operation because the target of the op
> (naturally) doesn't exist. Something is very screwy here.
> --
>   -- Howard Chu
>   Chief Architect, Symas Corp.       Director, Highland Sun
>   http://www.symas.com               http://highlandsun.com/hyc
>   Symas: Premier OpenSource Development and Support

Pierangelo Masarati

    SysNet - via Dossi,8 27100 Pavia Tel: +390382573859 Fax: +390382476497