The branch, master has been updated via 41c5d70c8d7b2af4fab50215f9bfea8e910cf99f (commit) via b96aa69dffedc154de94d3f7684e952bfaff0a74 (commit) from 793247452e19794bcc6d52938411e5cf964dc46e (commit)
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit 41c5d70c8d7b2af4fab50215f9bfea8e910cf99f Author: Stefan Metzmacher <me...@samba.org> Date: Mon Feb 23 16:10:42 2009 +0100 LDAP-BENCH-CLDAP: also test CLDAP rootdse searches. metze commit b96aa69dffedc154de94d3f7684e952bfaff0a74 Author: Stefan Metzmacher <me...@samba.org> Date: Wed Mar 11 14:28:35 2009 +0100 async_sock: fix truncating of the temporary iovec in writev_send/recv() Volker: please check! metze ----------------------------------------------------------------------- Summary of changes: lib/async_req/async_sock.c | 2 +- source4/torture/ldap/cldapbench.c | 85 ++++++++++++++++++++++++++++++++++--- 2 files changed, 80 insertions(+), 7 deletions(-) Changeset truncated at 500 lines: diff --git a/lib/async_req/async_sock.c b/lib/async_req/async_sock.c index f803b9c..be24bae 100644 --- a/lib/async_req/async_sock.c +++ b/lib/async_req/async_sock.c @@ -485,7 +485,7 @@ static void writev_handler(struct tevent_context *ev, struct tevent_fd *fde, state->iov[0].iov_len -= written; break; } - written = state->iov[0].iov_len; + written -= state->iov[0].iov_len; state->iov += 1; state->count -= 1; } diff --git a/source4/torture/ldap/cldapbench.c b/source4/torture/ldap/cldapbench.c index 1fcfe5a..ae2cb80 100644 --- a/source4/torture/ldap/cldapbench.c +++ b/source4/torture/ldap/cldapbench.c @@ -30,7 +30,7 @@ struct bench_state { int pass_count, fail_count; }; -static void request_handler(struct cldap_request *req) +static void request_netlogon_handler(struct cldap_request *req) { struct cldap_netlogon io; struct bench_state *state = talloc_get_type(req->async.private_data, struct bench_state); @@ -47,9 +47,9 @@ static void request_handler(struct cldap_request *req) } /* - benchmark cldap calls + benchmark cldap netlogon calls */ -static bool bench_cldap(struct torture_context *tctx, const char *address) +static bool bench_cldap_netlogon(struct torture_context *tctx, const char *address) { struct cldap_socket *cldap; int num_sent=0; @@ -69,14 +69,14 @@ static bool bench_cldap(struct torture_context *tctx, const char *address) search.in.acct_control = -1; search.in.version = 6; - printf("Running for %d seconds\n", timelimit); + printf("Running CLDAP/netlogon for %d seconds\n", timelimit); while (timeval_elapsed(&tv) < timelimit) { while (num_sent - (state->pass_count+state->fail_count) < 10) { struct cldap_request *req; req = cldap_netlogon_send(cldap, &search); req->async.private_data = state; - req->async.fn = request_handler; + req->async.fn = request_netlogon_handler; num_sent++; if (num_sent % 50 == 0) { if (torture_setting_bool(tctx, "progress", true)) { @@ -103,6 +103,78 @@ static bool bench_cldap(struct torture_context *tctx, const char *address) return ret; } +static void request_rootdse_handler(struct cldap_request *req) +{ + struct cldap_search io; + struct bench_state *state = talloc_get_type(req->async.private_data, struct bench_state); + NTSTATUS status; + TALLOC_CTX *tmp_ctx = talloc_new(NULL); + status = cldap_search_recv(req, tmp_ctx, &io); + if (NT_STATUS_IS_OK(status)) { + state->pass_count++; + } else { + state->fail_count++; + } + talloc_free(tmp_ctx); +} + +/* + benchmark cldap netlogon calls +*/ +static bool bench_cldap_rootdse(struct torture_context *tctx, const char *address) +{ + struct cldap_socket *cldap; + int num_sent=0; + struct timeval tv = timeval_current(); + bool ret = true; + int timelimit = torture_setting_int(tctx, "timelimit", 10); + struct cldap_search search; + struct bench_state *state; + + cldap = cldap_socket_init(tctx, tctx->ev, lp_iconv_convenience(tctx->lp_ctx)); + + state = talloc_zero(tctx, struct bench_state); + + ZERO_STRUCT(search); + search.in.dest_address = address; + search.in.dest_port = lp_cldap_port(tctx->lp_ctx); + search.in.filter = "(objectClass=*)"; + search.in.timeout = 2; + search.in.retries = 1; + + printf("Running CLDAP/rootdse for %d seconds\n", timelimit); + while (timeval_elapsed(&tv) < timelimit) { + while (num_sent - (state->pass_count+state->fail_count) < 10) { + struct cldap_request *req; + req = cldap_search_send(cldap, &search); + + req->async.private_data = state; + req->async.fn = request_rootdse_handler; + num_sent++; + if (num_sent % 50 == 0) { + if (torture_setting_bool(tctx, "progress", true)) { + printf("%.1f queries per second (%d failures) \r", + state->pass_count / timeval_elapsed(&tv), + state->fail_count); + fflush(stdout); + } + } + } + + tevent_loop_once(tctx->ev); + } + + while (num_sent != (state->pass_count + state->fail_count)) { + tevent_loop_once(tctx->ev); + } + + printf("%.1f queries per second (%d failures) \n", + state->pass_count / timeval_elapsed(&tv), + state->fail_count); + + talloc_free(cldap); + return ret; +} /* benchmark how fast a CLDAP server can respond to a series of parallel @@ -125,7 +197,8 @@ bool torture_bench_cldap(struct torture_context *torture) return false; } - ret &= bench_cldap(torture, address); + ret &= bench_cldap_netlogon(torture, address); + ret &= bench_cldap_rootdse(torture, address); return ret; } -- Samba Shared Repository