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;
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,
unsigned flags;
char *dbhome;
MDB_txn *txn;
+ int do_index = 0;
if ( be->be_suffix == NULL ) {
Debug( LDAP_DEBUG_ANY,
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);
mdb->mi_flags |= MDB_IS_OPEN;
+ if ( do_index )
+ mdb_start_index_task( be );
+
return 0;
fail:
*/
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