ITS#9858 back-mdb: delay indexer task startup

until after monitor backend is set up.
This commit is contained in:
Howard Chu 2022-06-02 15:55:06 +01:00
parent 0b78166a47
commit 9e5701cdd7
3 changed files with 18 additions and 5 deletions

View 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,

View 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:

View 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