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

MULTIMASTER problem



Hello,

In the software mailinglist someone noticed a problem with the
multimaster configuration of slapd. I've analysed this some time ago,
but due to a busy schedule I had no time to mention it. 

In the /servers/slapd/add.c I found the following condition:

   if( be->be_add ) {
	/* do the update here */
#ifdef SLAPD_MULTIMASTER
	if(be->be_lastmod == ON || 
	   (be->be_lastmod == UNDEFINED &&
	    global_lastmod == ON) &&
	   (be->be_update_ndn == NULL ||
	    strcmp(be->be_update_ndn,op->o_ndn))
#else
	if(be->be_update_ndn == NULL ||
	   strcmp(be->be_update_ndn,op->o_ndn) == 0)
#endif
		.
		.
		.

What happens is that in multimaster configuration only additions coming
from a client (be_update_ndn is different from op->o_ndn) and not the
other LDAP server are processed. Hence replica's from the other LDAP
server are not processed by this server. 

In other cases (modify, delete etc.) we see the following condition for
processing the message (see servers/slapd/delete.c)

   if(be->be_delete){
	/* Do the update here */
#ifNdef SLAPD_MULTIMASTER
	if(be->be_update_ndn == NULL ||
	   strcmp(be->be_update_ndn,op->o_ndn) == 0)
	{	
#endif
		.
		.
		.

In this case in the multimaster configuration the update is always
processed independent on the op->o_ndn. I believe this is what you also
want for addition. 

If someone has another opinion, please let me know.

Regards,

Edwin Roos.