[Search for users] [Overall Top Noters] [List of all Conferences] [Download this site]

Conference iosg::all-in-1_v30

Title:*OLD* ALL-IN-1 (tm) Support Conference
Notice:Closed - See Note 4331.l to move to IOSG::ALL-IN-1
Moderator:IOSG::PYE
Created:Thu Jan 30 1992
Last Modified:Tue Jan 23 1996
Last Successful Update:Fri Jun 06 1997
Number of topics:4343
Total number of notes:18308

108.0. "Fetcher & Sender as detached processes - discuss" by OCTAVE::VIGNEAULT () Wed Feb 26 1992 18:27

    
    I understand that it's possible to run the Fetcher and Sender as 
    detached processes so's to avoid all the overhead of multiple 
    logins over the course of a day.  I've been asked to implement
    something along these lines on the system I support, and I'm 
    wondering what the best way of doing it is.  The easiest way is
    to run the OAMTISEND/FETCH command procedures as detached processes
    that execute in a closed loop with a wait of some interval before 
    executing again. This way, you still have the image activation of 
    ALL-IN-1 each time it runs. Is there a way to tell if there's any
    messages waiting to be fetched before firing up the ALL-IN-1 image
    and the fetcher ?  The system is using remote MR.  If I could tell
    somehow that there weren't any messages waiting, I could just go back
    to a wait state.
    
     The alternate way, is to kick off the detached process, invoke 
    ALL-IN-1, and pass control to a script.  This would seem to be the 
    best method, and also the more complex.  Rather than reinvent the 
    wheel, I'd be interested in obtaining such a beast if possible.
    
     We're currently dabbling with ALL-IN-1 Vers 3.0, so it would need
    to work with DIAMOND.
    
     The customer _actually_ requested that the fetcher & sender be running
    _constantly_ on two particular systems.  As soon as a mail message is 
    sent between these two systems, they want it to be sent/fetched 
    _immediately_ .  They've been told by their marketing folks from 
    ISA that this can be done.   How's about some opinions around this 
    whole thing.
    
    Thanks, Larry
T.RTitleUserPersonal
Name
DateLines
108.1AIMTEC::PORTER_TTerry Porter, ALL-IN-1 Support, Atlanta CSCWed Feb 26 1992 20:1646
The only way to get the sender and fetcher to respond immediately to new mail
is to run them continuously with no pauses, while this is possible it will
impose a LARGE overhead when there is no mail to send. This also assumes that 
there is not other mail waiting to be sent/fetched, in which case the new mail
joint it's place in the queue.

You could run up ALL-IN-1 and run a script that sent/fetched mail, waited
for a few minutes and repeated. This would give the same behaviour as the
normal batch mechanism but without the process and image activation
overhead.

Alternativly you could run a script that checked to see if there was mail 
to send/fetch, if there was send it, otherwise wait a short time and then 
repeat, the wait time here being shorter than in the first suggestion. This
would increase responsivness at the cost of some extra I/O and CPU. However
I suspect that when you have taken away the process and image activation 
overheaded the cost of checking to see if there is mail to send/fetch is 
greater than the cost of doing the send/fetch when there is no mail to send
or fetch.

For sending you could just default to Express instead of First Class. This will
send the mail to MR immediately but has some drawbacks. In V2.4 (I do not
know if this is fixed in V3.0) express send never released the DECnet
link it used to talk to MR, and never re-used it so a large number of Express
sends soon uses up all the free DECnet links bring remote mail movement to
a halt. The DECnet links are only released when the user exits ALL-IN-1. You
may hit the same problem if you repeatidly call MAIL MTI_SEND_ALL from a
script without exiting the ALL-IN-1 image. If so both my suggestions above
become void and the only option is to introduce a loop inside the current
command procedure to repeatidly run ALL-IN-1. Before I get too far off the
topic the other disadvantage of Express mail is that the user has to wait for
the send to complete.

If the DECnet links get released after being used then I would recommend going
for a script that repeatidly sends mail with short waits in-between.

I would also check with the customer and find out why they want this, there may
be a better way to address the basic problem. Remember the old story where a
programmer invested a huge amount of time improving the performance of a
report program because the user conplained that they could not wait for 
the program to complete, it turned out that all the user wanted was to be 
able to start the report, log out and go home (i.e. run it as a batch job). :-)

Hope this helps,

