|  | 
	6 command procedures:
        OAMTIMAIL.COM
        MTI_NOTIFY_CLUSTER_LOCK
        MTI_START_MRLOGGER
        MTI_CHECK_SENDER
        MTI_NOTIFY_MRLINK
        1 script:
        MTI_NOTIFY_FETCHER.SCP
        What you need to do:
        1) Create an ALL-IN-1 account per node in the cluster.
                So if you have NODEA, NODEB,NODEC
                in a cluster you create the following
                accounts (VMS username is ALLIN1):
                POSTMASTER-FETCH-NODEA
                POSTMASTER-FETCH-NODEB
                POSTMASTER-FETCH-NODEC
           
        The directory they use should be something like:
                DISK$:[ALLIN1.FETCHER_NODEA]
                DISK$:[ALLIN1.FETCHER_NODEB]
                DISK$:[ALLIN1.FETCHER_NODEC]
	This .FETCHER_ part is required, as you can see at the
	OA$MTI_FETCHER_DATA logical below.
        They have to be at the same disk and top directory
                Modify A1V24START.COM to define:
        $ DEFINE/SYSTEM/EXEC OA$MTI_FETCHER_DATA DISK$:[ALLIN1.FETCHER_
        $ DEFINE/SYSTEM/EXEC OA$MTI_DATA_SHARE  ........
        This ... should be the directory you define OA$MTI_DATA
        to be in A1V24START.COM.
        
        $DEFINE/SYSTEM OA$MTI_TO_USERS          YOUR_NAME,HIS_NAME,..
        A list of people (ALL-IN-1) that needs to get a mail when the fetcher
        detects problems. The MANAGER account is getting it always
        so does not need to be included in the list.
        
        $DEFINE/SYSTEM OA$MTI_LINK_FAIL         5
        
        The numer of times you allow the fetcher to fail making connection
        to MR before it stars sending mail around that it cannot connect.
	The process does not run detached, but actually normally in a
	batch queue, this has defenite advantages, in the cases errors occur.
        Modify A1V24START.COM such that the fetcher starts up in
        the booting node in a queue that is part of that node:
        
        $ Node := "''F$GETSYI("NODENAME")'"
        $ submit oa$lib:oamtimail -
        /queue = MB$BATCH_'Node' -
        /user = 'vms_acc' -
        /noidentify -
        /nonotify -
        /noprint 
        
        I assume you have MB$BATCH_NODEA
        MB$BATCH_NODEB etc, else you need to modify this to
        existing batch queues. The part above you can find in the 
        START_SENDER_FETCHER subroutine.
        2) Using CM (!!!), you need to modify the following:
                OAMTIMAIL       COM     SHARE
        When you are in the editor, replace the content with the
        following:
$ !
$ !  ALL-IN-1 Mail fetcher command procedure
$ ! 
$ set verify
$ set noon
$ show daytime                                  ! Write the time
$ set proc/priv=all
$ Node := "''F$GETSYI("NODENAME")'"
$ IF F$LOGICAL("OA$MTI_FETCHER_DATA") .NES. "" THEN -
        define/job oa$mti_data -
        "''F$LOGICAL("OA$MTI_FETCHER_DATA")'''Node']"
$ !
$ ! If OA$MTI_SFLOG is defined we can log run information such as node, time, 
$ ! Sender/Fetcher, and what we're up to.
$ !
$ start_time = f$time()
$ DEB$LOG := F
$ IF "''F$LOGICAL("OA$MTI_SFLOG")'" .EQS. "" THEN GOTO PNAME
$ IF F$SEARCH("OA$MTI_DATA:MTI$DEBUG.LOG;1") .EQS. "" THEN -
$    CREATE OA$MTI_DATA:MTI$DEBUG.LOG;1
$ OPEN/APPEND/SHARE/ERROR=PNAME LOGFILE OA$MTI_DATA:MTI$DEBUG.LOG;1
$ DEB$LOG := T
$ WRITE LOGFILE -
"''start_time'  %FETCHER-I-START, Fetcher started run on ''node'"
$ start_time = f$extract(12,5,start_time)
$ !
$ !  Set our process name up
$ !
$PNAME:
$ ON ERROR THEN GOTO RESCHED1
$ SET PROCESS/NAME="A1 Fetcher STR"
$ SET NOON
$ IF F$SEARCH("OA$MTI_DATA_SHARE:FETCHLOCK.DAT.1") .EQS. "" THEN -
$    CREATE OA$MTI_DATA_SHARE:FETCHLOCK.DAT;1
$ !
$ ! Rename all our .LOG files if version > 32700. (Job would fail if highest 
$ ! version = 32767)
$ !
$ IF F$PARSE (F$SEARCH ("SYS$LOGIN:OAMTIMAIL.LOG"),,,"VERSION")-";" .LT. 32700 -
     THEN GOTO Wait_loop
