From: Howard Chu Date: Wed, 9 Sep 2020 16:30:23 +0000 (+0100) Subject: ITS#9043 tweak syncprov playlog logging X-Git-Tag: OPENLDAP_REL_ENG_2_4_54~27 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=74bdf05e12d1f91125916ad36f0b47487330438d;p=thirdparty%2Fopenldap.git ITS#9043 tweak syncprov playlog logging Don't log cookiecsn at top, it was already logged on receipt. Only log the "srs csn" and "too old" message once for each sid. Fix log output for empty UUID. --- diff --git a/servers/slapd/overlays/syncprov.c b/servers/slapd/overlays/syncprov.c index 1dbe665373..dbd3615076 100644 --- a/servers/slapd/overlays/syncprov.c +++ b/servers/slapd/overlays/syncprov.c @@ -1705,7 +1705,7 @@ syncprov_playlog( Operation *op, SlapReply *rs, sessionlog *sl, { slap_overinst *on = (slap_overinst *)op->o_bd->bd_info; slog_entry *se; - int i, j, ndel, num, nmods, mmods; + int i, j, ndel, num, nmods, mmods, *sidchks; char cbuf[LDAP_PVT_CSNSTR_BUFSIZE]; BerVarray uuids; struct berval delcsn[2]; @@ -1721,6 +1721,7 @@ syncprov_playlog( Operation *op, SlapReply *rs, sessionlog *sl, sl->sl_playing++; ldap_pvt_thread_mutex_unlock( &sl->sl_mutex ); + sidchks = op->o_tmpcalloc( srs->sr_state.numcsns + 1, sizeof(int), op->o_tmpmemctx ); uuids = op->o_tmpalloc( (num+1) * sizeof( struct berval ) + num * UUID_LEN, op->o_tmpmemctx ); uuids[0].bv_val = (char *)(uuids + num + 1); @@ -1733,31 +1734,45 @@ syncprov_playlog( Operation *op, SlapReply *rs, sessionlog *sl, * and everything else at the end. Do this first so we can * unlock the list mutex. */ - Debug( LDAP_DEBUG_SYNC, "srs csn %s\n", - srs->sr_state.ctxcsn[0].bv_val, 0, 0 ); for ( se=sl->sl_head; se; se=se->se_next ) { int k; - if ( LogTest( LDAP_DEBUG_SYNC ) ) { - char uuidstr[40]; - lutil_uuidstr_from_normalized( se->se_uuid.bv_val, se->se_uuid.bv_len, - uuidstr, 40 ); - Log4( LDAP_DEBUG_SYNC, ldap_syslog_level, "%s syncprov_playlog: " - "log entry tag=%lu uuid=%s cookie=%s\n", - op->o_log_prefix, se->se_tag, uuidstr, se->se_csn.bv_val ); - } ndel = 1; for ( k=0; ksr_state.numcsns; k++ ) { if ( se->se_sid == srs->sr_state.sids[k] ) { ndel = ber_bvcmp( &se->se_csn, &srs->sr_state.ctxcsn[k] ); + if ( !sidchks[k] || ndel > 0 ) { + if ( LogTest( LDAP_DEBUG_SYNC ) ) { + char uuidstr[40], *uuidp; + if ( se->se_uuid.bv_len ) { + lutil_uuidstr_from_normalized( se->se_uuid.bv_val, se->se_uuid.bv_len, + uuidstr, 40 ); + uuidp = uuidstr; + } else { + uuidp = ""; + } + if ( !sidchks[k] ) { + Log2( LDAP_DEBUG_SYNC, ldap_syslog_level, "%s syncprov_playlog: " + "srs csn %s\n", + op->o_log_prefix, srs->sr_state.ctxcsn[k].bv_val ); + } + Log4( LDAP_DEBUG_SYNC, ldap_syslog_level, "%s syncprov_playlog: " + "log entry tag=%lu uuid=%s cookie=%s\n", + op->o_log_prefix, se->se_tag, uuidp, se->se_csn.bv_val ); + } + } break; } } if ( ndel <= 0 ) { - Debug( LDAP_DEBUG_SYNC, "%s syncprov_playlog: " - "cmp %d, too old\n", op->o_log_prefix, ndel, 0 ); + if ( !sidchks[k] ) { + Debug( LDAP_DEBUG_SYNC, "%s syncprov_playlog: " + "cmp %d, too old\n", op->o_log_prefix, ndel, 0 ); + sidchks[k] = 1; + } continue; } + sidchks[k] = 1; ndel = 0; for ( k=0; kse_sid == sids[k] ) { @@ -1800,6 +1815,8 @@ syncprov_playlog( Operation *op, SlapReply *rs, sessionlog *sl, sl->sl_playing--; ldap_pvt_thread_mutex_unlock( &sl->sl_mutex ); + op->o_tmpfree( sidchks, op->o_tmpmemctx ); + ndel = i; /* Zero out unused slots */