mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-12-25 17:19:43 -05:00
Fix error recovery, cleanup session handles. Always reschedule task
at end of do_syncrepl; this fixes the problem of syncrepl never starting if the master isn't up. Set sync interval to 60 seconds in persist mode; it will retry connecting to the master when the master isn't up. Fail on SASL at config time instead of at runtime when SASL is not enabled.
This commit is contained in:
parent
11534f4cee
commit
ac7404eabd
2 changed files with 51 additions and 41 deletions
|
|
@ -2935,8 +2935,14 @@ parse_syncrepl_line(
|
|||
si->si_bindmethod = LDAP_AUTH_SIMPLE;
|
||||
gots |= GOT_METHOD;
|
||||
} else if ( !strcasecmp( val, SASLSTR )) {
|
||||
#ifdef HAVE_CYRUS_SASL
|
||||
si->si_bindmethod = LDAP_AUTH_SASL;
|
||||
gots |= GOT_METHOD;
|
||||
#else /* HAVE_CYRUS_SASL */
|
||||
fprintf( stderr, "Error: parse_syncrepl_line: "
|
||||
"not compiled with SASL support\n" );
|
||||
return 1;
|
||||
#endif /* HAVE_CYRUS_SASL */
|
||||
} else {
|
||||
si->si_bindmethod = -1;
|
||||
}
|
||||
|
|
@ -3034,7 +3040,7 @@ parse_syncrepl_line(
|
|||
sizeof("refreshAndPersist")-1 ))
|
||||
{
|
||||
si->si_type = LDAP_SYNC_REFRESH_AND_PERSIST;
|
||||
si->si_interval = 0;
|
||||
si->si_interval = 60;
|
||||
} else {
|
||||
fprintf( stderr, "Error: parse_syncrepl_line: "
|
||||
"unknown sync type \"%s\"\n", val);
|
||||
|
|
@ -3043,31 +3049,28 @@ parse_syncrepl_line(
|
|||
} else if ( !strncasecmp( cargv[ i ],
|
||||
INTERVALSTR, sizeof( INTERVALSTR ) - 1 ) )
|
||||
{
|
||||
char *hstr;
|
||||
char *mstr;
|
||||
char *dstr;
|
||||
val = cargv[ i ] + sizeof( INTERVALSTR );
|
||||
if ( si->si_type == LDAP_SYNC_REFRESH_AND_PERSIST ) {
|
||||
si->si_interval = 0;
|
||||
} else {
|
||||
char *dstr;
|
||||
char *hstr;
|
||||
char *mstr;
|
||||
dstr = val;
|
||||
hstr = strchr( dstr, ':' );
|
||||
if ( hstr == NULL ) {
|
||||
fprintf( stderr, "Error: parse_syncrepl_line: "
|
||||
"invalid interval \"%s\"\n", val );
|
||||
return 1;
|
||||
}
|
||||
*hstr++ = '\0';
|
||||
mstr = strchr( hstr, ':' );
|
||||
if ( mstr == NULL ) {
|
||||
fprintf( stderr, "Error: parse_syncrepl_line: "
|
||||
"invalid interval \"%s\"\n", val );
|
||||
return 1;
|
||||
}
|
||||
*mstr++ = '\0';
|
||||
si->si_interval = (( atoi( dstr ) * 24 + atoi( hstr )) * 60
|
||||
+ atoi( mstr )) * 60;
|
||||
dstr = val;
|
||||
hstr = strchr( dstr, ':' );
|
||||
if ( hstr == NULL ) {
|
||||
fprintf( stderr, "Error: parse_syncrepl_line: "
|
||||
"invalid interval \"%s\"\n", val );
|
||||
return 1;
|
||||
}
|
||||
*hstr++ = '\0';
|
||||
mstr = strchr( hstr, ':' );
|
||||
if ( mstr == NULL ) {
|
||||
fprintf( stderr, "Error: parse_syncrepl_line: "
|
||||
"invalid interval \"%s\"\n", val );
|
||||
return 1;
|
||||
}
|
||||
*mstr++ = '\0';
|
||||
si->si_interval = (( atoi( dstr ) * 24 + atoi( hstr )) * 60
|
||||
+ atoi( mstr )) * 60;
|
||||
|
||||
if ( si->si_interval < 0 ) {
|
||||
fprintf( stderr, "Error: parse_syncrepl_line: "
|
||||
"invalid interval \"%ld\"\n",
|
||||
|
|
|
|||
|
|
@ -271,7 +271,7 @@ do_syncrepl(
|
|||
"do_syncrepl: ldap_initialize failed (%s)\n",
|
||||
si->si_provideruri, 0, 0 );
|
||||
#endif
|
||||
return NULL;
|
||||
goto done;
|
||||
}
|
||||
|
||||
op.o_protocol = LDAP_VERSION3;
|
||||
|
|
@ -293,7 +293,7 @@ do_syncrepl(
|
|||
si->si_tls == SYNCINFO_TLS_CRITICAL ? "Error" : "Warning",
|
||||
rc, 0 );
|
||||
#endif
|
||||
if( si->si_tls == SYNCINFO_TLS_CRITICAL ) return NULL;
|
||||
if( si->si_tls == SYNCINFO_TLS_CRITICAL ) goto done;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -347,9 +347,10 @@ do_syncrepl(
|
|||
"ldap_sasl_interactive_bind_s failed (%d)\n",
|
||||
rc, 0, 0 );
|
||||
#endif
|
||||
return NULL;
|
||||
goto done;
|
||||
}
|
||||
#else /* HAVE_CYRUS_SASL */
|
||||
/* Should never get here, we trapped this at config time */
|
||||
fprintf( stderr, "not compiled with SASL support\n" );
|
||||
return NULL;
|
||||
#endif
|
||||
|
|
@ -363,7 +364,7 @@ do_syncrepl(
|
|||
Debug( LDAP_DEBUG_ANY, "do_syncrepl: "
|
||||
"ldap_bind_s failed (%d)\n", rc, 0, 0 );
|
||||
#endif
|
||||
return NULL;
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -428,7 +429,7 @@ do_syncrepl(
|
|||
Debug( LDAP_DEBUG_ANY, "do_syncrepl: "
|
||||
"ldap_search_ext: %s (%d)\n", ldap_err2string( rc ), rc, 0 );
|
||||
#endif
|
||||
return NULL;
|
||||
goto done;
|
||||
}
|
||||
|
||||
if ( abs(si->si_type) == LDAP_SYNC_REFRESH_AND_PERSIST ){
|
||||
|
|
@ -622,6 +623,7 @@ do_syncrepl(
|
|||
}
|
||||
}
|
||||
ldap_msgfree( res );
|
||||
res = NULL;
|
||||
}
|
||||
|
||||
if ( rc == -1 ) {
|
||||
|
|
@ -642,8 +644,10 @@ do_syncrepl(
|
|||
|
||||
done:
|
||||
#if defined( LDAP_SLAPI )
|
||||
if ( op.o_pb ) slapi_pblock_destroy( op.o_pb );
|
||||
slapi_x_free_object_extensions( SLAPI_X_EXT_OPERATION, &op );
|
||||
if ( op.o_pb ) {
|
||||
slapi_pblock_destroy( op.o_pb );
|
||||
slapi_x_free_object_extensions( SLAPI_X_EXT_OPERATION, &op );
|
||||
}
|
||||
#endif /* defined( LDAP_SLAPI ) */
|
||||
|
||||
if ( syncCookie.bv_val )
|
||||
|
|
@ -655,18 +659,16 @@ done:
|
|||
|
||||
if ( res ) ldap_msgfree( res );
|
||||
|
||||
ldap_unbind( ld );
|
||||
if ( ld ) ldap_unbind( ld );
|
||||
|
||||
ber_bvarray_free_x( si->si_syncCookie, op.o_tmpmemctx );
|
||||
si->si_syncCookie = NULL;
|
||||
if ( si->si_syncCookie ) {
|
||||
ber_bvarray_free_x( si->si_syncCookie, op.o_tmpmemctx );
|
||||
si->si_syncCookie = NULL;
|
||||
}
|
||||
|
||||
ldap_pvt_thread_mutex_lock( &syncrepl_rq.rq_mutex );
|
||||
ldap_pvt_runqueue_stoptask( &syncrepl_rq, rtask );
|
||||
if ( si->si_type == LDAP_SYNC_REFRESH_ONLY ) {
|
||||
ldap_pvt_runqueue_resched( &syncrepl_rq, rtask );
|
||||
} else {
|
||||
ldap_pvt_runqueue_remove( &syncrepl_rq, rtask );
|
||||
}
|
||||
ldap_pvt_runqueue_resched( &syncrepl_rq, rtask );
|
||||
ldap_pvt_thread_mutex_unlock( &syncrepl_rq.rq_mutex );
|
||||
|
||||
return NULL;
|
||||
|
|
@ -869,6 +871,8 @@ syncrepl_entry(
|
|||
struct berval *syncuuid_bv = NULL;
|
||||
|
||||
SlapReply rs = {REP_RESULT};
|
||||
Filter f;
|
||||
AttributeAssertion ava;
|
||||
int rc = LDAP_SUCCESS;
|
||||
int ret = LDAP_SUCCESS;
|
||||
|
||||
|
|
@ -895,7 +899,11 @@ syncrepl_entry(
|
|||
si->si_e = e;
|
||||
si->si_syncUUID_ndn = NULL;
|
||||
|
||||
op->ors_filter = str2filter_x( op, op->ors_filterstr.bv_val );
|
||||
f.f_choice = LDAP_FILTER_EQUALITY;
|
||||
f.f_ava = &ava;
|
||||
ava.aa_desc = slap_schema.si_ad_entryUUID;
|
||||
ava.aa_value = *syncUUID;
|
||||
op->ors_filter = &f;
|
||||
op->ors_scope = LDAP_SCOPE_SUBTREE;
|
||||
|
||||
/* get syncrepl cookie of shadow replica from subentry */
|
||||
|
|
@ -911,7 +919,6 @@ syncrepl_entry(
|
|||
|
||||
rc = be->be_search( op, &rs );
|
||||
|
||||
if ( op->ors_filter ) filter_free_x( op, op->ors_filter );
|
||||
if ( op->ors_filterstr.bv_val ) {
|
||||
sl_free( op->ors_filterstr.bv_val, op->o_tmpmemctx );
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue