Bug 1559945

Summary: adjustment of csn_generator can fail so next generated csn can be equal to the most recent one received
Product: Red Hat Enterprise Linux 7 Reporter: mreynolds
Component: 389-ds-baseAssignee: thierry bordaz <tbordaz>
Status: CLOSED ERRATA QA Contact: RHDS QE <ds-qe-bugs>
Severity: unspecified Docs Contact: Marc Muehlfeld <mmuehlfe>
Priority: high    
Version: 7.4CC: amsharma, mkosek, msauton, nkinder, pasik, rmeggins
Target Milestone: rcKeywords: ZStream
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: 389-ds-base-1.3.8.2-1.el7 Doc Type: Bug Fix
Doc Text:
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.
Story Points: ---
Clone Of:
: 1563079 (view as bug list) Environment:
Last Closed: 2018-10-30 10:13:34 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On:    
Bug Blocks: 1563079    

Description mreynolds 2018-03-23 15:19:05 UTC
This bug is created as a clone of upstream ticket:
https://pagure.io/389-ds-base/issue/49619

#### 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
All versions


#### 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

Comment 2 thierry bordaz 2018-03-23 15:21:13 UTC
Fix pushed upstream

Comment 4 thierry bordaz 2018-05-14 09:02:29 UTC
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.

Comment 11 errata-xmlrpc 2018-10-30 10:13:34 UTC
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.

https://access.redhat.com/errata/RHSA-2018:3127