From 0c1ebd178cafd8add90e6561ff798a2df4e6db67 Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Thu, 1 Feb 2018 22:32:45 +0000 Subject: [PATCH] ITS#8801 Fix CSN queue processing --- servers/slapd/ctxcsn.c | 9 ++++----- servers/slapd/overlays/accesslog.c | 6 +----- servers/slapd/slap.h | 3 +-- 3 files changed, 6 insertions(+), 12 deletions(-) diff --git a/servers/slapd/ctxcsn.c b/servers/slapd/ctxcsn.c index 89e1ad2a4a..e0dcb05830 100644 --- a/servers/slapd/ctxcsn.c +++ b/servers/slapd/ctxcsn.c @@ -57,7 +57,7 @@ slap_get_commit_csn( ldap_pvt_thread_mutex_lock( &be->be_pcl_mutex ); LDAP_TAILQ_FOREACH( csne, be->be_pending_csn_list, ce_csn_link ) { - if ( csne->ce_opid == op->o_opid && csne->ce_connid == op->o_connid ) { + if ( csne->ce_op == op ) { csne->ce_state = SLAP_CSN_COMMIT; if ( foundit ) *foundit = 1; break; @@ -94,7 +94,7 @@ slap_rewind_commit_csn( Operation *op ) ldap_pvt_thread_mutex_lock( &be->be_pcl_mutex ); LDAP_TAILQ_FOREACH( csne, be->be_pending_csn_list, ce_csn_link ) { - if ( csne->ce_opid == op->o_opid && csne->ce_connid == op->o_connid ) { + if ( csne->ce_op == op ) { csne->ce_state = SLAP_CSN_PENDING; break; } @@ -116,7 +116,7 @@ slap_graduate_commit_csn( Operation *op ) ldap_pvt_thread_mutex_lock( &be->be_pcl_mutex ); LDAP_TAILQ_FOREACH( csne, be->be_pending_csn_list, ce_csn_link ) { - if ( csne->ce_opid == op->o_opid && csne->ce_connid == op->o_connid ) { + if ( csne->ce_op == op ) { LDAP_TAILQ_REMOVE( be->be_pending_csn_list, csne, ce_csn_link ); Debug( LDAP_DEBUG_SYNC, "slap_graduate_commit_csn: removing %p %s\n", @@ -191,8 +191,7 @@ slap_queue_csn( ber_dupbv( &pending->ce_csn, csn ); ber_bvreplace_x( &op->o_csn, &pending->ce_csn, op->o_tmpmemctx ); pending->ce_sid = slap_parse_csn_sid( csn ); - pending->ce_connid = op->o_connid; - pending->ce_opid = op->o_opid; + pending->ce_op = op; pending->ce_state = SLAP_CSN_PENDING; ldap_pvt_thread_mutex_lock( &be->be_pcl_mutex ); diff --git a/servers/slapd/overlays/accesslog.c b/servers/slapd/overlays/accesslog.c index faa94d4969..6b9c729c5e 100644 --- a/servers/slapd/overlays/accesslog.c +++ b/servers/slapd/overlays/accesslog.c @@ -1458,7 +1458,7 @@ static int accesslog_response(Operation *op, SlapReply *rs) { Modifications *m; struct berval *b, uuid = BER_BVNULL; int i; - int logop, do_graduate = 0; + int logop; slap_verbmasks *lo; Entry *e = NULL, *old = NULL, *e_uuid = NULL; char timebuf[LDAP_LUTIL_GENTIME_BUFSIZE+8]; @@ -1872,7 +1872,6 @@ static int accesslog_response(Operation *op, SlapReply *rs) { slap_get_commit_csn( op, &maxcsn, &foundit ); if ( !BER_BVISEMPTY( &maxcsn ) ) { slap_queue_csn( &op2, &op->o_csn ); - do_graduate = 1; } else { attr_merge_normalize_one( e, slap_schema.si_ad_entryCSN, &op->o_csn, op->o_tmpmemctx ); @@ -1882,9 +1881,6 @@ static int accesslog_response(Operation *op, SlapReply *rs) { op2.o_bd->be_add( &op2, &rs2 ); if ( e == op2.ora_e ) entry_free( e ); e = NULL; - if ( do_graduate ) { - slap_graduate_commit_csn( &op2 ); - } done: if ( lo->mask & LOG_OP_WRITES ) diff --git a/servers/slapd/slap.h b/servers/slapd/slap.h index 3f540a0d4b..866c793164 100644 --- a/servers/slapd/slap.h +++ b/servers/slapd/slap.h @@ -2463,10 +2463,9 @@ typedef struct PagedResultsState { } PagedResultsState; struct slap_csn_entry { + Operation *ce_op; struct berval ce_csn; int ce_sid; - unsigned long ce_opid; - unsigned long ce_connid; #define SLAP_CSN_PENDING 1 #define SLAP_CSN_COMMIT 2 long ce_state; -- 2.39.2