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

Re: slapd crashes updating contextCSN (ITS#2692)



Hi Jong,

The fix does appear to work, both with back-bdb and back-hdb. I'm not sure
whether it solves the original problem filed in this ITS, though; I haven't
had an opportunity to test that yet. (Recall that this was not related to
sync replication per se, just updating the CSN attribute.)

I had been using the following leaky hack to back-bdb/ctxcsn.c to work
around the issue initially filed in this ITS:

Index: back-bdb/ctxcsn.c
===================================================================
RCS file: /repo/OpenLDAP/pkg/ldap/servers/slapd/back-bdb/ctxcsn.c,v
retrieving revision 1.4
diff -u -r1.4 ctxcsn.c
--- back-bdb/ctxcsn.c   27 Aug 2003 20:16:06 -0000      1.4
+++ back-bdb/ctxcsn.c   30 Aug 2003 06:53:47 -0000
@@ -82,7 +82,24 @@
                        rs->sr_text = "context csn not present";
                        return BDB_CSN_ABORT;
                } else {
+#ifdef BDB_HIER
+                       /* HACK FIX */
+                       Attribute **a = &(*ctxcsn_e)->e_attrs;
+
+                       while ( *a ) {
+                               if ( ad_cmp( (*a)->a_desc, slap_schema.si_ad_contextCSN ) == 0 ) {
+                                       Attribute *next = (*a)->a_next;
+                                       *a = next;
+                               }
+
+                               if ( *a == NULL )
+                                       break;
+
+                               a = &(*a)->a_next;
+                       }
+#else
                        attr_delete( &(*ctxcsn_e)->e_attrs, slap_schema.si_ad_contextCSN );
+#endif
                        attr_merge_normalize_one( *ctxcsn_e, slap_schema.si_ad_contextCSN,
                                                        max_committed_csn, NULL );
                        ret = bdb_id2entry_update( op->o_bd, tid, *ctxcsn_e );

Syncing does deadlock but that's another back-[bh]db deadlock which
we see when populating the database from LDIF, so you're off the 
hook there :-)

BTW, I did see the following error:

Aug 30 16:38:29 ornette slapd[11187]: Entry (cn=Schema,cn=Configuration,dc=off,dc=padl,dc=com): object class 'referral' requires attribute 'ref' 
Aug 30 16:38:29 ornette slapd[11187]: null_callback : error code 0x41 
Aug 30 16:38:29 ornette slapd[11187]: conn=0 op=0 RESULT tag=105 err=65 text=object class 'referral' requires attribute 'ref' 
Aug 30 16:38:29 ornette slapd[11187]: syncrepl_entry : be_add failed (65) 

-- Luke