Terry
108.2Did this a couple of years agoSIOG::T_REDMONDThoughts of an Idle MindThu Feb 27 1992 08:1724
    I coded up a detached Sender/Fetcher for ALL-IN-1 V2.3 about three
    years ago. Unhappily the code got "lost" when I moved from Valbonne to
    Dublin.
    
    ALL-IN-1 was run as a detached process, looping around within a script.
    The script woke at intervals (every 59 seconds as I recall - the
    maximum that .WAIT will take), checked for outgoing mail (look into the
    MAIL QUEUE record in PENDING), sent it if any was present, then
    processed incoming mail if there was any. Code was also put in there
    to monitor System Management commands such as pause/stop/reset interval
    etc.  The script also logged details of its activity to a file.
    
    I ran this on a production system for about a month without seeing any
    problems, apart from an occasional reluctance by ALL-IN-1 to drop
    network links to Message Router. After that I moved onto something else
    (and lost interest in the detached sender/fetcher).  The script took
    about 2 days to get into good shape, and I'm sure that the task would
    be easier until V3.0 as the sender/fetcher connections get better all
    the time.
    
    So it can be done. But the code isn't around. Time to start work again
    (sometime).
    
    Tony
108.3Script Symbiont?IOSG::PYEGraham - ALL-IN-1 Sorcerer's ApprenticeThu Feb 27 1992 22:456
    Could you do this with the Script Symbiont in V3.0?
    
    After all, the avoidance of image activations is just what the symbiont
    was invented for!
    
    Graham
108.4SIOG::T_REDMONDThoughts of an Idle MindFri Feb 28 1992 09:085
    But this would completely tie up a whole script symbiont... better to
    write the job as a separate detached process, running in its own little
    tailored environment.
    
    T
108.5Ben Geerdes did a notify fetcher at one pointFULMER::LAAHSTwo Cute Celts are better than oneFri Feb 28 1992 11:147
    Ben Geerdes also had a working prototype of a 'notify' fetcher such
    that it woke up as soon as an incoming message was placed in the A1
    Message Router Mailbox.
    
    Come on down Mr. Geerdes.....
    
    Kevin
108.6And I came downSHALOT::GEERDESFri Feb 28 1992 14:4536
	The notify fetcher has been running in a production environment
	for several years now, without any real problems.
	Its still used here in Charlotte on the cluster, so its very reliable.

	The mayor points are:

		Fetcher is continously running ALL-IN-1, but is not
		just looping or pausing if there are no messages.
		It actually reads a DCL mailbox, and if nothing comes in
		it will just wait till something is written to the mailbox.

		The A1 mailbox (mailbus) has a /NOTIFY added, so every message
		that comes in will write to the DCL mailbox, and the fetcher
		starts running, fetching the message. No delays here.

		Its all standard ALL-IN-1 scripts and dcl procedures,
		no sitedefined functions or install functions.
		It does use an undocumented ALL-IN-1 function.


		It checks the sender too, and will send mail if the sender
		is no longer on the queue. It will also send mail when it 
		has problems connecting to Mailbus. The addressees of these
		warning messages are defined by a logical , so more people
		could be notified in the case of problems.

		Because it uses DCL mailboxes, it means that in a cluster
		environment every node has to run its own fetcher. Everything
		however is in place to ensure that no fetchers run at the same
		time.

		I see if I can get the stuff together somewhere.

				Ben

108.7here it isSHALOT::GEERDESFri Feb 28 1992 14:561058
	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


        
        

108.8Anyone have it working?BIGUN::BRUCEWed Jun 02 1993 01:1811
    Does anyone have the code in .7 running, or something else to implement
    a detached sender/fetcher?
    
    It seems that the previous reply does not contain the source for
    procedure MTI_NOTIFY_CLUSTER_LOCK.  Other problems arise when
    attempting to install under ALL-IN-1 V3.0.
    
    A pointer to working code for V3 would be appreciated.
    
    Malcolm
    
108.9Have you asked Ben?AIMTEC::WICKS_AJune 7-13 Real Football in the U.SWed Jun 02 1993 02:209
    Malcolm,
    
    have you tried contacting the legendary dutchmen himself - he's not
    seen in here very often anymore but i'm sure that he has all this
    stuff running on ALPHA already (:==:)
    
    Regards,
    
    Andrew.D.Wicks
108.10Where he can be reachedAIMTEC::WICKS_AJune 7-13 Real Football in the U.SWed Jun 02 1993 02:211
    P.S he's on AZUR now that SHALOT has gone