Use Case Scenario: Fixing Out-of-Sync Conditions
This use case scenario:
-
Shows you how to request an audit.
-
Explains how to locate the out-of-sync conditions that are flagged in the audit report.
-
Explains why the out-of-sync conditions occurred.
-
Illustrates a step-by-step process for resolving the out-of-sync conditions.
-
Explains why the sequence of steps you take to resolve out-of-sync conditions is important.
-
Gives useful tips.
The Sample Application
This scenario uses a complex package (ACTP000029) that has two participating packages:
-
ACTP000028, which contains components from the sample ACTP application.
-
GENL000006, which contains components from the sample GENL application.
In this example you have staged the following components in package GENL000006:
-
A copybook named GNLCPY00, which you have modified.
-
A subprogram named GNLSRS00, which you have modified and which also references the copybook GNLCPY00.
Requesting an Audit
Take the following actions:
-
Bring up the Audit Change Package (CMNAUDIT) panel (=1.7). On the Audit Change Package (CMNAUDIT) panel, you:
- Specify the complex package ACTP000029 as the Package.
- Only accept the one option, Include cross appl headings.
CMNAUDIT Audit Change Package Command ===> ___________________________________________________ Package . . . . . . . . ACTP000029 Audit part. pkg . . . . _ (1-As simple,2-As primary,3-By Department) Autoresolve parms . . ._______________________________________________ Enter "/" to select option _Audit staging libraries only _ Include history records _Format report for printing _ Specify application scope _Suppress batch messages / Include cross appl headings Print top line only _ Lock package Reset lock _Auto resolve _ Update only this pkg rc Job statement information: //USER015L JOB (SM-1IKF-SM),'CMN6 AUDIT ', // CLASS=A, // MSGCLASS=X, // NOTIFY=USER015
-
Press Enter to submit the audit job.
The system issues MVSSEND messages and also logs the messages in the AUDITRPT DD, which indicate that there are audit errors:
CMN2669I - COMPLEX PACKAGE ACTP000029 FAILED THE AUDIT WITH A RETURN CODE OF 12. CMN2666I - PARTICIPATING PACKAGE ACTP000028 PASSED THE AUDIT WITH A RETURN CODE OF 00.
CMN3060A - This package has failed the audit.
CMN2667I - PARTICIPATING PACKAGE GENL000006 FAILED THE AUDIT WITH A RETURN CODE OF 12.
Examining the Audit Report
Here’s an excerpt from the Legend and Summary Report section of the audit report.
ChangeMan(R) ZMF (8.1.0 - 20141010) Audit TUESDAY JANUARY 6, 2015 (2015/006) 18:18:13 Page 13
Legend and Summary Report
The local level of audit chosen at this point; 4
4 - Audit is required and the return code must not exceed 4 which implies
that there are no "out-of-synch" situations within the staging libraries
nor the baseline libraries but at least one module of a staging library
is a "duplicate" of its baseline counterpart
Out-of-synch messages (hint - search for "!" marks)
DUPLIC! (Staging duplicates baseline) ===> 0
SYNCH0! (Not in scope of audit or unknown) ===> 22
SYNCH1! (Cmpnt statistics not available) ==> 0
SYNCH2! (Compile/designated proc differ) ===> 0
SYNCH3! (Unparsable load module) ===> 0
SYNCH4! (cpy/hdr staging problem) ===> 1
SYNCH5! (cpy/hdr baseline problem) ===> 6
SYNCH6! (Activity file not checked out) ===> 0
SYNCH7! (Static subcomponent stage problem) ==> 0
SYNCH8! (Static subcomponent base problem) ===> 2
SYNCH9! (Source and load discrepancy) ===> 0
SYNCH10! (Version regression problem) ===> 0
SYNCH11! (Component hash discrepancy) ===> 0
SYNCH12! (Orphan module in staging) ===> 0
SYNCH13! (Baseline/staging discrepancy) ===> 0
SYNCH14! (Components not in active status) ===> 0
SYNCH15! (Source to relationship problem) ===> 0
SYNCH16! (CPY low-date problem in baseline) ===> 0
SYNCH17! (CPY deleted problem in staging) ===> 0
SYNCH18! (LOD deleted problem in staging) ===> 0
SYNCH19! (Missing module in staging) ===> 0
SYNCH20! (Inconsistent subroutine) ===> 0
SYNCH21! (Scr/rename pkg component) ===> 0
SYNCH22! (Scratch subcmpnt is in use) ===> 0
SYNCH23! (Rename subcmpnt is in use) ===> 0
SYNCH24! (LOD low-date problem in baseline) ===> 0
SYNCH25! (LCT high-date problem in package) ===> 0
SYNCH26! (LCT -> missing executable) ===> 0
SYNCH27! (Missing LCT for executable) ===> 0
SYNCH28! (Same component in multiple pkgs) ===> 0
Highest return code encountered ===> 12
It shows the following conditions:
-
Twenty two SYNCH0! conditions.
A SYNCH0! condition identifies a component that cannot be found in the scope of the audit (that is, in the baseline or staging libraries that are examined). These components are typically runtime language environment modules to which the compiler automatically generates references and which the binder includes in the load modules that are generated for the application. SYNCH0! conditions generate a return code of 0. You can typically ignore them; they do not prevent a package from passing the audit.
Resolving the SYNCH0! Conditions in the Example provides more details about these SYNCH0! conditions.
-
One SYNCH4! condition.
Here we have a component GNLSRS00 in the package that has used the copybook GNLCPY00 (also in the package), but the copybook GNLCPY00 has been changed since. Recompile the GNLSRS00 component.
-
Six SYNCH5! conditions.
When you stage a copybook into a package, the source components that reference the copybook but that are not also staged into the package receive a SYNCH5! condition. This makes sense, because those non-staged source components now reference an obsolete version of the copybook. You typically have to recompile those source components from their baseline libraries to remove the SYNCH5! flags.
-
Two SYNCH8! conditions.
When you stage the source code for a statically linked subprogram into a package and change it, the composite load modules that call this subprogram but that are not also staged into the package receive a SYNCH8! condition. This also makes sense, because those non-staged composite load modules now call an obsolete version of the subprogram. You typically have to relink these composite load modules from their baseline libraries to remove the SYNCH8! flags.
We examine the SYNCH8! conditions that are generated in this sample audit, and show you how to resolve them in Resolving the SYNCH8! Conditions in the Example
Sequencing Considerations
You should plan a sync-resolution strategy before you start to resolve the out-of-sync conditions. The sequence in which you correct the conditions is important. In general, you should recompile and relink subprograms that reference obsolete versions of a copybook before you relink the composite modules that call those subprograms.
This makes sense if you think about it. If you relink a composite module first, and then recompile the subprograms that it calls, you will have to relink the composite module all over again because the subprograms will have a more recent link date than their caller.
Resolving the SYNCH0! Conditions in the Example
We have twenty two SYNCH0! conditions flagged in the sample audit report. If you search the sample report for the text SYNCH0!, you reach the following report section:
ChangeMan(R) ZMF (8.1.0 - 20141010) Audit TUESDAY JANUARY 6, 2015 (2015/006) 18:18:13 Page 11
***************************************************************************************
*Complex/Super Package ===> ACTP000029 Created 2015/01/06 at 17:56:43 by USER015 *
*Participating Packages ===> 2 Package Status: OPN *
*Component Analysis Type ===> Static subroutines called within Load members *
******************************************************************************************************
*--------- B a s e l i n e ---------* *------------------ S t a g i n g ------------------*
************************************* *****************************************************
Called Module Calling Called Module
Module Size Linkdate Setssi Module Module Package Dept Size Linkdate Setssi
________ ________ __________ ________ ________ ________ __________ ____ ________ __________ ________
00001080 2015/01/05 677A9E06 ACPSRC91 ACTP000028 IDD 00001080 2015/01/06 677C168B
CEEARLU -- Not found or unknown SYNCH0!
CEEBETBL -- Not found or unknown SYNCH0!
CEEBINT -- Not found or unknown SYNCH0!
CEEBLLST -- Not found or unknown SYNCH0!
CEEBPIRA -- Not found or unknown SYNCH0!
CEEBPUBT -- Not found or unknown SYNCH0!
CEEBTRM -- Not found or unknown SYNCH0!
CEECPYRT -- Not found or unknown SYNCH0!
CEESG005 -- Not found or unknown SYNCH0!
CEESTART -- Not found or unknown SYNCH0!
IGZCBSO -- Not found or unknown SYNCH0!
00001080 2015/01/05 677A9E3C ACPSRC99 ACTP000028 IDD 00001080 2015/01/06 677C1D97
CEEARLU -- Not found or unknown SYNCH0!
CEEBETBL -- Not found or unknown SYNCH0!
CEEBINT -- Not found or unknown SYNCH0!
CEEBLLST -- Not found or unknown SYNCH0!
CEEBPIRA -- Not found or unknown SYNCH0!
CEEBPUBT -- Not found or unknown SYNCH0!
CEEBTRM -- Not found or unknown SYNCH0!
CEECPYRT -- Not found or unknown SYNCH0!
CEESG005 -- Not found or unknown SYNCH0!
CEESTART -- Not found or unknown SYNCH0!
IGZCBSO -- Not found or unknown SYNCH0!
In this section of the report:
-
The section heading indicates that this section of the report analyzes statically linked subprograms that are called by main program modules in the LOD library type of the ACTP application.
-
The twenty two subroutines that are flagged with the SYNCH0! condition are all called by main programs ACPSRC91 and ACPSRC99 (which you staged into package ACTP000028).
-
You did not stage these twenty two subroutines into the package (the Staging side of the report has no entries for these routines).
-
ChangeMan ZMF cannot locate these subroutines in the baseline LOD library of the ACTP application (that’s what SYNCH0! means).
-
Upon closer inspection of the subroutine names, you realize that the routines are all IBM language environment runtime modules. The compiler automatically generates a reference to them at the time you compile the caller (ACPSRC91 and ACPSRC99).
-
The return code of a SYNCH0! condition is zero, which means that you can ignore the condition: it does not prevent your package from passing the audit.
Note
You can suppress the appearance of SYNCH0! conditions in an audit report with user exit program CMNEX022. Refer to the ChangeMan ZMF Customization Guide for details.
Resolving the SYNCH5! Conditions in the Example
There are six SYNCH5! conditions in the sample audit report:
-
Five SYNCH5! conditions are flagged for statically linked subroutines. These SYNCH5! conditions are described and resolved in Resolving a SYNCH5! Condition for a Statically Linked Subroutine.
-
The sixth SYNCH5! condition is flagged for the main program module. This SYNCH5! condition is discussed in Resolving the SYNCH5! Condition for a Main Program.
Resolving a SYNCH5! Condition for a Statically Linked Subroutine
A search on the text SYNCH5! brings up the section of the audit report that describes Copybooks Found within Source Code for the SRS library type of the GENL application.
This section lists the baselined copybooks that each subroutine that is listed in the Source Name column references (see the Baseline side of the report section).
ChangeMan(R) ZMF (8.1.0 - 20141010) Audit TUESDAY JANUARY 6, 2015 (2015/006) 18:18:13 Page 9
***************************************************************************************
*Complex/Super Package ===> ACTP000029 Created 2015/01/06 at 17:56:43 by USER015 *
*Participating Packages ===> 2 Package Status: OPN *
*Component Analysis Type ===> Copybooks found within Source code *
************************************************************************************************************************************
*--------------------- B a s e l i n e ---------------------* *---------------------- S t a g i n g ----------------------*
************************************************************* *************************************************************
Copybook Source Copybook
Name VV.MM Created Changed Size Init Tso-id Name Name VV.MM Package Changed Size Dept Tso-id
________ _____ __________ ________________ ____ ____ ________ ________ ________ _____ __________ ________________ ____ ____ ________
01.02 2014/12/19 2015/01/04 19:34 23 21 USER015 GNLSRS00 02.01 GENL000006 2015/01/06 17:21 24 IDD USER015
GNLCPY00 03.01 2002/05/07 2015/01/01 21:43 5 1 USER015 SYNCH4! GNLCPY00 04.01 GENL000006 2015/01/06 18:03 6 IDD USER015
01.01 2015/01/01 2015/01/04 19:48 29 29 USER015 GNLSRS1B
GNLCPY00 03.01 2002/05/07 2015/01/01 21:43 5 1 USER015 SYNCH5! GNLCPY00 04.01 GENL000006 2015/01/06 18:03 6 IDD USER015
GNLCPY1B 01.01 2014/12/23 2014/12/23 17:41 4 4 USER015
GNLCPY1C 01.01 2014/12/23 2014/12/23 17:38 4 4 USER015
01.02 2014/12/23 2014/12/23 18:09 26 26 USER015 GNLSRS1C
GNLCPY00 03.01 2002/05/07 2015/01/01 21:43 5 1 USER015 SYNCH5! GNLCPY00 04.01 GENL000006 2015/01/06 18:03 6 IDD USER015
GNLCPY1C 01.01 2014/12/23 2014/12/23 17:38 4 4 USER015
01.04 2002/05/07 2014/12/23 18:09 29 23 USER015 GNLSRS5A
GNLCPY00 03.01 2002/05/07 2015/01/01 21:43 5 1 USER015 SYNCH5! GNLCPY00 04.01 GENL000006 2015/01/06 18:03 6 IDD USER015
GNLCPY1X 01.02 2002/05/07 2014/12/23 17:56 4 1 USER015
GNLCPY5A 01.02 2002/05/07 2014/12/23 17:56 5 1 USER015
GNLCPY5B 01.02 2002/05/07 2014/12/23 17:57 4 1 USER015
01.02 2002/05/07 2014/12/23 18:05 27 15 USER015 GNLSRS5B
GNLCPY00 03.01 2002/05/07 2015/01/01 21:43 5 1 USER015 SYNCH5! GNLCPY00 04.01 GENL000006 2015/01/06 18:03 6 IDD USER015
GNLCPY5B 01.02 2002/05/07 2014/12/23 17:57 4 1 USER015
GNLCPY5C 01.02 2002/05/07 2014/12/23 18:00 4 1 USER015
01.02 2002/05/07 2014/12/23 18:06 25 15 USER015 GNLSRS5C
GNLCPY00 03.01 2002/05/07 2015/01/01 21:43 5 1 USER015 SYNCH5! GNLCPY00 04.01 GENL000006 2015/01/06 18:03 6 IDD USER015
GNLCPY5C 01.02 2002/05/07 2014/12/23 18:00 4 1 USER015
The GNLCPY00 copybook is flagged with a SYNCH5! condition for the following statically linked subroutines:
-
GNLSRS1B
-
GNLSRS1C
-
GNLSRS5A
-
GNLSRS5B
-
GNLSRS5C
The line item for each of these subroutines on the Staging side of the report is blank, which means that you did not stage the subroutine into a package. However, because you changed copybook GNLCPY00 and staged it into the package, these five baselined subroutines now reference an obsolete copy of the GNLCPY00 copybook.
To resolve the SYNCH5! conditions, you need to recompile and relink each subroutine from baseline (option =1.8, Recompile Source Code from Baseline or Production). This action will place a new load module of each subroutine into your package. This action does not stage the corresponding source module into the package. You don’t need the source modules in the package because you are not changing them. That is, you only need a new load module to ensure that the modules reference the latest version of the copybook when you baseline the package.
Compare the entries for these subroutines with the entry for the GNLSRS00 subroutine (the first entry on the report), which shows staging information because you checked that subroutine out to the package and changed, recompiled, and relinked it. Therefore, it
references the latest version of the GNLCPY00 copybook and the reference is not flagged with a SYNCH5! condition.
To resolve these SYNCH5! conditions:
-
Select the Recompile option (=1.8) from the Build Options menu. The Recompile Source panel (CMNRCMPR) panel appears.
CMNRCMPR Recompile Source Option ===> blank Member selection list L List libraries containing component Package . . . . . . . . . GENL000006 Component name . . . . . + Source library type . . . SRS (Blank for list) Library level . . . . . . 0 (Baseline 0, Promotion 1 to nn) Recompile mode . . . . . 1 (1-Online, 2-Batch) Enter "/" to select option Search release areas Specify release areas
-
Fill in the panel as follows:
a. You get the Package Id (GENL000006, in this example) from the Copybooks Found within Source Code section of the audit report.
b. The Source Library Type (SRS, in this example) is also identified in the Copybooks Found with Source Code section of the audit report.
c. The Library Level is 0 (you want to recompile the baseline image of the subroutines in this example).
d. You can take the action in online or batch mode. (We choose online in this example.)
-
If you have multiple subroutines to recompile, you can leave the Component Name blank to display the Recompile Member List (CMNRCMP2) panel, from which you can select the subroutines that you want to recompile. In this example, the five subroutines that were associated with the SYNCH5! condition are selected (with the S line command in the line command field for each line item):
CMNRCMP2 Recompile Member List Row 1 to 7 of 7 Command ===>__________________________ Scroll ===> CSR ID Input library: CMNTP.S6.V810.BASE.GENL.SRS Name Function vv.mm Created Changed Size Init User __ GNLSRS00 01.02 2014/12/19 2015/01/04 19:34 23 21 USER015 __ GNLSRS01 01.03 2008/09/08 2014/12/23 18:08 23 22 USER015 s GNLSRS1B 01.01 2015/01/01 2015/01/04 19:48 29 29 USER015 s GNLSRS1C 01.02 2014/12/23 2014/12/23 18:09 26 26 USER015 s GNLSRS5A 01.04 2002/05/07 2014/12/23 18:09 29 23 USER015 s GNLSRS5B 01.02 2002/05/07 2014/12/23 18:05 27 15 USER015 s GNLSRS5C 01.02 2002/05/07 2014/12/23 18:06 25 15 USER015 ******************************* Bottom of data ********************************
-
Press Enter to submit the recompile requests. The Confirm Recompile Request (CMNRCMPC) panel is displayed for each subroutine that you have selected. Press Enter to confirm each request and continue.
CMNRCMPC Confirm RECOMPILE Request Command ===>______________________________________________ Package: GENL000006 Component name: GNLSRS1B + type: SRS Language: COBOL2 Changed date: 20150104 time: 19:48 Procedure: CMNCOB2 User: USER015 Site: BASELINE Level:
-
The Online Recompile Job Information (CMNRCMP1) panel appears. The fields on this panel will be filled in with the values used the last time you recompiled and relinked the target subroutine. You should not need to change these values.
CMNRCMP1 ONLINE Recompile Job Information HISTORY ASSUMED Command ===>_________________________________________ Package: GENL000006 Status: DEV Install date: 20150228 Component: GNLSRS1B + Library type: SRS - Source for subprograms to be Linked NCAL Dataset name: CMNTP.S6.V810.BASE.GENL.SRS + Language . . . . . . . COBOL2 (Blank for list) Compile procedure . . CMNCOB2 (Blank for list; ? for designated procedure) Compile parms . . . . _________________________________________ Pgm binder parms . . . NCAL Enter "/" to select option __ Db2 precompile __ Precompile variables __ Display Other options __ Suppress batch messages Job statement information: //USER0151 JOB (SM-1IKF-SM),'GENL06', // CLASS=A, // MSGCLASS=X, // NOTIFY=USER015
-
Press Enter to submit the job.
-
You will repeat the steps described here for each subroutine that you have selected to recompile and relink on the Recompile Member List panel shown in Step 3.
You can often introduce more out-of-sync conditions in your packages by submitting jobs to resolve the existing ones in the incorrect sequence. To avoid this problem, wait until you have received notification that the like-load library members for each of the subroutines are active in your package before you continue resolving the out-of-sync conditions that are flagged in the audit.
Tip
If you are unsure of the status of the components in a package, you can display all of the component statuses by selecting option 5 (List) from the Primary Options menu then select the package with an S2, and observe the Status column.
Resolving the SYNCH5! Condition for a Main Program
The reference to copybook GNLCPY00 in module GNLSRC1A is flagged with the remaining SYNCH5! condition. In our sample application, GNLSRC1A is a main program. In the audit report, this SYNCH5! appears in the Copybooks Found within Source Code section for the SRC library type of the GENL application.
...
ChangeMan(R) ZMF (8.1.0 - 20141010) Audit TUESDAY JANUARY 6, 2015 (2015/006) 18:18:13 Page 10
**************************************************************************************
*Complex/Super Package ===> ACTP000029 Created 2015/01/06 at 17:56:43 by USER015 *
*Participating Packages ===> 2 Package Status: OPN *
*Component Analysis Type ===> Copybooks found within Source code *
************************************************************************************************************************************
*--------------------- B a s e l i n e ---------------------* *---------------------- S t a g i n g ----------------------*
************************************************************* *************************************************************
Copybook Source Copybook
Name VV.MM Created Changed Size Init Tso-id Name Name VV.MM Package Changed Size Dept Tso-id
________ _____ __________ ________________ ____ ____ ________ ________ ________ _____ __________ ________________ ____ ____ ________
01.01 2002/05/07 2015/01/05 01:22 28 23 USER015 GNLSRC1A
GNLCPY00 03.01 2002/05/07 2015/01/01 21:43 5 1 USER015 SYNCH5! GNLCPY00 04.01 GENL000006 2015/01/06 18:03 6 IDD USER015
GNLCPY1A 01.02 2002/05/07 2014/12/23 17:55 5 1 USER015
GNLCPY1B 01.01 2014/12/23 2014/12/23 17:41 4 4 USER015
GNLCPY1X 01.02 2002/05/07 2014/12/23 17:56 4 1 USER015
The line item for main program GNLSRC1A on the Staging side of the report is blank, which indicates that you did not stage the main program into a package. Because you did change copybook GNLCPY00 and stage it into the package, this main program now references an obsolete copy of the GNLCPY00 copybook and is therefore flagged with a SYNCH5! condition.
To resolve this condition, you need to recompile and relink the main program from baseline (option =1.8, Recompile). This action will place a new load image of the main program into your package. However, the corresponding source program is not staged into the package. You do not need the source program in your package because you are not changing it. You only need a new load image to ensure that the module references the latest version of the copybook when you baseline the package.
You followed the same procedure described in Resolving a SYNCH5! Condition for a Statically Linked Subroutine, so we will not repeat the procedure here.
Running Another Audit
All the SYNCH5! conditions that were flagged in the preceding audit report should now be resolved. You can rerun the audit at any time to check your progress. Here’s the Legend and Summary Report section from a new audit report:
ChangeMan(R) ZMF (8.1.0 - 20141010) Audit TUESDAY JANUARY 6, 2015 (2015/006) 19:49:46 Page 14
Legend and Summary Report
The local level of audit chosen at this point; 4
4 - Audit is required and the return code must not exceed 4 which implies
that there are no "out-of-synch" situations within the staging libraries
nor the baseline libraries but at least one module of a staging library
is a "duplicate" of its baseline counterpart
Out-of-synch messages (hint - search for "!" marks)
DUPLIC! (Staging duplicates baseline) ===> 0
SYNCH0! (Not in scope of audit or unknown) ===> 33
SYNCH1! (Cmpnt statistics not available) ===> 0
SYNCH2! (Compile/designated proc differ) ===> 0
SYNCH3! (Unparsable load module) ===> 0
SYNCH4! (cpy/hdr staging problem) ===> 0
SYNCH5! (cpy/hdr baseline problem) ===> 0
SYNCH6! (Activity file not checked out) ===> 0
SYNCH7! (Static subcomponent stage problem) ==> 1
SYNCH8! (Static subcomponent base problem) ===> 4
SYNCH9! (Source and load discrepancy) ===> 0
SYNCH10! (Version regression problem) ===> 0
SYNCH11! (Component hash discrepancy) ===> 0
SYNCH12! (Orphan module in staging) ===> 0
SYNCH13! (Baseline/staging discrepancy) ===> 0
SYNCH14! (Components not in active status) ===> 0
SYNCH15! (Source to relationship problem) ===> 0
SYNCH16! (CPY low-date problem in baseline) ===> 0
SYNCH17! (CPY deleted problem in staging) ===> 0
SYNCH18! (LOD deleted problem in staging) ===> 0
SYNCH19! (Missing module in staging) ===> 0
SYNCH20! (Inconsistent subroutine) ===> 0
SYNCH21! (Scr/rename pkg component) ===> 0
SYNCH22! (Scratch subcmpnt is in use) ===> 0
SYNCH23! (Rename subcmpnt is in use) ===> 0
SYNCH24! (LOD low-date problem in baseline) ===> 0
SYNCH25! (LCT high-date problem in package) ===> 0
SYNCH26! (LCT -> missing executable) ===> 0
SYNCH27! (Missing LCT for executable) ===> 0
SYNCH28! (Same component in multiple pkgs) ===> 0
Highest return code encountered ===>12
Note that:
-
All the SYNCH5! conditions have been fixed (which you expect).
-
There are eleven new SYNCH0! conditions. Thirty-three SYNCH0! conditions are now flagged instead of the original twenty-two. This is to be expected. Here’s why: During the recompile of main program GNLSRC1A, the compiler automatically generated references to more IBM Language Environment routines that ChangeMan ZMF knows nothing about.
-
You can ignore the SYNCH0! messages. They result in a zero return code and do not prevent the package from passing the audit.
Note
Your ChangeMan ZMF administrator can suppress the appearance of SYNCH0!conditions in an audit report with a user exit modification. Refer to the ChangeMan ZMF Customization Guide for details.
-
One SYNCH7! condition. This was a result of doing the recompile for one of the subroutines without later recompiling the GNLSRC1A component which statically links it. A quick recompile resolved that.
-
Four SYNCH8! conditions are flagged instead of the original two. Here’s why: Recompiling main program GNLSRC1A in a preceding step to resolve a SYNCH5! condition also resolved one of the original SYNCH8! conditions. The process of
recompiling the GNLSRC5A, GNLSRC5B, and GNLSRC5C subroutines, however, introduced three new SYNCH8! conditions.
Tip
The act of resolving one type of out-of-sync condition frequently introduces other out-of-sync conditions. You can expect this to happen. If you have carefully planned the sequence of actions to resolve the out-of-sync conditions, you will eventually get a clean audit. See Sequencing Considerations for guidance.
Resolving the SYNCH7! condition in the example
This excerpt shows the SYNCH7! condition in the audit:
ChangeMan(R) ZMF (8.1.0 - 20141010) Audit TUESDAY JANUARY 6, 2015 (2015/006) 19:49:46 Page 13
***************************************************************************************
*Participating Package ===> GENL000006 Created 2015/01/06 at 17:18:12 by USER015 *
*Package Installation Date ===> 2015/02/28 Package Status: DEV Department IDD *
*Component Analysis Type ===> Static subroutines called within Load members *
*Load member Appl:Libtype ===> GENL:LOD *
******************************************************************************************************
*--------- B a s e l i n e ---------* *------------------ S t a g i n g ------------------*
************************************* *****************************************************
Called Module Calling Called Module
Module Size Linkdate Setssi Module Module Package Dept Size Linkdate Setssi
________ ________ __________ ________ ________ ________ __________ ____ ________ __________ ________
00001EB0 2015/01/05 6779DECC GNLSRC1A GENL000006 IDD 00001EB0 2015/01/06 677C2F59
CEEARLU -- Not found or unknown SYNCH0!
CEEBETBL -- Not found or unknown SYNCH0!
CEEBINT -- Not found or unknown SYNCH0!
CEEBLLST -- Not found or unknown SYNCH0!
CEEBPIRA -- Not found or unknown SYNCH0!
CEEBPUBT -- Not found or unknown SYNCH0!
CEEBTRM -- Not found or unknown SYNCH0!
CEECPYRT -- Not found or unknown SYNCH0!
CEESG005 -- Not found or unknown SYNCH0!
CEESTART -- Not found or unknown SYNCH0!
GNLSRS00 00000458 2015/01/05 6779D8A9 SYNCH7! GNLSRS00 GENL000006 IDD 00000458 2015/01/06 677C1124
GNLSRS1B 000004C8 2015/01/05 6779D8A9 GNLSRS1B GENL000006 IDD 000004C8 2015/01/06 677C2D02
GNLSRS1C 00000498 2015/01/05 6779D8A9 GNLSRS1C GENL000006 IDD 00000498 2015/01/06 677C2D11
IGZCBSO -- Not found or unknown SYNCH0!
00001EB0 2015/01/05 6779D9B2 GNLSRC50
GNLSRS00 00000458 2015/01/05 6779D8A9 SYNCH8! GNLSRS00 GENL000006 IDD 00000458 2015/01/06 677C338E
GNLSRS5A 000004C8 2015/01/05 6779D8A9 SYNCH8! GNLSRS5A GENL000006 IDD 000004C8 2015/01/06 677C2D11
GNLSRS5B 000004C8 2015/01/05 6779D8B6 SYNCH8! GNLSRS5B GENL000006 IDD 000004C8 2015/01/06 677C2D1F
GNLSRS5C 00000498 2015/01/05 6779D8B6 SYNCH8! GNLSRS5C GENL000006 IDD 00000498 2015/01/06 677C2D2C
Note
The setssi values for GNLSRS00 both in the GNLSRC1A module and in the GNLSRC50 module - they are different and the one in the GNLSRC1A module is earlier than the setssi value for GNLSRS00 in GNLSRC50. To resolve that, all that is needed is to recompile GNLSRC1A.
Resolving the SYNCH8! Conditions in the Example
The following excerpt from the next audit report shows the four SYNCH8! conditions.
ChangeMan(R) ZMF (8.1.0 - 20141010) Audit TUESDAY JANUARY 6, 2015 (2015/006) 19:55:16 Page 13
**************************************************************************************
*Participating Package ===> GENL000006 Created 2015/01/06 at 17:18:12 by USER015 *
*Package Installation Date ===> 2015/02/28 Package Status: DEV Department IDD *
*Component Analysis Type ===> Static subroutines called within Load members *
*Load member Appl:Libtype ===> GENL:LOD *
******************************************************************************************************
*--------- B a s e l i n e ---------* *------------------ S t a g i n g ------------------*
************************************* *****************************************************
Called Module Calling Called Module
Module Size Linkdate Setssi Module Module Package Dept Size Linkdate Setssi
________ ________ __________ ________ ________ ________ __________ ____ ________ __________ ________
00001EB0 2015/01/05 6779DECC GNLSRC1A GENL000006 IDD 00001EB0 2015/01/06 677C34D6
CEEARLU -- Not found or unknown SYNCH0!
CEEBETBL -- Not found or unknown SYNCH0!
CEEBINT -- Not found or unknown SYNCH0!
CEEBLLST -- Not found or unknown SYNCH0!
CEEBPIRA -- Not found or unknown SYNCH0!
CEEBPUBT -- Not found or unknown SYNCH0!
CEEBTRM -- Not found or unknown SYNCH0!
CEECPYRT -- Not found or unknown SYNCH0!
CEESG005 -- Not found or unknown SYNCH0!
CEESTART -- Not found or unknown SYNCH0!
GNLSRS00 00000458 2015/01/05 6779D8A9 GNLSRS00 GENL000006 IDD 00000458 2015/01/06 677C338E
GNLSRS1B 000004C8 2015/01/05 6779D8A9 GNLSRS1B GENL000006 IDD 000004C8 2015/01/06 677C2D02
GNLSRS1C 00000498 2015/01/05 6779D8A9 GNLSRS1C GENL000006 IDD 00000498 2015/01/06 677C2D11
IGZCBSO -- Not found or unknown SYNCH0!
00001EB0 2015/01/05 6779D9B2 GNLSRC50
GNLSRS00 00000458 2015/01/05 6779D8A9 SYNCH8! GNLSRS00 GENL000006 IDD 00000458 2015/01/06 677C338E
GNLSRS5A 000004C8 2015/01/05 6779D8A9 SYNCH8! GNLSRS5A GENL000006 IDD 000004C8 2015/01/06 677C2D11
GNLSRS5B 000004C8 2015/01/05 6779D8B6 SYNCH8! GNLSRS5B GENL000006 IDD 000004C8 2015/01/06 677C2D1F
GNLSRS5C 00000498 2015/01/05 6779D8B6 SYNCH8! GNLSRS5C GENL000006 IDD 00000498 2015/01/06 677C2D2C
A SYNCH8! condition occurs when statically linked subroutines in a staging library are changed more recently than a composite load module in baseline that calls them. That is what happened here:
-
You originally staged GNLSRS00 into the sample GENL000006 change package.
-
You staged load components for GNLSRS5A, GNLSRS5B, and GNLSRS5C when you recompiled and relinked these subroutines to fix the SYNCH5! conditions described in Resolving the SYNCH5! Conditions in the Example.
-
The composite load module GNLSRC50, which resides in a baseline library and which you did not stage into the sample packages used in this example, refers to these four subroutines. Thus, GNLSRC50 now calls obsolete versions of these statically linked subroutines.
You should be familiar with the components of the applications you work with so you know what to look for when you resolve an out-of-sync condition. In our sample application, GNLSRC50 consists of link-edit control statements that gather these subroutines together into a composite load module named GNLSRC50. GNLSRC50 is a member of the LCT library associated with the sample GENL application. Here’s a listing of the contents of this component:
BROWSE CMNTP.S6.V810.BASE.GENL.LCT(GNLSRC50) - 01.01 Line 00000000 Col 001 080
Command ===> ________________________________________________ Scroll ===> CSR
********************************* Top of Data **********************************
INCLUDE SYSLIB(GNLSRS5A)
INCLUDE SYSLIB(GNLSRS5B)
INCLUDE SYSLIB(GNLSRS5C)
INCLUDE SYSLIB(GNLSRS00)
NAME GNLSRC50(R)
******************************** Bottom of Data ********************************
You need to relink this composite load module to resolve the SYNCH8! conditions. Take the following steps:
-
Select Relink (=1.9) and the Relink Load Modules (CMNRLNK0) panel is displayed.
CMNRLNKR Rebind Load Modules Command ===>____________________________________________ Package . . . . . . . . . GENL000006 Rebind from . . . . . . . B (S(tage),B(aseline),R(elease)) Input library type . . . LOS (Blank for list) Target library type . . . LOD (Blank for list) Member name . . . . . . . _________________+ (Blank/Pattern for list) Enter "/" to select option __ Specify release area / LCT member list
-
Fill in the panel as shown above:
a. Package GENL000006 contains load images of the statically linked subroutines that are to be relinked into the GNLSRC50 composite.
b. You want to relink from the Baseline library because the target LCT member has not been staged into the package.
c. Select LCT Member List because the LCT member (GNLSRC50) exists.
d. Specify the library type of the subroutines to be relinked in response to the Input Library Type prompt. The library type associated with the load images of these subroutines is LOS in this example.
e. Specify the library type of the composite load module that will be created during the relink operation in response to the Output Library Type prompt. The library type associated with composite load modules is LOD in this example.
f. You can leave the member name blank and press Enter to get a list of LCT library members to choose from. If you do, the CMNRMLST panel is displayed. Select LCT member GNLSRC50.
CMNRMLST Library Member List Row 1 to 1 of 1 Command ===>______________________________ Scroll ===> CSR Input library: CMNTP.S6.V810.BASE.GENL.LCT Name + Function Created Changed Size User s GNLSRC50 2015/01/01 2015/01/01 22:32 00000005 USER015 ******************************* Bottom of data ********************************
-
Type the letter S in the line command field to select the desired member and press Enter.
An informational panel appears that lists all currently active packages that include the target LCT member as a component (if any). If this panel appears, you need to check with the user specified in the
Notify user
field of the packages to be sure you understand how the component is being treated in those packages before you continue with the relink operation. -
The Relink Job Information (CMNRLNK1) panel appears.
CMNRLNK1 Rebind Job Information Command ===> ____________________________________________________ Package: GENL000006 Status: BAS Install date: Member name: GNLSRC50 + Dataset name: CMNTP.S6.V810.BASE.GENL.LCT + LCT member list: YES Input library type: LOS Target library type: LOD Language . . . . . . . . COBOL2 (Blank for list) Compile procedure . . . CMNCOB2 (Blank for list) Pgm binder parms . . . . _________________________________ Enter "/" to select option _ Db2 processing _ Other Db2 options _ Other options _ User variables _ Suppress batch messages Job statement information: //USER015R JOB (SM-1IKF-SM),'GENL06', // CLASS=A, // MSGCLASS=X, // NOTIFY=USER015
...
The fields are primed with the values that you specified on the Relink Load Modules (CMNRLNK0) panel above and with values that were specified the last time you relinked the module. You should not have to change the field values.
-
Press Enter to submit the job.
-
Examine the job’s output to ensure that the target composite load module was created without error.
-
Run another audit. All the out-of-sync conditions in this scenario should now be resolved. The following messages are displayed after the audit completes, indicating that the complex package and its two participating packages passed the audit with zero return codes:
CMN2668I - COMPLEX PACKAGE ACTP000029 PASSED THE AUDIT WITH A RETURN CODE OF 00. CN(INTERNAL)
CMN2666I - PARTICIPATING PACKAGE ACTP000028 PASSED THE AUDIT WITH A RETURN CODE OF 00. CN(INTERNAL)
CMN2666I - PARTICIPATING PACKAGE GENL000006 PASSED THE AUDIT WITH A RETURN CODE OF 00. CN(INTERNAL)
\*\*\*