Consultor Eletrônico



Kbase 19609: Behind the scenes: system error 1124 - what was the cause?
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   21/03/2000

We implemented distinct error messages many years ago to eliminate
confusion as to the cause of an 1124 error. To do this, we added additional error messages that would be output around the 1124 to narrow down the actual cause of the problem.

Following is a summary of the messages generated as part of checking dbkeys during normal processing:

Function: bkread - reading a block from disk
check is done after read (bkaddr before)

Before the read is done, a bkaddr call is made which will cause a check of the buffer before the read is made.

After reading the Database file the dbkey is checked and if invalid a series of three messages are generated. The first says we are retrying the operation then after ten tries, the second and third messages appear. If these messages are generated it means the block returned by the OS appears to be corrupt. This does NOT prove that the data on disk is corrupt - the OS might have returned the wrong data.

read wrong dbkey at offset <offset>%l in file <file>%s %r found <dbkey>%D, expected <dbkey>%D, retrying. (1152)
Corrupt block detected when reading from database. (4229)
wrong dbkey in block. Found <dbkey>%D, should be <dbkey2>%D (1124)

When reading BI files a single message is generated immediately.
Again this means the block returned by the OS appears to be corrupt
it may or may not be the case that the actual file on disk is damaged.

wrong BI blk, read <dbkey>%D from <dbkey>%D (1119)

Function: bkwrite - write a block to disk
check is done before and after write

When writing to Database files a check is made before the write and after
the write. The same error messages are generated so there is no way
to tell if a buffer was corrupted by the write operation itself but
this is very unlikely. If these messages were generated then the
buffer was corrupt either as part of some other processing (after it
was read) or while it was being written.

Corrupt block detected when attempting to write a block. (4230)
bkwrite: bktbl dbk <dbk>%D not equal to bkbuf dbk <dbk>%D.(645)

When writing to BI files a check is made before the write and after
the write. The same error messages are generated so there is no way
to tell if a buffer was corrupted by the write operation itself but
this is very unlikely.

Corrupt block detected when attempting to write a block. (4230)
wrong BI blk, write <dbkey>%D into <dbkey>%D (1120)

Function: bmMarkModified - buffer manager mark block as changed
check is done first

Whenever a Database block is modified in the buffer pool the block is
marked as modified by the buffer manager and a check is made that the block has a valid dbkey. The first message indicates that an error occurred modifying the block, the second provides the specific details. If this sequence of messages is generated something happened in memory that caused the block to become corrupt. Here are the messages:

Corrupt block detected when attempting to modify a block.
wrong dbkey in block. Found <dbkey>%D, should be <dbkey2>%D (1124)

Function: bmReleaseBuffer - decrement use count to release buffer
check is done before release

When a buffer is released by the buffer manager a check is done just
before it is released to verify that the block contains a valid dbkey. If this check fails it means the block was corrupted sometime after it was read in. It is very rare that this would fail since most likely bmMarkModified would have already checked things.

Corrupt block detected when attempting to release a buffer.(4232)
wrong dbkey in block. Found <dbkey>%D, should be <dbkey2>%D (1124)

Note that 4232 is not generated in V9 releases up through V9.1A - this is bug: 20000321-002.