From a06696a1efdc9a79003b0949057221242c50b326 Mon Sep 17 00:00:00 2001 From: Ralf Haferkamp Date: Thu, 20 May 2010 17:08:28 +0000 Subject: [PATCH] During the refresh phase the sync filter needs to be adjusted (skipping the "(entrycsn>=cookie)" part that was inserted) when checking whether a change needs to be replicated, otherwise we lose DELETES that happen during the refresh phase (ITS#6555). --- servers/slapd/overlays/syncprov.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/servers/slapd/overlays/syncprov.c b/servers/slapd/overlays/syncprov.c index 160c3bf94f..4c2a0868a9 100644 --- a/servers/slapd/overlays/syncprov.c +++ b/servers/slapd/overlays/syncprov.c @@ -1302,7 +1302,15 @@ syncprov_matchops( Operation *op, opcookie *opc, int saveit ) op2.o_hdr = &oh; op2.o_extra = op->o_extra; op2.o_callback = NULL; - rc = test_filter( &op2, e, ss->s_op->ors_filter ); + ldap_pvt_thread_mutex_lock( &ss->s_mutex ); + if (ss->s_flags & PS_FIX_FILTER) { + /* Skip the AND/GE clause that we stuck on in front. We + would lose deletes/mods that happen during the refresh + phase otherwise (ITS#6555) */ + op2.ors_filter = ss->s_op->ors_filter->f_and->f_next; + } + ldap_pvt_thread_mutex_unlock( &ss->s_mutex ); + rc = test_filter( &op2, e, op2.ors_filter ); } Debug( LDAP_DEBUG_TRACE, "syncprov_matchops: sid %03x fscope %d rc %d\n", -- 2.39.5