mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-01-18 11:05:48 +08:00
ITS#9338 Add backlog control for testing slapd write waits
This commit is contained in:
parent
95c5a1698b
commit
5e8a78fa6c
@ -210,6 +210,8 @@ static struct tool_ctrls_t {
|
||||
enum { Intr_None = 0, Intr_Abandon, Intr_Cancel, Intr_Ignore };
|
||||
static volatile sig_atomic_t gotintr, abcan;
|
||||
|
||||
int backlog;
|
||||
|
||||
|
||||
#ifdef LDAP_CONTROL_X_SESSION_TRACKING
|
||||
static int
|
||||
@ -704,6 +706,13 @@ tool_args( int argc, char **argv )
|
||||
gotintr = abcan;
|
||||
}
|
||||
|
||||
} else if ( strcasecmp( control, "backlog" ) == 0 ) {
|
||||
/* special search: accumulate lots of responses
|
||||
* but don't read any, force slapd writer to wait.
|
||||
* Then abandon the search and issue a new one.
|
||||
*/
|
||||
backlog = 1;
|
||||
|
||||
} else if ( tool_is_oid( control ) ) {
|
||||
LDAPControl *tmpctrls, ctrl;
|
||||
|
||||
|
@ -99,6 +99,9 @@ extern ber_int_t vlvPos;
|
||||
extern ber_int_t vlvCount;
|
||||
extern struct berval *vlvContext;
|
||||
|
||||
/* features */
|
||||
extern int backlog;
|
||||
|
||||
/* options */
|
||||
extern struct timeval nettimeout;
|
||||
|
||||
|
@ -1742,6 +1742,7 @@ static int dosearch(
|
||||
tv_timelimitp = &tv_timelimit;
|
||||
}
|
||||
|
||||
again:
|
||||
rc = ldap_search_ext( ld, base, scope, filter, attrs, attrsonly,
|
||||
sctrls, cctrls, tv_timelimitp, sizelimit, &msgid );
|
||||
|
||||
@ -1765,6 +1766,21 @@ static int dosearch(
|
||||
tvp = &tv;
|
||||
}
|
||||
|
||||
if ( backlog == 1 ) {
|
||||
printf( _("\nWaiting for responses to accumulate, press Enter to continue: "));
|
||||
fflush( stdout );
|
||||
getchar();
|
||||
printf( _("Abandoning msgid %d\n"), msgid );
|
||||
ldap_abandon_ext( ld, msgid, NULL, NULL );
|
||||
/* turn off syncrepl control */
|
||||
ldap_set_option( ld, LDAP_OPT_SERVER_CONTROLS, NULL );
|
||||
backlog = 2;
|
||||
scope = LDAP_SCOPE_BASE;
|
||||
goto again;
|
||||
} else if ( backlog == 2 ) {
|
||||
tv.tv_sec = timelimit;
|
||||
}
|
||||
|
||||
while ((rc = ldap_result( ld, LDAP_RES_ANY,
|
||||
sortattr ? LDAP_MSG_ALL : LDAP_MSG_ONE,
|
||||
tvp, &res )) > 0 )
|
||||
|
Loading…
Reference in New Issue
Block a user