The Samba-Bugzilla – Attachment 5284 Details for
Bug 7105
Make the blocking lock and brl lock database scale better in a cluster.
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
git-am format patch #1 for 3.5.x.
0001-s3-brlock-add-a-minimim-retry-time-for-pending-block.patch (text/plain), 2.25 KB, created by
Jeremy Allison
on 2010-02-06 00:28:49 UTC
(
hide
)
Description:
git-am format patch #1 for 3.5.x.
Filename:
MIME Type:
Creator:
Jeremy Allison
Created:
2010-02-06 00:28:49 UTC
Size:
2.25 KB
patch
obsolete
>From 5b398edbee672392f2cea260ab17445ecca927d7 Mon Sep 17 00:00:00 2001 >From: Andrew Tridgell <tridge@samba.org> >Date: Fri, 5 Feb 2010 20:59:43 -0800 >Subject: [PATCH 1/4] s3-brlock: add a minimim retry time for pending blocking locks > >When we are waiting on a pending byte range lock, another smbd might >exit uncleanly, and therefore not notify us of the removal of the >lock, and thus not trigger the lock to be retried. > >We coped with this up to now by adding a message_send_all() in the >SIGCHLD and cluster reconfigure handlers to send a MSG_SMB_UNLOCK to >all smbd processes. That would generate O(N^2) work when a large >number of clients disconnected at once (such as on a network outage), >which could leave the whole system unusable for a very long time (many >minutes, or even longer). > >By adding a minimum re-check time for pending byte range locks we >avoid this problem by ensuring that pending locks are retried at a >more regular interval. >--- > source3/smbd/blocking.c | 20 ++++++++++++++++++++ > 1 files changed, 20 insertions(+), 0 deletions(-) > >diff --git a/source3/smbd/blocking.c b/source3/smbd/blocking.c >index deb7f8f..6c7c167 100644 >--- a/source3/smbd/blocking.c >+++ b/source3/smbd/blocking.c >@@ -72,6 +72,7 @@ static bool recalc_brl_timeout(void) > { > struct blocking_lock_record *blr; > struct timeval next_timeout; >+ int max_brl_timeout = lp_parm_int(-1, "brl", "recalctime", 5); > > TALLOC_FREE(brl_timeout); > >@@ -100,6 +101,25 @@ static bool recalc_brl_timeout(void) > return True; > } > >+ /* >+ to account for unclean shutdowns by clients we need a >+ maximum timeout that we use for checking pending locks. If >+ we have any pending locks at all, then check if the pending >+ lock can continue at least every brl:recalctime seconds >+ (default 5 seconds). >+ >+ This saves us needing to do a message_send_all() in the >+ SIGCHLD handler in the parent daemon. That >+ message_send_all() caused O(n^2) work to be done when IP >+ failovers happened in clustered Samba, which could make the >+ entire system unusable for many minutes. >+ */ >+ >+ if (max_brl_timeout > 0) { >+ struct timeval min_to = timeval_current_ofs(max_brl_timeout, 0); >+ next_timeout = timeval_min(&next_timeout, &min_to); >+ } >+ > if (DEBUGLVL(10)) { > struct timeval cur, from_now; > >-- >1.6.3.3 >
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 7105
: 5284 |
5285
|
5286
|
5287