Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Code similar to the following is used in OpenInsight to ensure that volume and table information is synchronized. You should never need to use this code, but it explains why a synchronization problem could cause a table to become unavailable:

 

Code Block
* first verify volume structures
cVols = count(Volumes(0), @fm) + (Volumes(0) # "")
for iVol = 1 to cVols
  Vol = Volumes(0)<iVol>
  cFiles = count(Volumes(3)<iVol>, @vm) + (Volumes(3)<iVol> # "")
  for iFile = 1 to cFiles
    File = Volumes(3)<iVol,iFile>
    locate File in Tables(0) using @fm setting Pos then
      * check volume reference
      if Tables(1)<Pos> # Vol then
         Volumes(3) = delete(Volumes(3), iVol, iFile, 0)
      end
     end else
  * file does not exist but is referenced by volume
  Volumes(3) = delete(Volumes(3), iVol, iFile, 0)
  end
  next iFiles
next iVol
 
cFiles = count(Tables(0), @fm) + (Tables(0) # "")
for iFile = cFiles to 1 step -1
  File = Tables(0)<iFile>
  Vol = Tables(1)<iFile>
  * check volume reference
  locate Vol in Volumes(0) using @fm setting Pos then
    locate File in Volumes(3)<Pos> using @vm setting Pos else
      * file not referenced by a volume
      for i = 0 to 5
        Tables(i) = delete(Tables(i), iFile, 0, 0)
      next i
    end
   end else
    * file references unattached volume
    for i = 0 to 5
       Tables(i) = delete(Tables(i), iFile, 0, 0)
    next i
   end
next iFile