$ !
$ ! Rename all log files to low version nunbers. 
$ ! 
$Search:
$ !
$ FILE = F$SEARCH ("SYS$LOGIN:OAMTIMAIL.LOG")
$ IF F$LENGTH (FILE) .EQ. 0 THEN GOTO Rename
$ RENAME/NEW_VERSION 'FILE' SYS$LOGIN:OAMTIMAIL_RENAME.LOG
$ GOTO Search
$ !
$Rename:
$ !
$ FILE = F$SEARCH ("SYS$LOGIN:OAMTIMAIL_RENAME.LOG")
$ IF F$LENGTH (FILE) .EQ. 0 THEN GOTO Wait_loop
$ RENAME/NEW_VERSION 'FILE' SYS$LOGIN:OAMTIMAIL.LOG
$ GOTO Rename
$ ! 
$Wait_loop:
$ !
$ ShutDown = "''F$LOGICAL("OA$IMAGE")'"
$ !
$ ! Wait if system not started yet
$ !
$ IF ShutDown .NES. "" THEN GOTO System_up
$ !
$ Wait 0:5:0            ! Wait for 5 minutes
$ !
$ GOTO Wait_loop        ! and try again
$ !
$System_up:
$ !
$ ! Set delay time for rescheduling using a local Message Router
$ !
$ wait_time := "+0:15"
$ queue:='f$logical("OA$MTI_QUEUE")
$ !
$ ! Look in the system permanent symbol table to find the fetcher control
$ ! record. If the record is not defined, or is set to something illegal,
$ ! we'll notify the operator, and drop off the queue.
$ !
$ @OA$LIB:SYSTEM_PST R OA$MTI_FETCHER_CONTROL
$ ShutDown = pst_value
$ !
$ ! Check for SHUTDOWN request
$ !
$ IF ShutDown .EQS. "STOPPED" THEN GOTO FIN
$ !
$ ! Check for HOLD request
$ !
$ IF ShutDown .EQS. "ON HOLD" THEN GOTO RESCHED1
$ !
$ ! Check we're still running
$ !
$ IF ShutDown .NES. "RUNNING" THEN GOTO ABORT_FETCHER
$ !
$ ! Ensure that Fetcher in not running elsewhere. If we can't open 
$ ! the locked file we exit.
$ !
$ !IF F$SEARCH("OA$MTI_DATA:SENDLOCK.DAT;1") .EQS. "" THEN -
$ !   CREATE OA$MTI_DATA:SENDLOCK.DAT;1
$ !OPEN/READ/WRITE/ERROR=RESCHED1 LOCKFILE1 OA$MTI_DATA:SENDLOCK.DAT;1
$
$ IF F$SEARCH("OA$MTI_DATA:FETCHLOCK.DAT;1") .EQS. "" THEN -
$    CREATE OA$MTI_DATA:FETCHLOCK.DAT;1
$ OPEN/READ/WRITE/ERROR=RESCHED1 LOCKFILE2 OA$MTI_DATA:FETCHLOCK.DAT;1
$ GOTO RUN_A1
$ !
$ !
$ ! Stop A1 being run if sender or fetcher is already running
$ !
$RESCHED1:
$ EXIT
$ !
$RUN_A1:
$ IF F$LOGICAL("OA$SHARE") .EQS. "" THEN GOTO FIN
$ !
$ !
$ ! Look in the system permanent symbol table to find the fetcher control
$ ! record. If the record is not defined, or is set to something illegal,
$ ! we'll notify the operator, and drop off the queue.
$ !
$ CHECK_RUN:
$ @OA$LIB:SYSTEM_PST R OA$MTI_FETCHER_CONTROL
$ ShutDown = pst_value
$ !
$ ! Check for SHUTDOWN request
$ !
$ IF ShutDown .EQS. "STOPPED" THEN GOTO FIN
$ !
$ ! Check for HOLD request
$ !
$ IF ShutDown .EQS. "ON HOLD" THEN GOTO wait_a_minut
$ !
$ ! Check we're still running
$ !
$ IF ShutDown .NES. "RUNNING" THEN GOTO FIN
$
$ SET PROCESS/NAME="A1 Fetcher RUN"
$ ! Run ALL-IN-1 and call the fetch routine.
$ !
$ ALLIN1/NOINIT/USER=POSTMASTER-FETCH-'Node'/PASSWORD=FETCHEROFMESSAGES
OA$INI_INITIALIZE
.IF OA$MSG_TEXT:15 EQS "You are already" THEN BYE
OA$FLO_OPEN OA$LIB:MAILBOX
DO MTI_NOTIFY_FETCHER
EXIT
$ !
$ GOTO CHECK_RUN
$ !
$ WAIT_A_MINUT:
$ SET PROCESS/NAME="A1 Fetcher HLD"
$ WAIT 00:05:
$ GOTO CHECK_RUN
$!
$FIN:
$ IF DEB$LOG THEN WRITE LOGFILE -
"''f$time()'    %FETCHER-I-END, End of ''start_time' fetcher run on ''node'"
$ IF DEB$LOG THEN WRITE LOGFILE ""
$ ON ERROR THEN CONTINUE
$ ON WARNING THEN CONTINUE
$ PURGE SYS$LOGIN:OAMTIMAIL.LOG/KEEP=5
$ IF "''F$LOGICAL("LOCKFILE1")'" .NES. "" THEN CLOSE LOCKFILE1
$ IF "''F$LOGICAL("LOCKFILE2")'" .NES. "" THEN CLOSE LOCKFILE2
$ IF "''F$LOGICAL("LOGFILE")'" .NES. "" THEN CLOSE LOGFILE
                b) MTI_NOTIFY_MRLINK    COM             SHARE
