]> git.ipfire.org Git - thirdparty/openldap.git/commitdiff
ITS#9858 back-mdb: fix index reconfig
authorHoward Chu <hyc@openldap.org>
Thu, 2 Jun 2022 23:48:50 +0000 (00:48 +0100)
committerHoward Chu <hyc@openldap.org>
Fri, 3 Jun 2022 16:06:39 +0000 (17:06 +0100)
servers/slapd/back-mdb/attr.c
servers/slapd/back-mdb/config.c

index 9567fb522d306a66d7100b7f837458627b2243ca..7219705b201e0fb2198084aa099e22615a11cc10 100644 (file)
@@ -446,7 +446,11 @@ fail:
                                        /* If this is leftover from a previous add, commit it */
                                        if ( b->ai_newmask )
                                                b->ai_indexmask = b->ai_newmask;
-                                       b->ai_newmask = a->ai_newmask;
+                                       /* If the mask changed, remember it */
+                                       if ( b->ai_indexmask != a->ai_newmask )
+                                               b->ai_newmask = a->ai_newmask;
+                                       else    /* else ignore it */
+                                               b->ai_newmask = 0;
                                        ch_free( a );
                                        rc = 0;
                                        continue;
index 1b3cf98fe5f1a5857a354ccada905e9617315482..48143ef4d6053faa2fba77d91265101482aad6fb 100644 (file)
@@ -349,7 +349,7 @@ mdb_setup_indexer( struct mdb_info *mdb )
        MDB_txn *txn;
        MDB_cursor *curs;
        MDB_val key, data;
-       int i, rc;
+       int i, rc, changed = 0;
        unsigned short s;
 
        rc = mdb_txn_begin( mdb->mi_dbenv, NULL, 0, &txn );
@@ -364,17 +364,6 @@ mdb_setup_indexer( struct mdb_info *mdb )
        key.mv_size = sizeof( s );
        key.mv_data = &s;
 
-       /* set indexer task to start at first entry */
-       {
-               ID id = 0;
-               s = 0;                  /* key 0 records next entryID to index */
-               data.mv_size = sizeof( ID );
-               data.mv_data = &id;
-               rc = mdb_cursor_put( curs, &key, &data, 0 );
-               if ( rc )
-                       goto done;
-       }
-
        /* record current and new index masks for all new index definitions */
        {
                slap_mask_t mask[2];
@@ -389,8 +378,19 @@ mdb_setup_indexer( struct mdb_info *mdb )
                        rc = mdb_cursor_put( curs, &key, &data, 0 );
                        if ( rc )
                                goto done;
+                       changed = 1;
                }
        }
+
+       /* set indexer task to start at first entry */
+       if ( changed ) {
+               ID id = 0;
+               s = 0;                  /* key 0 records next entryID to index */
+               data.mv_size = sizeof( ID );
+               data.mv_data = &id;
+               rc = mdb_cursor_put( curs, &key, &data, 0 );
+       }
+
 done:
        mdb_cursor_close( curs );
        if ( !rc )