]> git.sur5r.net Git - openldap/commitdiff
ITS#7710 fix for non-replicated internal ops
authorHoward Chu <hyc@openldap.org>
Wed, 9 Oct 2013 11:58:37 +0000 (04:58 -0700)
committerQuanah Gibson-Mount <quanah@openldap.org>
Wed, 9 Oct 2013 16:23:27 +0000 (09:23 -0700)
Their completion was making slap_graduate_commit_csn() cleanup
their parent op's CSN, thus preventing that CSN from propagating
to any consumers.

servers/slapd/overlays/memberof.c
servers/slapd/overlays/refint.c

index c3cc3cfbf02d105a6e801b02dbd0ce63bdc62766..3f07ffb52194f3277f9bb55372ec5653617be5fe 100644 (file)
@@ -341,6 +341,7 @@ memberof_value_modify(
        memberof_t      *mo = (memberof_t *)on->on_bi.bi_private;
 
        Operation       op2 = *op;
+       unsigned long opid = op->o_opid;
        SlapReply       rs2 = { REP_RESULT };
        slap_callback   cb = { NULL, slap_null_cb, NULL, NULL };
        Modifications   mod[ 2 ] = { { { 0 } } }, *ml;
@@ -358,6 +359,7 @@ memberof_value_modify(
        op2.orm_modlist = NULL;
 
        /* Internal ops, never replicate these */
+       op2.o_opid = 0;         /* shared with op, saved above */
        op2.orm_no_opattrs = 1;
        op2.o_dont_replicate = 1;
 
@@ -472,6 +474,8 @@ memberof_value_modify(
                        slap_mods_free( ml, 1 );
                }
        }
+       /* restore original opid */
+       op->o_opid = opid;
 
        /* FIXME: if old_group_ndn doesn't exist, both delete __and__
         * add will fail; better split in two operations, although
index 2aaffe791860def9c90c42d7ad29c2d325b2df64..4f7a3f6e4575a58b1c78c1bff3a8f116e0320ff5 100644 (file)
@@ -527,6 +527,7 @@ refint_repair(
        dependent_data  *dp;
        SlapReply               rs = {REP_RESULT};
        Operation               op2;
+       unsigned long   opid;
        int             rc;
 
        op->o_callback->sc_response = refint_search_cb;
@@ -565,6 +566,7 @@ refint_repair(
         *
         */
 
+       opid = op2.o_opid;
        op2 = *op;
        for ( dp = rq->attrs; dp; dp = dp->next ) {
                SlapReply       rs2 = {REP_RESULT};
@@ -587,6 +589,7 @@ refint_repair(
                /* Internal ops, never replicate these */
                op2.orm_no_opattrs = 1;
                op2.o_dont_replicate = 1;
+               op2.o_opid = 0;
 
                /* Set our ModifiersName */
                if ( SLAP_LASTMOD( op->o_bd ) ) {
@@ -686,6 +689,7 @@ refint_repair(
                        op2.o_tmpfree( m, op2.o_tmpmemctx );
                }
        }
+       op2.o_opid = opid;
 
        return 0;
 }