How to address the warning message OPS0190W created by some of your TOD rules?

Document ID : KB000030755
Last Modified Date : 14/02/2018
Show Technical Document Details

Title:

How to address the warning message OPS0190W created by some of your TOD rules?

Summary:

What steps are required to effectively resolve the new warning message OPS0190W introduced by the release 12.2

Solution:

Once you have upgraded to CA OPS/MVS release 12.2 you might found  the following warning message being issued upon some of your 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 CA 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 states it.

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

Simply add the NOOUTPUT / NOO operand to the Address OPER statement.

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.