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

Re: why syncrepl doesn't work ???



On Jun 12, 2007, at 5:23 AM, Jeronimo Zucco wrote:

I'm trying to implement syncrepl in my openldap 2.3.35 without sucess. I tryed many (I sed: MANY) times to slacat, slapadd to slave for syn ldap servers, but for some reason with I don't know, the slave lost the sync.


   Then I have to do the same thing ate night:

- stop ldap master;
- slapcat master
- slapadd on the slave;
- start master and start slave

This works about one hour, in the morning wasn't syncing again. If i restart the slave ldap, then the changes on the master is replicated, but stops to sync "on line" after this.

I had troubles like this when the replication load was very large. The replica encountered a time limit and its search aborted.

Unfortunately, the only way to know for sure is to add logging to syncrepl.c.
Without that you can only guess. I have done that with 2.4.4 test release, and
I just now posted a patch: http://www.openldap.org/its/index.cgi/ Incoming?id=5014
Since it won't apply to 2.3, I append an untested patch for 2.3.24.


	Donn Cave, donn@u.washington.edu

*** servers/slapd/syncrepl.c.orig       Sat May 27 01:45:32 2006
--- servers/slapd/syncrepl.c    Tue Jun 12 13:50:42 2007
***************
*** 627,633 ****
        struct sync_cookie      syncCookie_req = { BER_BVNULL };
        struct berval           cookie = BER_BVNULL;

!       int     rc, err, i;
        ber_len_t       len;

        int rc_efree = 1;
--- 627,633 ----
        struct sync_cookie      syncCookie_req = { BER_BVNULL };
        struct berval           cookie = BER_BVNULL;

!       int     rc, err, i, rrc;
        ber_len_t       len;

        int rc_efree = 1;
***************
*** 646,651 ****
--- 646,652 ----
        BerVarray syncUUIDs = NULL;
        ber_tag_t si_tag;

+ rrc = LDAP_SUCCESS;
if ( slapd_shutdown ) {
rc = -2;
goto done;
***************
*** 669,674 ****
--- 670,676 ----
while (( rc = ldap_result( si->si_ld, LDAP_RES_ANY, LDAP_MSG_ONE,
tout_p, &res )) > 0 )
{
+ ldap_parse_result( si->si_ld, res, &rrc, 0, 0, 0, 0, 0 );
if ( slapd_shutdown ) {
rc = -2;
goto done;
***************
*** 994,999 ****
--- 996,1010 ----
}


done:
+ if ( rrc != LDAP_SUCCESS ) {
+ const char *errstr;
+ ldap_get_option( si->si_ld, LDAP_OPT_ERROR_NUMBER, &rrc );
+ errstr = ldap_err2string( rrc );
+
+ Debug( LDAP_DEBUG_ANY,
+ "syncrepl %s result: %s\n", si->si_ridtxt, errstr, 0 );
+ }
+
slap_sync_cookie_free( &syncCookie, 0 );
slap_sync_cookie_free( &syncCookie_req, 0 );