[SCM] Samba Shared Repository - branch master updated

Volker Lendecke vlendec at samba.org
Mon Feb 12 18:52:01 UTC 2018


The branch, master has been updated
       via  b4384b7 winbind: Improve child selection
      from  cb920dd tests/samba-tool user wdigest: fix a flapping test

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit b4384b7f0ecf3b47dd60acaf77636b679e3adc05
Author: Volker Lendecke <vl at samba.org>
Date:   Fri Feb 9 10:27:55 2018 +0100

    winbind: Improve child selection
    
    This improves the situation when a client request blocks a winbind
    child. This might be a slow samlogon or lookupnames to a domain that's
    far away. With random selection of the child for new request coming in
    we could end up with a long queue when other, non-blocked children
    could serve those new requests. Choose the shortest queue.
    
    This is an immediate and simple fix. Step two will be to have a
    per-domain and not a per-child queue. Right now we're pre-selecting
    the check-out queue at Fry's randomly without looking at the queue
    length. With this change we're picking the shortest queue. The better
    change will be what Fry's really does: One central queue and red/green
    lights on the busy/free checkout counters.
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Andreas Schneider <asn at samba.org>
    
    Autobuild-User(master): Volker Lendecke <vl at samba.org>
    Autobuild-Date(master): Mon Feb 12 19:51:35 CET 2018 on sn-devel-144

-----------------------------------------------------------------------

Summary of changes:
 source3/winbindd/winbindd_dual.c | 36 +++++++++++++++++-------------------
 1 file changed, 17 insertions(+), 19 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/winbindd/winbindd_dual.c b/source3/winbindd/winbindd_dual.c
index 33f1393..993166d 100644
--- a/source3/winbindd/winbindd_dual.c
+++ b/source3/winbindd/winbindd_dual.c
@@ -248,33 +248,31 @@ static void wb_child_request_cleanup(struct tevent_req *req,
 	DLIST_REMOVE(winbindd_children, state->child);
 }
 
-static bool winbindd_child_busy(struct winbindd_child *child)
-{
-	return tevent_queue_length(child->queue) > 0;
-}
-
-static struct winbindd_child *find_idle_child(struct winbindd_domain *domain)
+struct winbindd_child *choose_domain_child(struct winbindd_domain *domain)
 {
+	struct winbindd_child *shortest = &domain->children[0];
+	struct winbindd_child *current;
 	int i;
 
 	for (i=0; i<lp_winbind_max_domain_connections(); i++) {
-		if (!winbindd_child_busy(&domain->children[i])) {
-			return &domain->children[i];
-		}
-	}
+		size_t shortest_len, current_len;
 
-	return NULL;
-}
+		current = &domain->children[i];
+		current_len = tevent_queue_length(current->queue);
 
-struct winbindd_child *choose_domain_child(struct winbindd_domain *domain)
-{
-	struct winbindd_child *result;
+		if (current_len == 0) {
+			/* idle child */
+			return current;
+		}
 
-	result = find_idle_child(domain);
-	if (result != NULL) {
-		return result;
+		shortest_len = tevent_queue_length(shortest->queue);
+
+		if (current_len < shortest_len) {
+			shortest = current;
+		}
 	}
-	return &domain->children[rand() % lp_winbind_max_domain_connections()];
+
+	return shortest;
 }
 
 struct dcerpc_binding_handle *dom_child_handle(struct winbindd_domain *domain)


-- 
Samba Shared Repository



More information about the samba-cvs mailing list