[Spambayes-checkins] spambayes/scripts sb_server.py, 1.21.4.2, 1.21.4.3

Tony Meyer anadelonbrin at users.sourceforge.net
Wed Mar 23 00:14:46 CET 2005


Update of /cvsroot/spambayes/spambayes/scripts
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19581/scripts

Modified Files:
      Tag: release_1_0-branch
	sb_server.py 
Log Message:
Backport two fixes:

  Report connection errors with sb_server only once per hour unless verbose.

  Connect with a blocking socket so that the connection will fail if appropriate.

Index: sb_server.py
===================================================================
RCS file: /cvsroot/spambayes/spambayes/scripts/sb_server.py,v
retrieving revision 1.21.4.2
retrieving revision 1.21.4.3
diff -C2 -d -r1.21.4.2 -r1.21.4.3
*** sb_server.py	15 Oct 2004 05:56:01 -0000	1.21.4.2
--- sb_server.py	22 Mar 2005 23:14:41 -0000	1.21.4.3
***************
*** 144,156 ****
          self.set_terminator('\r\n')
          self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
          try:
              self.connect((serverName, serverPort))
          except socket.error, e:
              error = "Can't connect to %s:%d: %s" % (serverName, serverPort, e)
!             print >>sys.stderr, error
              self.lineCallback('-ERR %s\r\n' % error)
              self.lineCallback('')   # "The socket's been closed."
              self.close()
! 
      def collect_incoming_data(self, data):
          self.request = self.request + data
--- 144,183 ----
          self.set_terminator('\r\n')
          self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
+         # create_socket creates a non-blocking socket.  This is not great,
+         # because then socket.connect() will return errno 10035, because
+         # connect takes time.  We then don't know if the connect call
+         # succeeded or not.  With Python 2.4, this means that we will move
+         # into asyncore.loop(), and if the connect does fail, have a
+         # loop something like 'while True: log(error)', which fills up
+         # stdout very fast.
+         self.socket.setblocking(1)
          try:
              self.connect((serverName, serverPort))
          except socket.error, e:
              error = "Can't connect to %s:%d: %s" % (serverName, serverPort, e)
!             # Some people have their system setup to check mail very
!             # frequently, but without being clever enough to check whether
!             # the network is available.  If we continually print the
!             # "can't connect" error, we use up lots of CPU and disk space.
!             # To avoid this, if not verbose only print each distinct error
!             # once per hour.
!             # See also: [ 1113863 ] sb_tray eats all cpu time
!             now = time.time()
!             then = time.time() - 3600
!             if error not in state.reported_errors or \
!                options["globals", "verbose"] or \
!                state.reported_errors[error] < then:
!                 print >>sys.stderr, error
! 
!                 # Record this error in the list of ones we have seen this
!                 # session.
!                 state.reported_errors[error] = now
! 
              self.lineCallback('-ERR %s\r\n' % error)
              self.lineCallback('')   # "The socket's been closed."
              self.close()
!         else:
!             self.socket.setblocking(0)
!             
      def collect_incoming_data(self, data):
          self.request = self.request + data
***************
*** 672,675 ****
--- 699,705 ----
              sys.exit()
  
+         # Remember reported errors.
+         self.reported_errors = {}
+ 
          # Set up the statistics.
          self.totalSessions = 0



More information about the Spambayes-checkins mailing list