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

Reply via email to