I have two servers (server1 and server2) running openldap 2.4.39-8 and they are configured to replicate via MirrorMode replication.

Here is what I am seeing in order:

1) On server1, I create a two users: deleteUser and modifyUser.
2) I can see that these users are then properly synced to server2.
3) On server1, slapd is stopped.
4) On server2, I now delete 'deleteUser' and I modify 'modifyUser'.
5) On server1, slapd is started.
6) The two slapd instances replicate.

Outcome:

Both servers now have the deleted user 'deleteUser' in their databases like the user was never deleted. However, the user 'modifyUser' was properly updated in both places.

Expected outcome:

I would expect that 'deleteUser' wouldn't exist in either database. I would expect that 'modifyUser' would be properly modified on both servers.

Why would this happen? Do I need to configure something specifically so deletes are handled properly? Is this just a quirk with how replication works?

Below are the relevant parts of each server's slapd.conf.

server1's configuration:

serverID 1

...

overlay syncprov

syncrepl rid=001
    provider=ldap://server2/
    type=refreshAndPersist
    retry="10 +"
    searchbase="dc=example,dc=com"
    bindmethod=simple
    binddn="cn=syncuser,dc=example,dc=com
    credentials=secret

mirrormode on

...

server2's configuration:

serverID 2

...

overlay syncprov

syncrepl rid=001
    provider=ldap://server1/
    type=refreshAndPersist
    retry="10 +"
    searchbase="dc=example,dc=com"
    bindmethod=simple
    binddn="cn=syncuser,dc=example,dc=com
    credentials=secret

mirrormode on

...

Thanks,

Kevin