steffen: server/perl-kolab/Kolab-LDAP-Backend-slurpd slurpd.pm, 1.14.2.2, 1.14.2.3

cvs at intevation.de cvs at intevation.de
Sun Apr 30 07:09:35 CEST 2006


Author: steffen

Update of /kolabrepository/server/perl-kolab/Kolab-LDAP-Backend-slurpd
In directory doto:/tmp/cvs-serv28205/Kolab-LDAP-Backend-slurpd

Modified Files:
      Tag: kolab_2_0_branch
	slurpd.pm 
Log Message:
Backport of fix for bad performance on large replogs (Issue1210)

Index: slurpd.pm
===================================================================
RCS file: /kolabrepository/server/perl-kolab/Kolab-LDAP-Backend-slurpd/Attic/slurpd.pm,v
retrieving revision 1.14.2.2
retrieving revision 1.14.2.3
diff -u -d -r1.14.2.2 -r1.14.2.3
--- slurpd.pm	20 Oct 2005 09:59:31 -0000	1.14.2.2
+++ slurpd.pm	30 Apr 2006 05:09:33 -0000	1.14.2.3
@@ -274,16 +274,23 @@
             my $ready;
             my $offset = 0;
 
-            if (!($select->can_read(1)) && $changes) {
-                $changes = 0;
-                Kolab::log('SD', 'Change detected w/ no pending LDAP messages; reloading services if needed');
-                Kolab::LDAP::sync;
-                system($Kolab::config{'prefix'} . '/sbin/kolabconf');
-            }
+
+            if (!($select->can_read(0)) && $changes) {
+	      Kolab::log('SD', 'Change detected w/ no pending LDAP messages; waiting a second...');
+	      if( !($select->can_read(1)) ) {
+		$changes = 0;
+		Kolab::log('SD', 'Change detected w/ no pending LDAP messages; reloading services if needed');
+		Kolab::LDAP::sync;
+		Kolab::log('SD', 'Running kolabconf');
+		system($Kolab::config{'prefix'} ."/sbin/kolabconf") == 0
+		  or Kolab::log('SD', "Failed to run kolabconf: $?", KOLAB_ERROR);
+		Kolab::log('SD', 'Kolabconf complete');
+	      }
+	    }
 
             Kolab::log('SD', 'Waiting for LDAP updates');
 
-            for ($ready = 1; $conn && $ready; $ready = $select->can_read(1)) {
+            for ($ready = 1; $conn && $ready; $ready = $select->can_read(0)) {
                 Kolab::log('SD', 'Reading ASN', KOLAB_DEBUG);
                 my $newoffset = asn_read($conn, $pdu, $offset);
 		if( !$conn->connected() or $offset == $newoffset ) {
@@ -293,7 +300,6 @@
 		}
 		$offset = $newoffset;
                 defined($offset) or $offset = 0;
-                sleep 1;
             }
 
             if ($pdu) {





More information about the commits mailing list