Thread processing in Directory Server has been serialized
On an incoming replicated session, a replicated operation must only be processed when the previous one is completed. In certain situations, the thread which processed the start session operation continued to read and process replicated operations. Consequently, two replicated operations ran in parallel that led to inconsistencies, such as an completed child "add" operation before the parent entry was added. With this update, the thread processing the start session operation no longer processes further operations, even if some are available in the read buffer. As a result, the inconsistencies no longer occur in the mentioned scenario.
Description of problem:
We have observed in a read only consumer that the operations are not completely serialized. This should not be a problem except when we add a parent and inmediately after, a child. If the child is processed before the parent or the parent has not finished to be processed, the child could fail to be added. Or a glue entry created, as we have seen already in a customer case. Logs:
[05/Mar/2018:22:59:36.576352590 -0800] conn=5952102 op=800 ADD dn="ou=parent,ou=Projects,dc=example,dc=com"
[05/Mar/2018:22:59:36.577978254 -0800] conn=5952102 op=801 ADD dn="ou=child,ou=parent,ou=Projects,dc=example,dc=com"
[05/Mar/2018:22:59:36.647458809 -0800] conn=5952102 op=801 RESULT err=0 tag=105 nentries=0 etime=0.073000 csn=5a9e3c58000003e90000
[05/Mar/2018:22:59:36.651239085 -0800] conn=5952102 op=802 ADD dn="ou=child2,ou=parent,ou=Projects,dc=example,dc=com"
[05/Mar/2018:22:59:36.651830303 -0800] conn=5952102 op=800 RESULT err=0 tag=105 nentries=0 etime=0.078000 csn=5a9e3c57000003e90000
[05/Mar/2018:22:59:36.640046623 -0800] - NOTICE - NSMMReplicationPlugin - create_glue_entry - conn=5952102 op=801 csn=5a9e3c58000003e90000: Created glue entry ou=parent,ou=Projects,dc=example,dc=com uniqueid=dbc0c281-210b11e8-bb36c1a8-ea47160f reason missingEntry
Version-Release number of selected component (if applicable): latest RHDS10.
Just to add, in this case the consumer is a read only replica. So, the glue entry is created in the read only replica and it's extremely complicated to be deleted. We have to re-initialize the consumer each time.
The creation and handling of the glue entry is not designed for such condition where replicated operation are not serialized.
The focus of that BZ should be failure of serialization.
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.