Skip checkpoint in rerun after fail sequence....

Post questions here relative to DataStage Enterprise/PX Edition for such areas as Parallel job design, Parallel datasets, BuildOps, Wrappers, etc.

Moderators: chulett, rschirm, roy

Post Reply
roosenr
Premium Member
Premium Member
Posts: 15
Joined: Thu Jan 16, 2003 2:33 am

Skip checkpoint in rerun after fail sequence....

Post by roosenr »

Hello,

I have the following sequence:

testjobke1 --> testjobke2 --> testjobke3 --> testjobke4

I use checkpoints in the sequence so that if the sequence fails and you don't reset it, it starts rerunning at the last job that failed....but i want it differently...if for example testjobke2 fails I want the sequence to start with the next job in the sequence that hasn't run yet (testjobke3 in this case)...

I know from this forum that you can change the jobcontrol to change checkpoint info with functions but I'm not a coder at all and i have limited time...could someone simply point me out were i should change what in my code?

Thanks in advance...

jobcontrol code*******

* Tokens were replaced below as follows:
* IdV0S0%%Result2%%0 <= testjobke1.$UserStatus
* IdV0S0%%Result1%%1 <= testjobke1.$JobStatus
* IdV0S0%%Name%%2 <= testjobke1.$JobName
* IdV0S1%%Result2%%3 <= testjobke2.$UserStatus
* IdV0S1%%Result1%%4 <= testjobke2.$JobStatus
* IdV0S1%%Name%%5 <= testjobke2.$JobName
* IdV0S2%%Result2%%6 <= testjobke3.$UserStatus
* IdV0S2%%Result1%%7 <= testjobke3.$JobStatus
* IdV0S2%%Name%%8 <= testjobke3.$JobName
* IdV0S3%%Result2%%9 <= testjobke4.$UserStatus
* IdV0S3%%Result1%%10 <= testjobke4.$JobStatus
* IdV0S3%%Name%%11 <= testjobke4.$JobName
*
*** [Generated at 2007-10-16 14:30:11 - 7.5.2.9]
$INCLUDE DSINCLUDE DSJ_XFUNCS.H
EQU Time$$ Lit "Oconv(Time(), 'MTS:'):': '"
****************************************
* Graphical Sequencer generated code for Job testsequence
****************************************

