HP OpenVMS Systemsask the wizard |
The Question is:
Hi,
We have a system running under VMS wich uses the
mailboxes to exchange data between processes.
There is only one read process which is a detached process which reads from the
mailbox and one interactive write process .But the write process can be
acessed by many users on the network simultaneously.So the mailbox can have
more than one processes wri
ting to it.However the read process would be only one which keeps running
throughout the day.The programming language is COBOL and we have a common
routine called by the read process and the write process.
recently we have started facing a problem , that In case the read process(being
a detached process) stops abruptly and then some user starts the write process
,so that the write process creates a mail box first, write failure occurs on
the mailbox with an
I/O status return
SS$_MBTOOSML.Now if the read process is started late to read the messages from
the mailbox , it does not do so.Now with the read process running , new
messages are still not being read/written to the mail box.Same SS$_MBTOOSML
occurs everytime.
However if the read process was the first to create the mail box and then write
process are assigned the channels later on, if the read process now stops.It
does not create any problem and the error SS$_MBTOOSML does not occur.
To get a normal situation we have to stop the read process and logout all users
so that no write process is running as a result of which the temperory mailbox
is deleted and then we have to restart the read process first and then the
write processes are s
tarted.
I have tried searching most of documentation to find out what actually happens
with the mailbox if SS$_MBTOOSML is coming , but i did not get much.
We are using COBOL as the programming language.
The bit of code which is used to create and assign the maiil boxes is
CALL "SYS$CREMBX" USING
BY VALUE 0
BY REFERENCE SY-CHANNEL
BY VALUE MBXCB-MESSAGE-LENGTH
BY VALUE MBXCB-BUFFER-SIZE
OMITTED
OMITTED
BY REFERENCE WS-FILE-NAME-DESCRIPTOR
GIVING SY-STATUS
To write to the mailbox
ADD WK-IO$_WRITEVBLK WK-IO$M_NOW GIVING IO-FUNCTION
CALL "SYS$QIOW" USING
BY VALUE 0
BY VALUE MAILBOX-CHANNEL(MBX-IND)
BY VALUE IO-FUNCTION
BY REFERENCE SY-IOSB
BY VALUE 0 0
BY REFERENCE MBX-MESSAGE
BY VALUE MBXCB-MESSAGE-LENGTH
0 0 0 0
GIVING SY-STATUS.
To read from the mailbox
MOVE WK-IO$_READVBLK TO IO-FUNCTION
CALL "SYS$QIOW" USING
BY VALUE 0
BY VALUE MAILBOX-CHANNEL(MBX-IND)
BY VALUE IO-FUNCTION
BY REFERENCE SY-IOSB
BY VALUE 0 0
BY REFERENCE MBX-MESSAGE
BY VALUE MBXCB-MESSAGE-LENGTH
0 0 0 0
GIVING SY-STATUS.
Please suggest what should be done so that the read process atleast reads again
when it is restarted without asking all the users to log off and stop all the
write processes.
The Answer is : Your application is likely using RMS and the File Access Listener (FAL) and DECnet to write into the mailboxes remotely, as there is no such thing as a network mailbox. (What is confusingly refered to as a network mailbox on OpenVMS is a local mailbox used to communicate with network software.) Mailboxes are only accessable directly -- without using RMS and FAL or other similar networking connection -- on the local node or (for a cluster-accessable mailbox) within the local OpenVMS Cluster. The OpenVMS Wizard generally recommends direct use of DECnet or IP connections when networking is required, as using RMS and FAL adds another layer of complexity -- and the record semantics and I/O assumptions may not entirely agree or entirely match with local application requirements. With a native, direct network connection, you can acquire and utilize the features required for the application. Your COBOL listener contains one or more latent errors, and these should be resolved BEFORE continuing forward on your current path. With the listener down, the writers will eventually fail as the amount of buffer space is finite. If resource-waiting is enabled, the local writers should eventually stall, but back-pressure from these stalls can and eventually will stall the entire application environment. (Much as a clogged drain continues to back up and to flood when more water is added.) Please check the code that creates and connects to the mailbox in both the and the writer. In particular, please use the OpenVMS Debugger to confirm the actual run-time values of the variables MBXCB-MESSAGE-LENGTH and MBXCB-BUFFER-SIZE. The OpenVMS Wizard also views any application that utilizes the defaulting for any quota-related arguments -- on $crembx, on $creprc, or other similar services -- as containing one or more latent bugs, as the defaults are derived from system parameters and can change and can introduce errors into the run-time. Based solely on your message, it appears that the MAXMSG and/or BUFQUO arguments used when the writer process creates the mailbox are inadequate, whereas the values from the reader are adequate. (This also tends to point to the existence of multiple mailbox creation routines when common code would be more appropriate.) It is also possible that the reader's unintended downtime has allowed the readers to fill the mailbox. For application debugging information, please see topics (7552) and (1661). For debugging detached processes, please see topics including (1017), (1314), (3031), and (4129). For information on creating and using shareable images and common code, please see the Shareable Image Cookbook link available at the main webpage of the Ask The Wizard website.
|