$!------------------------------------------------------------------------------
$! Connect MR, get the number of entries                Author: Ben Geerdes
$ SET VERIFY
$ ON WARNING THEN GOTO OPNLNKERR
$ MRN = F$LOGICAL ("MR$NODE")
$ IF ''F$EXTRACT(0,5,MRN)' .eqs. """""::""" THEN GOTO NONODE
$ OPEN/READ/WRITE/ERROR=OPNLNKERR MRLINK 'MRN'
$ GOTO LINKOPEN
$NONODE:
$ OPEN/READ/WRITE/ERROR=OPNLNKERR MRLINK 0'MRN'
$LINKOPEN:
$ ON ERROR THEN GOTO LNKERR
$ !
$ ! We don't use the password, because this job must run under the same VMS 
$ ! account as Manager and Postmaster.
$ !
$ WRITE MRLINK "I''MBX'"
$ READ MRLINK ANSWER
$ IF "''F$EXTRACT(0,1,ANSWER)'" .EQS. "I" THEN GOTO LNKIDENT
$ CLOSE MRLINK
$ WRITE OAMAILBOX "OA GET #STATUS = 2"
$ @DCLMAILBOX
$EXIT
$ !
$LNKIDENT:
$ !
$ WRITE MRLINK "Q"
$ READ MRLINK ANSWER
$ CLOSE MRLINK
$ WRITE OAMAILBOX "OA GET #STATUS = 1"
$ WRITE OAMAILBOX "OA GET #ANSWER = ""''ANSWER'"""
$ @DCLMAILBOX
$ EXIT
$ !
$LNKERR:
$ !
$ MESSAGE = F$MESSAGE($STATUS)
$ WRITE OAMAILBOX "OA GET #STATUS = 3"
$ WRITE OAMAILBOX "OA GET #MESSAGE = ""''MESSAGE'"""
$ WRITE OAMAILBOX "OA GET #ANSWER = ""''ANSWER'"""
$ CLOSE MRLINK
$ @DCLMAILBOX
$ EXIT
$ !
$OPNLNKERR:
$ !
$ MESSAGE = F$MESSAGE($STATUS)
$ WRITE OAMAILBOX "OA GET #MESSAGE = ""''MESSAGE'"""
$ WRITE OAMAILBOX "OA GET #STATUS = 3"
$ @DCLMAILBOX
$ EXIT
$!
$!------------------------------------------------------------------------------
        c) MTI_NOTIFY_FETCHER   DO      SHARE
!       MTI_NOTIFY_FETCHER.SCP
!+
.LABEL START
GET OA$DCL="SET VERIFY"
! In order to keep things straight we do a OA$MSG_TRAP
!this will keep us in ALL-IN-1, gives us possibility to send
! a mail and then we can leave ALL-IN-1 to have a smooth reinit
        OA$MSG_TRAP
! Now initialize some error counters:
! The $FETCHERR counts up to five fetcher errors and will then send mail
! to the MANAGER and to all OA$MTI_MAIL_TO users
        .IF $FETCHERR EQS "" THEN GET $FETCHERR = 0\\-
                GET $FETCH1=$FETCH2=$FETCH3=$FETCH4=""