handle$list = ""
id$list = ""
abort$list = ""
b$Abandoning = @False
b$CPRestarted = @False
b$InErrorRef = @False
summary$restarting = @False
*** Create new checkpoint for sequence if not restarting
If DSCheckPointExists(DSJ.ME, cp$dtm) Then GoTo L$RESTART
Call DSLogInfo(DSMakeMsg("DSTAGE_JSG_M_0015\Starting new run of checkpointed Sequence job", ""), "@Coordinator")
If (Not(DSCheckPointValidate(DSJ.ME, cp$msg))) Then
err$source = "@Coordinator"; err$number = -1
msg$ = DSMakeMsg("DSTAGE_JSG_M_0016\Error creating checkpoint record<L>%1", cp$msg)
msg$id = "@Coordinator"; GoTo L$ERROR
End
GoTo L$MAINSTART
L$RESTART:
*** Validate restarted job matches prior state
summary$restarting = @True
Call DSLogInfo(DSMakeMsg("DSTAGE_JSG_M_0017\Sequence job is being restarted after failure<L>Checkpoint record last modified at %1", cp$dtm), "@Coordinator")
b$CPRestarted = @True
If Not(DSCheckPointValidate(DSJ.ME, cp$msg)) Then
Call DSLogWarn(cp$msg, "@Coordinator")
End
L$MAINSTART:
*** Sequence start point
summary$ = DSMakeMsg("DSTAGE_JSG_M_0048\Summary of sequence run", "")
If summary$restarting Then
summary$<1,-1> = Time$$:Convert(@VM, " ", DSMakeMsg("DSTAGE_JSG_M_0049\Sequence restarted after failure", ""))
End Else
summary$<1,-1> = Time$$:Convert(@VM, " ", DSMakeMsg("DSTAGE_JSG_M_0050\Sequence started (checkpointing on)", ""))
End
GoTo L$V0S0$START
L$RETURN$1:
GoTo L$WAITFORJOB
**************************************************
L$V0S0$START:
*** Activity "testjobke1": Initialize job
b$InErrorRef$V0S0 = b$InErrorRef
jb$V0S0 = "testjobke1"
b$V0S0skipping = @False
h$V0S0$cp = "h$V0S0"
If DSCheckPointGetValue(DSJ.ME, h$V0S0$cp, cp$value) = DSJE.NOERROR Then
Call DSLogInfo(DSMakeMsg("DSTAGE_JSG_M_0021\Skipped run of job '%1' on restart", jb$V0S0), "@testjobke1")
job$V0S0$status = Raise(cp$value<1>)
job$V0S0$userstatus = Raise(cp$value<2>)
IdV0S0%%Result2%%0 = job$V0S0$userstatus
IdV0S0%%Result1%%1 = job$V0S0$status
IdV0S0%%Name%%2 = jb$V0S0
summary$<1,-1> = Time$$:Convert(@VM, " ", DSMakeMsg("DSTAGE_JSG_M_0060\%1 (JOB %2) skipped", "testjobke1":@FM:jb$V0S0))
b$V0S0skipping = @True
Goto L$V0S0$SKIPPED
End
summary$<1,-1> = Time$$:Convert(@VM, " ", DSMakeMsg("DSTAGE_JSG_M_0057\%1 (JOB %2) started", "testjobke1":@FM:jb$V0S0))
h$V0S0 = DSAttachJob(jb$V0S0, DSJ.ERRNONE)
If (Not(h$V0S0)) Then
err$source = "testjobke1"; err$number = -1
msg$ = DSMakeMsg("DSTAGE_JSG_M_0001\Error calling DSAttachJob(%1)<L>%2", jb$V0S0:@FM:DSGetLastErrorMsg())
msg$id = "@testjobke1"; GoTo L$ERROR
End
If Not(b$CPRestarted) Then GoTo L$V0S0$PREPARED
h$V0S0 = DSPrepareJob(h$V0S0)
If (Not(h$V0S0)) Then
err$source = "testjobke1"; err$number = -1
msg$ = DSMakeMsg("DSTAGE_JSG_M_0012\Error calling DSPrepareJob(%1)<L>%2", jb$V0S0:@FM:DSGetLastErrorMsg())
msg$id = "@testjobke1"; GoTo L$ERROR
End
L$V0S0$PREPARED:
err$code = DSRunJob(h$V0S0, DSJ.RUNNORMAL)
If (err$code <> DSJE.NOERROR) Then
err$source = "testjobke1"; err$number = -1
msg$ = DSMakeMsg("DSTAGE_JSG_M_0003\Error calling DSRunJob(%1), code=%2[E]", jb$V0S0:@FM:err$code)
msg$id = "@testjobke1"; GoTo L$ERROR
End
handle$list<-1> = h$V0S0
id$list<-1> = "V0S0"
GoTo L$RETURN$1
**************************************************
L$V0S0$FINISHED:
job$V0S0$status = DSGetJobInfo(h$V0S0, DSJ.JOBSTATUS)
job$V0S0$userstatus = DSGetJobInfo(h$V0S0, DSJ.USERSTATUS)
summary$<1,-1> = Time$$:Convert(@VM, " ", DSMakeMsg("DSTAGE_JSG_M_0063\%1 (JOB %2) finished, status=%3[E]", "testjobke1":@FM:jb$V0S0:@FM:job$V0S0$status))
IdV0S0%%Result2%%0 = job$V0S0$userstatus
IdV0S0%%Result1%%1 = job$V0S0$status
IdV0S0%%Name%%2 = jb$V0S0
If (job$V0S0$status <> DSJS.RUNOK) Then
Call DSLogWarn(DSMakeMsg("DSTAGE_JSG_M_0030\Job %1 did not finish OK, status = '%2'", jb$V0S0:@FM:DSTranslateCode(job$V0S0$status)), "@testjobke1")
End
rpt$V0S0 = DSMakeJobReport(h$V0S0, 1, "CRLF")
Call DSLogInfo(DSMakeMsg("DSTAGE_JSG_M_0004\Report on job: %1<L>%2", jb$V0S0:@FM:rpt$V0S0), "@testjobke1")
dummy$ = DSDetachJob(h$V0S0)
If (job$V0S0$status <> DSJS.RUNOK And job$V0S0$status <> DSJS.RUNWARN And Not(b$Abandoning)) Then
err$source = "testjobke1"; err$number = 1
msg$ = DSMakeMsg("DSTAGE_JSG_M_0024\Unhandled abort encountered in job %1", jb$V0S0)
msg$id = "@testjobke1"; GoTo L$ERROR
End
If b$InErrorRef$V0S0 Or (job$V0S0$status <> DSJS.RUNOK And job$V0S0$status <> DSJS.RUNWARN) Then Goto L$V0S0$SKIPPED
cp$value = Lower(job$V0S0$status)
cp$value<2> = Lower(job$V0S0$userstatus)
dummy$ = DSCheckPointSetValue(DSJ.ME, h$V0S0$cp, cp$value)
Call DSLogInfo(DSMakeMsg("DSTAGE_JSG_M_0025\Checkpointed run of job '%1'", jb$V0S0), "@testjobke1")
**************************************************
L$V0S0$SKIPPED:
If b$Abandoning Then GoTo L$WAITFORJOB
GoTo L$V0S1$START
L$V0S0$RETURN$1:
If b$V0S0skipping Then GoTo L$RETURN$1
GoTo L$WAITFORJOB
**************************************************
L$V0S1$START:
*** Activity "testjobke2": Initialize job
b$InErrorRef$V0S1 = b$InErrorRef
jb$V0S1 = "testjobke2"
b$V0S1skipping = @False
h$V0S1$cp = "h$V0S1"
If DSCheckPointGetValue(DSJ.ME, h$V0S1$cp, cp$value) = DSJE.NOERROR Then
Call DSLogInfo(DSMakeMsg("DSTAGE_JSG_M_0021\Skipped run of job '%1' on restart", jb$V0S1), "@testjobke2")
job$V0S1$status = Raise(cp$value<1>)
job$V0S1$userstatus = Raise(cp$value<2>)
IdV0S1%%Result2%%3 = job$V0S1$userstatus
IdV0S1%%Result1%%4 = job$V0S1$status
IdV0S1%%Name%%5 = jb$V0S1
summary$<1,-1> = Time$$:Convert(@VM, " ", DSMakeMsg("DSTAGE_JSG_M_0060\%1 (JOB %2) skipped", "testjobke2":@FM:jb$V0S1))
b$V0S1skipping = @True
Goto L$V0S1$SKIPPED
End
summary$<1,-1> = Time$$:Convert(@VM, " ", DSMakeMsg("DSTAGE_JSG_M_0057\%1 (JOB %2) started", "testjobke2":@FM:jb$V0S1))
h$V0S1 = DSAttachJob(jb$V0S1, DSJ.ERRNONE)
If (Not(h$V0S1)) Then
err$source = "testjobke2"; err$number = -1
msg$ = DSMakeMsg("DSTAGE_JSG_M_0001\Error calling DSAttachJob(%1)<L>%2", jb$V0S1:@FM:DSGetLastErrorMsg())
msg$id = "@testjobke2"; GoTo L$ERROR
End
If Not(b$CPRestarted) Then GoTo L$V0S1$PREPARED
h$V0S1 = DSPrepareJob(h$V0S1)
If (Not(h$V0S1)) Then
err$source = "testjobke2"; err$number = -1
msg$ = DSMakeMsg("DSTAGE_JSG_M_0012\Error calling DSPrepareJob(%1)<L>%2", jb$V0S1:@FM:DSGetLastErrorMsg())
msg$id = "@testjobke2"; GoTo L$ERROR
End
L$V0S1$PREPARED:
err$code = DSRunJob(h$V0S1, DSJ.RUNNORMAL)
If (err$code <> DSJE.NOERROR) Then
err$source = "testjobke2"; err$number = -1
msg$ = DSMakeMsg("DSTAGE_JSG_M_0003\Error calling DSRunJob(%1), code=%2[E]", jb$V0S1:@FM:err$code)
msg$id = "@testjobke2"; GoTo L$ERROR
End
handle$list<-1> = h$V0S1
id$list<-1> = "V0S1"
GoTo L$V0S0$RETURN$1
**************************************************
L$V0S1$FINISHED:
job$V0S1$status = DSGetJobInfo(h$V0S1, DSJ.JOBSTATUS)
job$V0S1$userstatus = DSGetJobInfo(h$V0S1, DSJ.USERSTATUS)
summary$<1,-1> = Time$$:Convert(@VM, " ", DSMakeMsg("DSTAGE_JSG_M_0063\%1 (JOB %2) finished, status=%3[E]", "testjobke2":@FM:jb$V0S1:@FM:job$V0S1$status))
IdV0S1%%Result2%%3 = job$V0S1$userstatus
IdV0S1%%Result1%%4 = job$V0S1$status
IdV0S1%%Name%%5 = jb$V0S1
If (job$V0S1$status <> DSJS.RUNOK) Then
Call DSLogWarn(DSMakeMsg("DSTAGE_JSG_M_0030\Job %1 did not finish OK, status = '%2'", jb$V0S1:@FM:DSTranslateCode(job$V0S1$status)), "@testjobke2")
End
rpt$V0S1 = DSMakeJobReport(h$V0S1, 1, "CRLF")
Call DSLogInfo(DSMakeMsg("DSTAGE_JSG_M_0004\Report on job: %1<L>%2", jb$V0S1:@FM:rpt$V0S1), "@testjobke2")
dummy$ = DSDetachJob(h$V0S1)
If (job$V0S1$status <> DSJS.RUNOK And job$V0S1$status <> DSJS.RUNWARN And Not(b$Abandoning)) Then
err$source = "testjobke2"; err$number = 1
msg$ = DSMakeMsg("DSTAGE_JSG_M_0024\Unhandled abort encountered in job %1", jb$V0S1)
msg$id = "@testjobke2"; GoTo L$ERROR
End
If b$InErrorRef$V0S1 Or (job$V0S1$status <> DSJS.RUNOK And job$V0S1$status <> DSJS.RUNWARN) Then Goto L$V0S1$SKIPPED
cp$value = Lower(job$V0S1$status)
cp$value<2> = Lower(job$V0S1$userstatus)
dummy$ = DSCheckPointSetValue(DSJ.ME, h$V0S1$cp, cp$value)
Call DSLogInfo(DSMakeMsg("DSTAGE_JSG_M_0025\Checkpointed run of job '%1'", jb$V0S1), "@testjobke2")
**************************************************
L$V0S1$SKIPPED:
If b$Abandoning Then GoTo L$WAITFORJOB
GoTo L$V0S2$START
L$V0S1$RETURN$1:
If b$V0S1skipping Then GoTo L$V0S0$RETURN$1
GoTo L$WAITFORJOB
**************************************************
L$V0S2$START:
*** Activity "testjobke3": Initialize job
b$InErrorRef$V0S2 = b$InErrorRef
jb$V0S2 = "testjobke3"
b$V0S2skipping = @False
h$V0S2$cp = "h$V0S2"
If DSCheckPointGetValue(DSJ.ME, h$V0S2$cp, cp$value) = DSJE.NOERROR Then
Call DSLogInfo(DSMakeMsg("DSTAGE_JSG_M_0021\Skipped run of job '%1' on restart", jb$V0S2), "@testjobke3")
job$V0S2$status = Raise(cp$value<1>)
job$V0S2$userstatus = Raise(cp$value<2>)
IdV0S2%%Result2%%6 = job$V0S2$userstatus
IdV0S2%%Result1%%7 = job$V0S2$status
IdV0S2%%Name%%8 = jb$V0S2
summary$<1,-1> = Time$$:Convert(@VM, " ", DSMakeMsg("DSTAGE_JSG_M_0060\%1 (JOB %2) skipped", "testjobke3":@FM:jb$V0S2))
b$V0S2skipping = @True
Goto L$V0S2$SKIPPED
End
summary$<1,-1> = Time$$:Convert(@VM, " ", DSMakeMsg("DSTAGE_JSG_M_0057\%1 (JOB %2) started", "testjobke3":@FM:jb$V0S2))
h$V0S2 = DSAttachJob(jb$V0S2, DSJ.ERRNONE)
If (Not(h$V0S2)) Then
err$source = "testjobke3"; err$number = -1
msg$ = DSMakeMsg("DSTAGE_JSG_M_0001\Error calling DSAttachJob(%1)<L>%2", jb$V0S2:@FM:DSGetLastErrorMsg())
msg$id = "@testjobke3"; GoTo L$ERROR
End
If Not(b$CPRestarted) Then GoTo L$V0S2$PREPARED
h$V0S2 = DSPrepareJob(h$V0S2)
If (Not(h$V0S2)) Then
err$source = "testjobke3"; err$number = -1
msg$ = DSMakeMsg("DSTAGE_JSG_M_0012\Error calling DSPrepareJob(%1)<L>%2", jb$V0S2:@FM:DSGetLastErrorMsg())
msg$id = "@testjobke3"; GoTo L$ERROR
End
L$V0S2$PREPARED:
err$code = DSRunJob(h$V0S2, DSJ.RUNNORMAL)
If (err$code <> DSJE.NOERROR) Then
err$source = "testjobke3"; err$number = -1
msg$ = DSMakeMsg("DSTAGE_JSG_M_0003\Error calling DSRunJob(%1), code=%2[E]", jb$V0S2:@FM:err$code)
msg$id = "@testjobke3"; GoTo L$ERROR
End
handle$list<-1> = h$V0S2
id$list<-1> = "V0S2"
GoTo L$V0S1$RETURN$1
**************************************************
L$V0S2$FINISHED:
job$V0S2$status = DSGetJobInfo(h$V0S2, DSJ.JOBSTATUS)
job$V0S2$userstatus = DSGetJobInfo(h$V0S2, DSJ.USERSTATUS)
summary$<1,-1> = Time$$:Convert(@VM, " ", DSMakeMsg("DSTAGE_JSG_M_0063\%1 (JOB %2) finished, status=%3[E]", "testjobke3":@FM:jb$V0S2:@FM:job$V0S2$status))
IdV0S2%%Result2%%6 = job$V0S2$userstatus
IdV0S2%%Result1%%7 = job$V0S2$status
IdV0S2%%Name%%8 = jb$V0S2
If (job$V0S2$status <> DSJS.RUNOK) Then
Call DSLogWarn(DSMakeMsg("DSTAGE_JSG_M_0030\Job %1 did not finish OK, status = '%2'", jb$V0S2:@FM:DSTranslateCode(job$V0S2$status)), "@testjobke3")
End
rpt$V0S2 = DSMakeJobReport(h$V0S2, 1, "CRLF")
Call DSLogInfo(DSMakeMsg("DSTAGE_JSG_M_0004\Report on job: %1<L>%2", jb$V0S2:@FM:rpt$V0S2), "@testjobke3")
dummy$ = DSDetachJob(h$V0S2)
If (job$V0S2$status <> DSJS.RUNOK And job$V0S2$status <> DSJS.RUNWARN And Not(b$Abandoning)) Then
err$source = "testjobke3"; err$number = 1
msg$ = DSMakeMsg("DSTAGE_JSG_M_0024\Unhandled abort encountered in job %1", jb$V0S2)
msg$id = "@testjobke3"; GoTo L$ERROR
End
If b$InErrorRef$V0S2 Or (job$V0S2$status <> DSJS.RUNOK And job$V0S2$status <> DSJS.RUNWARN) Then Goto L$V0S2$SKIPPED
cp$value = Lower(job$V0S2$status)
cp$value<2> = Lower(job$V0S2$userstatus)
dummy$ = DSCheckPointSetValue(DSJ.ME, h$V0S2$cp, cp$value)
Call DSLogInfo(DSMakeMsg("DSTAGE_JSG_M_0025\Checkpointed run of job '%1'", jb$V0S2), "@testjobke3")
**************************************************
L$V0S2$SKIPPED:
If b$Abandoning Then GoTo L$WAITFORJOB
GoTo L$V0S3$START
L$V0S2$RETURN$1:
If b$V0S2skipping Then GoTo L$V0S1$RETURN$1
GoTo L$WAITFORJOB
**************************************************
L$V0S3$START:
*** Activity "testjobke4": Initialize job
b$InErrorRef$V0S3 = b$InErrorRef
jb$V0S3 = "testjobke4"
b$V0S3skipping = @False
h$V0S3$cp = "h$V0S3"
If DSCheckPointGetValue(DSJ.ME, h$V0S3$cp, cp$value) = DSJE.NOERROR Then
Call DSLogInfo(DSMakeMsg("DSTAGE_JSG_M_0021\Skipped run of job '%1' on restart", jb$V0S3), "@testjobke4")
job$V0S3$status = Raise(cp$value<1>)
job$V0S3$userstatus = Raise(cp$value<2>)
IdV0S3%%Result2%%9 = job$V0S3$userstatus
IdV0S3%%Result1%%10 = job$V0S3$status
IdV0S3%%Name%%11 = jb$V0S3
summary$<1,-1> = Time$$:Convert(@VM, " ", DSMakeMsg("DSTAGE_JSG_M_0060\%1 (JOB %2) skipped", "testjobke4":@FM:jb$V0S3))
b$V0S3skipping = @True
Goto L$V0S3$SKIPPED
End
summary$<1,-1> = Time$$:Convert(@VM, " ", DSMakeMsg("DSTAGE_JSG_M_0057\%1 (JOB %2) started", "testjobke4":@FM:jb$V0S3))
h$V0S3 = DSAttachJob(jb$V0S3, DSJ.ERRNONE)
If (Not(h$V0S3)) Then
err$source = "testjobke4"; err$number = -1
msg$ = DSMakeMsg("DSTAGE_JSG_M_0001\Error calling DSAttachJob(%1)<L>%2", jb$V0S3:@FM:DSGetLastErrorMsg())
msg$id = "@testjobke4"; GoTo L$ERROR
End
If Not(b$CPRestarted) Then GoTo L$V0S3$PREPARED
h$V0S3 = DSPrepareJob(h$V0S3)
If (Not(h$V0S3)) Then
err$source = "testjobke4"; err$number = -1
msg$ = DSMakeMsg("DSTAGE_JSG_M_0012\Error calling DSPrepareJob(%1)<L>%2", jb$V0S3:@FM:DSGetLastErrorMsg())
msg$id = "@testjobke4"; GoTo L$ERROR
End
L$V0S3$PREPARED:
err$code = DSRunJob(h$V0S3, DSJ.RUNNORMAL)
If (err$code <> DSJE.NOERROR) Then
err$source = "testjobke4"; err$number = -1
msg$ = DSMakeMsg("DSTAGE_JSG_M_0003\Error calling DSRunJob(%1), code=%2[E]", jb$V0S3:@FM:err$code)
msg$id = "@testjobke4"; GoTo L$ERROR
End
handle$list<-1> = h$V0S3
id$list<-1> = "V0S3"
GoTo L$V0S2$RETURN$1
**************************************************
L$V0S3$FINISHED:
job$V0S3$status = DSGetJobInfo(h$V0S3, DSJ.JOBSTATUS)
job$V0S3$userstatus = DSGetJobInfo(h$V0S3, DSJ.USERSTATUS)
summary$<1,-1> = Time$$:Convert(@VM, " ", DSMakeMsg("DSTAGE_JSG_M_0063\%1 (JOB %2) finished, status=%3[E]", "testjobke4":@FM:jb$V0S3:@FM:job$V0S3$status))
IdV0S3%%Result2%%9 = job$V0S3$userstatus
IdV0S3%%Result1%%10 = job$V0S3$status
IdV0S3%%Name%%11 = jb$V0S3
If (job$V0S3$status <> DSJS.RUNOK) Then
Call DSLogWarn(DSMakeMsg("DSTAGE_JSG_M_0030\Job %1 did not finish OK, status = '%2'", jb$V0S3:@FM:DSTranslateCode(job$V0S3$status)), "@testjobke4")
End
rpt$V0S3 = DSMakeJobReport(h$V0S3, 1, "CRLF")
Call DSLogInfo(DSMakeMsg("DSTAGE_JSG_M_0004\Report on job: %1<L>%2", jb$V0S3:@FM:rpt$V0S3), "@testjobke4")
dummy$ = DSDetachJob(h$V0S3)
If (job$V0S3$status <> DSJS.RUNOK And job$V0S3$status <> DSJS.RUNWARN And Not(b$Abandoning)) Then
err$source = "testjobke4"; err$number = 1
msg$ = DSMakeMsg("DSTAGE_JSG_M_0024\Unhandled abort encountered in job %1", jb$V0S3)
msg$id = "@testjobke4"; GoTo L$ERROR
End
If b$InErrorRef$V0S3 Or (job$V0S3$status <> DSJS.RUNOK And job$V0S3$status <> DSJS.RUNWARN) Then Goto L$V0S3$SKIPPED
cp$value = Lower(job$V0S3$status)
cp$value<2> = Lower(job$V0S3$userstatus)
dummy$ = DSCheckPointSetValue(DSJ.ME, h$V0S3$cp, cp$value)
Call DSLogInfo(DSMakeMsg("DSTAGE_JSG_M_0025\Checkpointed run of job '%1'", jb$V0S3), "@testjobke4")
**************************************************
L$V0S3$SKIPPED:
If b$V0S3skipping Then GoTo L$V0S2$RETURN$1
GoTo L$WAITFORJOB
**************************************************
L$WAITFORJOB:
If handle$list = "" Then GoTo L$FINISH
handle$ = DSWaitForJob(handle$list)
If handle$ = 0 Then handle$ = handle$list<1>
Locate handle$ In handle$list Setting index$ Then
id$ = id$list<index$>
Del id$list<index$>; Del handle$list<index$>
b$Abandoning = abort$list<index$>; Del abort$list<index$>
Begin Case
Case id$ = "V0S0"
GoTo L$V0S0$FINISHED
Case id$ = "V0S1"
GoTo L$V0S1$FINISHED
Case id$ = "V0S2"
GoTo L$V0S2$FINISHED
Case id$ = "V0S3"
GoTo L$V0S3$FINISHED
End Case
End
* Error if fall though
handle$list = ""
err$source = "@Coordinator"; err$number = -1
msg$ = DSMakeMsg("DSTAGE_JSG_M_0008\Error calling DSWaitForJob(), code=%1[E]", handle$)
msg$id = "@Coordinator"; GoTo L$ERROR
**************************************************
L$ERROR:
Call DSLogWarn(DSMakeMsg("DSTAGE_JSG_M_0009\Controller problem: %1", msg$), msg$id)
summary$<1,-1> = Time$$:Convert(@VM, " ", DSMakeMsg("DSTAGE_JSG_M_0052\Exception raised: %1", msg$id:", ":msg$))
If Not(b$InErrorRef) Then
dummy$ = DSCheckPointSetValue(DSJ.ME, "!", DSMakeMsg("DSTAGE_JSG_M_0031\Failed at: %1, Reason=%2", err$source:@FM:msg$))
End
abort$list = Ifs(handle$list, Str(1:@FM, DCount(handle$list, @FM)), "")
b$Abandoning = @True
GoTo L$WAITFORJOB
L$ABORT:
summary$<1,-1> = Time$$:Convert(@VM, " ", DSMakeMsg("DSTAGE_JSG_M_0055\Sequence failed (restartable)", ""))
Call DSLogInfo(summary$, "@Coordinator")
Call DSLogFatal(DSMakeMsg("DSTAGE_JSG_M_0014\Sequence job (restartable) will abort due to previous unrecoverable errors", ""), "@Coordinator")
**************************************************
L$FINISH:
If b$Abandoning Then GoTo L$ABORT
*** At successful exit remove checkpoint record
If Not(b$InErrorRef) And DSCheckPointExists(DSJ.ME, cp$dtm) Then
dummy$ = DSCheckPointDelete(DSJ.ME)
Call DSLogInfo(DSMakeMsg("DSTAGE_JSG_M_0018\Removed checkpoint record at successful completion of sequence", ""), "@Coordinator")
End
summary$<1,-1> = Time$$:Convert(@VM, " ", DSMakeMsg("DSTAGE_JSG_M_0054\Sequence finished OK", ""))
Call DSLogInfo(summary$, "@Coordinator")
L$EXIT: Return To L$EXIT
Maveric
Participant
Posts: 388
Joined: Tue Mar 13, 2007 1:28 am

