The Samba-Bugzilla – Attachment 9692 Details for
Bug 9942
Printers cannot be exported if CUPS server has more than a 1000 of them
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
git-am fix for 4.1.next and 4.0.next
0001-s3-printing-Fix-problem-with-server-taking-too-long-.patch (text/plain), 4.75 KB, created by
Jeremy Allison
on 2014-02-18 20:15:04 UTC
(
hide
)
Description:
git-am fix for 4.1.next and 4.0.next
Filename:
MIME Type:
Creator:
Jeremy Allison
Created:
2014-02-18 20:15:04 UTC
Size:
4.75 KB
patch
obsolete
>From 6e12253068b835a2369b8dafb3f8b27de16842c3 Mon Sep 17 00:00:00 2001 >From: Jeremy Allison <jra@samba.org> >Date: Wed, 12 Feb 2014 10:13:19 -0800 >Subject: [PATCH] s3: printing: Fix problem with server taking too long to > respond to a MSG_PRINTER_DRVUPGRADE message. > >Receiving a MSG_PRINTER_DRVUPGRADE causes >smbd to iterate over all printers looking >for ones that uses the driver. This is a very >expensive operation requiring a read of all >registry printer parameters. > >On a system with a large number of printers, >this causes the clients to timeout (smbd >can take longer than 60 seconds to respond). > >This patch fixes the problem by forwarding >the MSG_PRINTER_DRVUPGRADE to the background >lpq queue updater process and allowing it to >take care of the updating of the changeid >in the registry, allowing the smbd connected >to the client to return to processing requests >immediately. > >https://bugzilla.samba.org/show_bug.cgi?id=9942 > >Signed-off-by: Jeremy Allison <jra@samba.org> >Reviewed-by: Andreas Schneider <asn@samba.org> > >Autobuild-User(master): Andreas Schneider <asn@cryptomilk.org> >Autobuild-Date(master): Tue Feb 18 17:48:30 CET 2014 on sn-devel-104 > >(cherry picked from commit cd655715b8ee0a4e681d67b3996f71017b941401) >--- > source3/printing/nt_printing.c | 29 +++++++++++++++++++++++++++-- > source3/printing/queue_process.c | 6 ++++++ > source3/rpc_server/spoolss/srv_spoolss_nt.c | 1 + > 3 files changed, 34 insertions(+), 2 deletions(-) > >diff --git a/source3/printing/nt_printing.c b/source3/printing/nt_printing.c >index 5050a5d..5aaae4d 100644 >--- a/source3/printing/nt_printing.c >+++ b/source3/printing/nt_printing.c >@@ -75,6 +75,31 @@ static const struct print_architecture_table_node archi_table[]= { > }; > > /**************************************************************************** >+ Forward a MSG_PRINTER_DRVUPGRADE message from another smbd to the >+ background lpq updater. >+****************************************************************************/ >+ >+static void forward_drv_upgrade_printer_msg(struct messaging_context *msg, >+ void *private_data, >+ uint32_t msg_type, >+ struct server_id server_id, >+ DATA_BLOB *data) >+{ >+ extern pid_t background_lpq_updater_pid; >+ >+ if (background_lpq_updater_pid == -1) { >+ DEBUG(3,("no background lpq queue updater\n")); >+ return; >+ } >+ >+ messaging_send_buf(msg, >+ pid_to_procid(background_lpq_updater_pid), >+ MSG_PRINTER_DRVUPGRADE, >+ data->data, >+ data->length); >+} >+ >+/**************************************************************************** > Open the NT printing tdbs. Done once before fork(). > ****************************************************************************/ > >@@ -88,10 +113,10 @@ bool nt_printing_init(struct messaging_context *msg_ctx) > > /* > * register callback to handle updating printers as new >- * drivers are installed >+ * drivers are installed. Forwards to background lpq updater. > */ > messaging_register(msg_ctx, NULL, MSG_PRINTER_DRVUPGRADE, >- do_drv_upgrade_printer); >+ forward_drv_upgrade_printer_msg); > > /* of course, none of the message callbacks matter if you don't > tell messages.c that you interested in receiving PRINT_GENERAL >diff --git a/source3/printing/queue_process.c b/source3/printing/queue_process.c >index 3d142dd..0969c7b 100644 >--- a/source3/printing/queue_process.c >+++ b/source3/printing/queue_process.c >@@ -31,6 +31,7 @@ > #include "smbd/smbd.h" > #include "rpc_server/rpc_config.h" > #include "printing/load.h" >+#include "rpc_server/spoolss/srv_spoolss_nt.h" > > extern pid_t start_spoolssd(struct event_context *ev_ctx, > struct messaging_context *msg_ctx); >@@ -311,6 +312,11 @@ pid_t start_background_queue(struct tevent_context *ev, > bq_smb_conf_updated); > messaging_register(msg_ctx, NULL, MSG_PRINTER_UPDATE, > print_queue_receive); >+ /* Remove previous forwarder message set in parent. */ >+ messaging_deregister(msg_ctx, MSG_PRINTER_DRVUPGRADE, NULL); >+ >+ messaging_register(msg_ctx, NULL, MSG_PRINTER_DRVUPGRADE, >+ do_drv_upgrade_printer); > > fde = tevent_add_fd(ev, ev, pause_pipe[1], TEVENT_FD_READ, > printing_pause_fd_handler, >diff --git a/source3/rpc_server/spoolss/srv_spoolss_nt.c b/source3/rpc_server/spoolss/srv_spoolss_nt.c >index 3703349..c878679 100644 >--- a/source3/rpc_server/spoolss/srv_spoolss_nt.c >+++ b/source3/rpc_server/spoolss/srv_spoolss_nt.c >@@ -1513,6 +1513,7 @@ void srv_spoolss_cleanup(void) > /********************************************************************** > callback to receive a MSG_PRINTER_DRVUPGRADE message and interate > over all printers, upgrading ones as necessary >+ This is now *ONLY* called inside the background lpq updater. JRA. > **********************************************************************/ > > void do_drv_upgrade_printer(struct messaging_context *msg, >-- >1.9.0.rc1.175.g0b1dcb5 >
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
Flags:
asn
:
review+
Actions:
View
Attachments on
bug 9942
:
8957
|
8958
|
9674
| 9692 |
9717