Server side Force Compile all
Posted: Sun Jul 13, 2008 6:02 pm
Hi all,
We are using Kenneth Bland's compile all job control as part of our deployment process. Works great if we deploy to a fresh project, but jobs will fail with errors related to Transformer .o files when deploying to an existing project.
When these errors occur, a force compile from the client fixes the problem. From what I understand, this would be caused by the C/C++ compiler not recognizing that the transformer has been updated and needs to be re-compiled.
Is there any way to modify the compile all script to force compile px jobs? I can follow the routine but I don't have a deep enough understanding of Universe/PXEngine to know what all of these DSR routines are dooing. My current guess is that there must be an extra parameter for DSR.SUB.JOB.COMPILE which flags a force compile.
The complete routine is below, any help would be greatly appreciated!
Cheers,
Barry
We are using Kenneth Bland's compile all job control as part of our deployment process. Works great if we deploy to a fresh project, but jobs will fail with errors related to Transformer .o files when deploying to an existing project.
When these errors occur, a force compile from the client fixes the problem. From what I understand, this would be caused by the C/C++ compiler not recognizing that the transformer has been updated and needs to be re-compiled.
Is there any way to modify the compile all script to force compile px jobs? I can follow the routine but I don't have a deep enough understanding of Universe/PXEngine to know what all of these DSR routines are dooing. My current guess is that there must be an extra parameter for DSR.SUB.JOB.COMPILE which flags a force compile.
The complete routine is below, any help would be greatly appreciated!
Cheers,
Barry
Code: Select all
$INCLUDE DSINCLUDE DSR_UVCONST.H
$INCLUDE DSINCLUDE DSR_COMCONST.H
Equate LOG.OK.NAME To "OK"
Equate LOG.WARN.NAME To "!!!"
MyJobNo = DSJobName
SUBR = DSR.SUB.JOB
Key = DSR.SUB.JOB.GETNO
Call @SUBR(Key, MyJobNo)
Dummy1 = "" ; Dummy2 = ""
DEFFUN CallSystemCmd(aCmd, pSystemType) Calling "DSU.CallSystemCmd"
*_______________________________________Define Functions___________________________________________*
* *
*______________________________________Initialize Variables________________________________________*
* *
BatchName = DSGetJobInfo(DSJ.ME, DSJ.JOBNAME)
JobFileName = "DS_JOBS"
JobsLike = TRIM(JobsLike)
*___________________________________________Open Files_____________________________________________*
* *
Open JobFileName To JobFile Else
Call DSLogFatal("Error opening file - ":JobFileName, BatchName)
End
*______________________________________________Main________________________________________________*
* *
If NOT(JobsLike) Then
Call DSLogWarn("No Jobs specified", BatchName)
Goto Fini
End
JobListCnt = DCOUNT(JobsLike,",")
If JobListCnt > 1 Then
JobList = JobsLike
Convert "," To @AM IN JobList
FormList JobList
End Else
Begin Case
Case JobsLike = "ALL"
TCLcmd = "SSELECT DS_JOBS"
Case 1
TCLcmd = 'SSELECT DS_JOBS LIKE "...':JobsLike:'..."'
End Case
If Folder # "" Then TCLcmd := ' WITH F3 LIKE "':Folder:'..."'
Call DSLogInfo("TCLcmd: ":TCLcmd, BatchName)
Call DSExecute("TCL", TCLcmd, ScreenOutput, SystemReturnCode)
If TRIM(ScreenOutput) # "" Then Call DSLogInfo("Screen Output: ":ScreenOutput, BatchName)
End
JobList = ""
JobsSkipped = ""
JobCnt = 0
AllJobsDone = @FALSE
Loop
Readnext JobName Else AllJobsDone = @TRUE
Until AllJobsDone Do
If JobName[1,1] # "\" And JobName[1,22] # BatchName Then
ProcessJob = @TRUE
If UncompiledOnly = "Y" Then
Readv JobNo From JobFile, JobName, 5 Then
cmd = "ls -l RT_BP":JobNo:".O | wc -l"
Result = CallSystemCmd(cmd, SystemType)
Result = OCONV(Result, "MCN")
If Result > 1 Then ProcessJob = @FALSE
Call DSLogInfo("JobName: ":JobName:" JobNo: ":JobNo:" Result: ":Result:" ProcessJob: ":ProcessJob, BatchName)
End Else
Call DSLogFatal("Error reading ID - ":JobName:" from file - ":JobFileName, BatchName)
End
End
If ProcessJob = @TRUE Then
JobList<-1> = JobName
JobCnt += 1
End Else
JobsSkipped<-1> = JobName
End
End
Repeat
If JobsSkipped Then Call DSLogInfo("Jobs skipped: ":@AM:JobsSkipped, BatchName)
If JobList Then
JobsCompiled = ""
JobsNotCompiled = ""
Call DSLogInfo("Jobs that will be compiled: ":@AM:JobList, BatchName)
For J = 1 TO JobCnt
JobName = JobList<J>
Gosub CompileJob ; * compile job
Next J
Call DSLogInfo("Jobs compiled: ":@AM:JobsCompiled, BatchName)
If JobsNotCompiled Then Call DSLogWarn("Jobs NOT compiled: ":@AM:JobsNotCompiled, BatchName)
End Else
Call DSLogWarn("There were no jobs compiled", BatchName)
End
Goto Fini ; *** End of Program
*------------------------------------------------
*--- Subroutines
*------------------------------------------------
CompileJob:
Key = DSR.SUB.JOB.RESERVE
Arg2 = JobName
Call @SUBR(Key, Arg2)
Call DSD.Init(MyJobNo, Dummy2)
If Key <> "" Then
Call DSLogWarn(JobName:" - ERROR: Cannot attach to job!", BatchName)
JobsNotCompiled<-1> = JobName:" ":"Cannot attach to job"
NumFailed += 1
End Else
Key = DSR.SUB.JOB.COMPILE
Arg2 = JobName
Call @SUBR(Key, Arg2)
Call DSD.Init(MyJobNo, Dummy2)
If Key <> "" Or Arg2<1> <> "" Then
Call DSLogWarn(JobName:" - ERROR: Cannot compile job!", BatchName)
JobsNotCompiled<-1> = JobName:" ":"Cannot compile job"
NumFailed += 1
End Else
Call DSLogInfo(JobName:" - Compiled OK", BatchName)
JobsCompiled<-1> = JobName
Ignore = 0
JobNo = DSRGetJob(JobName,Ignore)
Execute "CLEAR.FILE ":DSR.RTSTATUS.FNAME:JobNo
Execute "CLEAR.FILE ":DSR.RTLOG.FNAME:JobNo
End
Key = DSR.SUB.JOB.RELEASE ; * unlock job, ignoring any errors
Arg2 = JobName
Call @SUBR(Key, Arg2)
Call DSD.Init(MyJobNo, Dummy2)
End
Return
Fini: ; *** finish ***