From: Howard Chu Date: Tue, 9 May 2023 13:36:25 +0000 (+0100) Subject: ITS#10047 back-mdb: delete idxckp table after slapindex X-Git-Tag: OPENLDAP_REL_ENG_2_6_5~16 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=13093c9287c8754180c8912558f5f9b64553ff13;p=thirdparty%2Fopenldap.git ITS#10047 back-mdb: delete idxckp table after slapindex Could do it when beginning too, either way an interrupted slapindex must be rerun completely. --- diff --git a/servers/slapd/back-mdb/tools.c b/servers/slapd/back-mdb/tools.c index 2ef94b16f2..3a468b283e 100644 --- a/servers/slapd/back-mdb/tools.c +++ b/servers/slapd/back-mdb/tools.c @@ -58,6 +58,8 @@ static MDB_cursor *mcp = NULL, *mcd = NULL; static MDB_val key, data; static ID previd = NOID; +static int reindexing; + typedef struct dn_id { ID id; struct berval dn; @@ -223,6 +225,20 @@ int mdb_tool_entry_close( } mdb_tool_txn = NULL; } + if( reindexing ) { + struct mdb_info *mdb = be->be_private; + if ( !txi ) { + int rc = mdb_txn_begin( mdb->mi_dbenv, NULL, 0, &txi ); + if( rc != 0 ) { + Debug( LDAP_DEBUG_ANY, + "=> " LDAP_XSTRING(mdb_tool_entry_close) ": database %s: " + "txn_begin failed: %s (%d)\n", + be->be_suffix[0].bv_val, mdb_strerror(rc), rc ); + return -1; + } + } + mdb_drop( txi, mdb->mi_idxckp, 0 ); + } if( txi ) { int rc; if (( rc = mdb_txn_commit( txi ))) { @@ -841,6 +857,8 @@ int mdb_tool_entry_reindex( return 0; } + reindexing = 1; + /* Check for explicit list of attrs to index */ if ( adv ) { int i, j, n;