What steps are required to effectively resolve the new warning message OPS0190W introduced as of release 12.2?
OPS/MVS 12.2 or higher
Once you have upgraded OPS/MVS release, the following warning message could be issued upon some TOD rules firing:
OPS0190W TOD RULE ruleset.rulename IS WAITING FOR COMMAND OUTPUT, THIS CAPABILITY WILL BE REMOVED IN A FUTURE RELEASE
The noted TOD rule within this warning message indicates that logic to issue a operator command to the system via the Address OPER host environment is either using command trapping parms (CMDWAIT, WAIT, STOPMSG, etc) or by default is waiting for output (no Address OPER operands NOOUTPUT / NOO were specified). Since TOD rules execute within the OPSMAIN address space, this waiting logic could suspend OPSMAIN activity specifically for TOD rule processing.
To eliminate these possible performance bottlenecks, the Address OPER host environment will internally force a NOOUTPUT / NOO condition in a future release of OPS/MVS. In other words, TOD rules using Address OPER statement will no longer wait for the output of the operator commands to return back and this is the capability that will be removed in a future release as the message indicates.
Refer to the following guidelines to respond to this warning message and ultimately create more efficient processing logic within the noted rule(s):
Steps are:
1.- Using OPSVIEW option 4.5.1 locate the noted ruleset.rule . If the occurrence of the message is for a dynamically created TOD rule (ruleset of *DYNAMIC), then you need to identify the rule or OPS/REXX program in which the rule is being created/enabled. If needed, use the OPSLOG browse feature to filter on message OPS4320H. This is the rule enablement message that identifies when every rule is enabled. Locate when the noted *DYNAMIC rule was enabled, and with the JOBNAME and ASID OPSLOG fields displayed, attempt to identify the rule or OPS/REXX program that had enabled the dynamic rule prior to the rule enablement message.
2. Add the NOOUTPUT/NOO operand to the Address OPER statement for TOD rules that:
a.- Does not manipulate or use the operator command output to mkae decisions within the rule logic.
b.- No additional Address OPER operator command trapping operands are used (CMDWAIT, WAIT, STOPMSG, etc).
c.- No code is manipulating the output via the PULL instruction or the command responses returned to the External Data Queue.
Example:
)TOD ,15 MIN
)PROC
/**********************************************/
/* Issue diagnostic commands every 15 min */
/**********************************************/
Address OPER
“D A,L”
“D GRS,C”
“Command($DI)”
Change the Address OPER statement to include the COMMAND() operand if not present and then add the NOOUTPUT / NOO operand:
Address OPER
“Command(D A,L) Nooutput”
“Command(D GRS,C) Nooutput”
“Command($DI) Nooutput”
A short version of the modification would be:
Address OPER
“C(D A,L) Noo”
“C(D GRS,C) Noo”
“C($DI) Noo”
3.- For TOD rules that are manipulating the command output of the issued operator command (additional Address OPER command trapping operands specified or default) and the code is using the PULL instruction to process the response output, copy the command ‘logic’ to an OPS/REXX program that resides in your user OPS/REXX library concatenated within the //SYSEXEC DD of the OPSOSF PROC. Then modify the TOD rule logic to dispatch the OPS/REXX program via the Address OSF host environment statement to a OPSOSF Server.
Example:
)TOD ,1 HOUR
)PROC
/*--------------------------------------------------------------------*
/* Alert for any SRDF drive that is OFFLINE *
/*--+----1----+----2----+----3----+----4----+----5----+----6----+----7*
address Oper
"C('|SQ VOL,G(DRALL)') CMDWAIT(30) STOPRESP('END OF DISPLAY')"
/*--------------------------------------------------------------------*/
/* Extract the command output from EDQ (PULL *** instruction) */
/* Send out alert message for any devices found to be OFFLINE */
/*--+----1----+----2----+----3----+----4----+----5----+----6----+----7*/
cmdoutlines = QUEUED()
do f = 1 to cmdoutlines
pull cmdout
device = WORD(cmdout,1)
status = WORD(cmdout,2)
if status = 'OFFLINE' then
do
msgtxt = 'SRDF device 'device'is in OFFLINE status!!!'
address WTO
"Msgid(OPSNOTIFY) Text('"msgtxt"') Route(1) Desc(2)"
end
end
Change the logic of the TOD rule to:
)TOD ,1 HOUR
)PROC
/*--------------------------------------------------------------------*/
/* Trigger SRDFDISP pgm to verify SRDF drives to OPS server */
/*--+----1----+----2----+----3----+----4----+----5----+----6----+----7*/
address OSF
"OI P(SRDFDISP)"
Then create an OPS/REXX program in your user OPS/REXX library that is concatenated to the //SYSEXEC DD of the OPSOSF PROC that performs the Address OPER logic:
SRDFDISP OPS/REXX program:
/*--------------------------------------------------------------------*/
/* Alert for any SRDF drive that is OFFLINE */
/*--+----1----+----2----+----3----+----4----+----5----+----6----+----7*/
address Oper
"C('|SQ VOL,G(DRALL)') CMDWAIT(30) STOPRESP('END OF DISPLAY')"
/*--------------------------------------------------------------------*/
/* Extract the command output from EDQ (PULL *** instruction) */
/* Send out alert message for any devices found to be OFFLINE */
/*--+----1----+----2----+----3----+----4----+----5----+----6----+----7*/
cmdoutlines = QUEUED()
do f = 1 to cmdoutlines
pull cmdout
device = WORD(cmdout,1)
status = WORD(cmdout,2)
if status = 'OFFLINE' then
do
msgtxt = 'SRDF device 'device' is in OFFLINE status!!!'
address WTO
"Msgid(OPSNOTIFY) Text('"msgtxt"') Route(1) Desc(2)"
end
end
Note: At the time this KD was written there was no information as to what release of CA OPS/MVS will implement this announced product modification.