I realize this may be a little late to get into 1.2, but here it is 
anyway. It wraps much of PostMaster.pl in an eval{} block so that if the 
database isn't available (for example), an incoming message won't be 
immediately bounced.

This patch is against CVS; I haven't been using the CVS version of OTRS, 
but I have been using a nearly identical patch against 1.1.3 for several 
months without any trouble (with several hundred tickets a day), and it 
has prevented several bounces during database upgrades, etc.

Note that although it looks like it changes a lot, it really changes 
hardly anything -- most of the "changes" are just fixing the indentation.


diff -c PostMaster.pl.orig PostMaster.pl
*** PostMaster.pl.orig  Wed Oct 29 13:07:41 2003
--- PostMaster.pl       Mon Feb  9 15:20:08 2004
***************
*** 65,113 ****
      $Opts{'q'} = '';
  }
  
! # --
! # create common objects 
! # --
! my %CommonObject = ();
! $CommonObject{ConfigObject} = Kernel::Config->new();
! $CommonObject{LogObject} = Kernel::System::Log->new(
!     LogPrefix => 'OTRS-PM',
!     %CommonObject,
! );
! $CommonObject{DBObject} = Kernel::System::DB->new(%CommonObject);
! # debug info
! if ($Opts{'d'}) {
!     $CommonObject{LogObject}->Log(
!         Priority => 'debug',
!         Message => 'Global OTRS email handle (PostMaster.pl) 
started...',
      );
! }
! # get email from SDTIN 
! my @Email = <STDIN>;
! if ([EMAIL PROTECTED]) {
!     $CommonObject{LogObject}->Log(
!         Priority => 'error',
!         Message => 'Got not email on STDIN!',
      );
!     exit (1);
! }
! # common objects
! $CommonObject{PostMaster} = Kernel::System::PostMaster->new(
!     %CommonObject, 
!     Email => [EMAIL PROTECTED],
!     Trusted => $Opts{'t'},
!     Debug => $Opts{'d'},
! );
! $CommonObject{PostMaster}->Run(
!     Queue => $Opts{'q'},
! );
! 
! # debug info
! if ($Opts{'d'}) {
!     $CommonObject{LogObject}->Log(
!         Priority => 'debug',
!         Message => 'Global OTRS email handle (PostMaster.pl) stoped.',
      );
  }
  # --
  exit (0);
--- 65,129 ----
      $Opts{'q'} = '';
  }
  
! # Wrap the majority of the script in an "eval" block so that any 
unexpected
! # (but possibly transient) fatal errors (such as the database being
! # unavailable) can be trapped without causing a bounce.
! eval {
!     # --
!     # create common objects
!     # --
!     my %CommonObject = ();
!     $CommonObject{ConfigObject} = Kernel::Config->new();
!     $CommonObject{LogObject} = Kernel::System::Log->new(
!         LogPrefix => 'OTRS-PM',
!         %CommonObject,
      );
!     $CommonObject{DBObject} = Kernel::System::DB->new(%CommonObject);
!     # debug info
!     if ($Opts{'d'}) {
!         $CommonObject{LogObject}->Log(
!             Priority => 'debug',
!             Message => 'Global OTRS email handle (PostMaster.pl) 
started...',
!         );
!     }
!     # get email from SDTIN
!     my @Email = <STDIN>;
!     if ([EMAIL PROTECTED]) {
!         $CommonObject{LogObject}->Log(
!             Priority => 'error',
!             Message => 'Got not email on STDIN!',
!         );
!         exit (1);
!     }
!     # common objects
!     $CommonObject{PostMaster} = Kernel::System::PostMaster->new(
!         %CommonObject,
!         Email => [EMAIL PROTECTED],
!         Trusted => $Opts{'t'},
!         Debug => $Opts{'d'},
      );
!     $CommonObject{PostMaster}->Run(
!         Queue => $Opts{'q'},
      );
+ 
+     # debug info
+     if ($Opts{'d'}) {
+         $CommonObject{LogObject}->Log(
+             Priority => 'debug',
+             Message => 'Global OTRS email handle (PostMaster.pl) 
stoped.',
+         );
+     }
+ }; # end of eval block
+ 
+ if ($@)
+ {
+     # Some kind of unexpected problem occurred (for example, database
+     # unavailable). Return an EX_TEMPFAIL error to cause the mail 
program
+     # to requeue the message instead of immediately bouncing it; see
+     # sysexits.h. (Most mail programs will retry an EX_TEMPFAIL delivery
+     # for about four days, then bounce the message.)
+     exit 75;
  }
+ 
  # --
  exit (0);



-- 
Robert L Mathews, Tiger Technologies      http://www.tigertech.net/

 "Ignorance more frequently begets confidence than does knowledge."
                                                           -- Darwin

_______________________________________________
OTRS mailing list: dev - Webpage: http://otrs.org/
Archive: http://lists.otrs.org/pipermail/dev
To unsubscribe: http://lists.otrs.org/cgi-bin/listinfo/dev

Reply via email to