The Samba-Bugzilla – Attachment 7569 Details for
Bug 8943
Slow but responsive DC can lock up winbindd for > 10 minutes at a time (3.5 to master)
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Back off on the ldap page size in an attempt to get a page in under 15 seconds
0003-s3-libads-Use-a-reducing-page-size-to-try-and-cope-w.patch (text/plain), 2.86 KB, created by
Andrew Bartlett
on 2012-05-18 12:10:24 UTC
(
hide
)
Description:
Back off on the ldap page size in an attempt to get a page in under 15 seconds
Filename:
MIME Type:
Creator:
Andrew Bartlett
Created:
2012-05-18 12:10:24 UTC
Size:
2.86 KB
patch
obsolete
>From 2c2b76d62b4d0a1305dae0847c36ac350a5f234c Mon Sep 17 00:00:00 2001 >From: Andrew Bartlett <abartlet@samba.org> >Date: Fri, 18 May 2012 22:01:14 +1000 >Subject: [PATCH 3/4] s3-libads: Use a reducing page size to try and cope with > a slow LDAP server > >If we cannot get 1000 users downloaded in 15seconds, try with 500, 250 and then 125 users >at a time. > >This patch however does not appear to work for more than 2 pages. > >Andrew Bartlett >--- > source3/include/ads.h | 1 + > source3/libads/ads_struct.c | 4 ++++ > source3/libads/ldap.c | 4 ++-- > source3/libads/ldap_utils.c | 7 +++++++ > 4 files changed, 14 insertions(+), 2 deletions(-) > >diff --git a/source3/include/ads.h b/source3/include/ads.h >index bbe8671..3d5fc3a 100644 >--- a/source3/include/ads.h >+++ b/source3/include/ads.h >@@ -61,6 +61,7 @@ typedef struct ads_struct { > time_t current_time; > char *schema_path; > char *config_path; >+ int ldap_page_size; > } config; > > /* info about the current LDAP connection */ >diff --git a/source3/libads/ads_struct.c b/source3/libads/ads_struct.c >index e6220fd..285057b 100644 >--- a/source3/libads/ads_struct.c >+++ b/source3/libads/ads_struct.c >@@ -156,6 +156,10 @@ ADS_STRUCT *ads_init(const char *realm, > > ads->auth.flags = wrap_flags; > >+ /* Start with a page size of 1000 when the connection is new, >+ * we will drop it by half we get a timeout. */ >+ ads->config.ldap_page_size = 1000; >+ > return ads; > } > >diff --git a/source3/libads/ldap.c b/source3/libads/ldap.c >index 9849542..e504c6d 100644 >--- a/source3/libads/ldap.c >+++ b/source3/libads/ldap.c >@@ -931,11 +931,11 @@ static ADS_STATUS ads_do_paged_search_args(ADS_STRUCT *ads, > > cookie_be = ber_alloc_t(LBER_USE_DER); > if (*cookie) { >- ber_printf(cookie_be, "{iO}", (ber_int_t) 1000, *cookie); >+ ber_printf(cookie_be, "{iO}", (ber_int_t) ads->config.ldap_page_size, *cookie); > ber_bvfree(*cookie); /* don't need it from last time */ > *cookie = NULL; > } else { >- ber_printf(cookie_be, "{io}", (ber_int_t) 1000, "", 0); >+ ber_printf(cookie_be, "{io}", (ber_int_t) ads->config.ldap_page_size, "", 0); > } > ber_flatten(cookie_be, &cookie_bv); > PagedResults.ldctl_oid = discard_const_p(char, ADS_PAGE_CTL_OID); >diff --git a/source3/libads/ldap_utils.c b/source3/libads/ldap_utils.c >index 2f1c1b8..3dd1060 100644 >--- a/source3/libads/ldap_utils.c >+++ b/source3/libads/ldap_utils.c >@@ -84,6 +84,13 @@ static ADS_STATUS ads_do_search_retry_internal(ADS_STRUCT *ads, const char *bind > > while (--count) { > >+ if (NT_STATUS_EQUAL(ads_ntstatus(status), NT_STATUS_IO_TIMEOUT) && ads->config.ldap_page_size >= 250) { >+ int new_page_size = (ads->config.ldap_page_size / 2); >+ DEBUG(1, ("Reducing LDAP page size from %d to %d due to IO_TIMEOUT\n", >+ ads->config.ldap_page_size, new_page_size)); >+ ads->config.ldap_page_size = new_page_size; >+ } >+ > if (*res) > ads_msgfree(ads, *res); > *res = NULL; >-- >1.7.7.6 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 8943
:
7561
|
7562
|
7563
|
7565
|
7566
|
7567
|
7568
| 7569 |
7570
|
7572
|
7573
|
7574