|
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
|