Post by Maveric »

In the first run you would like to run the 3 and 4 job even if job 2 fails. Is that what you want? You can handle this in the link constraints that trigger the jobs. Make the constraint unconditional so that it will trigger the next job irrespective of success or failure. And on the second run it will just run job 2.
roosenr
Premium Member
Premium Member
Posts: 15
Joined: Thu Jan 16, 2003 2:33 am

Post by roosenr »

Maveric wrote:In the first run you would like to run the 3 and 4 job even if job 2 fails. Is that what you want? You can handle this in the link constraints that trigger the jobs. Make the constraint unconditional so that it will trigger the next job irrespective of success or failure. And on the second run it will just run job 2.
no, that I know, it is with the rerun....suppose the whole sequence fails...how to restart not at the point where it failed but the one after that point.... i know what u are suggesting is logically the same but that is not what the business wants...they want to manually control it, not that the jobs after automtically run the first time after the failed one...
ray.wurlod
Participant
Posts: 54607
Joined: Wed Oct 23, 2002 10:52 pm
Location: Sydney, Australia
Contact:

Post by ray.wurlod »

If you want it differently you will need to program it accordingly. Possibly a Nested Condition activity preceding each job activity.
IBM Software Services Group
Any contribution to this forum is my own opinion and does not necessarily reflect any position that IBM may hold.
gateleys
Premium Member
Premium Member
Posts: 992
Joined: Mon Aug 08, 2005 5:08 pm
Location: USA

Post by gateleys »

ray.wurlod wrote:If you want it differently you will need to program it accordingly. Possibly a Nested Condition activity preceding each job activity.
And a job parameter indicating the Starting point, with values, say '1' for the first job, '2' for the second and so on. This way, during run time, you can control where to start your job sequence from.
gateleys
Post Reply