| Date: | Sun, 18 May 2008 09:41:10 -0400 |
| Reply-To: | Michael Raithel <michaelraithel@WESTAT.COM> |
| Sender: | "SAS(r) Discussion" <SAS-L@LISTSERV.UGA.EDU> |
| From: | Michael Raithel <michaelraithel@WESTAT.COM> |
| Subject: | Re: updating a sas dataset by multiple jobs |
| In-Reply-To: | <200805180056.m4HAmSD8030564@malibu.cc.uga.edu> |
| Content-Type: | text/plain; charset="us-ascii" |
Dear SAS-L-ers,
Siva Rao posted the following interesting question:
> Hi , I am trying to read/write a SAS dataset by multiple jobs
> running concurrently. Here are some details on my task that I
> am trying to achieve:
>
> 1. I will run my process on UNIX and using sas9.x
> 2. I will create a sas dataset (permanent dataset) called
> "control" with 2
> columns:
> JOb_name and FLAG.
>
> 3. I have total 4 jobs, JOB1, JOB2, JOB3, JOB4 to run.
> and I like to submit all 4 using SYSTASK COMMAND to run
> consurrently.
> At the very end of JOB1, JOB2, and JOB3, I will
> insert/write a record to "control"
> dataset to mark the completion of the job. For example as below:
>
> Proc sql;
> insert into X.control values('JOB1','1');
> quit;
>
>
> JOb4 should run only after the successful completion of
> JOB1, JOB2, JOB3.
> So, in JOB4 I am using sleep commmand so that It will be
> active in the
> background and will keep checking the "CONTROL" dataset (created in
> step2) for the JOb_name and FLAG and if it finds that
> JOB1, JOB2, JOB3
> are completed then Job should start processing.
>
>
> My question is : How can I make the "CONTROL" dataset
> available for JOB1/2/3 for wrting
> and available to JOB4 for reading without
> any deadlock or without failing the jobs and
> without any data inconsistency?
>
> Can you please help me? THANK YOU SO MUCH in advance.
>
Siva, I would take a slightly different approach in addressing your
stated issues with the running of these four jobs. Here is what I would
do:
1. Recode Job1, Job2, and Job3 so that each of them did the following at
the end of the job:
a. Checked to see if the CONTROL data set was available--not being
exclusively held by another job
b. If the CONTROL data set was not available, go into a sleep mode for a
bit and then see if it was available again. Keep doing this until it
could access the CONTROL data set.
c. If the CONTROL data is available, write the relevant message to it.
d. After writing the relevant message to the CONTROL data set see if all
three of the relevant messages have been written to the CONTROL data
set. If so, write a message for Job4 and submit Job4 for execution.
e. If the CONTROL data set is available and there is a message for Job4,
do not submit Job4 for execution.
Consequently, Jobs 1 - 3 would be responsible for submitting Job4 if and
only if all three jobs had written to CONTROL and none of them had
previously submitted Job4. Also, you might need an additional column
for date/time and have to include that in your checking routine.
Capiche?
So, you are thinking to yourself "how the heck can I tell whether of not
the CONTROL data set is in use?", right? Well, in my SUGI 30 Paper,
Automatically Process a Varying Number Of New Data Files From a "Data
Directory",
<<http://www2.sas.com/proceedings/sugi30/035-30.pdf>> I have the
following code snippet:
***************************;
* Allocate the Data file. *;
***************************;
filename DATAFIL "&DATAFIL";
*****************************************;
* Determine if the Data file is in use. *;
*****************************************;
data _null_;
inuse = fopen('DATAFIL');
call symput('INUSE',inuse);
if inuse = 0 then do;
put '*** Attention: the file below was in use ***';
put '*** and could not be processed ***';
put "&DATAFIL";
put _all_;
put '*** Attention: the file above was in use ***';
put '*** and could not be processed ***';
end;
run;
... code something analogous for a SAS data set. If not, and you like
it, then change CONTROL to a flat file. Oh, and, either way, you will
obviously be modifying the DATA _NULL_ step, above to suit your
nefarious needs!
Siva, best of luck getting your SAS jobs up and running in their proper
order on UNIX!
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Michael A. Raithel
"The man who wrote the book on performance"
E-mail: MichaelRaithel@westat.com
Author: Tuning SAS Applications in the MVS Environment
Author: Tuning SAS Applications in the OS/390 and z/OS Environments,
Second Edition
http://www.sas.com/apps/pubscat/bookdetails.jsp?catid=1&pc=58172
Author: The Complete Guide to SAS Indexes
http://www.sas.com/apps/pubscat/bookdetails.jsp?catid=1&pc=60409
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Common sense is the collection of prejudices acquired by age
eighteen. - Albert Einstein
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|