FIXLH Explored
Published 01 MAR 2023 at 05:42:00PM by Sprezz
We recently came across a situation that we have literally never encountered in our decades of working with Linear Hash. Basically a FIXLH operation was interrupted mid process and hi-jinks ensued. The resultant mess took a while to sort out but our findings may prove useful if you ever find yourself in a similar situation.
This specific issue was encountered on an AREV 3.12 system but the logic for FIXLH remains roughly the same so the information remains applicable.
Basically, the FIXLH operation was interrupted about 10% of the way through processing (the NTVDM abended). A quick check of the table header revealed that it believed itself to be a clean empty table with no rows. Yet listing the table produced a set of row ids after an initial pause while nothing was apparently happening.
What had happened was that the table header had been reset to that of an empty table, and the first 10% or so of the primary frames had been blanked. This caused us to investigate the processing undertaken by FIXLH and we can confirm that it is as follows:
Create and/or clear the temporary dumpfix table
grab frame zero group
write rows in group to temporary dumpfix table
set frame zero header to that of an empty table
loop
grab next group
write rows in group to temporary dumpfix table
wipe primary frame to null
until no groups left
repeat
copy rows in temporary table back to source table
So if the operation is interrupted, some of the data will be in the source table and some will be in the temporary dump fix table.
As an additional caveat, note that if the rows in the temporary dump fix table are not stored off elsewhere, they will be lost next time FIXLH is run.
Since the advent of the UD we've never had to actually fix a GFE for quite some time, so this was an eye-opening operation!
Backups are your friend…