]> git.ipfire.org Git - thirdparty/openldap.git/commitdiff
ITS#9858 back-mdb: delay indexer task startup
authorHoward Chu <hyc@openldap.org>
Thu, 2 Jun 2022 14:55:06 +0000 (15:55 +0100)
committerQuanah Gibson-Mount <quanah@openldap.org>
Fri, 3 Jun 2022 16:55:45 +0000 (16:55 +0000)
until after monitor backend is set up.

servers/slapd/back-mdb/config.c
servers/slapd/back-mdb/init.c
servers/slapd/back-mdb/proto-mdb.h

index 54361a5ea77517dc8948b3ad415b98b0189a71bb..1b3cf98fe5f1a5857a354ccada905e9617315482 100644 (file)
@@ -400,20 +400,20 @@ done:
        return rc;
 }
 
-void
+int
 mdb_resume_index( BackendDB *be, MDB_txn *txn )
 {
        struct mdb_info *mdb = be->be_private;
        MDB_cursor *curs;
        MDB_val key, data;
-       int i, rc;
+       int i, rc, do_task = 0;
        unsigned short *s;
        slap_mask_t *mask;
        AttributeDescription *ad;
 
        rc = mdb_cursor_open( txn, mdb->mi_idxckp, &curs );
        if ( rc )
-               return;
+               return 0;
 
        while(( rc = mdb_cursor_get( curs, &key, &data, MDB_NEXT )) == 0) {
                s = key.mv_data;
@@ -425,11 +425,19 @@ mdb_resume_index( BackendDB *be, MDB_txn *txn )
                                mask = data.mv_data;
                                mdb->mi_attrs[i]->ai_indexmask = mask[0];
                                mdb->mi_attrs[i]->ai_newmask = mask[1];
+                               do_task = 1;
                                break;
                        }
                }
        }
        mdb_cursor_close( curs );
+       return do_task;
+}
+
+void
+mdb_start_index_task( BackendDB *be )
+{
+       struct mdb_info *mdb = be->be_private;
        ldap_pvt_thread_mutex_lock( &slapd_rq.rq_mutex );
        mdb->mi_index_task = ldap_pvt_runqueue_insert( &slapd_rq, 36000,
                mdb_online_index, be,
index 0a0137470c33c74c1d008f6d9f86b2bd72962e99..615f912e30abba7bad9eb700bc5de33fda488cc0 100644 (file)
@@ -91,6 +91,7 @@ mdb_db_open( BackendDB *be, ConfigReply *cr )
        unsigned flags;
        char *dbhome;
        MDB_txn *txn;
+       int do_index = 0;
 
        if ( be->be_suffix == NULL ) {
                Debug( LDAP_DEBUG_ANY,
@@ -291,7 +292,7 @@ mdb_db_open( BackendDB *be, ConfigReply *cr )
                MDB_stat st;
                rc = mdb_stat( txn, mdb->mi_idxckp, &st );
                if ( st.ms_entries )
-                       mdb_resume_index( be, txn );
+                       do_index = mdb_resume_index( be, txn );
        }
 
        rc = mdb_txn_commit(txn);
@@ -311,6 +312,9 @@ mdb_db_open( BackendDB *be, ConfigReply *cr )
 
        mdb->mi_flags |= MDB_IS_OPEN;
 
+       if ( do_index )
+               mdb_start_index_task( be );
+
        return 0;
 
 fail:
index a0806dd9d68c391046f34b1e1612d351b0d413d0..58191e1867924e4f3ab3fa9c9de90a4918773aa0 100644 (file)
@@ -64,7 +64,8 @@ void mdb_ad_unwind( struct mdb_info *mdb, int prev_ads );
  */
 
 int mdb_back_init_cf( BackendInfo *bi );
-void mdb_resume_index( BackendDB *be, MDB_txn *txn );
+int mdb_resume_index( BackendDB *be, MDB_txn *txn );
+void mdb_start_index_task( BackendDB *be );
 
 /*
  * dn2entry.c