SirLib problem resolution: Difference between revisions

From m204wiki
Jump to navigation Jump to search
m (1 revision)
m (minor cleanup)
 
Line 9: Line 9:


==Cutover failed==
==Cutover failed==
Cutover is a complex function involving 5 steps:
Cutover is a complex function involving five steps:
<ol>
<ol>
<li>Apply updates. </li>
<li>Apply updates. </li>
Line 19: Line 19:
Only the first and last options may be bypassed.
Only the first and last options may be bypassed.
Each of the five options is executed in the above order.
Each of the five options is executed in the above order.
If a step fails it can be identified by the error message and by the
If a step fails, it can be identified by the error message and by the
date/time fields associated with it not having been updated when control
absence of updates to the date/time fields associated with it when control
returns to the Cutover screen.
returns to the Cutover screen.


The first step applies update procedures to the target managed file.
The first step applies update procedures to the target managed file.
This process is exactly the activity performed from the Reconfiguration
This process is exactly the activity performed from the [[SirLib change control#Configuring files (applying updates)|Reconfiguration screen]], and it may be bypassed if you just ran a Reconfiguration.
option, and may be bypassed if the user has just run a Reconfiguration.
If the first step is executed (recommended always) and fails, then the destination procedure file does not have all existing changes applied to it.
If the first step is executed (recommended always)
and fails, then the destination procedure file does not have
all existing changes applied to it.


This change application process <i>does not</i> apply changes which
This change application process <i>does not</i> apply changes that are commented-out in the control procedure, and it cannot know if all update procedures that are supposed to be in the FixFile are indeed there. Most of the error messages occurring at this step will indicate that some
are commented-out in the control procedure, and it cannot know if all
user or application subsystem is locking a procedure that <var class="product">SirLib</var> wants to update.
update procedures that are supposed to be in the FixFile are indeed there.
Most of the error messages occurring at this step will indicate that some
user or apsy is locking a procedure that <var class="product">SirLib</var> wants to update.
 
<b>See the ReConfiguration section for details on this.</b>


Each of the remaining four steps is an updating transaction requiring
Each of the remaining four steps is an updating transaction requiring
update privileges to the update procedure file or the target
update privileges to the update procedure file or the target procedure file.
procedure file.


===Troubleshooting===
===Troubleshooting===
The first thing to check in case of cutover failure is that these files
In case of cutover failure, check first that these files
are allocated to the online region and to the <var class="product">SirLib</var> APSY, and that privilege settings are high enough to allow the updating of permanent procedures.
are allocated to the Online region and to the <code>SIRLIB</code> subsystem, and that privilege settings are high enough to allow the updating of permanent procedures.


If cutover continues to fail, either turn on all messages in the <var class="product">SirLib</var> ASPY definition, or run <var class="product">SirLib</var> in <var>TEST DEBUG</var> mode, and call the
If cutover continues to fail:
specific problem in to your <var class="product">SirLib</var> Administrator or to [[Contacting Rocket Software Technical Support|Technical Support]].  
<ol>
<li>Turn on all messages in the <code>SIRLIB</code> subsystem definition, or run <var class="product">SirLib</var> in <var>TEST DEBUG</var> mode. </li>
 
<li>Call the specific problem in to your <var class="product">SirLib</var> Administrator or to [[Contacting Rocket Software Technical Support|Rocket Technical Support]]. </li>
</ol>


Cutover may be run as many times as necessary to accomplish the file clean up.
Cutover may be run as many times as necessary to accomplish the file clean up.
Line 53: Line 48:
==Missing base procedure==
==Missing base procedure==
If a Base procedure of a file once existed and has since been deleted,
If a Base procedure of a file once existed and has since been deleted,
<var class="product">SirLib</var> will see there is no Base, copy the existing executable
<var class="product">SirLib</var> sees there is no Base, copies the existing executable procedure into a Base version, and then attempts to apply changes to it.
procedure into a Base version and then attempt to apply changes to it.
 
The user will get an error saying that changes (from the first update
You get an error saying that changes (from the first update
procedure most likely) will not apply to the procedure.
procedure most likely) do not apply to the procedure. The error message specifies the sequence number where the problem occurred. You are able to edit both the procedure and the update procedure and see that the new code in the update procedure being applied already exists in the Base procedure.
The error message will specify the sequence number where the problem occurred.
The user will be able to edit both the procedure and the update
procedure and see that the new code in the update procedure being
applied already exists in the Base procedure.


A Base version of a procedure is created the first time a change to the
A Base version of a procedure is created the first time a change to the
procedure is detected during a reconfiguration.
procedure is detected during a reconfiguration. If a Base procedure is not present when a reconfiguration is attempted, <var class="product">SirLib</var> assumes this is the first time managed updates have been applied to the procedure, and a new <code>BASE.</code> procedure is created.
If a Base procedure is not present when a re-configuration is attempted,
<var class="product">SirLib</var> assumes this is the first time managed updates have been applied
to the procedure, and a new <code>BASE.</code> procedure is created.


The Base procedure is more important to a managed system than the
The Base procedure is more important to a managed system than the
actual executable procedure.
actual executable procedure. Base procedures with update procedures applied are used to rebuild the executable procedures to any previous configuration.
Base procedures with update procedures applied are used to rebuild the
executable procedures to any previous configuration.


If a BAase procedure is accidentally deleted while there are still
If a Base procedure is accidentally deleted while there are still
changes that need to be applied to that procedure, the Base procedure
changes that need to be applied to that procedure, the Base procedure
<i>must</i> be restored for those changes to apply.
<i>must</i> be restored for those changes to apply. Each Base procedure must be in the same file as the executable procedure that it matches.
Each Base procedure must be in the same file as the executable procedure
that it matches.


==Missing SEQ procedure==
==Missing SEQ procedure==
Sequenced versions of procedures are generated during execution of the
Sequenced versions of procedures are generated during execution of the
<var>Q</var> command.
<var>Q</var> command. The <var>SEQ.</var> version created must remain unchanged while the unsequenced (working) copy is being updated. If the <var>SEQ.</var> version is altered, the update procedure resulting from the <var>XCOMPARE</var> does not apply correctly to the Base procedure, and the entire reconfiguration fails.
The <var>SEQ.</var> version created must remain unchanged while the
unsequenced (working) copy is being updated.
If the <var>SEQ.</var> version is altered, the update procedure resulting from the
<var>XCOMPARE</var> will not apply correctly to the BASE procedure, and the entire
reconfiguration will fail.


If an <var>SEQ.</var> procedure is deleted or is suspected of being altered, the
If an <var>SEQ.</var> procedure is deleted or is suspected of being altered, you must generate a new <var>SEQ.</var> version as follows:
programmer needs to generate a new <var>SEQ.</var> version via the following steps:
<ol>
<ol>
<li>Verify that no unmanaged changes have occurred against the procedure
<li>Verify that no unmanaged changes have occurred against the procedure
Line 95: Line 73:


<li>If managed changes have occurred against the procedure since the
<li>If managed changes have occurred against the procedure since the
original sequenced version was generated, comment them
original sequenced version was generated:
out in the <code>CONTROL</code> procedure via the <b>CHANGES</b> option in <var class="product">SirLib</var> and
<ol>
regenerate a new <var>SEQ</var> version that includes those changes, by executing a <var>Q</var> command.</li>
<li>Comment them out in the <code>CONTROL</code> procedure using the <b>Apply changes</b> option from the <var class="product">SirLib</var> main menu. </li>
 
<li>Regenerate a new <var>SEQ</var> version that includes those changes, by executing a <var>Q</var> command.</li>
</ol>


<li>Regenerate the sequenced and unsequenced procedures from the
<li>Regenerate the sequenced and unsequenced procedures from the
Line 109: Line 90:


==Reconfiguration failed==
==Reconfiguration failed==
Usually Reconfiguration failures are due to an APSY or USER holding the
Usually Reconfiguration failures are due to an application subsystem or a subsystem user holding the target file open.
target file open.
Reconfiguration requires exclusive access to the target file.
Reconfiguration requires exclusive access to the target file.
<var class="product">SirLib</var> does not check that a specific APSY is locking a file, as it
makes no assumptions about how many APSYs might be running out of that file.
Therefore, <var class="product">SirLib</var> always presents this error upon its inability to
delete or rename some procedure.
Reconfiguration can be restarted when the locking USER or APSY releases
the file.


If an invalid update procedure has been built and reconfiguration
<var class="product">SirLib</var> does not check that a specific subsystem is locking a file, as it makes no assumptions about how many subsystems might be running out of that file.
fails, a message is displayed indicating the update procedure at fault
Therefore, <var class="product">SirLib</var> always presents this error upon its inability to delete or rename some procedure.
and the sequence number where the mismatch occurred.
Reconfiguration can be restarted when the locking user or subsystem releases the file.
Reconfiguration will also fail in the case where two or more
 
programmers have attempted to change the same line number from working
If an invalid update procedure is built and reconfiguration fails, a message is displayed indicating the following:
and SEQ procedures generated at the same time.
<ul>
In <var class="product">SirLib</var> this is known as a "collision".
<li>The update procedure at fault </li>
 
<li>The sequence number where the mismatch occurred </li>
</ul>
 
Reconfiguration also fails in the case where two or more programmers attempt to change the same line number from working and SEQ procedures generated at the same time. In <var class="product">SirLib</var> this is known as a <b>collision</b>.


==Collisions==
==Collisions==
Update collisions occur during ReConfiguration when two update
Update collisions occur during Reconfiguration if two update
procedures attempt to change the same line or section of a procedure,
procedures attempt to change the same line or section of a procedure,
both referring to the same physical location in the procedure by the
and both refer to the same physical location in the procedure by the
same sequence number(s).
same sequence number(s). This can occur when more than one programmer generates sequenced and unsequenced copies of the same procedure in a time interval that doesn't allow the second programmer's copy to include changes from the first programmer's update procedure.
This can occur when more than one programmer generates sequenced and
unsequenced copies of the same procedure in a time frame that doesn't
allow the second programmer's copy to include changes from the first
programmer's update procedure.


<b>Read the section under the Q command for an explanation of how sequence numbering works.</b>
For more information about how sequence numbering works, see the [[SirLib programmer's reference#Q (SEQUENCE) command|Q (SEQUENCE) command]] discussion.


In the case of collisions, the first change gets applied by <var class="product">SirLib</var>, and
In the case of collisions, the first change gets applied by <var class="product">SirLib</var>, and the second change contains commands that try to find sequence numbers that are now altered by the first change.
the second change contains commands that try to find sequence numbers
that are now altered by the first change.


When <var class="product">SirLib</var> applies update procedures to BASE procedures, it sorts all
When <var class="product">SirLib</var> applies update procedures to Base procedures, it sorts all changes for a procedure into sequence and version number order. If <var class="product">SirLib</var> finds within a section of code two changes that both want to be the same version, it warns the user and stops processing.
changes for a procedure into sequence and version number order.
If <var class="product">SirLib</var> finds within a section of code two changes that both want to be
the same version it warns the user and stops processing.


There are many ways to handle collisions and the best is usually
There are many ways to handle collisions, and the best is usually
determined by the programmers.
determined by the programmers. here is a simple approach:
A simple approach is to delete all but the most complex of the conflicting
<ol>
update procedures and to incorporate the other changes into the working
<li>Delete all but the most complex of the conflicting update procedures.</li>
version of the procedure that was used to generate the one update
procedure kept.
That update procedure is then regenerated.
In some cases the working and SEQ version of the most complex update
procedure will have been deleted.
In this case it is best to regenerate the conflicting update procedure
using an SEQ procedure that contains the other change(s).


To avoid difficult resolution of collisions, working and SEQ procedures
<li>Incorporate the other changes into the working version of the procedure that was used to generate the one update procedure kept. </li>
should never be deleted until the programmer has verified that the
 
changes apply and integrate with all other changes.
<li>Regenerate that update procedure. </li>
</ol>
 
In some cases, the working and <var>SEQ</var> version of the most complex update procedure will have been deleted. In this case, it is best to regenerate the conflicting update procedure using an <var>SEQ</var> procedure that contains the other change(s).
 
To avoid difficult resolution of collisions, never delete working and <var>SEQ</var> procedures until you verify that the changes apply and integrate with all other changes.


==Production fixes==
==Production fixes==
Sometimes it will be necessary to make a quick change to a production
Sometimes it is necessary to make a quick change to a production
procedure which has already been updated in development.
procedure which has already been updated in development. In <var class="product">SirLib</var>, developers should never copy production procedures back to development in order to make these fixes.
In <var class="product">SirLib</var> developers should never copy production procedures back to
development in order to make these fixes.


In the production environment identify which changes have been applied
<ol>
to the procedure which requires the fix.
<li>In the production environment, identify which changes have been applied to the procedure that requires the fix. This can be done by browsing the procedure to see the change stamps, or if procedure stamping is turned off for the target procedure, by running a status report for the file to identify the last Reconfigure date and time, and the projects which were then applied. </li>
This can be done by browsing the procedure to see the change stamps, or if
procedure stamping is turned off for the target procedure, by running a
status report for the file to identify the last Reconfigure date and time,
and the projects which were then applied.


In the development environment, ReConfigure the file to its current
<li>In the development environment, ReConfigure the file to its current
production state.
production state. Execute a <var>Q</var> command to generate <var>SEQ</var> and working versions of the procedure. Make the production fix, generate an update procedure, and distribute the new update procedure to production, applying the update procedure there using ReConfigure. </li>
Execute a <var>Q</var> command to generate <var>SEQ</var> and working versions of the procedure.
Make the production fix, generate an update procedure and distribute the
new update procedure to production, applying the update procedure there
via a ReConfigure.


In the development environment, ReConfigure the file to include the new
<li>In the development environment, ReConfigure the file to include the new fix and all other new development update procedures. Handle collisions as indicated earlier in this page. Notify all developers working on the fixed procedure to regenerate their <var>SEQ</var> and working procedures to include the production fix. </li>
fix and all other new development update procedures.
</ol>
Handle collisions as indicated earlier in this section.
Notify all developers working on the fixed procedure to regenerate their
<var>SEQ</var> and working procedures to include the production fix.


==See also==
==See also==

Latest revision as of 00:08, 28 October 2015

This page reviews corrective actions for a variety of common error conditions.

SirLib can't access file

Make sure that each file managed by SirLib is allocated via SUBSYSMGMT to the SIRLIB application subsystem, or that an update password exists for the file.

Cutover failed

Cutover is a complex function involving five steps:

  1. Apply updates.
  2. Delete update procedures.
  3. Delete project names.
  4. Delete Base procedures.
  5. ReStamp procedures.

Only the first and last options may be bypassed. Each of the five options is executed in the above order. If a step fails, it can be identified by the error message and by the absence of updates to the date/time fields associated with it when control returns to the Cutover screen.

The first step applies update procedures to the target managed file. This process is exactly the activity performed from the Reconfiguration screen, and it may be bypassed if you just ran a Reconfiguration. If the first step is executed (recommended always) and fails, then the destination procedure file does not have all existing changes applied to it.

This change application process does not apply changes that are commented-out in the control procedure, and it cannot know if all update procedures that are supposed to be in the FixFile are indeed there. Most of the error messages occurring at this step will indicate that some user or application subsystem is locking a procedure that SirLib wants to update.

Each of the remaining four steps is an updating transaction requiring update privileges to the update procedure file or the target procedure file.

Troubleshooting

In case of cutover failure, check first that these files are allocated to the Online region and to the SIRLIB subsystem, and that privilege settings are high enough to allow the updating of permanent procedures.

If cutover continues to fail:

  1. Turn on all messages in the SIRLIB subsystem definition, or run SirLib in TEST DEBUG mode.
  2. Call the specific problem in to your SirLib Administrator or to Rocket Technical Support.

Cutover may be run as many times as necessary to accomplish the file clean up.

Missing base procedure

If a Base procedure of a file once existed and has since been deleted, SirLib sees there is no Base, copies the existing executable procedure into a Base version, and then attempts to apply changes to it.

You get an error saying that changes (from the first update procedure most likely) do not apply to the procedure. The error message specifies the sequence number where the problem occurred. You are able to edit both the procedure and the update procedure and see that the new code in the update procedure being applied already exists in the Base procedure.

A Base version of a procedure is created the first time a change to the procedure is detected during a reconfiguration. If a Base procedure is not present when a reconfiguration is attempted, SirLib assumes this is the first time managed updates have been applied to the procedure, and a new BASE. procedure is created.

The Base procedure is more important to a managed system than the actual executable procedure. Base procedures with update procedures applied are used to rebuild the executable procedures to any previous configuration.

If a Base procedure is accidentally deleted while there are still changes that need to be applied to that procedure, the Base procedure must be restored for those changes to apply. Each Base procedure must be in the same file as the executable procedure that it matches.

Missing SEQ procedure

Sequenced versions of procedures are generated during execution of the Q command. The SEQ. version created must remain unchanged while the unsequenced (working) copy is being updated. If the SEQ. version is altered, the update procedure resulting from the XCOMPARE does not apply correctly to the Base procedure, and the entire reconfiguration fails.

If an SEQ. procedure is deleted or is suspected of being altered, you must generate a new SEQ. version as follows:

  1. Verify that no unmanaged changes have occurred against the procedure since the working version was generated.
  2. If managed changes have occurred against the procedure since the original sequenced version was generated:
    1. Comment them out in the CONTROL procedure using the Apply changes option from the SirLib main menu.
    2. Regenerate a new SEQ version that includes those changes, by executing a Q command.
  3. Regenerate the sequenced and unsequenced procedures from the original using the Q command, sending the unsequenced version to a temp file, which can be deleted.

Deleted update procedure

Update procedures can be regenerated as many times as required, as long as the original sequenced and unsequenced versions of the procedure still exist.

Reconfiguration failed

Usually Reconfiguration failures are due to an application subsystem or a subsystem user holding the target file open. Reconfiguration requires exclusive access to the target file.

SirLib does not check that a specific subsystem is locking a file, as it makes no assumptions about how many subsystems might be running out of that file. Therefore, SirLib always presents this error upon its inability to delete or rename some procedure. Reconfiguration can be restarted when the locking user or subsystem releases the file.

If an invalid update procedure is built and reconfiguration fails, a message is displayed indicating the following:

  • The update procedure at fault
  • The sequence number where the mismatch occurred

Reconfiguration also fails in the case where two or more programmers attempt to change the same line number from working and SEQ procedures generated at the same time. In SirLib this is known as a collision.

Collisions

Update collisions occur during Reconfiguration if two update procedures attempt to change the same line or section of a procedure, and both refer to the same physical location in the procedure by the same sequence number(s). This can occur when more than one programmer generates sequenced and unsequenced copies of the same procedure in a time interval that doesn't allow the second programmer's copy to include changes from the first programmer's update procedure.

For more information about how sequence numbering works, see the Q (SEQUENCE) command discussion.

In the case of collisions, the first change gets applied by SirLib, and the second change contains commands that try to find sequence numbers that are now altered by the first change.

When SirLib applies update procedures to Base procedures, it sorts all changes for a procedure into sequence and version number order. If SirLib finds within a section of code two changes that both want to be the same version, it warns the user and stops processing.

There are many ways to handle collisions, and the best is usually determined by the programmers. here is a simple approach:

  1. Delete all but the most complex of the conflicting update procedures.
  2. Incorporate the other changes into the working version of the procedure that was used to generate the one update procedure kept.
  3. Regenerate that update procedure.

In some cases, the working and SEQ version of the most complex update procedure will have been deleted. In this case, it is best to regenerate the conflicting update procedure using an SEQ procedure that contains the other change(s).

To avoid difficult resolution of collisions, never delete working and SEQ procedures until you verify that the changes apply and integrate with all other changes.

Production fixes

Sometimes it is necessary to make a quick change to a production procedure which has already been updated in development. In SirLib, developers should never copy production procedures back to development in order to make these fixes.

  1. In the production environment, identify which changes have been applied to the procedure that requires the fix. This can be done by browsing the procedure to see the change stamps, or if procedure stamping is turned off for the target procedure, by running a status report for the file to identify the last Reconfigure date and time, and the projects which were then applied.
  2. In the development environment, ReConfigure the file to its current production state. Execute a Q command to generate SEQ and working versions of the procedure. Make the production fix, generate an update procedure, and distribute the new update procedure to production, applying the update procedure there using ReConfigure.
  3. In the development environment, ReConfigure the file to include the new fix and all other new development update procedures. Handle collisions as indicated earlier in this page. Notify all developers working on the fixed procedure to regenerate their SEQ and working procedures to include the production fix.

See also