[Date Prev][Date Next] [Chronological] [Thread] [Top]

(ITS#8649) Issue when fetching the backend that will receive the contextCSN when we have glued databases

Full_Name: Emmanuel L.charny
Version: 2.4.45
URL: ftp://ftp.openldap.org/incoming/
Submission from: (NULL) (

When syncrepl is started, it first searches which backend will host the
contextCSN. There are two factors in play :
- do we have a syncprov overlay
- do we have parent backends.

If the local DB is a subordinate, then we have to look in its parents to see if
one of them has a syncprov overlay. If so, then this backend will be the one
receiving the contextCSN. Otherwise, the local DB will.

Now, if we have a hierarchy of backends (ie, 3 or more subordinates in a chain),
with the syncprov overlay present in an intermediate backend, then the
contextCSN will not be attached to it, but to the local DB.

This is because the select_backend( &backend->be_nsuffix[0], 1 ) function tries
to fetch the top level backend, regardless the presence of the syncprov overlay
in intermediary subordinates.

IMO, instead of calling select_backend with the parameter 1 (is, subs), we
should call it recursively up to the point we reach the top level or we find a
backend with the syncprov overlay.