Commit ceb632b0 authored by Howard Chu's avatar Howard Chu Committed by Quanah Gibson-Mount
Browse files

ITS#9338 Add backlog control for testing slapd write waits

parent 30778bda
......@@ -182,6 +182,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
......@@ -672,6 +674,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;
......
......@@ -98,6 +98,9 @@ extern ber_int_t vlvPos;
extern ber_int_t vlvCount;
extern struct berval *vlvContext;
/* features */
extern int backlog;
/* options */
extern struct timeval nettimeout;
......
......@@ -1420,6 +1420,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 );
......@@ -1443,6 +1444,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 )
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment