Hi Sam,

You had me until I read this:

A few final notes concerning the relationship between /*BEFORE, and /*AFTER. Many people try to use these statements, and stack two or more jobs in the same PDS member and submit them all at the same time with one SUBMIT command. This usually works as expected, but sometimes JES2 will NOT PROCESS the jobs in the order they appear in the submitted member. This can result in a job with a /*AFTER statement for a prior job you think JES2 has already seen and processed because of the sequence in the submitted member, being processed and initiated before JES2 ever finishes reading the job that is the object of the /*AFTER statement. This problem can be avoided by making sure that jobs with /*BEFORE and /*AFTER requirements are submitted separately from each other and in an appropriate sequence.

The disordering of the jobs that you refer to is exactly the problem that my suggestion (THREADNAME=name) attempts to fix.




Thanks, though, for the memory lane stroll. I had forgotten about /*BEFORE and friends, but your post reminded me that I had first seen them when I was working at a DC shop in the early '80s.

Dave






At 5/23/2008 02:35 PM, Knutson, Sam wrote:
Hi Dave,

What you describe is pretty much what the Mellon Mods for JES2 provided.
I would like to see equivalent function added to base JES2 by IBM.
Thruput Manager provides this function too. Here is user doc for the Mellon Mods syntax for comparison.

Thanks, Sam


       Users Guide - How to use the features of these Mods

-  Control Statements

  You take advantage of the Mellon Shared Spool mods via JECL
statements.  There are currently five supported statements, they are:

"/*CNTL XEQ resource, { EXC | SHR }"

"/*ROUTE XEQ secheduling environment name | HERE "

"/*WITH jobname"

"/*AFTER jobname"

"/*BEFORE jobname"

  The /*CNTL XEQ statement is used to add an additional job selection
criterion based on other executing jobs current use of the same resource
name.  The "/*CNTL XEQ" must be placed in columns 1 through 10.  The
resource name is arbitrary, and is made of up to eight (8) characters
with no embedded blanks.  The resource name follows the literal "/*CNTL"
and must be preceded by at least one, but not more than 30 blank spaces.
If the shared (SHR) or exclusive (EXC) keywords are used, they must
immediately follow the resource name and be preceded by a comma.  If
neither the SHR nor EXC keyword is specified SHR is assumed.

You may specify up to eight /*CNTL statements; additional statements are
disregarded.

    Examples:

    Assume jobnames ABC, and CDE are currently in execution with the
following /*CNTL XEQ statements -

    //ABC  JOB (other stuff)
    /*CNTL XEQ MYNAME,SHR

    //CDE JOB (other stuff)
    /*CNTL XEQ MYNAME,SHR

Then if job EFG is submitted with the following, /*CNTL statement -

    //EFG JOB (other stuff)
    /*CNTL XEQ MYNAME,EXC

The job will not be selected for execution as long as either job ABC or
CDE continues to run.

Next if job XYZ is submitted with the following, /*CNTL statement -

    //XYZ JOB (acctng info)
    /*CNTL XEQ     MYNAME   Ú SHR is the default

  It would be immediately available for execution.

When no jobs remain in execution with a /*CNTL XEQ MYNAME  job EFG with
the EXC requirement would be available for job selection.  Assume it has
now been selected, and a new job enters the system with the following
/*CNTL statement -

    //WXY  JOB  (acctng info)
    /*CNTL  XEQ  MYNAME

  Job WXY will not be available for job execution until job XYZ that
holds the resource name exclusively ends.  If other jobs are submitted
with resource names other than MYNAME, they will be treated separately
and only other jobs with /*CNTL statements that reference the same
resource name will affect their availability for job selection.

  The /*CNTL statement only provides additional job selection criterion,
and does not replace other JES2 requirements for job selection such as
available initiators, appropriate job class and so on.  The resource
name is arbitrary, you make it up, there is no need for anyone to add
the name to WLM, or any other table before it is used.


The /*ROUTE XEQ is a standard JES2 statement used to route your job to a
specific execution node.  We have usurped the use of the statement, and
when we read an XEQ statement, we test to see if the name following the
XEQ literal is a valid WLM scheduling environment name.  If the name is
a valid scheduling environment name, and if no schenv value is present
on the JOB card, we use the XEQ name in the same way the job statement
parameter SCHENV is used, otherwise we let JES2 handle it normally.

The literal "/*ROUTE" must begin in column 1.  The literal "XEQ" must
follow "/*ROUTE", and may be separated by one to twenty blank spaces.
The resource name, if not a valid JES2 node name, must follow the "XEQ
literal by between 1 and 35 blank spaces.  The resource name can be
between 1 and 16 characters long, if the name is longer than 16
characters, only the first 16 are used.

There is one specific exception to all of the above, if the literal
following XEQ is HERE, then the jobs system affinity is set to the
system where you submitted the job, quite a handy feature itself.

You may specify more than one /*ROUTE statement; but only the last will
be used.

Examples:

//ABC JOB (job acctng),SCHENV=BEFOREALL
/*ROUTE XEQ AFTERALL   <== ignored because a valid schenv is specified

//ABC JOB (job acctng),SCHENV=BEFOREALL
/*ROUTE XEQ  N6  <== a valid JES2 routing node, both jes2 routing and
//*                  schenv are valid for this job.

//ABC JOB (jobacctng)
/*ROUTE XEQ BEFOREALL <== BEFOREALL is setup the same as SCHENV above

//TUV  JOB (jobacctng)
/*ROUTE XEQ  HERE   <== the jobs will only execute where submitted.

The /*WITH statement specifies that the job is only available for
selection while the jobname named on the /*WITH statement is in
execution.  The condition is satisfied even if the jobname that must be
executing is executing on a different system within the same MAS
environment.  If more than one /*WITH statement is read; only the last
one is kept.

Example:

//FGH   JOB  (acctng info)
/*WITH    JKL

This job will only be selected for execution if jobname JKL is
executing at the time of job selection.


The /*AFTER jobname statement specifies that the job is only available
for selection after the jobname in the /*AFTER statement has finished.
Because we really do not track all completed jobs, from - from when -
the beginning of the day, the week, the last ipl, the last cold start,
or maybe for all time, it is more correct to say that if the jobname
specified on a /*AFTER statement is in execution at the time our job
would otherwise have been selected for execution, then our job will wait
until the jobname referenced in the /*AFTER statement has ended.
"AFTER" may have been more appropriately names "NOT WHILE", but since I
was not around when the original keywords were developed, please do not
blame me.  Again, the jobname on the /*AFTER need not be executing on
the system that our job is potentially selected for execution on, it
could be on any system within the MAS complex.

If more than one /*AFTER card is read; only the last one is kept.

Example:

//ABC JOB (acctng info)
/*AFTER    XYZ

Job ABC will not be available for execution while job XYZ is in
execution anywhere within the MAS complex.


The /*BEFORE jobname statement causes the jobname specified in the
statement to not be selected for execution until after this job has
completed.  Specifically if jobname ABC has a /*BEFORE XYZ statement,
then if jobname XYZ is potentially selected for execution by JES2, the
Mellon Mods will examine all jobs on the input queue and when jobname
ABC is found to have a /*BEFORE for job XYZ, job XYZ will be rejected as
a potential candidate for job execution.

If more than one /*BEFORE statement is read; only the last one is kept.

 Example:

//ABC   JOB  (acctng info)
/*BEFORE   XYZ

This before statement will cause JES2 to reject job XYZ as a potential
candidate for job execution until after job ABC has completed execution.
If job XYZ was already executing at the time job ABC is submitted, the
/*BEFORE statement will not affect anything, unless there is another job
XYZ waiting to execute.  Also please note, it is possible to form a
lockout condition where JOBA has a /*BEFORE JOBB, and JOBB has a
/*BEFORE JOBA statement.  There is no checking done for this type of
deadly embrace.

  A few final notes concerning the relationship between /*BEFORE, and
/*AFTER.  Many people try to use these statements, and stack two or more
jobs in the same PDS member and submit them all at the same time with
one SUBMIT command.  This usually works as expected, but sometimes JES2
will NOT PROCESS the jobs in the order they appear in the submitted
member.  This can result in a job with a /*AFTER statement for a prior
job you think JES2 has already seen and processed because of the
sequence in the submitted member, being processed and initiated before
JES2 ever finishes reading the job that is the object of the /*AFTER
statement.  This problem can be avoided by making sure that jobs with
/*BEFORE and /*AFTER requirements are submitted separately from each
other and in an appropriate sequence.

  In relationship to any of the statements above, when routing a job to
another node, the additional selection criterion defined by the Mellon
Mods statements, will follow the job to the new node, where it will
likely no longer be appropriate.  Of course if the Mellon Mods are not
installed at the receiving node, the additional job selection
requirements are not honored.

The JES2 $DJ command output has been extended to include information
about /*CNTL, up to eight names qualified with an "E" for exclusive, or
an "S" for shared, one /*WITH jobname, one /*BEFORE and one /*AFTER
jobname.  Examples of the extended displays are given below, please note
that the information is included in either the standard or long versions
of the command.

Altered Display Commands -

-$DJ(25926)
 $HASP890 JOB(T0SM0TTY)
 $HASP890 JOB(T0SM0TTY)  STATUS=(AWAITING EXECUTION),CLASS=X,
 $HASP890                PRIORITY=6,SYSAFF=(ANY),HOLD=(JOB),
 $HASP890                AFTER=T0SM0AF,BEFORE=T0SM0BF,WITH=T0SM0WTH,
 $HASP890                CNTL=(HOWDY-E,HOWDO-S,WILDO-S,HELLO-S)


-$DJ(25926),LONG
 $HASP890 JOB(T0SM0TTY)
 $HASP890 JOB(T0SM0TTY)  STATUS=(AWAITING EXECUTION),CLASS=X,
 $HASP890                PRIORITY=6,SYSAFF=(ANY),HOLD=(JOB),
 $HASP890                CMDAUTH=(LOCAL),OFFS=(),SECLABEL=,
 $HASP890                USERID=T0SM0,SPOOL=(VOLUMES=(JES2T1),TGS=1,
 $HASP890                PERCENT=0.0009),ARM_ELEMENT=NO,CARDS=18,
 $HASP890                REBUILD=NO,SRVCLASS=BATTSTMD,SCHENV=TEST,
 $HASP890                SCHENV_AFF=(),CC=(),AFTER=T0SM0AF,
 $HASP890                BEFORE=T0SM0BF,WITH=T0SM0WTH,
 $HASP890                CNTL=(HOWDY-E,HOWDO-S,WILDO-S,HELLO-S)


In addition informational messages, $HASP493 and $HASP494 are written to
the log as jobs with /*CNTL, /*WITH, /*BEFORE, or /*AFTER are read.
Examples of the messages follow.

 These messages were issued for jobname T0SM0TTY

$HASP944 T0SM0TTY * -- WITH   JOBNAME = T0SM0WTH   --
$HASP944 T0SM0TTY * -- AFTER  JOBNAME = T0SM0AF    --
$HASP944 T0SM0TTY * -- BEFORE JOBNAME = T0SM0BF    --
$HASP943 T0SM0TTY * -- CONTROL INFO = HOWDY,EXC    --
$HASP943 T0SM0TTY * -- CONTROL INFO = HOWDO,SHR    --
$HASP943 T0SM0TTY * -- CONTROL INFO = WILDO,SHR    --
$HASP943 T0SM0TTY * -- CONTROL INFO = HELLO,SHR    --


 - end of text -
====================
This email/fax message is for the sole use of the intended
recipient(s) and may contain confidential and privileged information.
Any unauthorized review, use, disclosure or distribution of this
email/fax is prohibited. If you are not the intended recipient, please
destroy all paper and electronic copies of the original message.

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [EMAIL PROTECTED] with the message: GET IBM-MAIN INFO
Search the archives at http://bama.ua.edu/archives/ibm-main.html

Dave Cole              REPLY TO: [EMAIL PROTECTED]
Cole Software          WEB PAGE: http://www.colesoft.com
736 Fox Hollow Road    VOICE:    540-456-8536
Afton, VA 22920 FAX: 540-456-6658
----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [EMAIL PROTECTED] with the message: GET IBM-MAIN INFO
Search the archives at http://bama.ua.edu/archives/ibm-main.html

Reply via email to