You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository has been archived by the owner on Sep 22, 2022. It is now read-only.
running defines.sh
Starting master slapd on TCP/IP port 17901...
Using ldapsearch to check that master slapd is running (port 17901)...
Waiting 1 seconds for master slapd to start...
Waiting 0.5 seconds for master slapd to start...
Waiting 1 seconds for master slapd to start...
Using ldapadd to create the context prefix entry in the master...
Starting R1-slave slapd on TCP/IP port 17902...
Using ldapsearch to check that R1-slave slapd is running (port 17902)...
Waiting 1 seconds for R1-slave slapd to start...
Waiting 0.5 seconds for R1-slave slapd to start...
Waiting 1 seconds for R1-slave slapd to start...
Starting R2-slave slapd on TCP/IP port 17903...
Using ldapsearch to check that R2-slave slapd is running (port 17903)...
Waiting 1 seconds for R2-slave slapd to start...
Waiting 0.5 seconds for R2-slave slapd to start...
Waiting 1 seconds for R2-slave slapd to start...
Starting P1-slave slapd on TCP/IP port 17904...
Using ldapsearch to check that P1-slave slapd is running (port 17904)...
Waiting 1 seconds for P1-slave slapd to start...
Waiting 0.5 seconds for P1-slave slapd to start...
Starting P2 slave slapd on TCP/IP port 17905...
Using ldapsearch to check that P2-slave slapd is running (port 17905)...
Waiting 1 seconds for P2-slave slapd to start...
Waiting 0.5 seconds for P2-slave slapd to start...
Starting P3 slave slapd on TCP/IP port 17906...
Using ldapsearch to check that P3-slave slapd is running (port 17906)...
Waiting 1 seconds for P3-slave slapd to start...
Using ldapadd to populate the master directory...
Waiting while syncrepl replicates a changes (between 17901 and 17902)... Done in 1 seconds
Waiting while syncrepl replicates a changes (between 17901 and 17903)... Done in 2 seconds
Waiting while syncrepl replicates a changes (between 17901 and 17904)... Done in 1 seconds
Waiting while syncrepl replicates a changes (between 17901 and 17905)... Done in 1 seconds
Waiting while syncrepl replicates a changes (between 17901 and 17906)... Done in 1 seconds
Using ldapmodify to modify master directory...
Waiting while syncrepl replicates a changes (between 17901 and 17902)... Done in 2 seconds
Waiting while syncrepl replicates a changes (between 17901 and 17903)... Done in 3 seconds
Waiting while syncrepl replicates a changes (between 17901 and 17904)... Done in 1 seconds
Waiting while syncrepl replicates a changes (between 17901 and 17905)... Done in 1 seconds
Waiting while syncrepl replicates a changes (between 17901 and 17906)... Done in 1 seconds
Performing modify alone on provider...
Waiting while syncrepl replicates a changes (between 17901 and 17902)... Done in 1 seconds
Waiting while syncrepl replicates a changes (between 17901 and 17903)... Done in 2 seconds
Waiting while syncrepl replicates a changes (between 17901 and 17904)... Done in 1 seconds
Waiting while syncrepl replicates a changes (between 17901 and 17905)... Done in 1 seconds
Waiting while syncrepl replicates a changes (between 17901 and 17906)... Done in 1 seconds
Using ldapsearch to read all the entries from the master...
Using ldapsearch to read all the entries from the R1 slave...
Using ldapsearch to read all the entries from the R2 slave...
Using ldapsearch to read all the entries from the P1 slave...
Using ldapsearch to read all the entries from the P2 slave...
Using ldapsearch to read all the entries from the P3 slave...
>>>>> waiting for things (23828 24064 24177 24412 24507 24673) to exit... done
Filtering master ldapsearch results...
Filtering R1 slave ldapsearch results...
Filtering R2 slave ldapsearch results...
Filtering P1 slave ldapsearch results...
Filtering P2 slave ldapsearch results...
Filtering P3 slave ldapsearch results...
Comparing retrieved entries from master and R1 slave...
Comparing retrieved entries from master and R2 slave...
test failed - master and R2 slave databases differ
Seems this problem already fixed in ReOpenLDAP by using biglock in the syncrepl message loop.
But currently test019-syncrepl-cascade don't use a biglock feature.
Проблема в гонках при каскадном refreshOnly обновлении содержимого в схеме slap1 => slap2 =>slap3.
slap3 выполняет обновление со slap2, в то время когда сам slap2 еще не завершил свою синхронизацию со slap1:
slap2 обрабатывает поступающий к нему набор записей syncprov_state_ctrl(LDAP_SYNC_ADD), которые поступают в произвольном порядке.
slap3 успевает завершить синхронизацию со slap2 раньше, чем slap2 успевает получить и обработать все записи syncprov_state_ctrl(LDAP_SYNC_ADD), получив таким образом лишь некоторую часть записей со slap1 в произвольном порядке;
на следующем цикле slap3 отправляет запрос на синхронизацию с cookie по максимальному entryCSN из имеющихся у него записей (это обеспечивается логикой syncprov), но так как на предыдущем были получены не все записи со slap1, то этот CSN может быть больше чем часть недополученных записей;
slap2 производит выборку используя CSN из полученного cookie, но в эту выборку не попадут ранее недополученные записи, entryCSN которых меньше.
Варианты решения проблемы:
добавить rw-блокировку чтобы не позволять syncprov начинать обслуживать новый refresh-search до завершения цикла синхронизации syncrepl, но этом может приводить к deadlock в fullmesh multimastrer кластере из нескольких узлов.
на стороне syncrepl перед применением уведомлений LDAP_SYNC_ADD/LDAP_SYNC_MODIFY производить их сортировку по entryCSN.
производить сортировку выборки по entryCSN на стороне syncprov.
в syncprov_operational() не отдавать "грязный" набор contextCSN, со значениями которые не были обновлены явно syncrepl по завершению цикла.
diff server1.flt server3.flt
slapd.1.log
slapd.2.log
slapd.3.log
The text was updated successfully, but these errors were encountered: