Howard Chu wrote:
Jérémy Wagner wrote:
> Hello,
>
> I'm facing some issues with syncrepl...
>
> The simplest situation in which I was able to reproduce the problem
> consists of 1 provider and 1 consumer.
>
> I have configured syncrepl to do a partial replication :
>
> olcSyncrepl:
> {0}rid=105
> provider=ldaps://****:636
> bindmethod=simple
> timeout=0
> network-timeout=0
> starttls=no
> filter="(mail=*)"
> searchbase="ou=groups,o=mydir"
> scope=sub
> schemachecking=off
> attrs="cn description mail member +"
> type=refreshAndPersist
> retry="60 +"
> tls_cert=**** tls_cacert=**** tls_key=****
>
> olcSyncrepl:
> {1}rid=107
> provider=ldaps://****:636
> bindmethod=simple
> timeout=0
> network-timeout=0
> starttls=no
> filter="(objectclass=*)"
> searchbase="ou=operators,o=mydir"
> scope=sub
> schemachecking=off
> type=refreshAndPersist
> retry="60 +"
> tls_cert=**** tls_cacert=**** tls_key=****
>
> olcSyncrepl:
> {2}rid=104
> provider=ldaps://****:636
> bindmethod=simple
> timeout=0
> network-timeout=0
> starttls=no
> filter="(uid=mytestuser)"
> searchbase="ou=people,o=mydir"
> scope=sub
> schemachecking=off
> type=refreshAndPersist
> retry="60 +"
> tls_cert=**** tls_cacert=**** tls_key=****
>
> The initial sync (i.e. from an empty base) is fine, but then when I
> modify an entry (uid=mytestuser), it is not updated on the consumer, and
> I get the
> following messages:
>
> Feb 16 15:42:32 do_syncrep2: rid=107 NEW_COOKIE:
> rid=107,csn=20110216144232.222152Z#000000#000#000000
> Feb 16 15:42:32 do_syncrep2: rid=104
> cookie=rid=104,csn=20110216144232.222152Z#000000#000#000000
> Feb 16 15:42:32 slap_graduate_commit_csn: removing 0x7fb58c0227d0
> 20110216144232.222152Z#000000#000#000000
> Feb 16 15:42:32 do_syncrep2: rid=104 CSN too old, ignoring
> 20110216144232.222152Z#000000#000#000000
> Feb 16 15:43:05 do_syncrep2: rid=105 LDAP_RES_INTERMEDIATE - NEW_COOKIE
> Feb 16 15:43:05 do_syncrep2: rid=105 NEW_COOKIE:
> rid=105,csn=20110216144305.545784Z#000000#000#000000
> Feb 16 15:43:05 slap_queue_csn: queing 0x7fb58c020b50
> 20110216144305.545784Z#000000#000#000000
> Feb 16 15:43:05 do_syncrep2: rid=107 LDAP_RES_INTERMEDIATE - NEW_COOKIE
> Feb 16 15:43:05 do_syncrep2: rid=107 NEW_COOKIE:
> rid=107,csn=20110216144305.545784Z#000000#000#000000
> Feb 16 15:43:05 do_syncrep2: rid=104
> cookie=rid=104,csn=20110216144305.545784Z#000000#000#000000
> Feb 16 15:43:05 slap_graduate_commit_csn: removing 0x7fb58c0227d0
> 20110216144305.545784Z#000000#000#000000
> Feb 16 15:43:05 do_syncrep2: rid=104 CSN too old, ignoring
> 20110216144305.545784Z#000000#000#000000
>
> (both servers are perfectly in sync with an NTP daemon)
>
> It looks like ITS #6619 is quite similar, and unresolved.
>
> What do these messages mean ? Is there a way to force the update ?
Your current configuration is unsupported. Ordinarily when you configure
multiple consumers in a DB it is assumed they are all pointing at different
providers, and each provider will have a different serverID. In your case,
since it is all a single provider with a single serverID, all 3 consumers will
share a single contextCSN. Any update in any branch will update the contextCSN
to that newest state. Any updates in other branches that hadn't been received
yet (due to random timing between threads) will be received as "too old"
because the contextCSN already has a newer state.
A workaround for this would be to split each consumer into its own subordinate
database, then each will have a private copy of its own contextCSN to work with.
Another potential workaround, if all of the consumer configs were identical
except for their baseDN, would be to simply consolidate them all into a single
consumer, with a more complex search filter.
searchbase=o=mydir
filter=(|
(&(entryDN:dnSubtreematch:=ou=groups,o=mydir)(mail=*))
(entryDN:dnSubtreematch:=ou=operators,o=mydir)
(&(entryDN:dnSubtreematch:=ou=people,o=mydir)(uid=mytestuser)))
--
-- Howard Chu
CTO, Symas Corp.
http://www.symas.com
Director, Highland Sun
http://highlandsun.com/hyc/
Chief Architect, OpenLDAP
http://www.openldap.org/project/