! The following 2 symbols are counters that count the number of times
! the link to MR fails, if the number of times eq OA$MTI_LINK_FAIL (or
! a X times OA$MTI_LINK_FAIL then
! it will send a mail to the MANAGER and to OA$MTI_MAIL_TO
        GET #LINK_TOTAL_STATUS = 0
        GET #LINK_STATUS = 0
        .IF $FETCH_MAX EQS "" THEN GET $FETCH_MAX = 2
! Set a logical in case we get out of ALL-IN-1 while we do not really want
! to (ACCVIO?), so that we will return.
        GET OA$DCL='SET PROCESS/NAME="A1 Fetcher_sub"'
! set up a symbol that contains the users that should receive mail when 
! things are going wrong
        GET #TO_USERS = LOG$OA$MTI_TO_USERS
! Now close down any existing mailbox called OA$MTI_NOTIFY
! And deassign any system width logical if it exists
        OA$MBX_CLOSE OA$MTI_NOTIFY
        .IF LOG$OA$MTI_NOTIFY NES "" THEN GET OA$DCL="DEASSIGN/SYSTEM OA$MTI_NOTIFY"
! Open the mailbox, this created a job logical, make it system width and
! deassign the JOB logical
        OA$MBX_OPEN OA$MTI_NOTIFY
        GET OA$DCL="DEFINE/SYSTEM OA$MTI_NOTIFY " LOG$OA$MTI_NOTIFY
        GET OA$DCL="DEASS/JOB/USER OA$MTI_NOTIFY"
.LABEL START_HERE
        GET #LINK_TOTAL_STATUS = 0
! The next thing is we will check MRLINK to see if there anything waiting for
! us , first we execute a function if needed
.LABEL START_SAME
        .IF LOG$OA$MTI_FETCH_FUNCTION1 NES "" THEN -
                GET OA$FUNCTION=LOG$OA$MTI_FETCH_FUNCTION1
        .IF LOG$OA$MTI_FETCH_FUNCTION2 NES "" THEN -
                GET OA$FUNCTION=LOG$OA$MTI_FETCH_FUNCTION2
.LABEL CHECK_EXTRA
! if the time hour counter is different this run, then check the
! sender and all other things you would like to have checked,
! do not make this check that way it would take to much time,
! because this may cause the fetcher to be too slow.
        GET #THIS_TIME = OA$TIME
        .IF #OLD_TIME:2 EQS #THIS_TIME:2 THEN .GOTO MAKE_LINK
.LABEL IS_SENDER_OK
        GET #STATUS = 1
        GET #OLD_TIME = #THIS_TIME
        COMMAND MTI_CHECK_SENDER
        .IF #STATUS NE 1 THEN .GOTO SENDER_PROBLEM
        ! also once every hour we close the subprocess and purge A1SUB.LOG
        OA$SUB_CLOSE
        GET OA$DCL="SET VERIFY"
        PURGE A1SUB.LOG,4
        
.LABEL MAKE_LINK
        OA$SUB_OPEN
        GET $MRN = LOG$MR$NODE
        GET $MBX = LOG$OA$MTI_MAILBX
        GET #MRLOGGER = ""
        GET OA$DCL="IF F$TRNLNM(""MRLINK"") .NES. """" THEN CLOSE MRLINK"
        COMMAND MTI_NOTIFY_MRLINK
        GET #MESSAGE 
        GET #LKSTATUS = #STATUS
        .IF #STATUS NE 1 THEN .GOTO CHECK_MRLOGGER
.LABEL CONTINUE_HERE
        GET #STATUS = #LKSTATUS
        .IF #STATUS EQ 0 THEN .GOTO OPEN_LINK_ERROR
        .IF #STATUS EQ 3 THEN .GOTO OPEN_LINK_ERROR
        .IF #STATUS EQ 2 THEN .GOTO IDENT_ERROR
        GET #LINK_TOTAL_STATUS = 0
        GET #LINK_STATUS = 0
! so now we now the number (x) of messages waiting C'x'
        .IF #ANSWER NES "C0" THEN .GOTO FETCH_MESSAGES
.LABEL NO_MESSAGES_WAITING_IN_MR
! There are no messages in MR but their might be waiting in the FETCHER
! queue
        GET #FETCH_WAITING = CAB$PENDING.COUNT["FETCHER QUEUE"]
        .IF #FETCH_WAITING NE 0 THEN .GOTO FETCH_MESSAGES
        GET $FETCH_MAX = 2
        GET #ANSWER = ""
.LABEL WAIT_NOTIFY
! read the mailbox, if you get notified you will get a record and continue
        GET OA$DCL='SET PROCESS/NAME="A1 Fetch wait"'
        DUMP MAILBOX
        GET #RECORD = MAILBOX.%NEXT[""] .RECORD
        GET OA$DCL='SET PROCESS/NAME="A1 Fetch run"'
        .IF #RECORD:9 EQS "Function:" THEN -
                GET OA$FUNCTION=#RECORD::9
        GET #CONTROL_VALUE = SYS$OA$MTI_FETCHER_CONTROL
        .IF #CONTROL_VALUE EQS "RUNNING" THEN .GOTO FETCH_MESSAGES
        !if we are on hold, we just don't run the fetcher and wait
        .IF #CONTROL_VALUE EQS "ON HOLD" THEN EXIT
        !we have to get out...  
        EXIT
.LABEL FETCH_MESSAGES
        GET #ANSWER = ""
        COMMAND MTI_NOTIFY_CLUSTER_LOCK
        .IF #STATUS NE 1 THEN .GOTO WAIT_NOTIFY
        OA$MSG_PURGE
        OA$MSG_TRAP
        CAB OPEN
        MAIL INIT
! F E T C H
        MAIL MTI_FETCH_REMOTE
        CAB CLOSE
        MAIL CLOSE_SYSTEM       
        GET OA$DCL="CLOSE LOCK_FILE"
! did we have any problems?
        .IF OA$MSG_TEXT:16 EQS "access violation" THEN -
                .GOTO ACCESS_VIOLATION
        .IF OA$MSG_TEXT NES "" THEN .GOTO FETCH_ERROR
        GET #FETCH_WAITING = CAB$PENDING.COUNT["FETCHER QUEUE"]
        .IF #FETCH_WAITING GE $FETCH_MAX THEN .GOTO FETCH_PROBLEM
        .GOTO START_SAME
                
.LABEL FETCH_ERROR
! We had a fetcher error, collect them till we have five of them
! and then mail them to MANAGER and to OA$MTI_MAIL_TO
        DECIMAL I
        COMPUTE $FETCHERR = $FETCHERR + 1
        GET #ERROR = OA$DATE_FULL ' ' OA$TIME ': ' OA$MSG_SEV '-' OA$MSG_TEXT 
        GET OA$FUNCTION="GET $FETCH" $FETCHERR " = #ERROR "
        .IF $FETCHERR NE 4 THEN .GOTO IS_SENDER_OK
.LABEL MAIL_FETCH_ERRORS
! mail the errors
        MAIL CREATE/OPEN/NOSEND
        MAIL SUBJECT "Fetcher errors occured (" OA$DATE_FULL " " OA$TIME ")"
        MAIL PRIORITY EXPRESS
        MAIL TO "MANAGER"
        MAIL TEXT " Last error messages:"
        MAIL TEXT $FETCH1
        MAIL TEXT $FETCH2
        MAIL TEXT $FETCH3
        MAIL TEXT $FETCH4
        MAIL TEXT "The fetcher queue record contains " CAB$PENDING.COUNT['FETCHER QUEUE'] " entries still to be fetched"
        MAIL TEXT "MAIL$QUEUE:FETCHER information (if Any):"
        FOR MAIL$QUEUE:"FETCHER" DO GET #NBS1 = .NBS1\\-
                                    GET #NBS2 = .NBS2\\-
                                    MAIL TEXT "Nbs1: " #NBS1 "  Nbs2: " #NBS2
        GET $FETCH1=$FETCH2=$FETCH3=$FETCH4=""
        GET $FETCHERR = 0
        .GOTO STRING_PARSE1
.LABEL FETCH_PROBLEM
! For whatever reason the fetcher queue seems to have too many entries
! it is goingup and up and up, so send a mail to tell them
! we will send a mail when it is 4,8,12 etc etc
        DECIMAL I
        COMPUTE $FETCH_MAX = $FETCH_MAX + 2
        MAIL CREATE/OPEN/NOSEND
        MAIL SUBJECT "Fetcher queue contains too many entries (" OA$DATE_FULL " " OA$TIME ")"
        MAIL PRIORITY EXPRESS
        MAIL TO "MANAGER"
        MAIL TEXT " Last error messages:"
        MAIL TEXT " " $FETCH1
        MAIL TEXT " " $FETCH2
        MAIL TEXT " " $FETCH3
        MAIL TEXT " " $FETCH4
        MAIL TEXT "The fetcher queue record contains " CAB$PENDING.COUNT['FETCHER QUEUE'] " entries still to be fetched"
        MAIL TEXT " "
        MAIL TEXT "MAIL$QUEUE:FETCHER information (if any):"
        FOR MAIL$QUEUE:"FETCHER" DO GET #NBS1 = .NBS1\\-
                                    GET #NBS2 = .NBS2\\-
                                    MAIL TEXT "Nbs1: " #NBS1 "  Nbs2: " #NBS2
        MAIL TEXT " "
        MAIL TEXT "Continuing..."
        GET $FETCH1=$FETCH2=$FETCH3=$FETCH4=""
        GET $FETCHERR = 0
        .GOTO STRING_PARSE1
.LABEL OPEN_LINK_ERROR
        DECIMAL I
        COMPUTE #LINK_TOTAL_STATUS = #LINK_TOTAL_STATUS + 1
        COMPUTE #LINK_STATUS = #LINK_STATUS + 1
        .IF #LINK_TOTAL_STATUS EQ 1 THEN GET #FIRST_FAIL = OA$DATE_FULL " " OA$TIME 
        .PAUSE 59
        GET #THIS_LINK = LOG$OA$MTI_LINK_FAIL
        .IF #LINK_STATUS LT #THIS_LINK THEN .GOTO IS_SENDER_OK
        MAIL CREATE/OPEN/NOSEND
        MAIL PRIORITY EXPRESS
        MAIL TO "MANAGER"
        MAIL SUBJECT "error opening link to MR (MRLINK) via MR$NODE"
        MAIL TEXT "Date: " OA$DATE_FULL " " OA$TIME
        MAIL TEXT "After trying " #LINK_TOTAL_STATUS " times since " #FIRST_FAIL
        MAIL TEXT "no connection could be established with Message Router"
        MAIL TEXT "Last MRLINK error:"
        MAIL TEXT #MESSAGE
        .IF #MRLOGGER NES "" THEN MAIL TEXT #MRLOGGER
        MAIL TEXT " Last fetcher error messages:"
        MAIL TEXT " " $FETCH1
        MAIL TEXT " " $FETCH2
        MAIL TEXT " " $FETCH3
        MAIL TEXT " " $FETCH4
        MAIL TEXT "The fetcher queue record contains " CAB$PENDING.COUNT['FETCHER QUEUE'] " entries still to be fetched"
        MAIL TEXT " "
        MAIL TEXT "MAIL$QUEUE:FETCHER information (if any):"
        FOR MAIL$QUEUE:"FETCHER" DO GET #NBS1 = .NBS1\\-
                                    GET #NBS2 = .NBS2\\-
                                    MAIL TEXT "Nbs1: " #NBS1 "  Nbs2: " #NBS2
        MAIL TEXT " "
        GET $FETCH1=$FETCH2=$FETCH3=$FETCH4=""
        GET $FETCHERR = 0
        GET #MESSAGE = ""
        .IF #LINK_TOTAL_STATUS EQ 20 THEN -
                MAIL TEXT "Reinitializing ALL-IN-1..." -
           ELSE -
                MAIL TEXT "Continuing..."
        GET OA$DCL="IF F$TRNLNM(""MRLINK"") .NES. """" THEN CLOSE MRLINK"
        .IF #LINK_TOTAL_STATUS EQ 20 THEN EXIT
        COMPUTE #LINK_STATUS = 0
! just in case only the MRLINK goes wrong and the fetch may still work we will
! do a fetch after we have send the mail
        .GOTO STRING_PARSE2
.LABEL IDENT_ERROR
        GET OA$DCL="IF F$TRNLNM(""MRLINK"") .NES. """" THEN CLOSE MRLINK"
        MAIL CREATE/OPEN/NOSEND
        MAIL PRIORITY EXPRESS
        MAIL TO "MANAGER"
        MAIL SUBJECT "Identity mismatch when making request to MR"
        MAIL TEXT "At " OA$DATE_FULL ", " OA$USER
        MAIL TEXT "was running this fetcher procedure,"
        MAIL TEXT "using the VMSaccount: " PROFIL.VMSUSR[OA$USER]
        MAIL TEXT "Last error:"
        MAIL TEXT #MESSAGE
        MAIL TEXT "Continuing..."
        GET #MESSAGE = ""
! try anyway after some time
        .PAUSE 59
        .PAUSE 59
        .PAUSE 59
        .PAUSE 59
        .PAUSE 59
        .GOTO STRING_PARSE2
        
.LABEL ACCESS_VIOLATION
! For whatever reason the fetcher hadd an ACC VIO
! so we try to send mail to people and then we leave ALL-IN-1
! to come back later
        DECIMAL I
        COMPUTE $FETCHERR = $FETCHERR + 1
        GET #ERROR = OA$DATE_FULL ' ' OA$TIME ': ' OA$MSG_SEV '-' OA$MSG_TEXT 
        GET OA$FUNCTION="GET $FETCH" $FETCHERR " = #ERROR "
        .IF $FETCHERR NE 4 THEN EXIT
        MAIL CREATE/OPEN/NOSEND
        MAIL SUBJECT "Fetcher errors occured (" OA$DATE_FULL " " OA$TIME ")"
        MAIL PRIORITY EXPRESS
        MAIL TO "MANAGER"
        MAIL TEXT " " $FETCH1
        MAIL TEXT " " $FETCH2
        MAIL TEXT " " $FETCH3
        MAIL TEXT " " $FETCH4
        MAIL TEXT "The fetcher queue record contains " CAB$PENDING.COUNT['FETCHER QUEUE'] " entries to be fetched"
        MAIL TEXT " "
        MAIL TEXT "MAIL$QUEUE:FETCHER information (if any):"
        FOR MAIL$QUEUE:"FETCHER" DO GET #NBS1 = .NBS1\\-
                                    GET #NBS2 = .NBS2\\-
                                    MAIL TEXT "Nbs1: " #NBS1 "  Nbs2: " #NBS2
        MAIL TEXT " "
        MAIL TEXT "Continuing..."
        GET $FETCH1=$FETCH2=$FETCH3=$FETCH4=""
        GET $FETCHERR = 0
        GET LOG$OA$MTI_FETCHER = "Keep Running"
!send the mail and exit ALL-IN-1
        .GOTO STRING_PARSE3
.LABEL SENDER_PROBLEM
        MAIL CREATE/OPEN/NOSEND
        MAIL PRIORITY EXPRESS
        MAIL TO "MANAGER"
        MAIL SUBJECT "Sender may be off queue (" OA$DATE_FULL " " OA$TIME ")"
        MAIL TEXT "Please check OA$MTI_QUEUE for OAMTISEND.COM"
        MAIL TEXT "Continuing..."
! try anyway after some time
        .GOTO STRING_PARSE4
.LABEL STRING_PARSE1
        .IF #TO_USERS EQS "" THEN .GOTO NOW_SEND1
        GET_SYMBOL #TO_USERS,#TO,","
        MAIL TO #TO
        .GOTO STRING_PARSE1
.LABEL NOW_SEND1
        MAIL CLOSE_MESSAGE
        MAIL SEND
        MAIL DELETE/EXPUNGE
        .GOTO START_SAME
.LABEL STRING_PARSE2
        .IF #TO_USERS EQS "" THEN .GOTO NOW_SEND2
        GET_SYMBOL #TO_USERS,#TO,","
        MAIL TO #TO
        .GOTO STRING_PARSE2
.LABEL NOW_SEND2
        MAIL CLOSE_MESSAGE
        MAIL SEND
        MAIL DELETE/EXPUNGE
        .GOTO FETCH_MESSAGES
.LABEL STRING_PARSE3
        .IF #TO_USERS EQS "" THEN .GOTO NOW_SEND3
        GET_SYMBOL #TO_USERS,#TO,","
        MAIL TO #TO
        .GOTO STRING_PARSE3
.LABEL NOW_SEND3
        MAIL CLOSE_MESSAGE
        MAIL SEND
        MAIL DELETE/EXPUNGE
        .PAUSE 59
        EXIT
.LABEL STRING_PARSE4
        .IF #TO_USERS EQS "" THEN .GOTO NOW_SEND4
        GET_SYMBOL #TO_USERS,#TO,","
        MAIL TO #TO
        .GOTO STRING_PARSE4
.LABEL NOW_SEND4
        MAIL CLOSE_MESSAGE
        MAIL SEND
        MAIL DELETE/EXPUNGE
        .GOTO MAKE_LINK
.EXIT
.LABEL CHECK_MRLOGGER
        GET #STATUS = 0
        COMMAND MTI_CHECK_MRLOGGER
        GET #MRLOGGER = ""
        .IF #STATUS EQ 1 THEN .GOTO CONTINUE_HERE
        COMMAND MTI_START_MRLOGGER
        .IF #STATUS EQ 0 THEN GET #MRLOGGER ="MRLOGGER not running, not started"
        .IF #STATUS EQ 0 THEN .GOTO CONTINUE_HERE
        .IF #STATUS EQ 3 THEN GET #MRLOGGER ="No privs to start MRLOGGER"
        .IF #STATUS EQ 3 THEN .GOTO CONTINUE_HERE
        .IF #STATUS EQ 2 THEN GET #MRLOGGER ="TS stopped"
        .IF #STATUS EQ 2 THEN .GOTO CONTINUE_HERE
        GET #STATUS = 0
        COMMAND MTI_CHECK_MRLOGGER
        GET #MRLOGGER = "MRlogger started"
        .IF #STATUS EQ 0 THEN GET #MRLOGGER = "MRlogger could not be started"
        .GOTO CONTINUE_HERE
!
! Author: GEERDES 
!
! Modified by:           | Date:                | Reason:
!-----------------------------------------------------------------------------
! GEERDES                | 14-Aug-1990 03:25pm  | Element created, please state
!                        |                      | modifications down here
! LANPHEAR               | 15-JAN               | Cleaned up code, delete mail
        d) MTI_NOTIFY_CHECK_SENDER      COM             SHARE
        
$!-----------------------------------------------------------------------------
$!      MTI_NOTIFY_CHECK_SENDER.COM
$!+
$ START:
$ ON ERROR THEN GOTO PROBLEM
$ DEFINE SYS$OUTPUT OAUSER:X_S_C.TMP
$ SHOW QUEUE/ALL OA$MTI_QUEUE
$ deassign SYS$OUTPUT
$ SEARCH/OUT=OAUSER:X_S_C.TMP2 OAUSER:X_S_C.TMP OAMTISEND
$ !@SHOW SYMBOL $STATUS
$ IF $STATUS .EQ. 1 THEN GOTO NO_PROBLEM
$ PROBLEM:
$ DELETE OAUSER:X_S_C.TMP*.*
$ WRITE OAMAILBOX "OA GET #STATUS = 0"
$ @DCLMAILBOX
$ exit
$ NO_PROBLEM:
$ DELETE OAUSER:X_S_C.TMP*.*
$ WRITE OAMAILBOX "OA GET #STATUS = 1"
$ @DCLMAILBOX
$ EXIT
$!
$! Author: GEERDES 
$!
$! Modified by:           | Date:                | Reason:
$!-----------------------------------------------------------------------------
$! GEERDES                |07-Feb-1989 02:14pm   | Element created, please state
$!                        |                      | modifications down here
$!-----------------------------------------------------------------------------
        e) MTI_START_MTRLOGGER.COM
$!set verify
$!      MTI_START_MRLOGGER. 
$!+
$ START:
$ !*****************************************************************************
$ !                              MB$$TS_START.COM
$ ! FACILITY:   Transfer Service Startup Procedure.
$ ! VERSION:    V3.1-510
$ !*****************************************************************************
$ !
$ !                          COPYRIGHT (C) 1988 BY
$ !                    DIGITAL EQUIPMENT CORPORATION, MAYNARD
$ !                     MASSACHUSETTS.  ALL RIGHTS RESERVED.
$ !
$ !  THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED
$ !  ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE INCLUSION
$ !  OF THE ABOVE COPYRIGHT NOTICE.  THIS SOFTWARE OR ANY OTHER COPIES
$ !  THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER
$ !  PERSON.  NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY TRANSFERRED.
$ !
$ !  THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE AND
$ !  SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION.
$ !
$ !  DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS
$ !  SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY DIGITAL.
$ !
$ !*****************************************************************************
$ !
$ !     MB$$TS_START.COM - TRANSFER SERVICE Startup Procedure
$ !     ===================================================
$ !
$ !     Transfer Service startup procedure for MAILbus.
$ !
$ !     This procedure is invoked by the MAILbus
$ !     control procedure (SYS$MANAGER:MBCONTROL.COM). It cannot be 
$ !     executed as a stand alone procedure. Configuration information 
$ !     is read from the MAILbus configuration database
$ !     pointed to by the logical MB$CNFDB.
$ !
$ !     Checks are made for essential files and directory areas before
$ !     an attempt is made to activate Transfer Service processes.
$ !     
$ !     Parameters:
$ !     
$ !     P1 - "SYSTART" for Transfer Service system startup.
$ !          This checks if the MR stop is present, and exits if yes.
$ !          This is to stop a rebooting VAX node in causing an
$ !          TS cluster start !!!!!
$ !
$       WO := WRITE OAMAILBOX
$       DC := @DCLMAILBOX
$       mb$_success = %X10000001
$       mb$_failure = %X10000000
$       exit_status = mb$_success
$ !
$       on error then goto errors_log
$ !
        set ver
$ !
$ !
$ procedure_environment:
$ !
$       if f$type(mb$$ansread_done) .eqs. "" then -
                @sys$manager:mb$config read
$ !
$       rpriv = "SYSPRV,CMKRNL,SYSNAM,DETACH,SYSLCK,NETMBX,PSWAPM,TMPMBX"
$       save_privileges = f$setprv(rpriv)
$       if .not. f$privilege(rpriv) then -
        goto No_privs
$ !
$ known_list:
$ !
$ !     List of MR known images follows :-
$ !
$       mr$logger_image  = "sys$common:[sysexe]mrlog.exe"
$ !
$ !     RUN/DETACHED parameters
$ !
$       mrlogger_astlm          = 30
$       mrlogger_buflim         = 48960
$       mrlogger_enqlim         = 500
$       mrlogger_extent         = 5120
$       mrlogger_bufio          = 25
$       mrlogger_dirio          = 25
$       mrlogger_jtq            = 2048
$       mrlogger_maxwset        = 2048
$       mrlogger_pgflq          = 20384
$       mrlogger_prio           = 4
$       mrlogger_priv           = "(nosame,tmpmbx,netmbx)"
$       mrlogger_timq           = 30
$       mrlogger_cpulim         = 0
$       mrlogger_wrkset         = 640
$       mrlogger_input          = "nl:"
$       mrlogger_pname          = "MRSLOGGER"
$       mrlogger_fillm          = 100
$ !
$       mb$dv = f$parse(mb$$mr_dir,,,"device")
$       mb$dr = f$parse(mb$$mr_dir,,,"directory")
$       mb$dr = f$element(0,".",f$element(0,"]",mb$dr)) - "[" - "]"
$       mb$uic=f$file_attributes("''mb$dv'[000000]''mb$dr'.dir","uic")
$ !
$ ! Check if SYSTART or START
$ !
$ !
$ start:
$ !
$ ! Delete stop flag file.
$ !
$       if f$search(mb$$ts_stopf) .nes. "" then goto ok_ts_stopped
$ !
$ !     Start LOGGER - if configured
$ !
$       set noon        ! To ignore duplicate process creation.
$       if mr$comm$enable_logging then -
                goto logger_startup
$!      no logger needed
$       goto ok_logger
$
$ !     SUBROUTINE LOGGER_STARTUP
$ !     =========================
$ !
$ logger_startup:
$       on warning then goto error_logger_startup
$       on control_y then goto error_logger_startup
$       exit_status = mb$_success
$ !
$ !     Check for logger process on system.
$ !
$       logger_active = 0
$       context = ""
$ scan_loop:
$       pid = f$pid(context)
$       if pid .eqs. "" then goto scan_end
$       prc_name = f$getjpi(pid,"prcnam")
$       if prc_name .eqs. mrlogger_pname then goto scan_found
$       goto scan_loop
$ scan_found: 
$       logger_active = 1
$ scan_end:
$ !
$       sysnode := "''F$GETSYI("NODENAME")'"
$       
$       process_log = mr$comm$misc_directory + "MRLOG_''sysnode'.LOG"
$       process_err = mr$comm$misc_directory + "MRLOGERR_''sysnode'.LOG"
$       tmp_file = mr$comm$misc_directory + "MR.TMP"
$ !
$       if logger_active then -
                goto  exit_logger_startup
$ !
$       create/owner=parent 'process_log'
$       create/owner=parent 'process_err'
$ !
$       run     /detach-
                /ACC -
                /ast_limit='mrlogger_astlm'-
                /noauthorize-
                /buffer_limit='mrlogger_buflim'-
                /nodump-
                /enque_limit='mrlogger_enqlim'-
                /extent='mrlogger_extent'-
                /file_limit='mrlogger_fillm'-
                /io_buffered='mrlogger_bufio'-
                /io_direct='mrlogger_dirio'-
                /job_table_quota='mrlogger_jtq'-
                /maximum_working_set='mrlogger_maxwset'-
                /page_file='mrlogger_pgflq'-
                /priority='mrlogger_prio'-
                /privilege='mrlogger_priv'-
                /queue_limit='mrlogger_timq'-
                /resource_wait-
                /noservice_failure-
                /noswapping-
                /time_limit='mrlogger_cpulim'-
                /working_set='mrlogger_wrkset'-
                /process_name='mrlogger_pname'-
                /input='mrlogger_input'-
                /output='process_log'-
                /error='process_err'-
                /uic='mb$uic'-
                'mr$logger_image'
$ exit_logger_startup:
$!
$       goto ok_logger
$!
$ error_logger_startup:
$       exit_status = mb$_failure
$       goto notok_logger_not_started
$!
$! Search/rename all files in loop to prevent version overflow
$!
$file_get:
$!
$       file = f$search(p1)
$       if f$length(file) .eq. 0 then goto file_put
$!
$       rename/nolog/new_version -
                'file'-
                'p2'
$!
$       goto file_get
$!
$! Search/rename all newly named files back again in loop
$!
$file_put:
$!
$       file = f$search(p2)
$       if f$length(file) .eq. 0 then goto reset_done
$!
$       rename/nolog/new_version -
                'file'-
                'p1'
$       goto file_put
$!
$! End of file version reset
$!
$errors_log:
$ no_privs:
$ WO "OA GET #STATUS = 3"
$ DC
$ EXIT
$ ok_ts_stopped:
$ WO "OA GET #STATUS = 2"
$ DC
$ EXIT
$ ok_logger:
$ WO "OA GET #STATUS = 1"
$ DC
$ EXIT
$ notok_logger_not_started:
$ WO "OA GET #STATUS = 0"
$ DC
$ EXIT
$!
$! Author: GEERDES 
$!
$! Modified by:           | Date:                | Reason:
$!-----------------------------------------------------------------------------
$! GEERDES                |21-Aug-1990 11:10am   | Element created, please state
$!                        |                      | modifications down here
        Dont forget to move these to LIVE.
        You also need to create (not in CM) a formlibrary called
        OA$LIB:MAILBOX.FLB that has the following form:
        Add this form library to all fetcher accounts in ALL-IN-1.
 
 
!          FMS Form Description Application Aid 
!                     Version V2.3
 
FORM NAME='MAILBOX'
    AREA_TO_CLEAR=1:23
    WIDTH=80
    BACKGROUND=CURRENT
    ;
ATTRIBUTE_DEFAULTS FIELD
    CLEAR_CHARACTER=' '
    NOAUTOTAB BLANK_FILL NOBLINKING NOBOLD NOREVERSE
    NOUNDERLINE NODISPLAY_ONLY ECHO NOFIXED_DECIMAL
    LEFT_JUSTIFIED NOSUPERVISOR_ONLY NOSUPPRESS NOUPPERCASE
    ;
FIELD NAME='RECORD'  (9,1)
    PICTURE=70'X'
    ;
NAMED_DATA INDEX=1 NAME='.TYPE'
    DATA='ENTRY /MODE=FILE' ;
NAMED_DATA INDEX=2 NAME='.FILE'
    DATA='OA$MTI_NOTIFY,RECORD' ;
 
END_OF_FORM NAME='MAILBOX' ;
        
        And the last step is to modify the entry in Message Router,
        The ALL-IN-1 Mailbox (A1 ?), needs a 
        /NOTIFY=OA$MTI_NOTIFY
        And then after a reboot of the cluster the thing should start 
        working or with some tricks, you can get it to work manually,
        however I think a reboot is easier.
        Ben
        
        
 |