Directory Server correctly generates the CSN
In a Directory Server replication topology, updates are managed by using Change Sequence Numbers (CSN) based on time stamps. New CSNs must be higher than the highest CSN present in the replica update vector (RUV). In case the server generates a new CSN in the same second as the most recent CSN, the sequence number is increased to ensure that it is higher. However, if the most recent CSN and the new CSN were identical, the sequence number was not increased. In this situation, the new CSN was, except the replica ID, identical to the most recent one. As a consequence, a new update in the directory appeared in certain situations older than the most recent update. With this update, Directory Server increases the CSN if the sequence number is lower or equal to the most recent one. As a result, new updates are no longer considered older than the most recent data.
This bug is created as a clone of upstream ticket:
#### Issue Description
On consumer side csn_generator ajustment occurs (let CSN = highest known csn)
* when a replication session starts
* when a csn is generated locally and than csn is <= CSN
During adjustment, in the case
* there is no remote/local offset (time change)
* the current_time on the consumer is identical to CSN
Then next locally generated csn will only differ with **seqnum**
The **seqnum** of the csn_generator is increased only if CSN.seqnum is larger
than the csn_generator one.
In case of egality, it remains unchanged.
The consequence is that the next locally generated csn will be identical to CSN (except for the RID). So even after csn_generator adjustment, csn_generator may create csn that are not larger than the CSN
#### Package Version and Platform
#### Steps to reproduce
1. see FREEIPA-921
This is a timing issue, so it is not systematic. Now on the test systems it happens one time out of two.
#### Actual results
The generated csn can be lower than the highest known csn and urp can order operations in the opposite way.
#### Expected results
generated csn should strictly be larger than the most recent one received
Fix pushed upstream
Impact of the bug
This bug can have a large range of impacts as constantly increasing CSN is a key requirement of replication.
Impact are most likely silent, replication resolve the conflict of CSN but in an invalid order. At the end of the day an attribute of an entry can have a different value that it should have.
The probability of hitting that bug is quite low (fast replication and replicated update triggering an other update).
In IDM, Topology plugin was victim with a noticeable impact because this plugin triggers internal update and invalid result had a noticeable impact.
When topology plugin was merging two unidirectional segments into a bidirectionnal segment the invalid result of the segment status can lead to the deletion of one of the replication agreement.
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.
For information on the advisory, and where to find the updated
files, follow the link below.
If the solution does not work for you, open a new bug report.