CA OPS/MVS

CA OPS/MVS Tuesday Tip: Responding to OPS0190W warning messages

  • 1.  CA OPS/MVS Tuesday Tip: Responding to OPS0190W warning messages

    Posted 03-24-2015 08:32 AM

    If you are at r12.2 of OPS/MVS you are probably seeing the following warning messages being issued in your OPSLOGs:

     

    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 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 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 condition in some future release of OPS/MVS.

     

    Refer to the following guidelines to respond to this warning message and ultimately create more efficient processing logic within the noted rule(s):

     

    1) Using OPSVIEW option 4.5.1 , locate the noted ruleset.rule . If this is for a dynamically created TOD rule (ruleset of *DYNAMIC), then you need to identify the rule or program in which the rule is being created.  If needed, use the OPSLOG to filter on message OPx4320H. 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 enabled the dynamic rule prior to the rule enablement message.

     

    2) For TOD rules that are not manipulating the command output of the issued command (No additional Address OPER command trapping operands, and no code is manipulating (via the PULL instruction) the command responses returned to the External Data Queue)  simply add the NOOUTPUT 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 operand statements of the Address OPER to include the COMMAND() operand if not present and then add the NOOUTPUT operand:

     

    Address OPER

    “Command(D A,L) Nooutput”

    “Command(D GRS,C) Nooutput”

    “Command($DI) Nooutput”

     

    Or short version of:

     

    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  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 JCL procedure. Then modify the TOD rule logic to dispatch the OPS/REXX program via the Address OSF host environment.

     

     

    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 logic of 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 OPS/REXX user dsn that is concatenated to the //SYSEXEC DD of the OPSOSF procedure 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